22
Basi di dati, modulo 2 Riassunto di Eugenio Rustico A.   Progetto di una base di dati  1.Fa parte del ciclo di vita del sistema informativo 2.Consiste in: Raccolta e analisi requisiti Raccolta requisiti: si analizza il sistema informativo precedente si raccolgono frasi in linguaggio naturale si eliminano omonimie, sinonimie, ambiguità, contraddizioni si produce un glossario di entità coinvolte e relazioni si verificano completezza e consistenza Analisi dei requisiti: produce uno studio di fattibilità (costo in termini di tempo e budget) e un piano di sviluppo dettagliato I requisiti definiscono Le funzionalità del sistema I dati coinvolti e le operazioni su di essi I requisiti hw e sw Progettazione Implementazione Validazione e collaudo Manutenzione 3.Si distinguono Progettazione concettuale

Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

  • Upload
    others

  • View
    13

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

Basi di dati, modulo 2Riassunto di Eugenio Rustico

A.        Progetto di una base di dati   

1.Fa parte del ciclo di vita del sistema informativo

2.Consiste in:Raccolta e analisi requisiti

Raccolta requisiti:si analizza il sistema informativo precedentesi raccolgono frasi in linguaggio naturale si eliminano omonimie, sinonimie, ambiguità,contraddizionisi produce un glossario di entità coinvolte e relazionisi verificano completezza e consistenza

Analisi dei requisiti:produce uno studio di fattibilità (costo in termini di tempoe budget) e un piano di sviluppo dettagliato

I requisiti definisconoLe funzionalità del sistemaI dati coinvolti e le operazioni su di essiI requisiti hw e sw

ProgettazioneImplementazioneValidazione e collaudoManutenzione

3.Si distinguonoProgettazione concettuale

Page 2: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

E' la traduzione delle specifiche informali in un linguaggioformale che faccia riferimento ad un modello concettualeben preciso; il modello concettuale + usato è il modelloEntità­Relazione (E­R)

Il modello E­R si compone di

entità    (classi di oggetti che hanno proprietà comuni;sono conoscenze astratte; le istanze di esse, cheesistono realmente nel dominio applicativo, sonoconoscenze concrete)relazioni    (legami logici fra due o più entità; possonoesserci delle auto­associazioni, cioè relazioni traistanze della medesima entità)attributi    (proprietà)

caratteristiche delle entità e delle relazionigli attributi delle istanze assumono valorimultipli se hanno una cardinalità massimamaggiore di 1composti se formati da più sottoproprietà(possono anche essere multipli)se la carinalità minima è zero l'attributo èopzionale)possono essere espliciti o calcolati (cioè ottenibilida altre proprietà tramite algoritmi, che non sonoesprimibili tramite il modello E­R)possono essere di sintesi (per es. quando sonola media o il max/min di un insieme di valori)unici se tutte le istanze hanno un valoredifferenteuna proprietà obbligatoria, unica, esplicita (in

Page 3: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

genere non modificabile) che identifichi unaistanza in modo univoco è una chiavela chiave di una associazione è definita comel'insieme delle chiavi delle entità partecipanti

cardinalità    (numero di volte che una istanza dientità può partecipare ad una relazione; ha unminimo e un massimo predefiniti che è 1)

        identificatori    (identificano univocamente le istanzedi una entità)

interni se sono composti da una o più proprietàdell'entità stessaesterni se collegano l'entità ad un'altra entità (apatto che non si creino cicli di identificazione eche la cardinalità tra le due entità sia uno aduno)

        generalizzatori    (definiscono la gerarchia dispecializzazione, detta gerarchia “ISA”)

una istanza dell'entità figlia è anche istanzavalida dell'entità padre, ma non sempre è vero ilviceversal'entità figlia eredita tutti gli attributi dell'entitàpadrela gerarchia può essere totale (t) se ogni istanzadell'entità padre dev'essere anche istanza diun'entità fliglia, non totale (nt) altrimentila gerarchia può essere esclusiva (e) se ogniistanza dell'entità padre può essere istanza diuna sola delle entità fliglie, non esclusiva (ne)altrimenti

        sottoinsiemi   

