Ristrutturazione dello schema ER e traduzione nel modello relazionale
In questa pagina 3
Lo schema ER (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 →, Relazioni ricorsive, cardinalità e vincoli di integrità nel modello ERI vincoli di integrità di uno schema ER sono di quattro tipi: di cardinalità sulle relazioni, di cardinalità sugli attributi, di identificazione sulle entità e vincoli esterni. La cardinalità (min,max) di un'entità e con ruolo u in una relazione r dice a quante istanze di r partecipa ogni istanza di e: min 0 = partecipazione opzionale, min 1 = obbligatoria, max 1 = al più una volta, max N = molte; le relazioni binarie si classificano per i massimi in uno-a-uno, uno-a-molti, molti-a-molti. I vincoli di cardinalità non permettono di violare la semantica estensionale (una coppia compare una volta sola). Una relazione ricorsiva collega un'entità con se stessa e richiede i ruoli (Predecessore e Successore, Sorgente e Destinazione): con le cardinalità si ottengono catene, alberi e grafi diretti; grafi non diretti, assenza di cicli e di cappi richiedono vincoli esterni; i multigrafi si modellano con una terza entità (etichetta, colore). Gli attributi hanno cardinalità (1,1) di default, (0,1) se opzionali, (x,N) se multivalore.Relazioni ricorsive, cardinalità e vincoli di integrità nel modello ER →, Generalizzazioni e identificatori nel modello ERUna relazione IS-A tra superclasse e sottoclasse significa che ogni istanza della sottoclasse è anche istanza della superclasse (inclusione tra estensioni: riflessiva e transitiva, non simmetrica); vale il principio di ereditarietà: attributi, relazioni e vincoli della superclasse sono propri anche delle sottoclassi e non si ridisegnano. Una generalizzazione è una superclasse con più sottoclassi secondo un solo criterio, con due vincoli: completezza (ogni istanza della superclasse è in almeno una sottoclasse) e disgiunzione (in al più una); si hanno quattro combinazioni, e partizione se completa e disgiunta. Su una stessa entità possono esserci più generalizzazioni indipendenti con criteri diversi. L'identificatore di un'entità è un insieme di proprietà che identifica ogni istanza: interno se formato da soli attributi (1,1) dell'entità, esterno se contiene ruoli di relazioni (1,1) con altre entità (con eventuali attributi), come per l'entità debole; ogni entità ne ha almeno uno.Generalizzazioni e identificatori nel modello ER →) non si traduce direttamente in tabelle: tra i due modelli c'è un disadattamento (impedance mismatch).
| Modello ER | Modello relazionale |
|---|---|
| entità | relazione (tabella) |
| relazione | relazione più vincolo di integrità referenziale |
| attributo semplice | attributo |
| attributo multivalore o composto | non esiste |
| cardinalità | vincoli di integrità |
| generalizzazione | non esiste |
| identificatore | superchiave, chiave, chiave primaria |
Per questo la progettazione logica ha due passi:
- Ristrutturazione dello schema ER: si tolgono i costrutti non esprimibili e si scelgono gli identificatori principali (qui servono decisioni del progettista, in base al carico);
- Traduzione nello schema relazionale: quasi automatica, perché non richiede (quasi) scelte. Lo schema prodotto non contiene ridondanze, se non quelle aggiunte e motivate.
I concetti del modello di arrivo (chiave, chiave esterna) sono in Modello relazionale - relazioni, chiavi e vincoliIl modello relazionale (Codd, IBM, 1970) rappresenta i dati con relazioni, cioè tabelle, ed è basato su valori: i legami tra relazioni sono confronti di valori, non puntatori, il che garantisce indipendenza dalle strutture fisiche, portabilità e bidirezionalità. Una relazione matematica è un sottoinsieme del prodotto cartesiano di n domini (insieme di n-uple ordinate, senza duplicati né ordine tra le righe); una relazione del modello è un insieme di tuple, funzioni dagli attributi ai valori del dominio, quindi non posizionale. Si distinguono schema di relazione e istanza, schema di base di dati (relazioni più vincoli) e istanza. NULL è un valore speciale fuori da ogni dominio. I vincoli di integrità sono intra-relazionali (di dominio, di tupla, di chiave) e inter-relazionali (integrità referenziale, con la chiave esterna). Superchiave: insieme di attributi che non ripete mai i valori; chiave: superchiave minimale; ogni relazione ne ha almeno una (tutti gli attributi); la chiave primaria è una chiave scelta, senza NULL.Modello relazionale - relazioni, chiavi e vincoli →; qui si usa la notazione con la chiave primaria sottolineata (nei blocchi di codice: * indica la chiave primaria e FK le chiavi esterne).
Passo 1: ristrutturazione
I passi, in ordine: (1) analisi delle ridondanze; (2) eliminazione degli attributi multivalore; (3) degli attributi composti; (4) delle IS-A e delle generalizzazioni; (5) scelta degli identificatori principali; (6) specifica dei vincoli esterni; (7) partizionamento e accorpamento di entità.
1. Analisi delle ridondanze
Per la minimalità non si deve rappresentare la stessa proprietà due volte. La ridondanza intensionale (nello schema) si elimina con trasformazioni che conservano l'informazione; quella estensionale (nelle istanze) si tiene solo se motivata da prestazioni.
a) Attributi comuni a una generalizzazione. Un attributo comune alle sottoclassi di si sposta in .
b) Identificatori non minimali. Un identificatore formato da un sovrainsieme di un altro identificatore si sostituisce con quello minimale.
c) Cicli di relazioni. Può esserci ridondanza quando una relazione tra due entità ha lo stesso contenuto informativo di una catena che collega le stesse coppie. Non ogni ciclo è ridondante: dipende dal significato. Controlli sintattici: un ciclo di uno-a-uno dà un uno-a-uno, un ciclo di uno-a-molti dà uno-a-molti; uno-a-molti seguito da molti-a-uno può dare qualunque tipo (la cardinalità non si conosce a priori).
Esempio 1 (ridondante). Vincolo esterno: ogni Persona proviene dalla Regione a cui appartiene la Città di nascita. Relazioni: Nasce (Persona (1,1), Città (0,N)), Appartiene (Città (1,1), Regione (1,N)), ProvieneDa (Persona (1,1), Regione (0,N)). ProvieneDa è derivabile: Persona → Città → Regione. Si elimina ProvieneDa (rispetta il vincolo, anzi lo rimuove, e lo schema si spiega da solo). Eliminare invece Appartiene sarebbe sbagliato: da Persona-Regione non si saprebbe più in quale città nasce.
Esempio 2 (ridondante, ma solo una relazione si può togliere). Vincolo: ogni Impiegato collabora con il Direttore che dirige il Dipartimento dove lavora. Relazioni: Collabora (Impiegato (1,1), Direttore (1,N)), Dirige (Direttore (1,N), Dipartimento (1,1)), Lavora (Impiegato (1,1), Dipartimento (1,N)): un impiegato ha un dipartimento, un dipartimento ha un direttore, quindi il direttore dell'impiegato è determinato. Si può eliminare Collabora (rispetta il vincolo, conserva l'informazione, si spiega da solo). Eliminare Dirige o Lavora conserva il vincolo ma non l'informazione (non si sa più in quale dipartimento lavora l'impiegato, o quale dipartimento dirige il direttore).
d) Attributi derivati. Un attributo è derivato se si calcola da altri attributi della stessa entità (Età da DataNascita; StipendioNetto = Lordo - Tasse) o di altre entità (Abitanti di Città = conteggio delle Vive). Per Età, oltre all'aggiornamento è sempre potenzialmente incoerente perché cambia nel tempo: meglio tenere DataNascita. Per ogni derivato si decide se tenerlo, con il carico della base di dati. Pro: non serve calcolarlo, meno accessi in lettura. Contro: serve un vincolo esterno per la coerenza, elaborazione per mantenerlo allineato, più spazio. Se si tiene, va documentato.
Il carico di una base di dati
Il carico è dato da due informazioni: il volume dei dati (numero medio di istanze di ogni entità e relazione, cardinalità media di partecipazione) e le operazioni, ciascuna con il proprio schema di operazione (la parte di schema coinvolta) e uno schema di navigazione, con le lettere I, U, D, R (insert, update, delete, read). Le operazioni sono online (interattive, più importanti) o batch (in background, per esempio di notte). Si compilano due tabelle:
- tabella delle frequenze: operazione, descrizione, frequenza, tipo (online/batch);
- tabella degli accessi/volume: costrutti coinvolti, tipo (entità o relazione), numero di accessi, tipo di accesso (lettura R o scrittura W), accessi medi totali, con peso 1 per le letture e 2 per le scritture.
Esempio: Abitanti in Città. Persona(CF, nome), Città(nome, indirizzo, Abitanti), Vive (Persona (1,1), Città (0,N)). Volumi: Persona 1 000 000, Città 200, Vive 1 000 000 (cioè in media 5 000 abitanti per città). Operazioni: O1 inserire una persona con la sua città (500 al giorno, online); O2 stampare i dati di una città, abitanti compresi (2 al giorno, online); O3 riassumere tutte le città (1 all'anno, batch, qui trascurata).
| Con la ridondanza (Abitanti) | Accessi |
|---|---|
| O1: Persona (W), Vive (W), Città (R per leggere Abitanti), Città (W per aggiornarlo) | , , , → 3500 |
| O2: Città (R) | → 2 |
| Senza la ridondanza | Accessi |
|---|---|
| O1: Persona (W), Vive (W) | → 2000 |
| O2: Città (R), Vive (R per 5000 persone) | e → 10002 |
Totale al giorno: 3502 con la ridondanza contro 12002 senza. Considerando solo O1 conviene toglierla, ma con O2 (o con entrambe) conviene tenerla, aggiungendo un vincolo esterno: all'inserimento o cancellazione di Persona e Vive si aggiorna Abitanti.
2. Eliminazione degli attributi multivalore
Il modello relazionale non ammette attributi multivalore. Per un'entità con attributo multivalore di cardinalità : si crea una nuova entità (con l'attributo come identificatore) e una relazione binaria tra e con ed . La cardinalità (1,N) di dice che interessano solo i valori di effettivamente usati.
Esempio: Impiegato con Telefono (0,N) → Impiegato, Telefono(numero), relazione Possiede (Impiegato (0,N), Telefono (1,N)). Se l'attributo è condiviso da più entità , , si usa la stessa e un vincolo esterno per la cardinalità (1,N) di sull'unione delle due relazioni.
Per un attributo multivalore di una relazione, la relazione si trasforma prima in entità (con relazioni (1,1) verso le entità originali), poi si procede come sopra.
3. Eliminazione degli attributi composti
Se cardinalità (1,1): si sostituiscono con i componenti. Esempio: Indirizzo(Via, Numero, CAP) → tre attributi di Persona. Se (0,1): oppure si appiattiscono con vincolo esterno ("le tre componenti di Matrimonio sono definite tutte o nessuna"), oppure si crea una nuova entità con i componenti e una relazione (0,1) verso l'originale. Per un composto di una relazione si trasforma prima la relazione in entità.
4. Eliminazione di IS-A e generalizzazioni
IS-A. Una relazione IS-A diventa una nuova relazione binaria ISA-E-F con ed , e riceve un identificatore esterno dalla relazione.
Implicazione estensionale: prima era lo stesso oggetto in Persona e in Studente; dopo, Persona e Studente sono entità distinte, con istanze diverse collegate dalla relazione: .
Generalizzazione. Tre opzioni (le prime due vanno bene per ogni tipo di generalizzazione, la terza solo per quelle complete e disgiunte).
| Opzione | Descrizione | Pro | Contro |
|---|---|---|---|
| 1. Relazioni | tante IS-A quante sono le sottoclassi: relazioni ISA--; vincoli esterni per disgiunzione (ogni istanza di in al più una) e completezza (in almeno una) | rappresenta tutte le combinazioni, flessibile, efficiente se le operazioni sono locali a padre o figli | schema più complesso, più relazioni, più scritture (nuova istanza anche nel padre e nella relazione) |
| 2. Accorpamento nel padre | le sottoclassi si fondono nella superclasse; gli attributi dei figli diventano opzionali (0,1); un attributo discriminante A (tipo) distingue le sottoclassi: (1,1) se completa e disgiunta, minimo 0 se non completa, massimo N se non disgiunta | semplice, tutte le combinazioni | NULL sistematici; le operazioni sui soli figli leggono tutto il padre |
| 3. Accorpamento nei figli | la superclasse si fonde in ogni sottoclasse, che riceve attributi e relazioni del padre | ideale se il padre non serve alla logica; efficiente se le operazioni sono locali ai figli | solo per generalizzazioni complete e disgiunte; duplica gli attributi del padre; più relazioni |
Esempi (Persona ⊃ {Femmina, Maschio}, completa e disgiunta, Femmina ha Gravidanza, Maschio ha ServizioMilitare):
- Opzione 2: Persona(Cognome, Età, Gravidanza (0,1), ServizioMilitare (0,1), Sesso (1,1)), con vincolo esterno: Gravidanza solo se Sesso=F, ServizioMilitare solo se Sesso=M. Per Persona ⊃ {Studente, Docente} non completa e disgiunta: attributo Ruolo (0,1), con vincoli per DataIscrizione e DataAssunzione. Per non disgiunta il massimo di Ruolo è N.
- Opzione 3: Femmina(Cognome, Età, Gravidanza), Maschio(Cognome, Età, ServizioMilitare).
Come si sceglie. Si dividono le operazioni in due insiemi. Insieme A: operazioni che usano gli attributi del padre (vanno bene opzioni 1 e 2). Insieme B: operazioni che usano gli attributi del padre insieme a quelli di una sottoclasse (vanno bene l'opzione 3). Se B prevale, opzione 3 (se la generalizzazione è completa e disgiunta). Se prevale A: opzione 2 se gli attributi del padre e del figlio si usano insieme, opzione 1 se si usano separatamente.
5. Scelta degli identificatori principali
Per ogni entità si sceglie un identificatore principale tra i possibili. Criteri: minimalità (meno attributi), preferire gli identificatori interni, usare quello più impiegato nelle operazioni importanti. Gli identificatori principali esterni creano un grafo di identificazione (un nodo per entità, un arco da a se partecipa alla relazione che identifica ): un ciclo nel grafo (entità che si identificano a vicenda) è un errore e si elimina scegliendo un altro identificatore o introducendo un codice ad hoc.
6. Vincoli esterni
Si riformulano tutti i vincoli esterni sullo schema trasformato e si aggiungono quelli nati dalla trasformazione: vincoli per attributi multivalore, per i composti opzionali, di disgiunzione e completezza, per gli identificatori non principali (ora rimossi).
7. Partizionamento e accorpamento
- Partizionamento orizzontale: si divide in con gli stessi attributi ma istanze diverse, scelte con un predicato (per esempio ordini aperti e ordini chiusi). Verticale: si divide in entità con gli stessi oggetti ma gruppi di attributi diversi, ciascuna con il proprio identificatore, collegate da relazioni uno-a-uno (1,1)-(1,1) (per mettere insieme gli attributi usati insieme). Servono per le prestazioni.
- Accorpamento: più entità si fondono in una, con tutti gli attributi e le relazioni (è l'opposto della trasformazione che toglie gli attributi opzionali). Esempio: Ordine e NotaDiConsegna con relazione (0,1)-(1,1): si fonde, con gli attributi di consegna opzionali. Ha l'effetto collaterale di perdere la de-duplicazione.
Passo 2: traduzione nel modello relazionale
Si parte dallo schema ER ristrutturato e dai vincoli, e si ottiene uno schema relazionale con i suoi vincoli. Passi: (1) entità → relazioni con i loro vincoli; (2) relazioni → relazioni (o fuse in un'entità); (3) vincoli esterni. Lo schema ottenuto di solito è già di buona qualità (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 →), si può controllare la normalizzazione.
Entità
Ogni entità diventa una relazione :
- attributi: tutti quelli di , più quelli che derivano dalla fusione di relazioni (per ogni relazione fusa: gli attributi di e gli identificatori delle altre entità di );
- chiave primaria: l'identificatore principale di (anche esterno);
- identificatore esterno: la chiave primaria include gli attributi che vengono dalla chiave dell'entità collegata, che sono anche chiave esterna.
Esempio (Studente identificato da Badge e da Università): Studente(Badge, Università, Nome, Cognome) con FK Università → Università(Nome, Città). Per l'entità debole Copia: Copia(Libro, Inventario) con FK Libro → Libro(ISBN).
Relazioni
Una relazione non fusa diventa una relazione con gli attributi di più le chiavi primarie delle entità coinvolte (che sono chiavi esterne). Chiave primaria: se nessuna entità partecipa con massimo 1, è l'insieme di tutte le chiavi delle entità; altrimenti ogni entità con massimo 1 ha una chiave e si sceglie una delle candidate.
| Tipo | Relazione ER | Risultato relazionale |
|---|---|---|
| Molti-a-molti (binaria) | — — | , , con due FK |
| Ternaria (tutte N) | tutte | con tre FK |
| Uno-a-molti, partecipazione obbligatoria | — — | con FK ; (fusione dal lato max 1) |
| Uno-a-molti, partecipazione opzionale | — — | o come sopra con ammesso NULL, o relazione a parte : conviene a parte se i NULL sarebbero sistematici |
| Uno-a-uno, obbligatoria da entrambi i lati | — — | con FK, oppure il simmetrico con ; si può anche fondere tutto in una sola relazione |
| Uno-a-uno, opzionale da un lato | — — | la chiave di va in (il lato obbligatorio): , nessun NULL |
| Uno-a-uno, opzionale da entrambi | — — | FK in uno dei due con NULL, oppure relazione a parte (con chiave candidata) |
| Entità con identificatore esterno | — — | , |
Regola breve: nelle uno-a-molti la chiave esterna (il riferimento) va nella relazione del lato con massimo 1 (quello che ha al più un partner) e punta all'altro; nelle uno-a-uno, dove entrambi i lati hanno massimo 1, si sceglie il lato con partecipazione obbligatoria. Si fonde (cioè non si crea una tabella) quando la partecipazione di quel lato è obbligatoria; con partecipazione opzionale si valuta se i NULL sono sistematici.
Ternarie con un lato (1,1). Si ripete il pattern uno-a-molti: la relazione che ha il lato con massimo 1 riceve le chiavi di e e gli attributi della relazione (). Se la partecipazione di è (0,1) la fusione è comunque corretta (i NULL non sono sistematici se non c'è più partecipazione obbligatoria).
Relazioni ricorsive. Vale la stessa regola con ruoli distinti come nomi di colonna diversi. Esempio albero: Nodo(ID, A), relazione Arco con Sorgente (0,N), Destinazione (0,1) e attributo B. Il lato con massimo 1 è la Destinazione: ogni nodo ha al più un arco entrante, quindi la sua riga contiene il nodo di origine: Nodo(ID, A, B, sorgente) con FK sorgente → Nodo(ID). La chiave esterna sta nella colonna dell'entità che partecipa con max 1 e il valore è l'altro partecipante: scrivere Nodo(ID, A, destinazione, B) direbbe il contrario, cioè che ogni nodo ha un solo arco uscente. Per un grafo con (0,N) su entrambi i ruoli: Arco(sorgente, destinazione, B) con due FK verso Nodo; con un'etichetta (multigrafo) la chiave include anche l'etichetta.
Attributi di relazione e eventi ripetuti. Una relazione molti-a-molti non può contenere due istanze con la stessa coppia : violerebbe la chiave primaria. Se serve ripetere, la relazione diventa un'entità con un proprio ID, , e non è più una relazione concettualmente: se si vuole davvero, si modella così già nell'ER.
Esempio completo: la biblioteca
Dallo schema della nota ER (Libro, Autore, Copia, Iscritto, Prestito; Scrive N:N, Possiede 1:N con Copia identificata dal libro, Riguarda e Effettua uno-a-molti da Prestito):
Libro(*ISBN, titolo)
Autore(*id, nome)
Scrive(*autore, *libro) FK autore -> Autore(id); FK libro -> Libro(ISBN)
Copia(*libro, *inventario) FK libro -> Libro(ISBN)
Iscritto(*codice, nome, indirizzo)
Prestito(*id, data_inizio, libro, inventario, iscritto)
FK (libro, inventario) -> Copia(libro, inventario); FK iscritto -> Iscritto(codice)Il prestito ha (1,1) verso Copia e verso Iscritto: fusione con due chiavi esterne, una composta perché Copia ha chiave composta. In SQL:
CREATE TABLE Libro (ISBN TEXT PRIMARY KEY, titolo TEXT NOT NULL);
CREATE TABLE Autore (id INTEGER PRIMARY KEY, nome TEXT NOT NULL);
CREATE TABLE Scrive (autore INT REFERENCES Autore(id), libro TEXT REFERENCES Libro(ISBN),
PRIMARY KEY (autore, libro));
CREATE TABLE Copia (libro TEXT REFERENCES Libro(ISBN), inventario INT,
PRIMARY KEY (libro, inventario));
CREATE TABLE Iscritto(codice INTEGER PRIMARY KEY, nome TEXT NOT NULL, indirizzo TEXT);
CREATE TABLE Prestito(id INTEGER PRIMARY KEY, data_inizio DATE NOT NULL,
libro TEXT NOT NULL, inventario INT NOT NULL,
iscritto INT NOT NULL REFERENCES Iscritto(codice),
FOREIGN KEY (libro, inventario) REFERENCES Copia(libro, inventario));(Gli attributi NOT NULL rendono operativa la cardinalità minima 1; la massima 1 è la fusione.)
Mappare i vincoli
- Cardinalità minime: NOT NULL sulle chiavi esterne dei lati (1,1); le relazioni N:N non le esprimono, servono vincoli esterni.
- Vincoli esterni, di disgiunzione e completezza: espressi con tuple constraint, CHECK, trigger o a livello applicativo, e documentati.
- Domini e identificatori non principali: chiavi candidate con UNIQUE.
Domande d'esame
1. Come si traduce una relazione uno-a-molti con partecipazione opzionale del lato uno? Traccia. Due modi: fusione nella relazione del lato con massimo 1 con chiave esterna ammessa NULL, oppure relazione a parte con le due chiavi. La seconda evita NULL sistematici (utile se pochi hanno un partner).
2. Come si elimina una generalizzazione e come si sceglie l'opzione? Traccia. Tre opzioni: relazioni IS-A con vincoli esterni, accorpamento nel padre con attributo discriminante (NULL sistematici), accorpamento nei figli (solo completa e disgiunta). Si guarda quali operazioni usano gli attributi del padre insieme a quelli dei figli.
3. Un attributo derivato conviene sempre eliminarlo? Traccia. No: si confrontano gli accessi totali delle operazioni con e senza (peso 2 alle scritture). Nell'esempio Abitanti 3502 contro 12002 al giorno: si tiene, documentato, con vincolo esterno per l'aggiornamento.
Versione ripasso
- Due passi: ristrutturare l'ER (togliere ciò che il relazionale non ha) e tradurre (quasi automatico).
- Ridondanze: attributi comuni alla generalizzazione verso il padre; identificatori minimali; cicli di relazioni (dipende dal significato, controlli su cardinalità); derivati (Età da DataNascita: meglio la data). Si decide con il carico: volume dati, frequenze, accessi (R peso 1, W peso 2). Esempio Abitanti: 3502 con, 12002 senza → si tiene e si documenta.
- Multivalore → nuova entità + relazione — . Composti (1,1) → componenti; (0,1) → componenti con vincolo "tutti o nessuno" o nuova entità.
- IS-A → relazione con sottoclasse (1,1) e padre (0,1). Generalizzazione: opz. 1 relazioni (più vincoli), opz. 2 nel padre con discriminante (NULL), opz. 3 nei figli (solo completa+disgiunta). Scelta: operazioni sul padre+figlio insieme → 3 o 2; separate → 1.
- Identificatore principale: minimale, interno, il più usato; niente cicli di identificazione esterna.
- Mapping: entità → relazione con PK = identificatore principale. N:N e ternaria → relazione con le chiavi di tutti (). 1:N → FK nel lato max 1 (fusione); se il lato è opzionale NULL oppure relazione a parte. 1:1 → FK nel lato obbligatorio (nessun NULL). Identificatore esterno → PK composta con FK.
- Eventi ripetuti: coppia ripetuta viola la PK; serve un ID (e quindi un'entità).
- Errori tipici: FK dal lato sbagliato; eliminare il ciclo sbagliato (perdendo informazione); dimenticare il vincolo di completezza; cardinalità minime non tradotte in NOT NULL; PK di una N:N con una sola chiave.
- Collegamenti: Modello relazionale - relazioni, chiavi e vincoliIl modello relazionale (Codd, IBM, 1970) rappresenta i dati con relazioni, cioè tabelle, ed è basato su valori: i legami tra relazioni sono confronti di valori, non puntatori, il che garantisce indipendenza dalle strutture fisiche, portabilità e bidirezionalità. Una relazione matematica è un sottoinsieme del prodotto cartesiano di n domini (insieme di n-uple ordinate, senza duplicati né ordine tra le righe); una relazione del modello è un insieme di tuple, funzioni dagli attributi ai valori del dominio, quindi non posizionale. Si distinguono schema di relazione e istanza, schema di base di dati (relazioni più vincoli) e istanza. NULL è un valore speciale fuori da ogni dominio. I vincoli di integrità sono intra-relazionali (di dominio, di tupla, di chiave) e inter-relazionali (integrità referenziale, con la chiave esterna). Superchiave: insieme di attributi che non ripete mai i valori; chiave: superchiave minimale; ogni relazione ne ha almeno una (tutti gli attributi); la chiave primaria è una chiave scelta, senza NULL.Modello relazionale - relazioni, chiavi e vincoli →, 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 →, Esercizio - Traduzione da ER a relazionale - dodici casi (esercizi di traduzione del corso). Passi della ristrutturazione: (1) ridondanze, (2) multivalore, (3) composti, (4) IS-A e generalizzazioni, (5) identificatori principali, (6) vincoli esterni, (7) partizionamento e accorpamento.
| Passo | Trasformazione |
|---|---|
| attributo multivalore di , cardinalità | nuova entità con come identificatore; — |
| composto (1,1) | componenti come attributi (Indirizzo → Via, Numero, CAP) |
| composto (0,1) | componenti con vincolo "tutti o nessuno", oppure nuova entità in (0,1) |
| IS-A | relazione ISA-E-F con (1,1) e (0,1); identificata dall'esterno |
| generalizzazione | opz. 1 relazioni; opz. 2 nel padre con attributo discriminante (tipo); opz. 3 nei figli (solo completa e disgiunta) |
- Ciclo non ridondante o ridondante: Nasce Persona (1,1)-Città, Appartiene Città (1,1)-Regione, ProvieneDa Persona-Regione → si toglie ProvieneDa (rispetta il vincolo e conserva l'informazione); togliere Appartiene perde l'informazione. Impiegato-Direttore-Dipartimento: si può togliere solo Collabora.
- Carico (esempio Abitanti): volumi Persona 1 000 000, Città 200, Vive 1 000 000; O1 inserimento 500/giorno, O2 stampa città 2/giorno. Con ridondanza O1 = 3500 e O2 = 2, totale 3502; senza O1 = 2000 e O2 = 10 002, totale 12 002. Letture peso 1, scritture peso 2.
- Scelta della generalizzazione: operazioni su padre+figlio insieme → opz. 3 (se completa e disgiunta) o 2; operazioni su padre o figli separati → opz. 1.
- Identificatore principale: minimale, interno, usato nelle operazioni importanti; ciclo di identificazione esterna = errore (nuovo codice).
- Partizionamento: orizzontale (stessi attributi, istanze diverse) o verticale (stessi oggetti, attributi diversi, relazioni 1:1). Accorpamento: fonde entità, perde la de-duplicazione.
Mappatura relazionale (riepilogo).
| ER | Relazionale |
|---|---|
| — — | , , |
| ternaria tutta N | |
| 1:N, lato max 1 obbligatorio | con FK |
| 1:N, lato max 1 opzionale | FK con NULL, oppure a parte |
| 1:1 obbligatoria | FK in uno dei due lati (con UNIQUE), oppure fusione |
| 1:1 opzionale da un lato | chiave nel lato obbligatorio, nessun NULL |
| 1:1 opzionale da entrambi | FK nullable o relazione a parte |
| identificatore esterno | , PK composta con FK |
- Ricorsiva ad albero (Sorgente (0,N), Destinazione (0,1)):
Nodo(id, a, b, sorgente)con FKsorgente → Nodo, NULL per la radice;Nodo(id, a, destinazione, b)direbbe il contrario. Grafo (0,N)-(0,N):Arco(sorgente, destinazione, b). - Biblioteca:
Libro(*ISBN, titolo),Autore(*id, nome),Scrive(*autore, *libro),Copia(*libro, *inventario),Iscritto(*codice, ...),Prestito(*id, data_inizio, libro, inventario, iscritto)con FK composta (libro, inventario) → Copia. - Vincoli: minimi 1 → NOT NULL sulle FK dei lati (1,1); gli altri con CHECK, UNIQUE, trigger; vincoli di disgiunzione e completezza documentati.
- Ridondanze da ricordare: attributo comune alle sottoclassi → nel padre; identificatore non minimale → quello minimale; ciclo di relazioni dipende dal significato (controlli: ciclo di 1:1 dà 1:1, ciclo di 1:N dà 1:N, 1:N seguito da N:1 qualsiasi tipo).
- Derivati: pro (nessun calcolo, meno accessi in lettura); contro (vincolo di coerenza, elaborazione di allineamento, spazio); se si tengono vanno documentati. Età da DataNascita è sempre potenzialmente incoerente.
- Carico: volume dati (istanze medie, cardinalità medie), schema di operazione e di navigazione (I, U, D, R), operazioni online (più importanti) e batch, tabella delle frequenze e tabella degli accessi.
Esercizi su questo argomento
- Esercizio - Interrogazioni sulla compagnia di treni (tema d'esame 17 giugno 2013)
- Esercizio - Laboratorio sul social network - DDL, DML e interrogazioni (laboratorio)
- Esercizio - Normalizzazione di libri, autori e case editrici (esercizio di normalizzazione)
- Esercizio - Progettazione ER e schema relazionale del social network (esercizio social e laboratorio)
- Esercizio - Progettazione ER e schema relazionale della compagnia di treni (tema d'esame 17 giugno 2013)
- Esercizio - Progettazione ER e schema relazionale della mensa universitaria (tema d'esame 13 febbraio 2012)
- Esercizio - Progettazione ER e schema relazionale della pizzeria (tema d'esame 30 giugno 2025)
- Esercizio - Progettazione ER e schema relazionale delle formule scientifiche (tema d'esame 22 gennaio 2025)
- Esercizio - Progettazione ER e schema relazionale dello stabilimento balneare (tema d'esame 18 giugno 2012)
- Esercizio - Progettazione ER e schema relazionale dello streaming di musica (tema d'esame 12 febbraio 2024)
- Esercizio - Traduzione da ER a relazionale - dodici casi (esercizi di traduzione del corso)
Teoria collegata
- Ciclo di vita di un sistema informativo e analisi dei requisiti
- Dipendenze funzionali e normalizzazione - BCNF e terza forma normale
- Generalizzazioni e identificatori nel modello ER
- Modello entità-relazione - entità, relazioni e attributi
- Modello relazionale - relazioni, chiavi e vincoli
- Organizzazione fisica dei dati e accesso programmatico alle basi di dati
- Relazioni ricorsive, cardinalità e vincoli di integrità nel modello ER
- SQL - definizione dei dati e vincoli