In questa lezione impari a
- distinguere le tre fasi della progettazione di un database
- riconoscere entità, attributi e identificatori in un testo
- classificare le associazioni in 1:1, 1:N e N:M
- disegnare e leggere un diagramma E/R
Prima di creare le tabelle bisogna progettarle, come si fa il progetto di una casa prima di posare i mattoni. Un database progettato male si porta dietro i problemi per sempre: dati ripetuti, informazioni impossibili da salvare, query complicatissime.
Le tre fasi della progettazione
| Fase | Domanda | Risultato |
|---|---|---|
| Concettuale | Quali informazioni servono e come sono collegate? | diagramma E/R (questa lezione) |
| Logica | Come le organizzo in tabelle? | schema logico: tabelle, chiavi primarie ed esterne (lezione 3) |
| Fisica | Come le creo nel DBMS scelto? | comandi SQL CREATE TABLE (lezione 4) |
La fase concettuale non dipende dal DBMS: un diagramma E/R vale per MySQL come per qualsiasi altro database relazionale. Si parte sempre dalla descrizione a parole del problema (all'Esame di Stato è la traccia):
La biblioteca della scuola vuole gestire i prestiti. Di ogni libro si conoscono ISBN, titolo, anno di pubblicazione, genere e numero di copie possedute. Ogni libro ha un autore, di cui si registrano nome, cognome e nazionalità; un autore può aver scritto più libri. Gli studenti (nome, cognome, classe, email) prendono in prestito i libri: per ogni prestito si registrano la data del prestito e quella della restituzione.
Entità
Un'entità è un insieme di oggetti dello stesso tipo, di cui vogliamo conservare le informazioni. Di solito nel testo è un sostantivo importante: libro, autore, studente.
Nel diagramma E/R l'entità si disegna come un rettangolo con il nome al singolare e in maiuscolo: LIBRO, AUTORE, STUDENTE.
Ogni singolo oggetto (il libro 1984, lo studente Marco Bianchi) è un'istanza o occorrenza dell'entità.
Attributi e identificatore
Gli attributi sono le caratteristiche di un'entità: titolo, anno, genere per il libro. Si disegnano come piccoli cerchi (o ovali) collegati al rettangolo.
L'identificatore (o chiave) è l'attributo, o l'insieme di attributi, che distingue ogni istanza da tutte le altre. Si disegna con il cerchio pieno o sottolineato.
- Per il libro c'è un identificatore naturale: l'ISBN, che è diverso per ogni libro pubblicato.
- Per lo studente nome + cognome non basta (due Marco Rossi possono esistere). L'email sarebbe unica, ma può cambiare. Si aggiunge allora un codice (
id) senza significato, un numero progressivo: è la scelta più comune. - Nel nostro progetto, per uniformità, usiamo
idcome identificatore anche per il libro; l'ISBN resta un attributo che non si può ripetere (nella lezione 4 diventeràUNIQUE).
Gli attributi possono essere:
- obbligatori o facoltativi: il titolo c'è sempre, la nazionalità dell'autore può mancare;
- semplici o composti: l'indirizzo si può dividere in via, CAP, città;
- a valore singolo o multivalore: uno studente ha più numeri di telefono. Gli attributi multivalore nelle tabelle non si possono salvare così come sono: lo vedremo nella prossima lezione.
Associazioni
Un'associazione (o relazione) è un legame tra entità. Nel testo di solito è un verbo: un autore scrive un libro, uno studente prende in prestito un libro. Si disegna come un rombo collegato alle entità.
Le cardinalità
Per ogni associazione ci si fanno due domande, una per verso. Per AUTORE – scrive – LIBRO:
- Un autore quanti libri può scrivere? Molti (nel nostro archivio almeno uno).
- Un libro da quanti autori è scritto? Uno (nella nostra biblioteca semplifichiamo così).
Il risultato è un'associazione uno a molti, che si scrive 1:N. I tre tipi sono:
| Tipo | Significato | Esempio |
|---|---|---|
| 1:1 | a un elemento di A ne corrisponde al massimo uno di B, e viceversa | STUDENTE – ha – BADGE (un tesserino per studente) |
| 1:N | a un elemento di A ne corrispondono molti di B, ma a ogni B corrisponde un solo A | AUTORE – scrive – LIBRO; CLASSE – contiene – STUDENTE |
| N:M | molti A con molti B | STUDENTE – prende in prestito – LIBRO; DOCENTE – insegna in – CLASSE |
Trucco. Per decidere tra 1:N e N:M fai sempre le due domande, partendo da un singolo elemento: "uno studente quanti libri prende?" → molti. "Un libro a quanti studenti va, nel tempo?" → molti. Entrambe le risposte sono "molti": l'associazione è N:M.
Si indica anche la partecipazione: obbligatoria se ogni istanza deve partecipare (ogni libro deve avere un autore) oppure facoltativa (uno studente può non aver mai preso libri). Nella notazione più usata a scuola si scrivono vicino all'entità le cardinalità minima e massima, per esempio (1,1) oppure (0,N).
Le associazioni possono avere attributi
La data del prestito non è una caratteristica del libro (lo stesso libro viene prestato tante volte, in date diverse) e nemmeno dello studente. È una caratteristica del prestito, cioè dell'associazione. Per questo gli attributi data_prestito e data_restituzione si attaccano al rombo.
Il diagramma della biblioteca
Leggilo così:
- un autore scrive uno o più libri; ogni libro è scritto da un solo autore → 1:N;
- uno studente può prendere in prestito zero o più libri; un libro può essere prestato a zero o più studenti → N:M, con le due date come attributi.
I vincoli che il diagramma non mostra
Alcune regole non si possono disegnare: si scrivono a parte, come vincoli di integrità o ipotesi aggiuntive. All'esame vanno sempre dichiarate:
- l'anno di pubblicazione non può essere nel futuro;
- non si possono prestare più copie di un libro di quelle che la biblioteca possiede;
- la data di restituzione, se c'è, non può essere precedente a quella del prestito;
- la durata massima del prestito è di 30 giorni.
Ipotesi aggiuntive. Quando la traccia non dice qualcosa (un libro può avere più autori?) tu scegli e lo scrivi: "Ipotesi: ogni libro ha un solo autore." Una scelta dichiarata è sempre accettata; una scelta non dichiarata sembra un errore.
Errori frequenti
- Un'entità per un solo valore:
GENEREcome entità ha senso solo se del genere ci interessano altre informazioni (una descrizione, lo scaffale). Se è solo una parola, basta un attributo del libro. - Il nome dell'applicazione come entità:
BIBLIOTECAnon è un'entità se ce n'è una sola: è il database stesso. - Attributi messi nel posto sbagliato: la data del prestito messa nel LIBRO permette di salvare una sola data per libro.
- Identificatori dimenticati: ogni entità ne deve avere uno.
Esercizi
Esercizio 1 – Che tipo di associazione? Per ciascuna coppia indica se l'associazione è 1:1, 1:N o N:M. Fai sempre le due domande.
- NAZIONE – capitale – CITTÀ
- SQUADRA – tesserato – GIOCATORE (in una stagione)
- STUDENTE – frequenta – CORSO POMERIDIANO
- CLIENTE – effettua – ORDINE
- FILM – recita – ATTORE
Mostra la soluzione
- 1:1: una nazione ha una sola capitale, una città è capitale di al massimo una nazione.
- 1:N: una squadra ha molti giocatori, un giocatore in una stagione è tesserato con una sola squadra.
- N:M: uno studente frequenta più corsi, un corso ha più studenti.
- 1:N: un cliente fa molti ordini, un ordine appartiene a un solo cliente.
- N:M: un film ha molti attori e un attore recita in molti film. Il ruolo (il personaggio) è un attributo dell'associazione.
Esercizio 2 – Le gite scolastiche. Disegna (su carta o con draw.io) il diagramma E/R per questo testo, con identificatori, cardinalità e ipotesi aggiuntive.
La scuola organizza gite. Di ogni gita si registrano meta, data di partenza, numero di giorni e costo a persona. A ogni gita partecipano più classi e ogni classe può partecipare a più gite nell'anno. Ogni gita ha un docente referente; un docente può essere referente di più gite. Delle classi interessano anno, sezione e numero di studenti; dei docenti nome, cognome e materia.
Mostra la soluzione
Entità e attributi (identificatore in grassetto):
- GITA (id, meta, data_partenza, giorni, costo)
- CLASSE (id, anno, sezione, numero_studenti). In alternativa l'identificatore può essere la coppia (anno, sezione).
- DOCENTE (id, nome, cognome, materia)
Associazioni:
- CLASSE – partecipa – GITA: N:M (una classe a più gite, una gita con più classi). Un attributo possibile dell'associazione: il numero di studenti che partecipano davvero.
- DOCENTE – è referente di – GITA: 1:N (un docente per più gite, ogni gita un solo referente). La partecipazione della gita è obbligatoria (1,1), quella del docente facoltativa (0,N).
Ipotesi aggiuntive: il costo è a persona e comprende il viaggio; una gita ha un solo referente; ogni gita parte almeno con una classe.
Esercizio 3 – Trova l'errore. Un compagno ha disegnato la biblioteca così: entità LIBRO (isbn, titolo, anno, autore, data_prestito, studente). Indica almeno tre problemi.
Mostra la soluzione
- L'autore è un attributo: non si possono salvare la nazionalità dell'autore né i suoi altri libri senza ripetere i dati. Va trasformato in un'entità AUTORE con un'associazione 1:N.
- Data del prestito e studente nel libro: ogni libro può avere un solo prestito, per sempre, e lo storico dei prestiti si perde. Il prestito è un'associazione N:M tra STUDENTE e LIBRO, con le date come attributi.
- Lo studente è solo un nome: non si possono salvare classe ed email, e due studenti con lo stesso nome si confondono. Serve l'entità STUDENTE con il suo identificatore.
- Manca la data di restituzione: senza di essa non si sa se il libro è tornato.