1
Basi di dati relazionali
Anno accademico: 2009/2010
Ultima modifica: 4/03/2010
Modello relazionale ! Introdotto nel 1970 ! Affermatosi negli anni ’80 ! Attualmente è il modello di DB più
diffuso: probabilmente ogni DB che incontrerete sarà relazionale
2
Il modello relazionale ! Modello logico dei dati basato sui
concetti di relazione e tabella ! Relazione: nozione matematica ! Tabella: rappresentazione grafica di
una relazione; un concetto intuitivo
3
Modello relazionale ! Relazione = rappresentazione di
un’entità tramite attributi ! Graficamente, una relazione può
essere rappresentata da una tabella: ! Colonna = attributo (oppure campo) ! Riga = valore degli attributi di un
individuo appartenente all’entità
4
Modello relazionale ! Garantisce indipendenza dei dati
! Utenti che accedono ai dati e programmatori che sviluppano applicazioni fanno riferimento al livello logico dei dati
! Cioè, agli utenti e ai programmatori, non serve sapere come i dati sono memorizzati fisicamente
5
Schema di una relazione ! Schema di una relazione = definizione
della struttura della relazione ! È formata dall’intestazione della relazione:
NomeRelazione(Attr1,…, Attrn) ! Lo schema di una relazione non (dovrebbe)
varia(re) nel tempo ! Per esempio: nella relazione Studenti Studenti(Matricola, Cognome, Nome, Sesso,
DataDiNascita, LuogoDiNascita)
6
2
Istanza di una relazione ! Istanza di una relazione = dati
che descrivono gli individui appartenenti alla relazione (sono le righe della tabella)
! Varia nel tempo (aggiunta, modifica, eliminazione dei dati riguardanti gli individui)
7
Schema e istanza di una base di dati
! Schema di una base di dati = insieme degli schemi delle relazioni (struttura)
! Istanza (o stato) di una base di dati = valori dei dati nelle tabelle (record)
8
Linguaggi per basi di dati ! Data Definition Language (DDL)=
usato per definire livelli fisici, logici, esterni del DB (tratta anche le autorizzazioni di accesso)
! Data Manipulation Language (DML) = per formulare interrogazioni e aggiornamenti delle istanze della base di dati
9
Accesso ai dati ! Mediante linguaggi testuali (per
esempio, SQL (Structured Query Language))
! Tramite comandi speciali integrati nei linguaggi di programmazione
! Tramite interfacce “amichevoli” (per esempio, Wizards, in Access, ecc.)
10
Accesso ai dati
! Esempio: ! Mediante linguaggi
testuali (per esempio, SQL)
! … ! Tramite interfacce
“amichevoli” (per esempio, Wizards, in Access, ecc.)
Un esempio di SQL: SELECT Disco,GruppoMusicale FROM Gruppi WHERE GruppoMusicale=“Radiohead” OR GruppoMusicale=“Franz Ferdinand”
11
Relazioni e tabelle ! Relazioni rappresentate graficamente
come tabelle ! Le righe si chiamano tuple o record ! Per esempio: risultati partite di calcio
SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata
Torino Lazio 3 2
Roma Milan 2 0 Juventus Roma 0 2
Roma Milan 2 1
12
3
Relazioni e tabelle
Torino Lazio 3 2 Roma Milan 2 0 Juventus Roma 0 2 Roma Milan 2 1
Sequenza di caratteri (stringa)
Numero naturale (intero)
13
Relazioni e tabelle ! Una relazione è un insieme di tuple:
! le tuple della relazione devono essere distinte (no righe ripetute in tabella)
! le tuple non sono tra loro ordinate (tabelle con stesse righe ordinate in modo diverso rappresentano la stessa relazione)
Insieme: collezione di elementi • L’ordine degli elementi non è importante • Un insieme non contiene duplicati
14
Relazioni con attributi ! Attributi
! Usiamo nome di attributo per identificare le rispettive componenti delle tuple
! In una tabella: attributo → intestazione di colonne della tabella
! Per esempio: ! SquadraDiCasa, SquadraOspitata, RetiCasa,
RetiOspitata
15
Relazioni con attributi
SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata
Torino Lazio 3 2
Roma Milan 2 0 Juventus Roma 0 2
Roma Milan 2 1
16
Relazioni e Basi di Dati ! Un DB è solitamente costituito da più relazioni
le cui tuple contengono valori comuni (usati per stabilire corrispondenza tra tuple)
! Per esempio: relazioni che descrivono studenti, esami e corsi
17
Matricola Cognome Nome DataNascita 276545 Rossi Maria 25/11/1981
485745 Neri Anna 23/04/1982
200768 Verdi Fabio 12/02/1982
587614 Rossi Luca 10/10/1981
937653 Bruni Mario 01/12/1981
Studenti
Relazioni e Basi di Dati
18
Codice Titolo Docente 01 Analisi Giani
03 Chimica Melli
04 Chimica Belli
Studente Voto Corso 276545 28 01
485745 27 04
200768 25 01
587614 24 04
Esami
Corsi
4
Relazioni e Basi di Dati ! Sono ammissibili relazioni con un solo
attributo ! Per esempio:
! Si possono rappresentare informazioni complesse mediante relazioni diverse
19
Matricola 276545
485745
200768
Lavoratori
Perché non si usa un’unica tabella per l’intero DB?
…per evitare ridondanza. Es.:
Congiuntamente, le tabelle Esami e Studenti contengono le stesse informazioni della tabella iniziale, ma senza ridondanze
Esami Studenti
20
Schemi di relazioni e di DB ! Schema di relazione: R(X)
! Costituita da simbolo R (nome della relazione) e dall’insieme dei nomi di attributi X={A1,…,An}
! Per esempio: ! Esami(Studente,Voto,Corso)
21
Studente Voto Corso 276545 28 01
485745 27 04
200768 25 01
587614 24 04
Esami
Schemi di relazioni e di DB
! Schema di base di dati: D={R1(X1),…, Rn(Xn)} ! Insieme di schemi di relazioni
• Le relazioni sono identificate per nome i nomi devono essere diversi
! Per esempio: ! Università = {
Studenti(Matricola,Cognome,Nome,DataNascita), Esami(Studente,Voto,Corso), Corso(Codice,Titolo,Docente) }
22
Schemi di relazioni e di DB
! Istanza di relazione (o semplicemente relazione) su schema R(X) ! Insieme r di tuple su X
! Istanza di base di dati (o semplicemente base di dati) su schema D={R1(X1),…,Rn(Xn)} ! Insieme d di relazioni d={r1,…,rn} dove ogni
ri è una relazione sullo schema Ri(Xi)
23
Esempi di relazioni
24
“DA MARIO”
Ricevuta n. 1357
Del 5/2/04
3 coperti 3,00
2 antipasti 6,00
3 primi 12,00
2 bistecche 18,00
Totale 39,00
“DA MARIO”
Ricevuta n. 2334
Del 7/2/04
2 coperti 2,00
1 antipasti 3,00
2 primi 8,00
2 orate 14,00
2 caffè 2,00
Totale 29,00
“DA MARIO”
Ricevuta n. 3002
Del 13/2/04
3 coperti 3,00
2 antipasti 6,00
3 primi 14,00
1 Orate 18,00
1 Caprese 2,00
2 Caffè 2,00
Totale 45,00
5
Esempi di relazioni
! Le ricevute hanno una struttura che prevede alcune informazioni fisse ! Numero, data e totale
! … e un numero di righe variabile
25
Esempi di relazioni
26
Num Qtà Descr Importo
1357 3 Coperti 3,00
1357 2 Antipasti 6,00
1357 3 Primi 12,00
1357 2 Bistecche 18,00
2334 2 Coperti 2,00
2334 1 Antipasti 3,00
2334 2 Primi 8,00
2334 2 Orate 14,00
2334 2 Caffè 2,00
3002 3 Coperti 3,00
3002 2 Antipasti 6,00
3002 3 Primi 14,00
3002 1 Orate 18,00
3002 1 Caprese 2,00
3002 2 Caffè 2,00
Num Data Totale 1357 5/2/04 39,00
2334 7/2/04 29,00
3002 13/2/04 45,00
Ricevute
Dettaglio
Esempi di relazioni
! La base di dati nella slide precedente rappresenta correttamente le ricevute solo a due condizioni: ! Non ci interessa mantenere traccia
dell’ordine con cui le righe compaiono in ciascuna ricevuta
! In una ricevuta non compaiono due righe uguali
! Altrimenti, si può risolvere il problema aggiungendo un attributo, che indica la posizione della riga sulla ricevuta
27
Esempi di relazioni
28
Num Posiz Qtà Descr Importo
1357 1 3 Coperti 3,00
1357 2 2 Antipasti 6,00
1357 3 3 Primi 12,00
1357 4 2 Bistecche 18,00
2334 1 2 Coperti 2,00
2334 2 1 Antipasti 3,00
2334 3 2 Primi 8,00
2334 4 2 Orate 14,00
2334 5 2 Caffè 2,00
3002 1 3 Coperti 3,00
3002 2 2 Antipasti 6,00
3002 3 3 Primi 14,00
3002 4 1 Orate 18,00
3002 5 1 Caprese 2,00
3002 6 2 Caffè 2,00
Num Data Totale 1357 5/2/04 39,00
2334 7/2/04 29,00
3002 13/2/04 45,00
Ricevute
Dettaglio
Esempi di relazioni
29
Esami
Studenti Matricola Nome Cognome 654321 Mario Rossi
321654 Franca Verde
123456 Marta Bianco
456123 Livia Nero
135246 Marta Bianco Studente Cod
Corso Voto Lode Data
123456 0010 19 No 1/2/2010
654321 0021 30 No 3/2/2010
456123 0001 24 No 2/2/2010
321654 0121 30 Sì 7/2/2010
123456 0001 21 No 9/2/2010
135246 0010 25 No 1/2/2010
Esempio di cattivo DB
30
Esami
Studenti
Nome studente
Cognome studente
Ultimo esame superato
Voto Lode Data
Marta Bianco 0010 19 No 1/2/2010 Mario Rossi 0021 30 No 3/2/2010 Livia Nero 0001 24 No 2/2/2010 Franca Verde 0121 30 Sì 7/2/2010
Matricola Nominativo Esami superati Media
654321 Rossi Mario 23 27
321654 Verde Franca 13 21
123456 Bianco Marta 0
456123 Nero Livia 10 26
135246 Bianco Marta 13 24
6
Esempio di cattivo DB
31
Esami
Studenti
Nome studente
Cognome studente
Ultimo esame superato
Voto Lode Data
Marta Bianco 0010 19 No 1/2/2010 Mario Rossi 0021 30 No 3/2/2010 Livia Nero 0001 24 No 2/2/2010 Franca Verde 0121 30 Sì 7/2/2010
Matricola Nominativo Esami superati Media
654321 Rossi Mario 23 27
321654 Verde Franca 13 21
123456 Bianco Marta 0
456123 Nero Livia 10 26
135246 Bianco Marta 13 24
Non si può risalire univocamente allo studente a causa delle possibili omonimie
Di solito, i DB contengono dati “primitivi”, non risultati di calcoli statistici sui dati
Nonostante l’interfaccia utente possa consentire di inserire un solo esame per volta, occorre memorizzare tutti gli esami
Dato “poco strutturato”: un solo attributo per nome e cognome impedisce di effettuare ricerche per cognome
Esempio di cattivo DB
32
Studenti Matricola Nome Cognome Voto
Esame 1 Data Esame 1
… Voto Esame 33
Data Esame 33
654321 Mario Rossi 30 e lode 14/02/09 NULL NULL
321654 Franca Verde 18 12/01/08 28 12/01/10
123456 Marta Bianco 27 01/01/01 NULL NULL
456123 Livia Nero NULL NULL NULL NULL
135246 Marta Bianco NULL NULL NULL NULL
Si limita in modo arbitrario e restrittivo il numero di esami; probabilmente non è stato disegnato lo schema EA: i dati degli esami dovrebbero essere rappresentati in una tabella distinta
Dato “poco strutturato”: è poco agevole, per es., calcolare le medie o contare le lodi in modo automatico
Informazione incompleta e valori nulli
! In una tupla di una relazione un attributo può non avere valore ! Per esempio: Mario Rossi non ha telefono in
Persone(CF,Cognome,Nome,Indirizzo,Telefono)
! Oppure il valore di un attributo potrebbe esistere ma essere sconosciuto a chi inserisce i dati nel DB ! Per esempio: Mario Rossi ha telefono, ma non
ne conosciamo il numero
33
Informazione incompleta e valori nulli
! NULL: valore nullo ! Assegnato agli elementi di tuple inesistenti
o sconosciuti ! NULL è un valore aggiuntivo rispetto al
dominio di un attributo
34
Informazione incompleta e valori nulli
! Nelle basi di dati, i due casi sopra sono trattati come assenza di informazione
! In assenza di informazione su un attributo bisogna usare NULL perché NULL non può venire confuso con gli altri valori del dominio dell’attributo
35
Informazione incompleta e valori nulli
! Per esempio: ! Numero di telefono sconosciuto potrebbe
essere rappresentato con 0 (numero che nessun telefono può avere). Però questa convenzione non è generalizzabile
! Inoltre, per altri attributi, potrebbe non esistere un valore di dominio che non si può assegnare mai
usare NULL
36
7
Informazione incompleta e valori nulli
! Non tutti gli attributi di una relazione devono potere assumere valore nullo
! Nella definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple
37
Matricola Cognome Nome DataNascita 276545 Rossi Maria NULL
NULL Neri Anna 23/04/1982
NULL Verdi Fabio 12/02/1982
587614 Rossi Luca 10/10/1981
937653 Bruni Mario 01/12/1981
Studenti
Informazione incompleta e valori nulli
! Non tutti gli attributi di una relazione devono potere assumere valore nullo
! Nella definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple
38
Matricola Cognome Nome DataNascita 276545 Rossi Maria NULL
NULL Neri Anna 23/04/1982
NULL Verdi Fabio 12/02/1982
587614 Rossi Luca 10/10/1981
937653 Bruni Mario 01/12/1981
Studenti
OK
Informazione incompleta e valori nulli
! Non tutti gli attributi di una relazione devono potere assumere valore nullo
! Nella definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple
39
Matricola Cognome Nome DataNascita 276545 Rossi Maria NULL
NULL Neri Anna 23/04/1982
NULL Verdi Fabio 12/02/1982
587614 Rossi Luca 10/10/1981
937653 Bruni Mario 01/12/1981
Studenti
No: matricola usata per correlare relazione
Informazione incompleta e valori nulli
No: informazione inutile
Codice Titolo Docente 01 Analisi Giani
03 Chimica NULL
NULL Chimica Belli
Studente Voto Corso 276545 28 01
NULL 27 NULL
200768 25 01
587614 24 NULL
Esami
Corsi
Informazione incompleta e valori nulli
41
No: informazione inutile
Codice Titolo Docente 01 Analisi Giani
03 Chimica NULL
NULL Chimica Belli
Studente Voto Corso 276545 28 01
NULL 27 NULL
200768 25 01
587614 24 NULL
Esami
Corsi
Informazione incompleta e valori nulli
42
Codice Titolo Docente 01 Analisi Giani
03 Chimica NULL
NULL Chimica Belli
Studente Voto Corso 276545 28 01
NULL 27 NULL
200768 25 01
587614 24 NULL
Esami
Corsi
No: codice usato Per correlare relazione
8
Informazione incompleta e valori nulli
43
Codice Titolo Docente 01 Analisi Giani
03 Chimica NULL
NULL Chimica Belli
Studente Voto Corso 276545 28 01
NULL 27 NULL
200768 25 01
587614 24 NULL
Esami
Corsi
OK
Istanze incoerenti ! Non tutte le tuple rappresentano
informazione corretta per un’applicazione ! Valori nulli ! Valori fuori del dominio di un attributo
• Per esempio: voto = 36
! Tuple incoerenti (valori di più attributi non simultaneamente assegnabili) • Per esempio: voto = 24, lode = Sì
…
44
Istanze incoerenti … ! Tuple con valori uguali per attributi
identificanti • Per esempio: tuple con la stessa matricola in
relazione Studenti
! Valori inesistenti in attributi usati per corrispondenze tra relazioni • Per esempio: studente in relazione Esami non
presente nella relazione Studenti
45
Vincoli di integrità ! Proprietà che devono essere soddisfatte
dalle istanze corrette per un’applicazione
! Sono predicati che associano ad ogni istanza il valore vero o falso ! Vero: istanza corretta (ammissibile, lecita) ! Falso: istanza incoerente
46
Vincoli di integrità ! Definendo lo schema di una base di dati
si associano vincoli di integrità che si riferiscono a tutte le istanze della base di dati
! Questi vincoli permettono di considerare corrette le sole istanze che li verificano tutti
47
Vincoli di integrità ! Vincoli intrarelazionali
! Vincolo di tupla • Vincolo di dominio • Vincoli su assegnamento di valori ad attributi
diversi di una tupla
! Vincolo di chiave
! Vincoli interrelazionali
48
9
Vincoli intrarelazionali Vincoli interni a una relazione:
! Soddisfacimento definito rispetto ad una singola relazione della base di dati
! Vincolo di tupla: esprime condizioni sui valori di ciascuna tupla indipendentemente dalle altre tuple ! Vincolo di dominio (vincolo su valori): restrizione su
dominio di attributo ! Vincoli su assegnamento di valori ad attributi diversi
di una tupla
49
Vincoli di tupla ! Esprimibili mediante espressioni booleane
(AND, OR, NOT) i cui termini contengono: ! Uguaglianze (=), disuguaglianze (<>),
ordinamenti (<,>,<=,>=) di valori di attributo
! Espressione aritmetiche su valori di attributo
50
p q p AND q F F F
F T F
T F F
T T T
p q p OR q F F F
F T T
T F T
T T T
p NOT p F T
T F
Vincoli di tupla ! Per esempio:
! Vincolo di dominio Voto >= 18 AND Voto <= 30
! Vincolo su più attributi NOT(Lode = “Sì” AND Voto <> 30)
! Pagamenti(Data, Importo, Ritenute, Netto) Netto = Importo - Ritenute
51
Vincoli di tupla ! Per esempio:
! Vincolo di dominio Voto >= 18 AND Voto <= 30
52
Studente Corso Voto Lode 123456 0010 30 Sì
654321 0021 18 No
456123 0001 24 No
321654 0121 30 Sì
135246 0001 25 No
Tutte le tuple/record della relazione/tabella soddisfano il vincolo Quindi, diciamo che la relazione/tabella soddisfa il vincolo
Vincoli di tupla ! Per esempio:
! Vincolo di dominio Voto >= 18 AND Voto <= 30
53
Studente Corso Voto Lode 123456 0010 30 Sì
654321 0021 18 No
456123 0001 24 No
321654 0121 36 Sì
135246 0001 25 No
Un record della tabella non soddisfa il vincolo Quindi, la relazione/tabella non soddisfa il vincolo
Vincoli di tupla ! Per esempio:
! Vincolo su più attributi NOT(Lode = “Sì” AND Voto <> 30)
54
Studente Corso Voto Lode 123456 0010 30 Sì
654321 0021 18 No
456123 0001 24 No
321654 0121 30 Sì
135246 0001 25 No
Tutte le tuple/record della relazione/tabella soddisfano il vincolo Quindi, diciamo che la relazione/tabella soddisfa il vincolo
10
Vincoli di tupla ! Per esempio:
! Vincolo su più attributi NOT(Lode = “Sì” AND Voto <> 30)
55
Studente Corso Voto Lode 123456 0010 30 Sì
654321 0021 18 No
456123 0001 24 No
321654 0121 26 Sì
135246 0001 25 No
Una riga della tabella non soddisfa il vincolo Quindi, la relazione/tabella non soddisfa il vincolo
Vincoli di tupla ! Per esempio:
! Vincolo su più attributi NOT(Lode = “Sì” AND Voto <> 30)
56
Studente Corso Voto Lode 123456 0010 30 No
654321 0021 18 No
456123 0001 24 No
321654 0121 30 Sì
135246 0001 25 No
Un cambiamento in questa cella, ma comunque la tupla/record soddisfa il vincolo La relazione/tabella continua a soddisfare il vincolo
Vincoli di tupla ! Per esempio:
! Pagamenti(Data, Importo, Ritenute, Netto) Netto = Importo - Ritenute
57
Importo Ritenute Netto 30 10 20
45 15 30
50 5 45
20 8 12
5 3 2
Tutte le tuple/record della relazione/tabella soddisfano il vincolo Quindi, diciamo che la relazione/tabella soddisfa il vincolo
Vincoli di tupla ! Per esempio:
! Pagamenti(Data, Importo, Ritenute, Netto) Netto = Importo - Ritenute
58
Importo Ritenute Netto 30 10 20
45 15 30
50 5 5
20 8 12
5 3 25
Alcune tuple/record della tabella non soddisfano il vincolo Quindi, la relazione/tabella non soddisfa il vincolo
Vincoli di chiave ! Superchiave: insieme di attributi usato per
identificare univocamente le tuple di una relazione
! Più formalmente, un insieme di attributi K è detto superchiave di una relazione r se r non può contenere due tuple che hanno valori uguali su K
59
Vincoli di chiave ! {Matricola} è una superchiave
60
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
11
Vincoli di chiave ! {Cognome, Nome, DataDiNascita} è
una superchiave (forse insufficiente)
61
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
Vincoli di chiave ! {Matricola, Corso} è una superchiave
62
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
Vincoli di chiave ! {Matricola, Cognome, Nome,
DataDiNascita, CorsoDiLaurea} è una superchiave
63
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
Vincoli di chiave ! {Nome, Corso} non è una superchiave
64
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
Vincoli di chiave ! {Nome, Corso} sembra una superchiave
“per caso”
65
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Informatica
Studenti
! Il concetto di superchiave riguarda tutte le possibili tuple di una relazione e non soltanto quelle esistenti in un dato momento
Vincoli di chiave ! Dato che una relazione è un insieme di tuple e
che in un insieme non possono esistere due elementi uguali, in una relazione non possono esistere due tuple identiche: quindi l’intero insieme degli attributi di una relazione è banalmente una superchiave per qualunque relazione
! Quindi è utile restringere il concetto di superchiave…
66
12
Vincoli di chiave ! K è una chiave (candidata) di r se è una
superchiave minimale di r Minimale = se si toglie un attributo dalla superchiave, questa non è più superchiave
! Di conseguenza, ogni chiave è una superchiave
! L’insieme di tutti gli attributi di una relazione, pur essendo una superchiave, non è detto che sia una chiave, infatti potrebbe essere una superchiave non minimale 67
Vincoli di chiave ! {Matricola} è una chiave
68
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
Vincoli di chiave ! {Cognome, Nome, DataDiNascita} è
una chiave
69
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
Vincoli di chiave ! {Matricola, Corso} è una superchiave,
ma non una chiave
70
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
4328 Rossi Luigi 29/04/79 Informatica
6328 Rossi Dario 29/04/79 Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca 01/05/81 Economia
5536 Neri Luca 05/03/78 Economia
Studenti
Vincoli di chiave ! Una chiave primaria di r è una
particolare chiave (candidata) di r scelta dal progettista del DB come modo preferito per identificare univocamente le tuple di r
! Ogni relazione ha una chiave primaria, mentre può avere più di una chiave (candidata)
71
Vincoli di chiave
72
Superchiavi
Chiavi
Chiave primaria
13
Vincoli di chiave ! N.B.: Il concetto di chiave è relativo alla
relazione: uno stesso insieme di attributi potrebbe essere chiave di una relazione, ma non esserlo di un’altra
! Per es., l’attributo Matricola è chiave della relazione Studenti, ma non della relazione Esami
Esempi di relazioni
74
Esami
Studenti Matricola Nome Cognome 654321 Mario Rossi
321654 Franca Verde
123456 Marta Bianco
456123 Livia Nero
135246 Marta Bianco Studente Corso Voto Lode Data 123456 0010 19 No 1/2/2010
654321 0021 30 No 3/2/2010
456123 0001 24 No 2/2/2010
321654 0121 30 Sì 7/2/2010
123456 0001 21 No 9/2/2010
135246 0010 25 No 1/2/2010
Codice Nome 0010 Inglese
0021 Psicologia clinica
0001 Informatica
0121 Diritto
Corsi
Vincoli di chiave ! Ogni relazione ha almeno una chiave
(banalmente può essere l’insieme di tutti gli attributi). Questo fatto garantisce: ! Identificabilità univoca dei dati ! Possibilità di definire corrispondenze tra dati
contenuti in relazioni diverse
! Per esempio: nella base di dati Università ! Studente corrisponde a Matricola della
relazione Studenti ! Corso corrisponde a Codice della relazione
Corsi 75
Chiave e valori nulli ! Tupla 1: ha entrambi le chiavi
incomplete ({Matricola} e {Cognome, Nome, DataDiNascita})
76
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
NULL Rossi Dario NULL Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca NULL NULL
NULL Neri Luca 05/03/78 Economia
Chiave e valori nulli ! Tuple 3 e 4: hanno una chiave
completamente specificata, ma è sicuro che non siano lo stesso individuo?
77
Matricola Cognome Nome DataDi Nascita
CorsoDi Laurea
NULL Rossi Dario NULL Informatica
4766 Rossi Luca 01/05/81 Fisica
4856 Neri Luca NULL NULL
NULL Neri Luca 05/03/78 Economia
Chiave e valori nulli ! Chiave primaria: la chiave primaria non
può assumere valori nulli ! Identificata mediante sottolineatura ! Usata per stabilire corrispondenza tra
relazioni ! Se nessun attributo della relazione può
assumere il ruolo di chiave primaria, se ne definisce uno aggiuntivo a tale scopo
78
14
Vincoli interrelazionali ! I vincoli interrelazionali sono i vincoli
che coinvolgono più relazioni della base di dati
! Per verificare che siano rispettati, occorre considerare istanze di più relazioni
79
Vincoli interrelazionali ! Vincoli di integrità referenziale (foreign
keys, referential integrity constraints): ! Servono a garantire che i riferimenti tra
tabelle siano possibili ! Un vincolo di integrità referenziale fra
insieme di attributi X di una relazione R1 ed una relazione R2 è soddisfatto se i valori su X di ciascuna tupla di R1 (eccetto potenzialmente NULL) compaiono come valori della chiave (di solito primaria) di R2. In altre parole: R1 non può contenere valori per X che non esistono in R2 (eccetto NULL)
80
Vincoli di integrità referenziale
81
K1 A K2 …
R1 R2
Vincoli di integrità referenziale ! Per esempio: le relazioni
Studenti(Matricola,Cognome,Nome,DataNascita) Corsi(Codice,Titolo,Docente) Esami(Studente,Corso,Data,Voto,Lode)
! I valori dell’attributo Studente nella relazione Esami devono comparire come valori di Matricola nella relazione Studenti (indicato come freccia che va dall’attributo Studente all’attributo Matricola)
! I valori dell’attributo Corso nella relazione Esami devono comparire come valori di Codice nella relazione Corsi (indicato come freccia che va dall’attributo Corso all’attributo Codice)
82
Vincoli di integrità referenziale
83
Codice Data Agente Articolo Targa
987554 26/10/02 456 34 RM2F7643
630876 15/10/93 456 53 FI4E5432
Matricola CF Cognome Nome
456 RSSM… Rossi Mario
638 NREP… Neri Piero
Targa Proprietario Indirizzo
RM2F7643 Verdi Piero Via Tigli
MI2F7643 Luci Gino Via Noci
FI4E5432 Bini Luca Via Po
Infrazioni
Agenti
Auto
Vincoli di integrità referenziale
84
Codice Data Agente Articolo Targa
987554 26/10/02 456 34 RM2F7643
630876 15/10/93 456 53 FI4E5432
Matricola CF Cognome Nome
456 RSSM… Rossi Mario
638 NREP… Neri Piero
Targa Proprietario Indirizzo
RM2F7643 Verdi Piero Via Tigli
MI2F7643 Luci Gino Via Noci
FI4E5432 Bini Luca Via Po
Infrazioni
Agenti
Auto
15
Vincoli di integrità referenziale
85
Codice Data Agente Articolo Targa
987554 26/10/02 456 34 RM2F7643
630876 15/10/93 456 53 FI4E5432
Matricola CF Cognome Nome
456 RSSM… Rossi Mario
638 NREP… Neri Piero
Targa Proprietario Indirizzo
RM2F7643 Verdi Piero Via Tigli
MI2F7643 Luci Gino Via Noci
FI4E5432 Bini Luca Via Po
Infrazioni
Agenti
Auto
Esercizi ! La tabella seguente soddisfa il vincolo
SeggiAperti>400 AND SeggiAperti<600 ?
86
Regione SeggiAperti Piemonte 567
Lombardia 670
Puglia 504
Sicilia 594
Esercizi ! La tabella seguente soddisfa il vincolo
NOT(Lode = “Sì” AND Voto <> 30) ?
87
MatricolaStudente
CodiceCorso
Voto Lode
123456 0010 19 No
654321 0021 30 No
456123 0001 24 No
321654 0121 20 Sì
135246 0001 24 No
Esercizi ! Quali sono le superchiavi della tabella
seguente?
88
MatricolaStudente
CodiceCorso
Voto Lode
123456 0010 19 No
654321 0021 30 No
456123 0001 24 No
321654 0121 20 Sì
135246 0001 24 No
Esercizi ! Quali sono le chiavi della tabella
seguente?
89
MatricolaStudente
CodiceCorso
Voto Lode
123456 0010 19 No
654321 0021 30 No
456123 0001 24 No
321654 0121 20 Sì
135246 0001 24 No
Esercizi ! È rispettato il vincolo di integrità
referenziale dall’attributo Studente all’attributo Matricola?
90
Studente Cod Corso
Voto Lode Data
123456 0010 19 No 1/2/06
654321 0021 30 No 3/2/06
456123 0001 24 No 2/2/06
321654 0121 30 Sì 7/2/06
123456 0001 21 No 9/2/06
135246 0010 25 No 1/2/06
Matricola Nome Cognome 654321 Mario Rossi
321654 Franca Verde
123456 Marta Bianco
456123 Livia Nero
135246 Gianfranco Bianco