Sei sulla pagina 1di 18

Vincoli di integrità

Michele Caceffo - L. S. “Tron” - A.S. 2014/2015


Situazione iniziale
Fiumi(NomeF, Portata, Km)
Regioni(NomeR, Capoluogo, NumeroAbitanti)
Attraversa(NomeF, NomeR)
Cosa succede se cambio...
il capoluogo di una regione? la portata di un fiume?
E se...
...cambio il nome di un fiume o di una regione?
Vincoli
Un vincolo di integrità dei dati è una proprietà che deve essere soddisfatta
dalle istanze di una base di dati.
Ogni vincolo può essere visto come un predicato che può assumere il valore
vero o falso: l'istanza soddisfa il vincolo, se il predicato assume il valore vero,
viceversa se assume valore falso.
Vincoli intrarelazionali Vincoli interrelazionali

I vincoli intrarelazionali (interni I vincoli interrelazionali sono


ad una tabella) sono proprietà proprietà che coinvolgono più
che valgono per una sola tabella. tabelle.

○ Chiave primaria ● Vincolo di chiave esterna


○ Not Null ● Vincolo di integrità
○ Unique referenziale
○ Check
Integrità referenziale
Il vincolo di integrità referenziale è una parte del vincolo di chiave esterna.

Gli attributi di una data tabella (figlia/slave) possono assumere soltanto dei
valori specificati in un'altra tabella (padre/master).
Cosa succede se...
… cambio un campo chiave nella tabella padre? Come si comportano i figli?
Vincoli di integrità referenziale
I vincoli di integrità referenziale garantiscono che le relazioni tra i dati nel
database sono sempre consistenti (ossia che nelle relazioni non ci sono dati che
si contraddicono tra di loro)

I vincoli sono due, introdotti dalla Ognuno di essi può assumere


parola chiave ON: quattro valori possibili
● ON UPDATE
● ON DELETE ● CASCADE
● SET NULL
● NO ACTION
● SET DEFAULT
CASCADE

Cascade è il più semplice: ● ON UPDATE CASCADE


applica l’operazione attuata sul
padre ai figli. Ogni campo chiave esterna del
figlio in cui compare il padre
viene aggiornato.

● ON DELETE CASCADE

Ogni record figlio dove compare


il padre viene eliminato
Nell’esempio...
● UPDATE:
○ Modificare il nome di un fiume o di una regione lo cambia anche in
tutte le occorrenze nella tabella Attraversa

● DELETE:
○ Eliminare un fiume dalla tabella Fiumi elimina anche tutte i suoi
abbinamenti nella tabella Attraversa (non elimina le regioni)
SET NULL

Set NULL imposta a NULL i ● ON UPDATE SET NULL


campi porta a NULL tutti i campi
corrispondenti a chiavi
modificate nella tabella
padre
● ON DELETE SET NULL
imposta a NULL tutti i
campi corrispondenti a
chiavi appartenenti a record
cancellati nella tabella padre
Nell’esempio...
● UPDATE:
○ Modificare il nome di un fiume o di una regione porta a NULL tutte
le occorrenze di quel fiume nella tabella Attraversa

● DELETE:
○ Eliminare un fiume dalla tabella Fiumi porta a NULL tutti gli
abbinamenti nella tabella Attraversa
NO ACTION

NO ACTION impedisce ● ON UPDATE NO ACTION


l’esecuzione dell’operazione blocca l’operazione di
nella tabella padre, quando la aggiornamento nella tabella
riga alterata ha un padre, quando vi siano dei
corrispondente nella tabella record associati nella tabella
figlia figlia
● ON DELETE NO ACTION
blocca l’eliminazione nella
tabella padre, quando vi
siano dei record associati
nella tabella figlia
Nell’esempio...
● UPDATE:
○ Non è possibile modificare il nome di un fiume o di una regione
finchè esiste una occorrenza di esso nella tabella Attraversa

● DELETE:
○ Non è possibile eliminare un fiume o una regione se esistono
abbinamenti nella tabella Attraversa
SET DEFAULT

SET DEFAULT è intuitiva: ● ON UPDATE SET


imposta il valore predefinito per DEFAULT
il campo
● ON DELETE SET
Non è implementata nello stesso DEFAULT
modo in tutti i DBMS: MySQL,
ad esempio, non la gestisce in
InnoDB, mentre MyISAM non
possiede le chiavi esterne
Nell’esempio...
● UPDATE:
○ Modificare il nome di un fiume o di una regione quando esiste una
occorrenza di esso nella tabella Attraversa lo porta al valore di
DEFAULT impostato nella creazione della tabella

● DELETE:
○ Eliminare un fiume o una regione se esistono abbinamenti nella
tabella Attraversa porta questi al valore di DEFAULT impostato
nella creazione della tabella
Grazie, buone vacanze e in bocca al lupo!

Potrebbero piacerti anche