Page 4: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

utilizza simboli grafici ai quali si possono aggiungeredescrizioni per esprimere caratteristiche nonmodellabili altrimenti; di solito è accompagnato da undizionario delle entità e dalla descrizione di vincolinon esprimibili col modelloInizialmente si compone di schemi scheletro che nonspecificano il tipo delle entità e delle relazioni

Abbiamo vari tipi di vincoli:Statici (es. il valore di un attributo deve ex compreso tra x e y)Statici multiproprietà (es. se il valore di un attributosoddisfa l'espressione x allora una altro attributo devesoddisfare y)Dinamici (es. il valore dell'attributo x deve ex =/</>dell'attributo y)

Qualità dello schema concettuale:correttezza: niente errori sintattici né semanticicompletezza: sono rappresentate tutte le entità e tutte leoperazionileggibilità: i requisiti sono rappresentati in manieranaturale e comprensibile; consigli per gli schemi E­R:

disporre al centro gli elementi con più legamiminimizzare le intersezionidisporre i padri sopra ai figli

minimalità: ogni requisito è rappresentato una solavolta; non ci sono ridondanze

Progettazione logicaE' la codifica in maniera corretta ed efficiente (non unasemplice traduzione) del modello concettuale nel modellologico usato dal DBMS in uso (per esempio il modello

Page 5: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

relazionale); il risultato è uno schema logicoServirà l'analisi delle prestazioni, che si basa su due indici:

costo di ogni operazione: numero di occorrenze dientità e relazioni che verranno visitate per soddisfarel'operazione per calcolarlo. Viene stilata una tavoladelle operazioni con i risultati. dobbiamo conoscere:

il tipo di operazione (interattiva o batch?)la frequenza (quante esecuzioni x unità di tempo)i dati coinvolti (entità e associazioni)

occupazione di memoria: misura in bytedell'occupazione dei dati previsti dallo schema. Verràstilata una tavola dei volumi

per calcolarla dobbiamo conoscere le dimensioni diciascun attributo e il numero di occorrenze dellostesso

Per ogni operazione possiamo definire anche unatavola degli accessi in cui specifichiamo il numero diaccessi a ciascuna entità e a ciascuna relazione e il tipodegli stessi (se scrittura, di solito più onerosa anche peril locking del db, o lettura)

Consta di due fasi:Ristrutturazione

richiede lo schema E­R inziale e il carico applicativoprevistosi divide in

analisi delle ridondanze: si decide quali eliminare equali no sulla base dell'analisi delle prestazioni

le ridondanze di solito sono causate da attributiderivabili (da altri attributi o da operazioni diconteggio) o associazioni derivabili (da altre

Page 6: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

associazioni, spesso avviene quando ci sonocicli). Per stabilire se si devono eliminare o no sieffettua un'analisi delle prestazioni con e senzala ridondanza e si opera una scelta

eliminazione delle generalizzazioni: è necessariaquando si usa il modello logico relazionale perchètale modello non prevede gerarchie. E' possibileeliminare le gerarchie in tre modi:

mantenere le entità: non si elimina niente; siassocia ogni figlio al padre e lo si identificaesternamente tramite tale identificazionecollassamento verso l'alto: si accorpano i figli alpadre. Qualche attributo diventerà opzionale,spesso NULL; appare un attributo selettore chespecifica se una istanza fa parte di un figliocollassamento verso il basso: si accorpa ilpadre ai figli. Non è possibile se la coperturadel padre non è totale ed esclusiva

partizionamento/accorpamento di entità e relazioni:gli attributi multipli non sono previsti nel modellorelazione; inoltre è utile e riduce gli accessi...

