Informatica Basi di dati parte 3 Basi di dati relazionali: relazioni, tabelle, chiavi, vincoli Lezione 9 Laurea magistrale in Scienze della mente Laurea magistrale in Psicologia dello sviluppo e dell'educazione Anno accademico: 2011 2012 1 2 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 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 Relazioni e tabelle Relazioni sono rappresentate graficamente come tabelle Tupla (di una relazione) = riga (di una tabella) Corrisponde a record risultati partite di calcio Esempio di una relazione: {(Torino, Lazio, 3, 2), (Roma, Milan, 2, 0), (Juventus, Roma, 0, 2), (Roma, Milan, 2, 1)} La tabella che rappresenta graficamente la relazione: Torino Lazio 3 2 Roma Milan 2 0 Juventus Roma 0 2 Roma Milan 2 1 3 4 Relazioni e tabelle Relazioni con attributi Una relazione è un insieme di tuple: Insieme: collezione di elementi L ordine degli elementi non è importante Un insieme non contiene duplicati 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) 5 Attributi Usiamo nome di attributo per identificare le rispettive componenti delle tuple In una tabella: attributo intestazione di colonne della tbll tabella SquadraDiCasa, SquadraOspitata, RetiCasa, RetiOspitata SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata Torino Lazio 3 2 Roma Milan 2 0 Juventus Roma 0 2 Roma Milan 2 1 6 1
Relazioni e Basi di Dati Un DB è solitamente costituito da più relazioni le cui tuple contengono valori comuni (usati per stabilire corrispondenza tra tuple) relazioni che descrivono studenti, esami e corsi 276545 Rossi Maria 25/11/1990 485745 Neri Anna 23/04/1989 200768 Verdi Fabio 12/02/1982 587614 Rossi Luca 10/10/1990 937653 Bruni Mario 01/12/1991 Esami Corsi Relazioni e Basi di Dati Studente Voto Corso 276545 28 01 485745 27 04 200768 25 01 587614 24 04 Codice Titolo Docente 01 Analisi Giani 03 Chimica Melli 04 Chimica Belli 7 8 276545 Rossi Maria 25/11/1990 485745 Neri Anna 23/04/1989 200768 Verdi Fabio 12/02/1982 587614 Rossi Luca 10/10/1990 937653 Bruni Mario 01/12/1991 Studente Voto Corso 276545 28 01 485745 27 04 200768 25 01 587614 24 04 Relazioni e Basi di Dati Sono ammissibili relazioni con un solo attributo Per esempio: Lavoratori Matricola 276545 485745 200768 Si possono rappresentare informazioni complesse mediante relazioni diverse Codice Titolo Docente 01 Analisi Giani 03 Chimica Melli 04 Chimica Belli 9 10 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={A 1,,A n } Esami(Studente,Voto,Corso) Esami Studente Voto Corso 276545 28 01 485745 27 04 200768 25 01 587614 24 04 11 Schemi di relazioni e di DB Schema di base di dati: D={R 1 (X 1 ),, R n (X n )} Insieme di schemi di relazioni Le relazioni sono identificate per nome i nomi devono essere diversi Università = {(Matricola, Cognome, Nome, DataNascita), Esami(Studente,Voto,Corso), Corso(Codice,Titolo,Docente)} 12 2
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={R 1 (X 1 ),,R n (X n )} Insieme d di relazioni d={r 1,,r n } dove ogni r i è un istanza di relazione sullo schema R i (X i ) Istanze incoerenti Non tutte le tuple rappresentano informazione corretta per un applicazione Valori fuori del dominio di un attributo voto = 36 Record incoerenti (valori di più attributi non simultaneamente assegnabili) voto = 24, lode = Sì Record con valori uguali per attributi identificanti record con la stessa matricola in relazione Valori inesistenti in attributi usati per corrispondenze tra tabelle Matricola in tabella, e Studente in tabella Esami 13 14 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 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 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 15 16 Vincoli intrarelazionali Vincoli interni a una relazione: Soddisfacimento definito rispetto ad una singola tabella della base di dati Vincolo ditupla: esprime condizioni sui valori diciascuno record indipendentemente da altri record Vincolo di dominio (vincolo su valori): restrizione su dominio di attributo Vincoli su assegnamento di valori ad attributi diversi di un record Esprimibili mediante espressioni booleane (eventualmente usando gli operatori logici AND, OR, NOT) i cui termini contengono: Uguaglianze, disuguaglianze, ordinamenti di valori di attributo Espressione aritmetiche su valori di attributo 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 17 18 3
Vincolo di dominio (Voto 18) AND (Voto 30) Vincolo di dominio (Voto 18) AND (Voto 30) 123456 30 Sì 654321 18 No 321654 30 Sì Tutte i record della relazione/tabella soddisfano il vincolo Quindi, la relazione/tabella soddisfa il vincolo 123456 30 Sì 654321 18 No 321654 36 Sì Un record della tabella Quindi, la relazione/tabella 19 20 Vincolo su più attributi NOT(Lode = Sì AND Voto 30) Vincolo su più attributi NOT(Lode = Sì AND Voto 30) 123456 30 Sì 654321 18 No 321654 30 Sì Tutte i record della relazione/tabella soddisfano il vincolo Quindi, la relazione/tabella soddisfa il vincolo 123456 30 Sì 654321 18 No 321654 26 Sì Una riga della tabella Quindi, la relazione/tabella 21 22 Pagamenti(Importo, Ritenute, Netto) Netto = Importo Ritenute Pagamenti(Importo, Ritenute, Netto) Netto = Importo Ritenute Importo Ritenute Netto 30 10 20 45 15 30 50 5 45 20 8 12 5 3 2 Tutte i record della relazione/tabella soddisfano il vincolo Quindi, la relazione/tabella soddisfa il vincolo Importo Ritenute Netto 30 10 20 45 15 30 50 5 5 20 8 12 5 3 25 Alcuni record della tabella non soddisfano il vincolo Quindi, la relazione/tabella 23 24 4
Vincoli di chiave Chiave primaria: è un particolare insieme (non vuoto) di attributi che il progettista del DB definisce come modo preferito per identificare univocamente le righe di una tabella Una chiave primaria K di una tabella deve avere la proprietà seguente: la relazione non può contenere due righe che hanno valori uguali su K Una chiave primaria esiste per ogni tabella: l insieme di tutti gli attributi della tabella può essere impostato come chiave primaria Vincoli di chiave Esempi: Attributo Matricola della tabella (più precisamente, l insieme {Matricola} della tabella ) Insieme {Studente, Voto, Corso} della tabella Esami N.B.: Il concetto di chiave primaria è 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, ma non della relazione Esami 25 26 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 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 R 1 ed una relazione R 2 è soddisfatto se i valori su X di ciascuna record di R 1 (eccetto potenzialmente NULL) compaiono come valori della chiave primaria di R 2 In altre parole: R 1 non può contenere valori per X che non esistono in R 2 (eccetto NULL) R 1 R 2 A B C D E F G 27 28 Vincoli di integrità referenziale Vincoli di integrità referenziale le relazioni (Matricola,Cognome,Nome,DataNascita) Corsi(Codice,Titolo,Docente) Esami(Studente,Data,Corso,Voto,Lode) Il valore dell attributo Studente delle tuple della relazione Esami deve comparire come valore di Matricola nella relazione Esami Infrazioni Agenti 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 Studente Data Corso Voto Lode 123456 12/01/12 P007 30 No 123456 15/01/12 P012 28 No 654321 12/01/12 P007 24 No 123456 Rossi Mario 19/12/90 456123 Bianco Silvia 6/02/89 Auto Targa Proprietario Indirizzo RM2F7643 Verdi Piero Via Tigli MI2F7643 Luci Gino Via Noci 456123 15/01/12 P025 30 No 29 FI4E5432 Bini Luca Via Po 30 5
Vincoli di integrità referenziale Vincoli di integrità referenziale Infrazioni Codice Data Agente Articolo Targa 987554 26/10/02 456 34 RM2F7643 Infrazioni Codice Data Agente Articolo Targa 987554 26/10/02 456 34 RM2F7643 630876 15/10/93 456 53 FI4E5432 630876 15/10/93 456 53 FI4E5432 Agenti Matricola CF Cognome Nome 456 RSSM Rossi Mario Agenti Matricola CF Cognome Nome 456 RSSM Rossi Mario 638 NREP Neri Piero 638 NREP Neri Piero Auto Targa Proprietario Indirizzo RM2F7643 Verdi Piero Via Tigli Auto Targa Proprietario Indirizzo RM2F7643 Verdi Piero Via Tigli MI2F7643 Luci Gino Via Noci MI2F7643 Luci Gino Via Noci FI4E5432 Bini Luca Via Po 31 FI4E5432 Bini Luca Via Po 32 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 NULL: valore nullo Assegnato agli elementi di tuple inesistenti o sconosciuti NULL è un valore aggiuntivo rispetto al dominio di un attributo In basi di dati, i due casi sopra trattati come assenza di informazione In assenza di informazione su un attributo bisogna usare NULL perché NULL può venire confuso con gli altri valori del dominio dell attributo 33 34 Numero di telefono sconosciuto potrebbe essere rappresentato con 0 (numero che nessun telefono può avere). Però questa convenzione non è generale Inoltre, per altri attributi, ti potrebbe non esistere it valore di dominio che non si può assegnare mai usare NULL 35 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 276545 Rossi Maria NULL NULL Neri Anna 23/04/1989 NULL Verdi Fabio 12/02/1982 587614 Rossi Luca 10/10/1990 937653 Bruni Mario 01/12/1991 36 6
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 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 OK 276545 Rossi Maria NULL NULL Neri Anna 23/04/1989 NULL Verdi Fabio 12/02/1982 587614 Rossi Luca 10/10/1990 937653 Bruni Mario 01/12/1991 276545 Rossi Maria NULL NULL Neri Anna 23/04/1989 NULL Verdi Fabio 12/02/1982 587614 Rossi No: matricola Luca usata 10/10/1990 937653 Bruni per correlare Mario relazione 01/12/1991 37 38 Chiave e valori nulli Chiave primaria: la chiave primaria non può avere valori nulli Identificata mediante sottolineatura (ad esempio, {Matricola}) Usata per stabilire corrispondenza tra tabelle Se nessun attributo della relazione può assumere il ruolo di chiave primaria, se ne definisce uno aggiuntivo a tale scopo Esercizi La tabella seguente soddisfa il vincolo (SeggiAperti>400) AND (SeggiAperti<600)? Regione SeggiAperti Piemonte 567 Lombardia 670 Puglia 504 Sicilia 594 39 40 Esercizi La tabella seguente soddisfa il vincolo NOT(Lode = lode AND Voto 30)? Esercizi Quali insiemi di attributi possono essere chiave primarie della tabella seguente? 123456 19 No 654321 30 No 321654 20 Sì 135246 24 No 123456 19 No 654321 30 No 321654 30 Sì 41 42 7
Esercizi Esiste un vincolo di integrità referenziale dall attributo Studente all attributo Matricola? Data Matricola Nome Cognome 123456 19 No 1/2/11 654321 Mario Rossi 654321 30 No 3/2/11 321654 Franca Verde 2/2/11 123456 Marta Bianco 321654 30 Sì 7/2/11 456123 Livia Nero 123456 21 No 9/2/11 135246 Gianfranco Bianco 1/2/12 43 8