Informatica II – Basi di Dati (07/08) – Parte 1
Gianluca Torta
Dipartimento di Informatica dell’Università di Torino [email protected], 0116706782
3 - Il modello relazionale
3
Il modello relazionale
Modello logico dei dati basato su concetti relazione e tabella
Relazione: da teoria degli insiemi
Tabella: rappresentazione grafica di una relazione; un concetto intuitivo
4
Il 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
Prodotto cartesiano
Prodotto cartesiano di due insiemi A e B A x B = {( x1,x2 ) | x1∈A e x2∈B } dove ( x1,x2 ) sono coppie ordinate di
elementi
Per esempio: A = {1,2,4}, B = {a,b}
A x B = {(1,a),(1,b),(2,a),(2,b),(4,a),(4,b)}
6
Relazione matematica
Relazione matematica su insiemi
A
eB
(domini
della relazione) = sottoinsieme diA
xB
Per esempio:AxB = {(1,a),(1,b),(2,a),(2,b),(4,a),(4,b)}
Una relazione matematica su insieme A e B potrebbe essere:
R={(1,a),(1,b),(4,b)}
7
Relazioni e tabelle
Domini: per esempio
I numeri naturali tra 1 e 50 compresi
Le frase che contengono 255 carattere o meno
8
Relazioni e tabelle
Assumiamo che i DB siano costituiti da relazioni finite su domini eventualmente infiniti
Finito o infinito? Per esempio:
{z|z è un numero naturale} è un insieme infinito
{y|y è un numero naturale tra 1 e 50 compresi} è un insieme finito
{x|x è una frase che contiene 255 carattere o meno} è un insieme finito
9
Relazioni e tabelle
In un DB non possono esserci insiemi infiniti
Sistemi di calcolo gestiscono solo insiemi finiti
Ma è utile ammettere domini infiniti per permettere ad ogni istante di assumere esistenza di un valore non presente nel DB
10
Relazioni e tabelle
Relazioni rappresentate graficamente come tabelle
1 1
1 B
4 b
11
Prodotto cartesiano
Prodotto cartesiano di n insiemi
D1, D2, …, Dn
D1
x…xDn
= {(z1,…,zn
) |z1∈D1,…, zn∈Dn
} dove (z1,…,zn
) sono n-uple ordinate di elementi12
Prodotto cartesiano
Per esempio:
n=3: D1={0,1}, D2={a,b}, D3={rosso,blu}
Che cos’è D1xD2xD3?
Cioè, che cos’è {0,1}x{a,b}x{rosso,blu}?
13
Prodotto cartesiano
Per esempio:
n=3: D1={0,1}, D2={a,b}, D3={rosso,blu}
Che cos’è D1xD2xD3?
Cioè, che cos’è {0,1}x{a,b}x{rosso,blu}?
{(0,a,rosso), (0,a,blu), (0,b,rosso), (0,b,blu), (1,a,rosso), (1,a,blu), (1,b,rosso), (1,b,blu)}
14
Relazione matematica
Relazione matematica sugli insiemi
D1,…,Dn
(domini
della relazione)= un sottoinsieme di
D1
x…xDn
Per esempio: un relazione sugli insiemi {0,1},{a,b}, {rosso,blu} potrebbe essere
{(0,b,blu), (1,a,rosso), (1,b,rosso), (1,b,blu)}
15
Relazioni e tabelle
Per esempio: risultati partite di calcio
Juventus Lazio 3 2
Lazio Milan 2 0
Juventus Roma 2 1
Roma Milan 1 2
16
Relazioni e tabelle
Per esempio: risultati partite di calcio
Juventus Lazio 3 2
Lazio Milan 2 0
Juventus Roma 2 1
Roma Milan 1 2
Sequenza di carattere
(stringa) Numero naturale (intero)
17
Relazioni e tabelle
Per esempio: risultati partite di calcio
Juventus Lazio 3 2
Lazio Milan 2 0
Juventus Roma 2 1
Roma Milan 1 2
Sequenza di carattere
(stringa) Numero naturale (intero)
Questa relazione: un sottoinsieme di Stringa x Stringa x Intero x Intero
18
Relazioni e tabelle
n-upla di relazione contiene dati tra loro collegati, che verificano la relazione
n-uple sono ordinate: ordine dei loro elementi è significativo
Per esempio: (Juventus,Lazio,3,2) significa che il risultato della partita Juventus-Lazio, giocata in casa dalla Juventus, è 3 a 2
19
Relazioni e tabelle
Una relazione è un
insieme
: n-uple della relazione devono essere distinte (no righe ripetute in tabella)
n-uple 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
20
Relazioni con attributi
Ordinamento dei domini di una relazione impone
ordinamento posizionale
degli elementi di n-upleNella gestione di dati, preferenza per
ordinamenti non posizionali
… in cui si può far riferimento alle componenti delle n-uple in modo non ambiguo
21
Relazioni con attributi
In una relazione, ogni dominio rappresenta un
ruolo
oattributo
Usiamo nome di attributo per identificare le rispettive componenti delle n-ple
In una tabelle: attributo → intestazione di colonne della tabella
Per esempio:
SquadraDiCasa, SquadraOspitata, RetiCasa, RetiOspitata
22
Relazioni con attributi
SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata
Juventus Lazio 3 2
Lazio Milan 2 0
Juventus Roma 2 1
Roma Milan 1 2
23
Relazioni con attributi
SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata
Juventus Lazio 3 2
Lazio Milan 2 0
Juventus Roma 2 1
Roma Milan 1 2
D1 D2 D3 D4
Ordinamento di colonne diventa irrilevante:
Non serve più parlare di primo dominio, etc.
24
Relazioni con attributi
Dati insieme di attributi X={A1,…,An} e insieme di domini D={D1,…,Dm}
Stabiliamo corrispondenza tra attributi e domini mediante funzione DOM: X → D
Cioè, la funzione DOM associa a ciascun attributo A∈X un dominio DOM(A) ∈ D
X A3 D7 D
DOM
25
Relazioni con attributi
Tupla su insieme di attributi X è una funzione t che associa a ciascun attributo A ∈X un valore del dominio DOM(A)
Per esempio: t[SquadraDiCasa]=Juventus
Relazione (con attributi) su X è
insieme
di tuple su Xn-uple: elementi individuati per
posizione
Tuple: elementi individuati perattributo
26
Relazioni con attributi:
esempio
DOM:{SquadraDiCasa, SquadraOspitata, Reti Casa, RetiOspitata} → {Stringa, Intero}
Cioè:
Insieme di attributi X = {SquadraDiCasa, SquadraOspitata, Reti Casa, RetiOspitata}
Insieme di attributi D = {Stringa, Intero}
27
Relazioni con attributi:
esempio
DOM:{SquadraDiCasa, SquadraOspitata, Reti Casa, RetiOspitata} → {Stringa, Intero}
DOM(SquadraDiCasa) = Stringa
DOM(SquadraOspitata) = Stringa
DOM(Reti Casa) = Intero
DOM(RetiOspitata) = Intero
28
Relazioni con attributi:
esempio
t1, t2, t3, t4: tuple
t1[SquadraDiCasa]=Juventus
t1[SquadraOspitata]=Lazio
t1[RetiCasa]=3
t1[RetiOspitata]=2
SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata
Juventus Lazio 3 2
Lazio Milan 2 0
Juventus Roma 2 1
Roma Milan 1 2
29
Relazioni con attributi:
esempio
t1, t2, t3, t4: tuple
t2[SquadraDiCasa]=Lazio
t2[SquadraOspitata]=Milan
t2[RetiCasa]=2
t2[RetiOspitata]=0
SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata
Juventus Lazio 3 2
Lazio Milan 2 0
Juventus Roma 2 1
Roma Milan 1 2
30
Relazioni e Basi di Dati
Un DB è solitamente costituito da più relazioni (tabelle) le cui tuple contengono valori comuni (usati per stabilire corrispondenza tra tuple)
Per esempio: tabelle che descrivono studenti, esami e corsi
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
31
Relazioni e Basi di Dati
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
32
Relazioni e Basi di Dati
Sono ammissibile relazione con un solo attributo
Per esempio:
Si possono rappresentare informazioni complesse mediante tabelle diverse
Matricola 276545 485745 200768 Lavoratori
33
Schemi di relazioni e di DB
Schema di relazione: R(X)
Costituita da simbolo R (nome della relazione) e da insieme di nomi di attributi X={A1,…,An}
Per esempio:
Esami(Studente,Voto,Corso)
Studente Voto Corso
276545 28 01
485745 27 04
200768 25 01
587614 24 04
Esami
34
Schemi di relazioni e di DB
Schema di base di dati: R={R1(X1),
…,Rn(Xn)}
Insiemi di schemi di relazione con nomi diversi
Per esempio:
Università =
{Studenti(Matricola,Cognome,Nome,DataNascita), Esami(Studente,Voto,Corso),
Corso(Codice,Titolo,Docente)}
35
Schemi di relazioni e di DB
Istanza di relazione su schema R(X)
Insieme r di tuple su X
Istanza di base di dati su schema R={R1(X1),
…,Rn(Xn)}
Insieme r di relazione r={r1,…,rn} dove ogni ri è una relazione sullo schema Ri(Xi)
36
Esempi di relazione
“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
37
Esempi di relazione
Le ricevute hanno una struttura che prevede alcune informazioni fisse
Numero, data e totale
… e un numero di righe variabile
Non è possibile rappresentare l’insieme delle ricevute con un’unica relazione
Non sarebbe possibile rappresentare le righe in un numero non predeterminato
38
Esempi di relazione
Num. Q.tà 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
39
Esempi di relazione
La base di dati nella slide precedente rappresenta correttamente le ricevute solo a due condizioni:
Non interessa mantenere traccia dell’ordine con cui le righe compaiono in ciascuna ricevuta
In un ricevuta non compaiono due righe uguali
In entrambi i casi, si può risolvere il problema aggiungendo un attributo, che indica la posizione della riga sulla ricevuta
40
Esempi di relazione
Num. Riga Q.tà 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
41
Esempi di relazione
Num. Riga Q.tà 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
42
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(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
43
Informazione incompleta e valori nulli
NULL:
valore nullo
Assegnato agli elementi di tuple inesistenti o sconosciuti
NULL è valore aggiuntivo rispetto al dominio di un attributo
44
Informazione incompleta e valori nulli
In basi di dati, i due casi sopra trattati come assenza di informazione
In assenza di informazione su un attributo bisogna usare NULL perché non si confonde con altri valori del dominio dell’attributo
45
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 è generale
Inoltre, per altri attributi, potrebbe non esistere valore di dominio che non si può assegnare mai:
usare NULL
46
Informazione incompleta e valori nulli
Non tutti gli attributi di una relazione devono poter assumere valore nullo
In definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple
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
47
Informazione incompleta e valori nulli
Non tutti gli attributi di una relazione devono poter assumere valore nullo
In definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple
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
48
Informazione incompleta e valori nulli
Non tutti gli attributi di una relazione devono poter assumere valore nullo
In definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple
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
49
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
50
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
51
Informazione incompleta e valori nulli
No: codice usato Per correlare relazione
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
52
Informazione incompleta e valori nulli
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