...accorpare entità alle quali si accede dallestesse operazioni (in genere si accorpanorelazioni uno ad uno), oppure...separare entità alle quali accedono operazionidiverse.separazione verticale: gli attributi vengonosuddivisiseparazione orizzontale: gli attributi vengonoduplicati

Page 7: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

scelta degli identificatori primari delle entità che nehanno pià di uno

meglio scegliere la chiave con cui si accede piùspessopreferire chiavi semplici a composte, interne adesternea volte è bene trasformare le relazioni uno aduno in chiavi primarie trasportate (vedi esempioimpiegato/stabilimento)

include la normalizzazioneTraduzione nel modello logico (e, nella fattispecie, nelmodello relazionale; attenzione al termine “relazione” inquesto paragrafo, indica quella che in SQL è definitatabella):

traduzione standard, sempre possibile:ogni entità è tradotta con una relazione tra le sueproprietàogni associazione è tradotta come una entità con inpiù gli identificatori di tutte le entità associate

per le associazioni molti a molti si deve procederecome sopraassociazioni uno a molti:

un'associazionepuò essere accorpata ad un'entitàche partecipa con cardinalità 1,1 (includendo le sueproprietà)se la cardinalità è 0,1 i campi aggiunti possonoassumere valori nullise era presente una chiave esterna, la nuovachiave includerà  l'identificatore dell'entità“identificante”

Page 8: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

associazioni uno a uno:se le cardinalità sono entrambe (1,1) si puòaccorpare tutto in una relazione scegliendo lachiave più significativase una delle cardinalità è (0,1) la chiave scelta saràquella dell'altra entità (per evitare valori nulli)se le cardinalità sono entrambe (0,1) si puòaccorpare la relazione a una delle due entità ma c'èla possibilità che i valori rimangano nulli perchè larelazione è opzionale; sarebbe meglio procederecol metodo “tradizionale” (tre relazioni, quella cherappresenta l'associazione può avereindifferentemente una delle due chiavi)

in caso di relazioni ricorsive occorre per forzarinominare una delle due voci; a volte laridenominazione è utile per meri motivi di chiarezzauna rappresentazione grafica della traduzione aiutaad evidenziare i vincoli referenziali

Progettazione fisicaSi completa lo schema logico con i parametri fisici dimemorizzazione del DB; dipende dal DBMS scelto eproduce lo schema fisico 

4.Le principali strategie di progetto sono:Top­Down

Raffinamenti successivi ad uno schema inziale generalemolto astrattoPro: è gradualeContro: non va bene per schemi complessi

Bottom­Up

Page 9: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

Si stilano dei sottoprogetti limitati e infine si fondonoinsiemePro: è facile distribuire la progettazione tra più progettistiContro: è difficile alla fine fondere tutto

Inside­OutVariante di Bottom­Up: si aggiungono via via schemiparziali a schemi già definitiPro: non richiede integrazioni successiveContro: occorre rileggere i requisiti ad ogni passo

MistaIl progettista divide i requisiti in componenti separate maallo stesso tempo stila uno schema scheletro con i concettiprincipali.Pro: molto flessibile, è applicabile ai grandi sistemi anchequando parte delle specifiche non è ancora disponibile

B.        Oggetti SQL avanzati   

1.Sono oggetti che non hanno corrispondenti nell'algebrarelazionale

2.Ecco i principali:Vincoli d'integrità

Sonointrarezionali quando riguardano solo attributi dellamedesima relazioneinterrelazionali (referenziali) altrimenti

Possono definire i valori ammissibili per gli attributi di unatupla o indicare che il valore immesso deve esserepresente in un'altra tabella (NULL per evitare il controllo

Page 10: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

del vincolo)Vengono controllati durante le tre possibili operazioni dimodifica (INSERT, DELETE e UPDATE); se non sonosoddisfatti la transazione fallisce, oppure può scattare unaprocedura correttiva definita dall'utente, x esempio dopouna eliminazione:

