Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
DROP DOMAIN
Cancellazione del dominio (attributo)
DROP TABLE
Cancellazione della tabella
Due opzioni:
RESTRICT
un oggetto (dominio, tabella) non è rimosso se non è vuoto.
Opzione di default.
CASCADE rimosso l‘oggetto e tutto ciò coinvolto nella definizione dell‘ oggetto.
Viene che è
Esempio ISTRUZIONI SQL DI AGGIORNAMENTO
→
Inserimento di tuple INSERT
inserimento di nuove tuple in una tabella
→
Cancellazione di tuple DELETE
cancellazione di tuple da una tabella
→
Modifica di tuple UPDATE
modifica del contenuto di tuple in una tabella
Le operazioni di aggiornamento modificano lo stato della base di dati.
È necessario verificare che siano rispettati i vincoli di integrità.
Ogni istruzione può aggiornare il contenuto di una sola tabella.
126
Matilde Simonini Ingegneria Informatica anno 2022/2023
Istruzione di INSERT
Inserimento di una sola tupla: assegnazione di un valore costante ad ogni attributo.
lette da altre tabelle mediante un’istruzione SELECT.
Inserimento di più tuple:
Sono inserite in NomeTabella tutte le tuple selezionate dall’interrogazione Interrogazione.
Interrogazione è un’istruzione SELECT arbitraria, che non può contenere la clausola ORDER BY.
Istruzione DELETE
Cancellazione dalla tabella NomeTabella di tutte le tuple che soddisfano il predicato.
Occorre sempre verificare che la cancellazione non causi la violazione di vincoli di integrità referenziale.
Istruzione UPDATE
Tutti i record della tabella NomeTabella che soddisfano il predicato sono modificati in base alle assegnazioni
colonna=espressione nella clausola SET.
–
Esempio viste e query 127
Matilde Simonini Ingegneria Informatica anno 2022/2023
Forme normali
Una forma normale è una proprietà di uno schema di relazione che ne garantisce (da un certo punto di vista) la
“qualità”.
Quando una relazione non è normalizzata:
◆ presenta ridondanze
◆ dà luogo ad anomalie durante le operazioni di aggiornamento
Forme normali sono definite sul modello relazionale, ma possono essere applicate in altri contesti quali, ad
esempio il modello E-R.
La normalizzazione è la procedura che permette di trasformare schemi non normalizzati in schemi che soddisfano
una forma normale. Sostanzialmente si prende una relazione, si costruiscono delle relazioni più piccole che
risultano essere in forma normale e che se messe in join permettono di ricostruire la relazione originale.
Forme normali e normalizzazione si utilizzano per verificare i risultati della progettazione di una base di dati (ed
eventualmente migliorarli).
Si noti che se la progettazione concettuale è stata fatta bene allora è molto probabile che le relazioni di cui si
dispongono sono già in forma normale.
–
Esempio di relazione con anomalie relazione non normalizzata
Proprietà:
1. Lo stipendio di ciascun impiegato è unico ed è funzione del solo impiegato, indipendentemente dai
progetti cui partecipa
2. Il bilancio di ciascun progetto è unico ed è funzione del solo progetto, indipendentemente dagli
impiegati che vi partecipano
3. Ogni impiegato, in ciascun progetto cui partecipa, svolge una sola funzione eventualmente diversa da
progetto a progetto
Anomalie: –
1. Lo stipendio di ciascun impiegato è ripetuto in più ennuple ridondanza
2. Se lo stipendio di un impiegato varia, è necessario andarne a modificare il valore in tutte le ennuple
–
corrispondenti anomalia di aggiornamento
3. Se un impiegato interrompe la partecipazione a tutti i progetti, non è possibile conservare traccia del
–
suo nome e del suo stipendio anomalia di cancellazione
4. Se si hanno informazioni su un nuovo impiegato, non è possibile inserirle finché non partecipa a un
–
progetto anomalia di inserimento
avremmo a che fare con una tabella separata per l’impiegato e il suo
In una base di dati ben fatta
stipendio.
La ridondanza è presente anche sul bilancio del progetto: dove compare più volte il progetto, compare
anche più volte la stessa informazione relativa al bilancio.
Se, ad esempio, lo stipendio di un impiegato varia, non possiamo agire su una sola tupla: dobbiamo ciclare
tutta la tabella e ogni volta che troviamo un’occorrenza di tale impiegato dobbiamo modificare il valore dello
stipendio (anomalia di aggiornamento).
La terza anomalia è particolarmente grave.
Perché queste anomalie?
128
Matilde Simonini Ingegneria Informatica anno 2022/2023
Abbiamo usato un'unica relazione per rappresentare informazioni eterogenee:
→ gli impiegati con i relativi stipendi
→ i progetti con i relativi bilanci
→ le partecipazioni degli impiegati ai progetti con le relative funzioni
DIPENDENZA FUNZIONALE
Per formalizzare ci si deve basare su un vincolo di integrità aggiuntivo rispetto a quelli già visti in precedenza.
Questo ulteriore vincolo prende nome di dipendenza funzionale ed è intrarelazionale.
R(U) relazione e X, Y sottoinsiemi di U
r soddisfa la dipendenza funzionale (FD) da X a Y se, per ogni coppia di ennuple t e t di r con t [X] = t [X], risulta
1 2 1 2
anche t [Y] = t [Y]
1 2
è un’istanza della relazione, ossia una riga della tabella.
Dove r
ad ogni chiave K corrisponde una dipendenza funzionale da K verso tutti gli attributi (e insiemi di attributi) della
relazione
Si noti che tale vincolo non è solo legato alla normalizzazione ma può essere utilizzato indipendentemente da
essa.
Sostanzialmente uno o più attributi all’interno di una relazione sono funzione di uno o più attributi della stessa
relazione. Fissati degli attributi della relazione, altri attributi sono automaticamente fissati.
Si noti che se C dipende dalla combinazione di A e B, i quali (A e B) costituiscono una chiave allora è sempre vero
il vincolo in quanto non esistono due tuple che hanno lo stesso valore per A e B ma che hanno diverso C.
Notazione X→Y
X determina funzionalmente Y
Esempio
Quando due tuple coincidono sul nome dell’impiegato allora coincidono sullo stipendio.
Osservazione
Sulla base della definizione è valida anche la seguente FD: →
Impiegato Progetto Progetto
Si tratta però di una FD banale (sempre soddisfatta).
→
X A è non banale se A (singolo attrib.) non appartiene a X
→
estensione: X Y è non banale se non tutti gli attributi in Y appartengono a X (Y⊈ X)
Una volta evidenziate le dipendenze funzionali viste sopra, ci si chiede quando ci si può fermare nel cercare le
dipendenze funzionali. Quando posso essere sicuro di aver trovato tutte le dipendenze funzionali?
Dipendenze funzionali implicate
Come facciamo a trovare ulteriori dipendenze da quelle già trovate? Come possiamo arrivare ad un insieme
completo di dipendenze?
Sia (R,F) uno schema di relazione con dipendenze funzionali, dove R è lo schema di relazione e F è l’insieme delle
dipendenze funzionale definite in R.
Si vuole capire se F è completo.
Una istanza r di R si dice legale rispetto ad F (ovvero, una istanza r di (R,F) si dice legale) se r soddisfa F,
cioè se r soddisfa tutte le dipendenze funzionali in F.
129
Matilde Simonini Ingegneria Informatica anno 2022/2023
Una dipendenza funzionale f si dice logicamente implicata da F se ogni istanza legale di R che soddisfa
tutte le dipendenze funzionali in F soddisfa anche f.
Se F è un insieme di dipendenze funzionali, allora l’insieme delle dipendenze funzionali logicamente implicate da F
+
si indica con F , e si chiama la chiusura di F.
delle ulteriori dipendenze funzionali, quelle implicate, all’insieme base delle
Sostanzialmente si aggiungono
dipendenze. Quando non riesco più ad estendere F allora ho raggiunto la chiusura di F.
Regole di inferenza di Armstrong +
Dato F, come possiamo calcolare F , cioè tutte le dipendenze funzionali logicamente implicate da F?
Mediante le regole di inferenza di Armstrong:
→
1. Riflessività: Se Y X, allora X Y (dipendenza banale)
→ →
2. Aggiunta: Se X Y, allora X Z Y Z, per qualunque Z
→ → →
3. Transitività: Se X Y e Y Z, allora X Z
Dove X,Y,Z sono sottoinsiemi di U.
Forma normale di Boyce e Codd (BCNF) →
Una relazione r è in forma normale di Boyce e Codd se, per ogni dipendenza funzionale (non banale) X Y
definita su di essa, X contiene una chiave K di r.
Se viene rispettata da una relazione, ci assicura che questa non presenti nessuna delle anomalie vista in
precedenza. Cosa possiamo fare se una relazione non soddisfa la BCNF?
↓
La sostituiamo con altre relazioni che soddisfano la BCNF:
Decomponendo sulla base delle dipendenze funzionali, al fine di separare i concetti.
La relazione originale viene quindi sostituita da relazioni più piccole (con meno colonne), una per ogni concetto,
ottenute tramite proiezioni sugli attributi delle dip. funzionali.
Esempio
Si tratta delle tre relazioni che si ottengono dall’esempio fatto all’inizio del paragrafo.
⇒
Si nota che tali relazioni risultano normalizzate non presentano anomalie.
Le tre dipendenze funzionali evidenziate in precedenza si sono distribuite sulle nuove relazioni create.
Tuttavia, non è sempre così facile ↓↓
Ci sono alcune relazioni che sono ingarbugliate. Se si applica la normalizzazione di Boyce e Codd non si
ottiene comunque una buona relazione. 130
Matilde Simonini Ingegneria Informatica anno 2022/2023
Il significato di tale relazione è che sia l’impiegato che il progetto è legato ad una sede particolare.
Tali dipendenze funzionali sono rispettate dalla relazione.
Non è in forma normale di Boyce e Codd.
Compaiono le anomalie viste prime.
Tentiamo di operare nello stesso modo fatto in precedenza:
Le due relazioni sono in forma normale di Boyce-Codd. Le due dipendenze funzionali si sono ridistribuite
sulle due nuove relazioni. di strano. L’unica
Si noti però che se facciamo il join fra le due relazioni ottenute accade qualcosa
è l’unica
informazione comune alle due relazioni è la Sede, che ci consente di fare il join:
Le ultime due righe non sono presenti nella relazione di partenza!!
Tali tuple prendono nome di tuple spurie.
Questo vuol dire che la decomposizione messa in atto non va bene.
Di seguito formalizziamo tale problema: decomposizione con perdita.
Decomposizione senza perdita
Una relazione r su X si decompone senza perdita su X e X (con X= X X ) se il join delle due proiezioni è
1 2 1 2
uguale a r stessa cioè non c