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.

Vorresti pubblicare guest post per la tua azienda? Prova il servizio di link building di ➡️ Rankister.com ⬅️

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_idnomecognomedata_di_nascitadipartimento_id
1AldoFerdidando1983-01-15101
2AliceGimpolaro1985-03-22102

Tabella “Dipartimento”:

dipartimento_idnomesede
101MarketingNew York
102FinanzaLos 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_idnomecognomedata_di_nascita
1JohnSmith1980-01-15
2AliceJohnson1975-03-22

Tabella “Dipartimento”:

dipartimento_idnomesededirettore_id (chiave esterna)
101MarketingNew York1
102FinanzaLos Angeles2

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.

Il servizio professionale per inviare SMS aziendali: ➡️ prova SMSHosting ! ⬅️

Salvatore Capolupo

Ingegnere informatico dal 2006.