eliminare a cascata tutte le tuple che ora violano i vincolisettare a NULL tutti i campi interessatinessuna azione

Servono a migliorare la qualità dei dati e la semanticadella loro strutturaSono usati dal sistema per ottimizzazioniLa loro definizione avviene in progettazioneEsempi: NOT NULL, DEFAULT valore, CHECKcondizione, PRIMARY KEY chiave, UNIQUE attributi

VisteSono delle tabelle ausiliare virtuali create “al volo”Servono a semplificare query complesse ( es. SELECTAVG(COUNT(*)) FROM... non si può fare), a proteggere deidati, a riorganizzare i dati secondo nuovi schemiVengono definite con il comando SQL CREATE VIEW,quindi si usano come se fossero normali tabellePossono essere eliminate conDROP VIEW nome_vista (RESTRICT | CASCADE)

RESTRICT indica di non eliminarla se serve ad altre visteCASCADE indica di eliminare tutte le viste che sibasavano su questall comportamento di default dipende dal DBMS in uso 

I nuovi DBMS permettono di eseguire le normali

Page 11: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

operazioni di INSERT, DELETE e UPDATE sulle VIEW; ivalori non usati verranno settati a NULL, se non ci sonovincoli che indicano il contrarioSi potrebbe tentare di inserire una tupla valida nella tabellaoriginale ma non nella VIEW corrente (perchè sarebbescartata dalla SELECT che genera la VIEW); i DBMS lopermettono (ovviamente non sarà visible se non nellatabella originale) a meno che in fase di definizione dellaVIEW non sia stata usata l'opzione WITH CHECKOPTIONIl comportamento del DBMS a fronte del tentativo diinserimento di una tupla che richiederebbe la modifica dipiù tabelle con chiavi esterne dipende fortemente dalDBMSIn genere la modifica su una VIEW è permessa se ad ogniriga della VIEW corrisponde una ed una sola riga in unatabella; di solito è permessa se tra gli attributi visibili c'è lachiave primaria. VIEW che utilizzino operatori aggregatinon possono essere modificate

Aspetti proceduraliI programmi nei DBMS Possono...

...consistere di comandi SQL puri

...consistere in azioni esterne (es. spedire un'email)

...essere scritte in altri linguaggi (Java, C++)

...essere scrite linguaggi SQL proprietari più potentidell'SQL puro (PL/SQL, DB2, ecc.)

I linguaggi procedurali arricchiscono l'SQL, che èdichiarativo, con comandi di controllo del flusso: IF,WHILE, FOR, ecc.Vantaggi:

Page 12: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

si possono controllare vincoli di integrità altrimentidifficilmente controllabilisi riduce il traffico sulla rete perchè partedell'elaborazione è demandata al server DBgarantiscono una certa sicurezza dei datiautomatizzando in parte il processo di manipolazione

Le procedure sono programmi memorizzati nel DBMSche vengono eseguiti su esplicita richiesta dell'utenteI trigger sono programmi memorizzati nel DBMS chevengono attivati da determinate azioni di modifca delletabelle

Seguono il paradigma Event­Condition­Action (ECA):when eventif condition [opzionale]then action

I maggiori DBMS prevedono i trigger fin dagli anni '80ma la loro sintassi è stata standardizzata in SQL solonel 1999; per questo motivo c'è notevole difformità traun sistema e l'altroRegole tipiche:

automazione venditeinvio sollecitiaggiornamento automatico tabellestorico delle modifiche per recupero dati (undo)duplicazione database trasparenteimplementazione database distribuiti

E' possibile che il trigger modifichi una tabella cherichiama lo stesso trigger (ricorsione); alcuni DBMSpermettono di limitare automaticamente il fenomeno,altri non lo permettono

Page 13: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

Durante l'esecuzione del trigger (sia nella condizioneche nell'azione) sono visibili alcune tuple o tabelletemporanee che contengono:

