560 likes | 689 Views
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)
E N D
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
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
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 No: matricola usata per correlare relazione
Informazione incompleta e valori nulli Esami No: informazione inutile Corsi
Informazione incompleta e valori nulli Esami No: informazione inutile Corsi
Informazione incompleta e valori nulli Esami Corsi No: codice usato Per correlare relazione
Informazione incompleta e valori nulli Esami Corsi 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
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 Table1
Vincoli di chiave • {Cognome, Nome, Nascita} è una chiave Table1
Vincoli di chiave • {Matricola, Corso} è una superchiave, ma non una chiave Table1
Vincoli di chiave • {Nome, Corso} non è una superchiave Table1
Vincoli di chiave • {Nome, Corso} è adesso una chiave • È una chiave “per caso” Table2
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})
Chiave e valori nulli • Tuple 3 e 4: hanno una chiave completamente specificata, ma sono lo stesso individuo?
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 • 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 Infrazioni Agenti Auto
Vincoli di integrità referenziale Infrazioni Agenti Auto
Vincoli di integrità referenziale Infrazioni Agenti Auto
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à
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