Salta al contenuto
Note per Studenti Modello relazionale - relazioni, chiavi e vincoli

Modello relazionale - relazioni, chiavi e vincoli

In questa pagina 4

Il modello relazionale fu proposto da E. F. Codd (IBM, 1970) per ottenere l'indipendenza dei dati (Basi di dati e DBMS - architettura ANSI-SPARC e indipendenza dei datiUna base di dati (database, DB) è una collezione integrata e persistente di dati correlati che rappresenta un frammento di mondo reale (mini-mondo); un DBMS è il software generico che permette di definirla (schema, nel catalogo come metadati), costruirla e manipolarla (interrogazioni e aggiornamenti). Rispetto a una raccolta di file il DBMS riduce ridondanza e incoerenza, condivide i dati tra applicazioni con controllo della concorrenza (isolamento, atomicità), garantisce durabilità, sicurezza (autenticazione e autorizzazione) ed efficienza. L'architettura ANSI/SPARC ha tre livelli: schema esterno (una vista per applicazione), logico (rappresentazione integrata, indipendente dalla memorizzazione), interno (strutture fisiche); da qui l'indipendenza fisica (cambia l'interno senza toccare logico ed esterno) e logica (cambia il logico senza toccare le applicazioni). Attori: sviluppatori del DBMS, DBA, progettisti di basi di dati e di applicazioni, utenti parametrici e occasionali.Basi di dati e DBMS - architettura ANSI-SPARC e indipendenza dei dati →). Si basa sulla nozione matematica di relazione, ma con differenze importanti, e le relazioni si rappresentano naturalmente come tabelle. È il modello logico su cui si traduce lo schema ER (Ristrutturazione dello schema ER e traduzione nel modello relazionaleLa progettazione logica ha due passi. 1) Ristrutturazione dello schema ER, per togliere i costrutti che il modello relazionale non esprime: analisi delle ridondanze (attributi derivati e cicli di relazioni, decisa con volume dei dati e carico, tabelle di frequenza e accessi), eliminazione degli attributi multivalore (nuova entità), composti (appiattiti o nuova entità), delle IS-A (relazione con partecipazione (1,1) dalla sottoclasse) e delle generalizzazioni (opzione 1 relazioni, 2 accorpamento nel padre con attributo discriminante, 3 accorpamento nei figli, solo se completa e disgiunta), scelta degli identificatori principali (niente cicli di identificazione esterna), riscrittura dei vincoli esterni, partizionamento e accorpamento di entità. 2) Traduzione quasi automatica nel modello relazionale: ogni entità diventa una relazione con la chiave primaria data dall'identificatore principale (anche esterno); una relazione molti-a-molti diventa una relazione con le chiavi delle entità; una uno-a-molti con partecipazione obbligatoria si fonde con l'entità dal lato max 1 con una chiave esterna; con partecipazione opzionale si fonde (NULL) o si crea una relazione a parte; le uno-a-uno si fondono sul lato con partecipazione obbligatoria; le ternarie seguono la stessa logica con le chiavi di tutte le entità.Ristrutturazione dello schema ER e traduzione nel modello relazionale →).

Relazione matematica

Dati gli insiemi D1,…,DnD_1,\dots,D_n (non necessariamente distinti), il prodotto cartesiano è l'insieme delle nn-uple ordinate

D1×⋯×Dn={(d1,…,dn)∣di∈Di}D_1\times\dots\times D_n=\{(d_1,\dots,d_n)\mid d_i\in D_i\}

(Operazioni tra insiemiUnione, intersezione, differenza, complementare e prodotto cartesiano, con le leggi di De Morgan e il legame con la logica.Operazioni tra insiemi →). Una relazione (matematica) è un sottoinsieme del prodotto cartesiano; D1,…,DnD_1,\dots,D_n sono i domini, nn è il grado, il numero di nn-uple è la cardinalità.