Nel caso di un DELETE le tuple/tabelle cancellateNel caso di un INSERT le tuple/tabelle inseriteNel caso di un UPDATE le tuple/tabelle vecchie e,separatamente, qulle nuove

Due tipi di granularità:Row­level: 

il trigger viene eseguito una volta per ogni tuplamodificataci sono tabelle temporanee con singole tuple

Statement­level:il trigger viene eseguito solo una volta per tutta latransazioneci sono tabelle temporanee

Un trigger può essere definito come AFTER, cioèeseguito dopo la transazione, oppure BEFORE, cioèprima della stessa (in genere è un po' più limitato)A seconda del DBMS, si può scegliere un'esecuzioneimmediata o differita, inclusa nella transazione corrente(quindi non effettuata se la transazione fallisce) oseparata (quindi effettuata comunque)Vantaggi dei trigger:

semplificano le applicazionicentralizzano i controlli

Difetti:rigidità: non si possono definire eccezionicomplessità: occhio ai trigger a cascata!come fare il debugging?

Page 14: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

C.        Aspetti sistemistici dell'SQL   

1.Schemi, cataloghi, clusterUno schema è una collezione di tabelle, viste, trigger. E'l'unità di base della struttura gerarchica dei DBMSUn catalogo è una collezione di schemi; c'è almeno unoschema chiamato INFORMATION_SCHEMA che contieneinformazioni su tutti gli altri schemi

In SQL l'INFORMATION_SCHEMA contiene tutti imetadati del DB: utenti, permessi, files, struttura delletabelle, ecc; alcune tabelle di questo schema riguardanostatistiche quantitative sul DB per ottimizzazioniNormalmente sono consultabili ma non modificabili dagliutenti; per questo sono autoreferenziati, cioè descrivonoanche sé stessi

Un cluster è una collezione di cataloghi consultabili da unsingolo utente

2.Transazioni (Locking)Il locking nel precludere temporaneamente ad altri processil'accesso a un dato prima che noi abbiamo finito di eseguirecon esso un'operazione complessa.Una transazione è una sequenza di operazioni che vannoeseguite tutte insieme (oppure non va eseguita nessuna diesse)Sono previsti due comandi particolari:

COMMIT esegue tutte le operazioni richieste e laprocedura termina normalmenteROLLBACK annulla tutte le operazioni richieste e faterminare prematuramente la transazione

Page 15: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

Sono previsti diversi livelli di isolamento di una transazioneper evitare che molti processi concorrenti blocchino il DB permolto tempo (e per evitare in alcuni casi situazioni di stallo)In SQL abbiamo il comando SET TRANSACTION cheprevede diversi livelli di isolamento:

READ UNCOMMITTED serve per transazioni che fannosolo operazioni di lettura; restituisce la versione menorecente possibile dei dati correnti, quindi permette dileggere dati che altre transazioni non hanno ancora finitodi scrivere!READ COMMITTED fa sì che i blocchi in lettura venganorilasciati immediatamente, mentre i blocchi in scritturasiano rilasciati solo alla fine della transazione; [inoltre èpossibile inserire tuple prima di quelle correnti, alterandogli indici]REPEATABLE READ blocca in lettura e scrittura solo letuple della tabella in uso. Si verifica il “fenomeno deifantasmi” (dati inseriti nella tabella non sono visti) perchèla transazione vede solo dati consistenti: è come fare una“foto” alle tabelle all'inizio delle tabelle e poi lavorare suquestaSERIALIZABLE consiste nel blocco temporaneo dellatabella corrente; per certe applicazioni è troppo restrittivo

D.        Normalizzazione   

1.Forme normaliUna forma normale è una proprietà di una base di dati cheassicura l'assenza di

Ridondanze

Page 16: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

Anomali di aggiornamento, di inserimento e dicancellazione (es. dipendenze fra campi o dati)

La normalizzazione è la procedura che permette ditrasformare schemi non normalizzati in schemi normalizzatiPer formalizzare la normalizzazione introduciamo un nuovovincolo di integrità nel modello relazionale: la dipendenzafunzionale (FD)

Data una relazione su X R(X) e due sottoinsiemi di X nonvuoti Y e Z, si ha una dipendenza funzionale Y Z se ognicoppia di tuple in R con gli stessi valori di su Y ha gli stessivalori anche su ZLa dipendenza funzionale si dice non banale se nessunattributo in Z compare anche in Y; le dipendenze funzionalibanali in genere non vengono considerateIn pratica, c'è una dipendenza funzionale se uno o  piùattributi dipendono da uno o più attributi,e sono calcolabilitramite una certa funzione; è banale se è sempresoddisfatta (se è un'identità), o in genere se uno degliattributi compare sia in Y che in ZLe dipendenze funzionali devono essere identificate infase di progettazione (sul modello relazionale o anche sulmodello E­R), ma non basta guardare a un'istanza del DBper evincerleLe anomalie funzionali di solito sono prodotte dadipendenze funzionali, ma non sempre una dipendenzafunzionale genera un'anomalia; le anomalie in generesono causate dalla presenza di concetti eterogeneirappresentati con un'unica relazionaleSe Y è una chiave, difficilmente Y Z comporteràun'anomalia

