Il modello relazionale (II) 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 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 Studenti 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 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 OK Studenti 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 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 Studenti 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 No: matricola usata Bruni Mario per correlare relazione 01/12/1981 Informazione incompleta e valori nulli Studente Voto Corso 276545 28 01 NULL 27 NULL No: informazione inutile 200768 25 01 587614 24 NULL Corsi Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli Esami Informazione incompleta e valori nulli Studente Voto Corso 276545 28 01 NULL 27 NULL No: informazione inutile 200768 25 01 587614 24 NULL Corsi Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli Esami Informazione incompleta e valori nulli Esami Corsi Studente Voto Corso 276545 28 01 NULL 27 NULL 200768 25 01 587614 24 NULL Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli No: codice usato Per correlare relazione Informazione incompleta e valori nulli Esami Corsi Studente Voto Corso 276545 28 01 NULL 27 NULL 200768 25 01 587614 24 NULL Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli OK Instanze inconsistenti Non tutte le tuple rappresentano informazione corretta per un’applicazione Valori nulli Valori fuori del dominio di un attributo Per esempio: voto = 36 Tuple inconsistenti (valori di più attributi non simultaneamente assegnabili) Per esempio: voto = 24, lode = Sì … Instanze inconsistenti Non tutte le tuple rappresentano informazione corretta per un’applicazione … 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 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 inconsistente Vincoli di integrità Definendo lo schema di un base di dati si associano vincoli di integrità che si riferiscono a tutte le istanze del 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 Vincoli intrarelazionali Vincoli interni a una relazione: Soddisfacimento definito rispetto ad una singola relazione del base di dati Vincolo di tupla: esprime condizioni sui valori di ciascuna tupla indipendentamente 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 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 p q p AND q p q p OR q p NOT p F F F F F F F T F T F F T T T F T F F T F T T T T T T T Vincoli di tupla Per esempio: Vincolo di dominio (Voto 18) AND (Voto 30) Vincolo su più attributi (NOT(Lode = “lode”)) OR (Voto = 30) Pagamenti(Data, Importo, Ritenute, Netto) Netto = Importo - Ritenute Vincoli di chiave Superchiave/chiave: insieme di attributi usato per identificare univocamente le tuple di una relazione Superchiave: un insieme K di attributi è detto superchiave di una relazione r se r non contiene due tuple t1 e t2 con t1[K]=t2[K] K è una chiave di r se è una superchiave minimale di r Ogni chiave è una superchiave Vincoli di chiave {Matricola} è una chiave Matricola Cognome Nome Nascita Corso Table1 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 Vincoli di chiave {Cognome, Nome, Nascita} è una chiave Matricola Cognome Nome Nascita Corso Table1 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 Vincoli di chiave {Matricola, Corso} è una superchiave, ma non una chiave Matricola Cognome Nome Nascita Corso Table1 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 Vincoli di chiave {Nome, Corso} non è una superchiave Matricola Cognome Nome Nascita Corso Table1 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 Vincoli di chiave {Nome, Corso} è adesso una chiave È una chiave “per caso” Matricola Cognome Nome Nascita Corso Table2 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 Vincoli di chiave Ogni relazione r, con la schema r(X), ha una chiave Essendo un insieme, r è costituita da tupla diverse tra loro X è sicuramente superchiave di r X potrebbe essere una chiave di r Se X non sia una chiave di r, esiste un sottoinsieme Y di X tale che Y è una chiave Vincoli di chiave Il fatto che ogni schema di relazione abbia almeno una chiave garantisce Identificabilità univoca dei dati Definizione di corrispondenze tra dati contenuti in relazioni diverse Per esempio: nel base di dati Università Studente corrisponde a Matricola della relazione Studenti Corso corrisponde a Codice della relazione Corsi Chiave e valori nulli Tupla 1: ha entrambe le chiave incomplete ({Matricola}, {Cognome, Nome, Nascita}) Matricola Cognome Nome Nascita Corso 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 sono lo stesso individuo? Matricola Cognome Nome Nascita Corso 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ò avere valori nulli Identificata mediante sottolineatura ({Matricola}) Usata per stabilire corrispondenza tra tabelle Se nessun attributo della relazione può prendere il ruolo di chiave primaria se ne definisce uno aggiuntivo a tale scopo Vincoli interrelazionali Vincoli interrelazionali sono i vincoli che coinvolgono più relazioni del base di dati Per verificarli, 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 R1 ed una relazione R2 è soddisfatto se i valori su X di ciascuna tupla dell’istanza di R1 compaiono come valori della chiave (primaria) dell’istanza di R2 Vincoli di integrità referenziale Per esempio: le relazioni Studenti(Matricola,Cognome,Nome,DataNascita) Corsi(Codice,Titolo,Docente) Esami(Numero,Studente,Voto,Lode,Corso) Un numero può comparire in attributo Studente di una tupla di relazione Esami solo se compare come valore di Matricola in istanza di relazione Studenti Vincoli di integrità referenziale Se chiave di R2 è composta da un solo attributo B, X è composto di un solo attributo A Vincolo di integrità referenziale tra A in R1 e B in R2 è soddisfatto se, per ogni tupla t1 in R1 per cui t1[A] non è nullo, esiste una tupla t2 in R2 tale che t1[A] = t2[B] Vincoli di integrità referenziale K A R1 B … R2 Vincoli di integrità referenziale Se chiave di R2 contiene più attributo bisogna stabilire corrispondenza tra attributi di R1 e R2 Chiave di R2: {B1,…,Bp} X={A1,…,Ap} Vincolo di integrità referenziale tra {A1,…,Ap} in R1 e {B1,…,Bp} in R2 è soddisfatto se, per ogni tupla t1 in R1 per cui t1[{A1,…,Ap}] non contiene valori nulli, esiste una tupla t2 in R2 tale che t1[Ai] = t2[Bi] per 1ip Vincoli di integrità referenziale K Ai R1 Bi … R2 Vincoli di integrità referenziale Infrazioni Agenti Auto Codice Data 987554 630876 Agente Art Prov Numero 26/10/02 456 34 RM 2F7643 15/10/93 456 53 FI 4E5432 Matricola CF Cognome Nome 567 RSSM… Rossi Mario 638 NREP… Neri Piero Prov Numero Proprietario Indirizzo RM 1A2396 Verdi Piero Via Tigli MI 2F7643 Luci Gino Via Noci FI 4E5432 Bini Luca Via Po Vincoli di integrità referenziale Infrazioni Agenti Auto Codice Data 987554 630876 Agente Art Prov Numero 26/10/02 456 34 RM 2F7643 15/10/93 456 53 FI 4E5432 Matricola CF Cognome Nome 567 RSSM… Rossi Mario 638 NREP… Neri Piero Prov Numero Proprietario Indirizzo RM 1A2396 Verdi Piero Via Tigli MI 2F7643 Luci Gino Via Noci FI 4E5432 Bini Luca Via Po Vincoli di integrità referenziale Infrazioni Agenti Auto Codice Data 987554 630876 Agente Art Prov Numero 26/10/02 456 34 RM 2F7643 15/10/93 456 53 FI 4E5432 Matricola CF Cognome Nome 567 RSSM… Rossi Mario 638 NREP… Neri Piero Prov Numero Proprietario Indirizzo RM 1A2396 Verdi Piero Via Tigli MI 2F7643 Luci Gino Via Noci FI 4E5432 Bini Luca Via Po Vincoli di integrità referenziale Ordinamento di attributi in vincoli referenziali è essenziale perché non sempre la corrispondenza tra tabelle si può stabilire per nome di attributo Per esempio: Incidenti(Codice,Prov1,Numero1,Prov2,Numero2) Auto(Prov,Numero,Proprietario,Indirizzo) Prov1, Numero1 e Prov2, Numero2 sono diversi dai nomi della chiave primaria di Auto Vincoli di integrità referenziale Non tutti i DBMS permettono di definire chiavi primarie Definire esplicitamente attributi coinvolti in vincoli di integrità Algebra relazionale Accesso ai dati di un DB Aggiornamento di DB: funzione che, data istanza di DB, produce altra istanza di DB, sullo stesso schema Modifica, aggiunta, rimozione tuple Interrogazione a DB: funzione che, dato un DB, produce una relazione su un dato schema (non necessariamente uno degli schemi definiti nel DB) Accesso ai dati di un DB Aggiornamento e interrogazione vengono effettuati usando specifici linguaggi Per esempio: algebra relazionale Algebra relazionale Linguaggio procedurale di accesso a DB Si specificano operazioni complesse descrivendo procedimento da usare per ottenere soluzione Interrogazioni: espressioni complesse Algebra relazionale Algebra relazionale: basata su insieme di operatori Definiti su relazioni Producono relazioni come risultati Operatori Insiemistici: unione, intersezione, differenza Specifici: ridenominazione, selezione, proiezione, join Operatori insiemistici Relazioni: insiemi di tuple omogenee, cioè definite sigli stessi attributi Insiemi: ha senso usare operatori insiemistici Insiemi di tuple omogenee: usare operatori insiemistici solo su relazioni definite sugli stessi attributi Altrimenti, si ottengono insiemi di tuple disomogenee, che non rappresentano relazioni Unione di relazioni Date due relazioni r1(X) e r2(X) definite sullo stesso insieme di attributi X r1r2: relazione su X che contiene tuple appartenenti a r1 oppure a r2 oppure a entrambe Unione di relazioni Laureati Dirigenti Matricola Cognome Età Matricola Cognome Età 7274 Rossi 37 9297 Neri 56 7432 Neri 39 7432 Neri 39 9824 Verdi 38 9824 Verdi 38 Matricola Cognome Età 7274 Rossi 37 7432 Neri 39 9297 Neri 56 9824 Verdi 38 Laureati Dirigenti Differenza di relazioni Date due relazioni r1(X) e r2(X) definite sullo stesso insieme di attributi X r1-r2: relazione su X che contiene tuple appartenenti a r1 ma non a r2 Differenza di relazioni Laureati Dirigenti Matricola Cognome Età Matricola Cognome Età 7274 Rossi 37 9297 Neri 56 7432 Neri 39 7432 Neri 39 9824 Verdi 38 9824 Verdi 38 Matricola Cognome Età 7274 Rossi 37 Laureati - Dirigenti Intersezione di relazioni Date due relazioni r1(X) e r2(X) definite sullo stesso insieme di attributi X r1r2: relazione su X che contiene tuple appartenenti sia a r1 che a r2 Intersezione di relazioni Laureati Dirigenti Matricola Cognome Età Matricola Cognome Età 7274 Rossi 37 9297 Neri 56 7432 Neri 39 7432 Neri 39 9824 Verdi 38 9824 Verdi 38 Matricola Cognome Età 7432 Neri 39 9824 Verdi 38 Laureati Dirigenti