Il modello relazionale
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
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
Prodotto cartesiano Prodotto cartesiano di due insiemi A e B AxB = {(x1,x2) | x1A e x2B} dove (x1,x2) sono coppie ordinate di elementi Per esempio: A = {1,2,4}, B= {a,b} AxB = {(1,a),(1,b),(2,a),(2,b),(4,a),(4,b)}
AxB = {(1,a),(1,b),(2,a),(2,b),(4,a),(4,b)} Relazione matematica Relazione matematica su insiemi A e B (domini della relazione) = sottoinsieme di AxB 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)}
Relazioni e tabelle Domini: per esempio I numeri naturali tra 1 e 50 compresi Le frase che contengono 255 carattere o meno
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
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
Relazioni e tabelle Relazioni rappresentate graficamente come tabelle 1 B 4 b
D1x…xDn = {(z1,…,zn) | z1D1,…, znDn} Prodotto cartesiano Prodotto cartesiano di n insiemi D1, D2, …, Dn D1x…xDn = {(z1,…,zn) | z1D1,…, znDn} dove (z1,…,zn) sono n-uple ordinate di elementi
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}?
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)}
Relazione matematica Relazione matematica sugli insiemi D1,…,Dn (domini della relazione) = un sottoinsieme di D1x…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)}
Relazioni e tabelle Per esempio: risultati partite di calcio Juventus 3 2 Milan Roma 1
Relazioni e tabelle Per esempio: risultati partite di calcio Juventus 3 2 Milan Roma 1 Sequenza di carattere (stringa) Numero naturale (intero)
Relazioni e tabelle Per esempio: risultati partite di calcio Juventus 3 2 Milan Roma 1 Sequenza di carattere (stringa) Numero naturale (intero) Questa relazione: un sottoinsieme di Stringa x Stringa x Intero x Intero
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
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
Relazioni con attributi Ordinamento dei domini di una relazione impone ordinamento posizionale degli elementi di n-uple Nella gestione di dati, preferenza per ordinamenti non posizionali … in cui si può far riferimento alle componenti delle n-uple in modo non ambiguo
Relazioni con attributi In una relazione, ogni dominio rappresenta un ruolo o attributo 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
Relazioni con attributi SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata Juventus Lazio 3 2 Milan Roma 1
Relazioni con attributi D1 D2 D3 D4 SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata Juventus Lazio 3 2 Milan Roma 1 Ordinamento di colonne diventa irrilevante: Non serve più parlare di primo dominio, etc.
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 AX un dominio DOM(A) D D7 X D A3 DOM
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 X n-uple: elementi individuati per posizione Tuple: elementi individuati per attributo
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}
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
Relazioni con attributi: esempio SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata Juventus Lazio 3 2 Milan Roma 1 t1, t2, t3, t4: tuple t1[SquadraDiCasa]=Juventus t1[SquadraOspitata]=Lazio t1[RetiCasa]=3 t1[RetiOspitata]=2
Relazioni con attributi: esempio SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata Juventus Lazio 3 2 Milan Roma 1 t1, t2, t3, t4: tuple t2[SquadraDiCasa]=Lazio t2[SquadraOspitata]=Milan t2[RetiCasa]=2 t2[RetiOspitata]=0
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 Studenti Matricola Cognome Nome DataNascita 276545 Rossi Maria 25/11/1981 485745 Neri Anna 23/04/1982 200768 Verdi Fabio 12/02/1982 587614 Luca 10/10/1981 937653 Bruni Mario 01/12/1981
Relazioni e Basi di Dati Esami Studente Voto Corso 276545 28 01 485745 27 04 200768 25 587614 24 Codice Titolo Docente 01 Analisi Giani 03 Chimica Melli 04 Belli Corsi
Relazioni e Basi di Dati Sono ammissibile relazione con un solo attributo Per esempio: Si possono rappresentare informazioni complesse mediante tabelle diverse Lavoratori Matricola 276545 485745 200768
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) Esami Studente Voto Corso 276545 28 01 485745 27 04 200768 25 587614 24
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)}
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)
Esempi di relazione “DA MARIO” Ricevuta n. 1357 Del 5/2/04 3 coperti 3,00 2 antipasti 6,00 primi 12,00 bistecche 18,00 Totale 39,00 “DA MARIO” Ricevuta n. 2334 Del 7/2/04 2 coperti 2,00 1 antipasti 3,00 primi 8,00 orate 14,00 caffè Totale 29,00 “DA MARIO” Ricevuta n. 3002 Del 13/2/04 3 coperti 3,00 2 antipasti 6,00 primi 14,00 1 Orate 18,00 Caprese 2,00 Caffè Totale 45,00
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
Esempi di relazione Dettaglio Ricevute Num. Data Totale 1357 5/2/04 Q.tà Descr. Importo 1357 3 Coperti 3,00 2 Antipasti 6,00 Primi 12,00 Bistecche 18,00 2334 2,00 1 8,00 Orate 14,00 Caffè 3002 Caprese Dettaglio Ricevute Num. Data Totale 1357 5/2/04 39,00 2334 7/2/04 29,00 3002 13/2/04 45,00
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
Esempi di relazione Dettaglio Ricevute Num. Data Totale 1357 5/2/04 Riga Q.tà Descr. Importo 1357 1 3 Coperti 3,00 2 Antipasti 6,00 Primi 12,00 4 Bistecche 18,00 2334 2,00 8,00 Orate 14,00 5 Caffè 3002 Caprese 6 Dettaglio Ricevute Num. Data Totale 1357 5/2/04 39,00 2334 7/2/04 29,00 3002 13/2/04 45,00
Esempi di relazione Dettaglio Ricevute Num. Data Totale 1357 5/2/04 Riga Q.tà Descr. Importo 1357 1 3 Coperti 3,00 2 Antipasti 6,00 Primi 12,00 4 Bistecche 18,00 2334 2,00 8,00 Orate 14,00 5 Caffè 3002 Caprese 6 Dettaglio Ricevute Num. Data Totale 1357 5/2/04 39,00 2334 7/2/04 29,00 3002 13/2/04 45,00
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
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
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
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