Proprietà: è un insieme, quindi non c'è ordine tra le nn-uple e le nn-uple sono tutte distinte; ogni nn-upla è ordinata, quindi il valore ii-esimo appartiene al dominio ii-esimo (struttura posizionale).

Esempio: partite di calcio, con prodotto di quattro domini (squadra casa, squadra ospite, punti casa, punti ospite): (Juventus, Milan, 3, 1), (Lazio, Roma, 2, 3), (Inter, Juventus, 3, 2), (Milan, Lazio, 2, 0). Il ruolo di ogni dominio dipende dalla posizione: il primo e il terzo sono nome e punti della squadra di casa.

Relazione nel modello relazionale

Nel modello relazionale i componenti si chiamano attributi, ognuno con un nome e un dominio, e l'ordine degli attributi non conta: la struttura non è posizionale.

Definizione (tupla e relazione). Sia X={A1,…,An}X=\{A_1,\dots,A_n\} un insieme di attributi e dom\mathrm{dom} la funzione che associa a ogni attributo il suo dominio. Una tupla su XX è una funzione tt che associa a ogni Ai∈XA_i\in X un valore t[Ai]∈dom(Ai)t[A_i]\in\mathrm{dom}(A_i) (Funzioni - definizione, dominio e graficoUna funzione associa a ogni elemento del dominio un solo valore: dominio naturale, grafico, immagine, antimmagine e metodo grafico.Funzioni - definizione, dominio e grafico →). Una relazione su XX è un insieme di tuple su XX.

Come tabella: attributi = colonne (intestazioni), tuple = righe.

Casa Ospite PuntiCasa PuntiOspite
Juventus Milan 3 1
Lazio Roma 2 3
Inter Juventus 3 2
Milan Lazio 2 0

Domini: stringa per Casa e Ospite, intero per i punti (di solito non indicati nella tabella). Scambiare le colonne, o le righe, non cambia la relazione; due righe uguali non possono esserci.

Definizione (schema di relazione). Uno schema di relazione è un nome RR con un insieme di attributi, R(A1,…,An)R(A_1,\dots,A_n); due schemi coincidono se hanno lo stesso insieme di attributi con gli stessi domini. Un'istanza rr di RR è un insieme di tuple su RR; la cardinalità ∣r∣|r| è il numero di tuple. Un schema di base di dati è un insieme di schemi di relazione insieme ai vincoli di integrità (ne fanno parte integrante); un'istanza di base di dati è un insieme di istanze, una per schema, che rispetta tutti i vincoli. Si dicono corrette solo le istanze che rispettano tutti i vincoli.

Valore NULL

Quando per un attributo non si può associare un valore appropriato si usa NULL, valore speciale che non appartiene a nessun dominio (si estende il dominio a D∪{NULL}D\cup\{\text{NULL}\}). Non si usano valori "inutilizzati" (non esistono sempre, cambiano nel tempo, vanno trattati come casi speciali nelle applicazioni, cambiano tra domini). Significati: non definito (titolo di laurea per chi non ha frequentato), non disponibile (età non nota), sconosciuto (telefono di casa: forse c'è). Vedi Modello entità-relazione - entità, relazioni e attributiIl modello entità-relazione (ER, Chen 1976) descrive il mini-mondo con entità (classi di oggetti autonomi), relazioni (associazioni tra due o più entità, di grado 2 o più) e attributi (proprietà locali di entità o relazioni su un dominio; NULL per l'informazione mancante, con tre significati; attributi composti). Ogni costrutto ha una semantica estensionale: un'entità è un insieme di oggetti (senza ripetizioni né ordine), una relazione è un sottoinsieme del prodotto cartesiano delle entità coinvolte (quindi la stessa coppia non può comparire due volte: per gli eventi ripetuti si introduce una nuova entità, come Sessione o Fattura), un attributo è una funzione totale dalle istanze a un dominio. Si sceglie un'entità invece di un attributo quando il concetto ha istanze con proprietà proprie o collegamenti; mai trasformare un'entità in relazione. Lo schema ER è documentato dal dizionario dei dati (entità, relazioni, attributi, vincoli esterni).Modello entità-relazione - entità, relazioni e attributi →.