Page 17: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

La normalizzazione non è una strategia di progettazione mauno strumento di verifica degli schemi prodotti dallaprogettazione logica; può anche essere usata per verificarela qualità degli schemi concettuali

2.Forma normale di Boyce e CoddUna relazionale R è in forma normale di Boyce e Codd(BCNF) se per ogni dipendenza funzionale non banale  Y Zsi ha che Y contiene una chiave k di R

In pratica, questo è vero se i concetti di una relazionesono omogenei

Per portare in BCNF una relazione non in BCNF dobbiamoristrutturare lo schema e separare dei concetti

Succede che scomponiamo una relazione e quando laricomponiamo con un JOIN appaiono tuple che prima nonc'erano. Come evitare questo problema?Definiamo decomposizione senza perdita di R nelleproiezioni (sottoinsiemi di attributi) X e Y unadecomposizione tale che se il JOIN tra X e Y dà R stessasenza tuple in più

La decomposizione senza perdita è garantita sel'insieme degli attributi comuni a X e Y è una chiave peralmeno uno dei due

Una decomposizione conserva le dipendenze seciascuna delle dipendenze funzionali dello schema inizialecoinvolge attributi che si trovano tutti insieme in uno deglischemi decomposti

In pratica se c'è una dipendenza funzionale X Y nondobbiamo “spezzarla” e posizionare X e Y insottoschemi separati o, quando proviamo ad aggiundere

Page 18: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

delle tuple, potremmo violare la dipendenzaUna decomposizione è di qualità se è senza perdita econserva le dipendenzeNon sempre è possibile trovare una decomposizione diqualità; in questi casi si dice che la BCNF non èraggiungibile

3.Terza forma normaleE' una forma normale sempre raggiungibile, al contrariodella BCNF; è meno restrittiva e permette schemi con alcuneanomalieUna relazione R è in terza forma normale se per ogni FDX Y definita su R si verifica almeno una delle seguenticondizioni:

X contiene una chiave K di ROgni attributo di Y è contenuto in almeno una chiave di R

