SQL: l’associazione 1 ad 1 nel modello E/R

Il modello Entità-Relazione (E-R) è una rappresentazione grafica utilizzata nella progettazione di basi di dati per descrivere le relazioni tra le diverse entità. Le entità rappresentano oggetti del mondo reale, mentre le relazioni rappresentano le connessioni tra queste entità. Nell’ambito della progettazione dei database, è importante definire correttamente le associazioni tra le entità, inclusi i tipi di associazioni come “1 a 1”, “1 a molti” e “molti a molti”. L’associazione 1 ad 1 è la più semplice perchè prevede una relazione biunivoca tra due entità: nel nostro esempio, abbiamo un direttore che afferisce ad uno ed un solo dipartimento, e dipartimento di cui fa capo un solo diretto. Per modellare l’entità “direttore” e l’entità “dipartimento” con una relazione uno-a-uno, possiamo utilizzare il modello E/R (Entità/Relazione) e il modello logico. Iniziamo con il modello E/R: Modello E/R (Entità/Relazione) Nel modello E/R, puoi rappresentare l’entità “direttore” e l’entità “dipartimento” con i seguenti elementi:
  1. Entità “Direttore”:
    • Attributi: direttore_id (chiave primaria), nome, cognome, data_di_nascita, ecc.
  2. Entità “Dipartimento”:
    • Attributi: dipartimento_id (chiave primaria), nome, sede, ecc.
Per stabilire la relazione uno-a-uno tra il direttore e il dipartimento, puoi aggiungere un attributo “dipartimento_id” all’entità “Direttore” come chiave esterna che farà riferimento alla chiave primaria “dipartimento_id” dell’entità “Dipartimento”. Questo attributo “dipartimento_id” rappresenta il dipartimento di cui il direttore è responsabile. Modello Logico Nel modello logico, puoi rappresentare queste due entità come tabelle in un database relazionale: Tabella “Direttore”
  • Colonne: direttore_id (chiave primaria), nome, cognome, data_di_nascita, dipartimento_id* (chiave esterna).
Tabella “Dipartimento”:
  • Colonne: dipartimento_id (chiave primaria), nome, sede.
Ora, tanto per capire le differenze, vediamo cosa cambia quando mettiamo l’attributo “dipartimento_id” da una parte o dall’altra, anche perchè scopriremo che in questo caso si tratta di scelte equivalenti.

Scenario 1: dipartimento_id come chiave esterna di Direttore

In questo caso, ogni direttore è associato a un unico dipartimento tramite la chiave esterna “dipartimento_id“. Un dipartimento può pertanto essere associato a un solo direttore. Esempio di dati: Tabella “Direttore”
direttore_id nome cognome data_di_nascita dipartimento_id
1 Aldo Ferdidando 1983-01-15 101
2 Alice Gimpolaro 1985-03-22 102
Tabella “Dipartimento”:
dipartimento_id nome sede
101 Marketing New York
102 Finanza Los Angeles
Query SQL possibili:
  1. Seleziona il direttore di un dipartimento specifico:
sql SELECT * FROM Direttore WHERE dipartimento_id = 101;
  1. Cercare il dipartimento di un direttore specifico:
sql SELECT Dipartimento.nome, Dipartimento.sede FROM Direttore JOIN Dipartimento ON Direttore.dipartimento_id = Dipartimento.dipartimento_id WHERE Direttore.direttore_id = 1;

Scenario 2: dipartimento_id come chiave esterna di Dipartimento

In questo caso, ogni dipartimento è associato a un unico direttore tramite la chiave esterna “dipartimento_id”. Un direttore può essere associato a un solo dipartimento. Esempio di dati: Tabella “Direttore”:
direttore_id nome cognome data_di_nascita
1 John Smith 1980-01-15
2 Alice Johnson 1975-03-22
Tabella “Dipartimento”:
dipartimento_id nome sede direttore_id (chiave esterna)
101 Marketing New York 1
102 Finanza Los Angeles 2
Query SQL possibili:
  1. Seleziona il direttore di un dipartimento specifico:
sql SELECT Direttore.* FROM Dipartimento JOIN Direttore ON Dipartimento.direttore_id = Direttore.direttore_id WHERE Dipartimento.dipartimento_id = 101;
  1. Trova il dipartimento di un direttore specifico:
sql SELECT Dipartimento.nome, Dipartimento.sede FROM Direttore JOIN Dipartimento ON Direttore.direttore_id = Dipartimento.direttore_id WHERE Direttore.direttore_id = 1; In entrambi gli scenari, la relazione uno-a-uno è rappresentata correttamente, ma la scelta di dove mettere l’attributo “dipartimento_id” determina in modo significativo come vengono effettuate le query e quali entità hanno la responsabilità dell’associazione.

👇 Contenuti da non perdere 👇



Questo sito esiste da 4849 giorni (13 anni), e contiene 6606 articoli (circa 5.284.800 parole in tutto), con la bellezza di 44 tool gratuiti.