Informatica II – Basi di Dati (07/08) – Parte 2
Gianluca Torta
Dipartimento di Informatica dell’Università di Torino [email protected], 0116706782
2
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ì
…
3
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
4
Vincoli di integrità
Proprietà che devono essere soddisfatte dalle istanze corrette per un’applicazione
Sono predicati che associano ad ogni istanza il valore
vero
ofalso
Vero: istanza corretta (ammissibile, lecita)
Falso: istanza inconsistente
5
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
6
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 F F F F T F T F F T T T
p q p OR q F F F F T T T F T T T T
p NOT p
F T
T F
9
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
10
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
11
Vincoli di chiave
{Matricola} è una chiave
Matricola Cognome Nome Nascita Corso 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
Table1
12
Vincoli di chiave
{Cognome, Nome, Nascita} è una chiave
Matricola Cognome Nome Nascita Corso 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
Table1
13
{Matricola, Corso} è una superchiave, ma non una chiave
Matricola Cognome Nome Nascita Corso 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
Table1
14
{Nome, Corso} non è una superchiave
Matricola Cognome Nome Nascita Corso 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
Table1
Vincoli di chiave
{Nome, Corso} è adesso una chiave
È una chiave “per caso”
Matricola Cognome Nome Nascita Corso 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
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
17
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
18
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
19
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
20
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
21
Vincoli interrelazionali
sono i vincoli che coinvolgono più relazioni del base di datiPer verificarli, considerare istanze di più
relazioni
22
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]
25
Vincoli di integrità referenziale
K A B …
R1 R2
26
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 1≤i≤p
27
Vincoli di integrità referenziale
K Ai Bi …
R1 R2
28
Vincoli di integrità referenziale
Codice Data Agente Art Prov Numero
987554 26/10/02 456 34 RM 2F7643
630876 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
Infrazioni
Agenti
Auto
29
987554 26/10/02 456 34 RM 2F7643
630876 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
Infrazioni
Agenti
Auto
30
987554 26/10/02 456 34 RM 2F7643
630876 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
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à