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 (non necessariamente distinti), il prodotto cartesiano è l'insieme delle -uple ordinate
(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; sono i domini, è il grado, il numero di -uple è la cardinalità.
Proprietà: è un insieme, quindi non c'è ordine tra le -uple e le -uple sono tutte distinte; ogni -upla è ordinata, quindi il valore -esimo appartiene al dominio -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 un insieme di attributi e la funzione che associa a ogni attributo il suo dominio. Una tupla su è una funzione che associa a ogni un valore (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 è un insieme di tuple su .
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 con un insieme di attributi, ; due schemi coincidono se hanno lo stesso insieme di attributi con gli stessi domini. Un'istanza di è un insieme di tuple su ; la cardinalità è 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 ). 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 ) 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 di attributi di è una superchiave se in ogni istanza non esistono due tuple diverse con gli stessi valori su : .
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).
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 di una relazione e una relazione richiede che i valori di in compaiano come valori della chiave primaria di . è una chiave esterna (foreign key) di verso .
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:
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 -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
Relazione matematica: (Operazioni tra insiemiUnione, intersezione, differenza, complementare e prodotto cartesiano, con le leggi di De Morgan e il legame con la logica.Operazioni tra insiemi →); insieme di -uple ordinate, senza duplicati né ordine tra le righe; posizionale.
Relazione del modello: insieme di tuple (funzioni attributo → valore, 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 →); non posizionale. Schema vs istanza; schema di DB = relazioni + vincoli; istanza corretta se rispetta tutti i vincoli.
NULL: fuori da ogni dominio; non definito, non disponibile, sconosciuto.
Approccio basato su valori: riferimenti = valori uguali; indipendenza dal fisico, portabilità, bidirezionalità.
Vincoli: intra (dominio, tupla, chiave) e inter (integrità referenziale). Tupla: es. Voto=30 OR NOT Lode.
Superchiave: ; chiave = superchiave minimale; sempre esiste (tutti gli attributi). Primaria: una sola, senza NULL, la più piccola; altre = candidate (UNIQUE).
Chiave esterna: valori nella chiave primaria della relazione referenziata. Aggiornamenti: inserimento (riferimento mancante), modifica e cancellazione (NO ACTION, CASCADE, SET NULL, SET DEFAULT).
Errori tipici: dire che una superchiave è sempre minimale; ammettere NULL nella PK; dimenticare che una chiave esterna può puntare solo a una chiave; confondere ordine delle colonne e struttura posizionale.
Collegamenti: 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 →, 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 →. Definizioni da ricordare.
Relazione matematica: , grado , cardinalità = numero di -uple; insieme, quindi senza duplicati né ordine; posizionale (esempio: partite con casa, ospite, punti casa, punti ospite).
Relazione del modello: insieme di tuple con ; attributi con nome, ordine delle colonne irrilevante.
Schema , istanza , schema di DB = relazioni + vincoli, istanza di DB corretta se rispetta tutti i vincoli.
NULL: fuori dal dominio (); non definito, non disponibile, sconosciuto; i valori sentinella non si usano (non esistono sempre, cambiano, sono diversi per dominio).
Basato su valori: Esame(studente, voto, corso) rimanda a Studente per la matricola e a Corso per il codice; vantaggi: indipendenza dal fisico, portabilità, bidirezionalità.
| 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 : ; 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
- Algebra relazionale - operatori di base e join
- Architettura delle applicazioni web - browser, server web e livelli
- Basi di dati e DBMS - architettura ANSI-SPARC e indipendenza dei dati
- Dipendenze funzionali e normalizzazione - BCNF e terza forma normale
- Ristrutturazione dello schema ER e traduzione nel modello relazionale
- SQL - definizione dei dati e vincoli
- Web semantico - RDF, linked open data e SPARQL