ProcedimentoSi crea una relazione per ogni gruppo di attributi coinvoltiin una dipendenza funzionaleSi verifica che una delle relazioni contenga una chiavedella relazione originaria [nel libro e nelle slide c'è scrittocosì ma non capisco perchè così vengono soddisfatteentrambe le condizioni!]

A volte è meglio provare la terza formale normale primaancora di verificare che sia anche BCNFSe una relazione ha solo una chiave, la terza forma normalee quella di Boyce Codd coincidono

E.        Linguaggi ospitanti   

Page 19: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

1.PHPMySQL

Connession al server MySQL conmysql_connect(host [user [pwd [...]]])

Scelta del DB con mysql_select_db(db [...])

Query conmysql_query(query [...])

Lettura del risultato conmysql_fetch_array(result [type])

Restituisce ad ogni chiamata la riga successiva delrisultato. Il parametro type può assumere i seguentivalori;

MYSQL_ASSOC: gli attributi della riga correntesaranno accessibli tramite il nome dell'attributoMYSQL_NUM: gli attributi della riga correntesaranno accessibli tramite l'indice numericoMYSQL_BOTH: entrambi i precedenti

DB2Usare le chiamate ODBC

OracleUsare le apposite chiamate; occorre abilitarle nel filephp.ini

2.Java (JDBC)Sun sostiene che JDBC non sia una sigla (sembra JavaDataBase Connectivity)JDBC permette di collegarsi ad un db da qualsiasiprogramma Java ed eseguire comandi SQLOgni produttore fornisce il proprio driver di basso livello, per

Page 20: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

poterlo ottimizzare al meglioQuattro tipi di driver

Tipo 1, ponte ODBC: traduzione JDBC in ODBC einterfacciamento tramite driver ODBCTipo 2, driver Java proprietario: librerie scritte in Java ein codice nativo; occorre installare delle librerire binariedipendenti dalla piattaforma e in genere fornite dalproduttore DBMSTipo 3, pure Java middleware: c'è un server scritto inJava che converte le richieste di JDBC nel formato del DBin usoTipo 4, driver nativo: driver Java che converte le richiesteJDBC nel protocollo specifico del DB

I package utilizzati sono java.sql e javax.sqlAccesso ai dati

Registare il driver JDBCSi deve conoscere l'URL del DB (è usato un formatomolto simile alle URL di internet)Si deve conoscere il nome delle classi java usate comedriverIl percorso della libreria driver deve essere contenutonel classpath correnteSi può creare un file database.properties in cuispecificare vari parametri del DB

Connettersi al DBConnection con =DriverManager.getConnection(url,username,password);Tramite la classe Properties è possibile caricare variparametri dal file database.properties

Definire una query SQL

Page 21: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

Si definisce un oggetto Statement tramite l'oggettoConnectionSi inviano comandi SQL tramite lo Statement, 

E' possibile preparare gli statement primadell'esecuzione, per velocizzarla (utile per comandieseguiti molte volte); per questo si usa l'oggettoPreparedStatementSi possono lasciare nella stringa dello statement deiparametri cui verrà assegnato un valoresuccessivamenteGli statement distinguono il tipo di comando:

Per eseguire query:stmt.executeQuery(”SELECT ...");Per eseguire operazioni di aggiornamento(istruzioni DDL o UPDATE, INSERT, DELETE,CREATE ecc.):stmt.executeUpdate(”DROP TABLE...”)

Processare i risultatiSi manipolano i risultati di una query tramite l'oggettoResultSet

Permette di accere alle righe una per volta colmetodo next(), ma ha anche metodi per accedere arighe con posizioni assolute o relativePossiede vari metodo get###() che permettono diaccedere a singoli attributi ed effettuare il castingHa metodi che servono per aggiornare i dati deldatabase (possono essere disabilitati in fase dicreazione dello statement)

L'output di comandi che non siano una query è solo unintero (# tuple modificate) e non un ResultSet

Page 22: Basi di dati, modulo 2 - unict.itgalileo.dmi.unict.it/utenti/bidduni/docs/catania/Riassunto Basi di dati mod II.pdfBasi di dati, modulo 2 Riassunto di Eugenio Rustico A. Progetto di

Chiudere la connessioneConnection.close();

E' possibile ricavare dei metadati sul db corrente tramitel'oggetto DatabaseMetaData, che può essere usato coldatabase intero, con una singola tabella, con unResultSet, ecc.Altro:

metodo getWarnings()eccezioni ad hoc

F.        In bocca al lupo!