Esempio: Persona(Nome, Cognome, Età, Laurea, TelefonoCasa): (Mario, Rossi, 32, NULL, 0498271234), (Giovanni, Verdi, NULL, Diritto, 0498275678), (Marta, Bruni, 28, Medicina, NULL).

L'approccio basato su valori

I riferimenti tra dati di relazioni diverse sono realizzati con valori uguali, non con puntatori. Esempio: la relazione Esame contiene la matricola dello studente e il codice del corso; per sapere il nome dello studente si confronta la matricola con quella di Studente.

Studente:

matricola nome cognome nascita
6554 Mario Rossi 5/12/1982
8765 Paolo Neri 7/4/1979
9283 Luisa Verdi 22/7/1983
3456 Marta Rossi 14/2/1981

Esame (studente e corso sono valori che rimandano alle altre due relazioni):

studente voto corso
3456 30 03
3456 24 02
9283 28 01
6554 26 01

Corso:

codice titolo docente
01 Analisi Bianchi
02 Chimica Bruni
03 Fisica Rossi

Vantaggi: indipendenza dalle strutture fisiche, che possono cambiare; portabilità dei dati tra sistemi; i valori permettono la bidirezionalità (con un puntatore si naviga in un verso solo, e si dipende dall'indirizzo). Svantaggio: rappresentare i collegamenti con valori ripetuti richiede di eseguire join per ricostruirli, e rispetto ai modelli gerarchico e a rete (a puntatori) si perde la navigazione diretta.

Vincoli di integrità

Ogni vincolo è un predicato booleano che a ogni istanza di base di dati associa vero o falso; si ammettono solo le istanze che li rispettano tutti.

Classificazione.

  • Intra-relazionali (su una sola relazione): vincoli di dominio, di tupla, di chiave.
  • Inter-relazionali (su due o più relazioni): vincolo di integrità referenziale.

Esempio di istanza con violazioni (Studente, Esame, Corso):

Studente:

matricola nome cognome
6554 Mario Rossi
6554 Paolo Neri
9283 Luisa Verdi
3456 Marta Rossi

Esame:

studente voto lode corso
3456 30 TRUE 03
3456 32 NULL 02
9283 28 TRUE 01
7899 26 NULL 01

Corso:

codice titolo docente
01 Analisi Bianchi
02 NULL NULL
03 Fisica Rossi

Violazioni (in grassetto): matricola 6554 ripetuta (chiave); voto 32 fuori da [0,30] (dominio); lode TRUE con voto 28 (tupla: la lode è ammessa solo se il voto è 30); titolo e docente NULL (dominio: non devono essere NULL); studente 7899 inesistente (integrità referenziale).

Vincoli di dominio e di tupla

Un vincolo di tupla è una formula booleana (con AND, OR, NOT e confronti tra valori o espressioni sugli attributi) che ogni tupla deve soddisfare. Un vincolo di dominio riguarda un solo attributo ed è un caso particolare. Esempio: (Voto =30=30) OR NOT (Lode == TRUE).

Voto = 30 Lode = TRUE (Voto = 30) OR NOT (Lode = TRUE)
vero vero vero
falso vero falso
vero falso vero
falso falso vero

Superchiavi e chiavi

Definizione (superchiave). Un insieme KK di attributi di RR è una superchiave se in ogni istanza rr non esistono due tuple diverse con gli stessi valori su KK: ∀t1,t2∈r, t1≠t2⇒t1[K]≠t2[K]\forall t_1,t_2\in r,\ t_1\ne t_2\Rightarrow t_1[K]\ne t_2[K].

Definizione (chiave). Una chiave è una superchiave minimale: togliendo un attributo, non è più superchiave.

Dato che una relazione è un insieme (nessuna tupla due volte), esiste sempre almeno una superchiave: tutti gli attributi. Una relazione può avere più chiavi (le chiavi candidate), ognuna con un vincolo di chiave. Una è scelta come chiave primaria, le altre sono secondarie.

Esempio: Studente(Matricola, Nome, Cognome, Nascita, Corso):

Matricola Nome Cognome Nascita Corso
6554 Mario Rossi 05/12/1982 Analisi
8765 Mario Neri 07/04/1979 Fisica
3219 Mario Rossi 07/04/1979 Chimica
9283 Piero Neri 22/07/1983 Analisi
3456 Piero Rossi 05/12/1982 Chimica
  • {Matricola} è una chiave (superchiave minimale di un solo attributo);
  • {Nome, Cognome, Nascita} è una chiave (nessun sottoinsieme è superchiave: Mario Rossi compare due volte, con nascite diverse);
  • {Nome, Cognome, Nascita, Corso} è una superchiave ma non una chiave (togliendo Corso resta superchiave).

Un attributo primo appartiene ad almeno una chiave candidata, non primo altrimenti (Dipendenze funzionali e normalizzazione - BCNF e terza forma normaleLa qualità di uno schema relazionale si misura con quattro linee guida informali: semantica chiara degli attributi (una relazione per un'entità o associazione), niente ridondanza che causi anomalie di inserimento, cancellazione e modifica, pochi NULL sistematici, nessuna tupla spuria dopo un join (si unisce solo su chiavi primarie ed esterne). La normalizzazione verifica queste proprietà con le dipendenze funzionali X -> Y (se due tuple coincidono su X coincidono su Y), usando le regole di Armstrong (riflessiva, aumento, transitiva) e la chiusura X+ per trovare chiavi. 1NF: attributi atomici (si tolgono multivalore e relazioni annidate). 2NF: ogni attributo non primo dipende completamente da ogni chiave (niente dipendenze parziali). 3NF: nessun attributo non primo dipende transitivamente da una chiave; equivalentemente per ogni X -> A, X è superchiave oppure A è primo. BCNF: per ogni X -> A non banale X è superchiave. Si ottiene scomponendo senza perdere informazione (join senza perdita se l'intersezione determina una delle parti); la 3NF si ottiene sempre mantenendo le dipendenze, la BCNF a volte le perde. Un buon schema ER tradotto è già normalizzato.Dipendenze funzionali e normalizzazione - BCNF e terza forma normale →).

Chiavi e NULL

Con valori NULL negli attributi della chiave non si identificano le tuple e non si possono creare collegamenti da e verso altre relazioni. Perciò gli attributi della chiave primaria sono sottolineati e non ammettono NULL; se ne definisce una sola per relazione, di solito quella con meno attributi. Le altre chiavi (in SQL UNIQUE) possono ammettere NULL, con la conseguenza che non identificano le tuple dove sono NULL.

Chiave esterna e integrità referenziale

Definizione (integrità referenziale). Un vincolo di integrità referenziale tra un insieme di attributi XX di una relazione R1R_1 e una relazione R2R_2 richiede che i valori di XX in R1R_1 compaiano come valori della chiave primaria di R2R_2. XX è una chiave esterna (foreign key) di R1R_1 verso R2R_2.

Il vincolo si controlla confrontando valori. Nell'esempio: Esame.studente è chiave esterna verso Studente.matricola, e Esame.corso verso Corso.codice; la tupla con studente 7899 viola il vincolo perché nessuno studente ha matricola 7899. Un valore NULL in una chiave esterna è ammesso se l'attributo lo ammette (nessun collegamento).

In SQL:

sql
CREATE TABLE Studente (matricola INTEGER PRIMARY KEY, nome TEXT NOT NULL, cognome TEXT NOT NULL);
CREATE TABLE Corso    (codice INTEGER PRIMARY KEY, titolo TEXT NOT NULL, docente TEXT NOT NULL);
CREATE TABLE Esame    (studente INTEGER NOT NULL REFERENCES Studente(matricola),
                       corso    INTEGER NOT NULL REFERENCES Corso(codice),
                       voto     INTEGER NOT NULL CHECK (voto BETWEEN 0 AND 30),
                       lode     BOOLEAN NOT NULL DEFAULT FALSE,
                       CHECK (NOT lode OR voto = 30),
                       PRIMARY KEY (studente, corso));

Violazioni dovute agli aggiornamenti

Le operazioni di aggiornamento (inserimento, modifica, cancellazione) possono violare i vincoli: il DBMS rifiuta l'operazione oppure applica un'azione compensativa.

Operazione Può violare Soluzione
inserimento dominio, tupla, chiave; integrità referenziale (la chiave esterna non esiste) rifiuto; o prima si inserisce la tupla referenziata
modifica di una chiave primaria referenziata integrità referenziale delle tuple che la usano rifiuto; oppure ON UPDATE CASCADE propaga il nuovo valore
cancellazione di una tupla referenziata integrità referenziale rifiuto (NO ACTION); ON DELETE CASCADE cancella le tuple referenzianti; SET NULL o SET DEFAULT mettono NULL o il default nella chiave esterna

Esempio: cancellare lo studente 3456 con CASCADE cancella anche i suoi esami; con SET NULL gli esami restano con studente NULL (ammesso solo se la colonna lo permette); senza azioni l'operazione è rifiutata.

Domande d'esame

1. Differenza tra relazione matematica e relazione del modello relazionale. Traccia. La matematica è un sottoinsieme del prodotto cartesiano di domini, con nn-uple ordinate (struttura posizionale); la relazionale è un insieme di tuple, funzioni da attributi a valori, con attributi con nome: l'ordine delle colonne non conta. In entrambe nessun ordine tra le righe e niente duplicati.

2. Definire superchiave e chiave; fare un esempio di superchiave che non è chiave. Traccia. Superchiave: nessuna coppia di tuple diverse con gli stessi valori su K. Chiave: minimale. Esempio: (Matricola, Nome) è superchiave ma non chiave perché Matricola basta.

3. Perché la chiave primaria non ammette NULL? Come si controlla l'integrità referenziale? Traccia. Con NULL la tupla non è identificabile e non si può collegare. Chiave esterna: i suoi valori devono comparire nella chiave primaria della relazione referenziata; se si cancella una tupla referenziata si usa NO ACTION, CASCADE, SET NULL o SET DEFAULT.

Versione ripasso

Vincolo Classe Esempio
dominio intra Voto in [0,30]; Titolo e Docente non NULL
tupla intra (Voto = 30) OR NOT (Lode = TRUE)
chiave intra non due studenti con la stessa matricola
integrità referenziale inter lo studente 7899 deve esistere
Voto = 30 Lode (Voto=30) OR NOT Lode
vero vero vero
falso vero falso
vero falso vero
falso falso vero
  • Superchiave KK: ∀t1≠t2: t1[K]≠t2[K]\forall t_1\ne t_2:\ t_1[K]\ne t_2[K]; chiave = minimale; la superchiave "tutti gli attributi" esiste sempre. Esempio Studente(Matricola, Nome, Cognome, Nascita, Corso): {Matricola} chiave; {Nome, Cognome, Nascita} chiave; {Nome, Cognome, Nascita, Corso} superchiave non chiave.
  • PK: una sola, senza NULL (con NULL non si identifica né si collega), di solito la più corta; le altre chiavi sono candidate (UNIQUE).
  • FK: valori nella PK della relazione referenziata. In SQL: REFERENCES Studente(matricola), CHECK (voto BETWEEN 0 AND 30), CHECK (NOT lode OR voto = 30).
  • Aggiornamenti: inserimento (riferimento mancante → rifiuto), modifica della PK referenziata (ON UPDATE CASCADE), cancellazione (NO ACTION, CASCADE, SET NULL, SET DEFAULT).

Esercizi su questo argomento

Teoria collegata