Skip to main content

Che cos'è una relazione con il database?

Tutorial 9 - Relazioni 1 a N (Database e MySQL) (Aprile 2025)

Tutorial 9 - Relazioni 1 a N (Database e MySQL) (Aprile 2025)
Anonim

Viene stabilita una relazione tra due tabelle del database quando una tabella ha una chiave esterna che fa riferimento alla chiave primaria di un'altra tabella. Questo è il concetto base dietro il termine database relazionale.

Come funziona una chiave estera per stabilire una relazione

Rivediamo le basi delle chiavi primarie e straniere. Una chiave primaria identifica in modo univoco ogni record nella tabella. È un tipo di chiave candidata che di solito è la prima colonna di una tabella e può essere generata automaticamente dal database per garantire che sia univoca.

Una chiave esterna è un'altra chiave candidata (non la chiave primaria) utilizzata per collegare un record ai dati in un'altra tabella.

Ad esempio, considera queste due tabelle che identificano quale insegnante insegna quale corso.

Qui, la chiave primaria della tabella Courses è Course_ID. La sua chiave esterna è Teacher_ID:

corsi
Course_IDNome del corsoTeacher_ID
Course_001BiologiaTeacher_001
Course_002MatematicaTeacher_001
Course_003IngleseTeacher_003

Puoi vedere che la chiave esterna in Corsi corrisponde a una chiave primaria in Insegnanti:

Insegnanti
Teacher_IDNome dell'insegnante
Teacher_001Carmen
Teacher_002Veronica
Teacher_003Jorge

Possiamo dire che la chiave straniera Teacher_ID ha contribuito a stabilire un relazione tra i tavoli Corsi e Insegnanti.

Tipi di relazioni tra database

Usando chiavi esterne o altre chiavi candidate, puoi implementare tre tipi di relazioni tra le tabelle:

Uno a uno: Questo tipo di relazione consente solo un record su ciascun lato della relazione.

La chiave primaria riguarda solo un record - o nessuno - in un'altra tabella. Ad esempio, in un matrimonio, ogni coniuge ha solo un altro coniuge. Questo tipo di relazione può essere implementato in una singola tabella e quindi non utilizza una chiave esterna.

Uno-a-molti: Una relazione uno-a-molti consente a un singolo record in una tabella di essere correlato a più record in un'altra tabella.

Considera un'attività commerciale con un database con tabelle Clienti e Ordini.

Un singolo cliente può acquistare più ordini, ma un singolo ordine non può essere collegato a più clienti. Pertanto la tabella Ordini conterrebbe una chiave esterna che corrisponde alla chiave primaria della tabella Clienti, mentre la tabella Clienti non avrebbe alcuna chiave esterna che punta alla tabella Ordini.

Molti-a-molti: Questa è una relazione complessa in cui molti record in una tabella possono essere collegati a molti record in un'altra tabella. Ad esempio, la nostra azienda probabilmente ha bisogno non solo delle tabelle Clienti e Ordini, ma probabilmente necessita anche di una tabella Prodotti.

Ancora una volta, la relazione tra la tabella Clienti e Ordini è uno-a-molti, ma si consideri la relazione tra la tabella Ordini e Prodotti. Un ordine può contenere più prodotti e un prodotto può essere collegato a più ordini: diversi clienti potrebbero inviare un ordine che contiene alcuni degli stessi prodotti. Questo tipo di relazione richiede almeno tre tavoli.

Quali sono le relazioni tra database importanti?

Stabilire relazioni coerenti tra le tabelle del database aiuta a garantire l'integrità dei dati, contribuendo alla normalizzazione del database. Ad esempio, se non collegassimo nessuna tabella con una chiave esterna e invece combinassimo semplicemente i dati nelle tabelle Corsi e Insegnanti, in questo modo:

Insegnanti e corsi
Teacher_IDNome dell'insegnanteCorso
Teacher_001CarmenBiologia, matematica
Teacher_002VeronicaMatematica
Teacher_003JorgeInglese

Questo design è inflessibile e viola il primo principio di normalizzazione del database, First Normal Form (1NF), in base al quale ogni cella di tabella deve contenere una singola porzione di dati discreti.

O forse abbiamo deciso di aggiungere semplicemente un secondo disco per Carmen, al fine di far rispettare 1NF:

Insegnanti e corsi
Teacher_IDNome dell'insegnanteCorso
Teacher_001CarmenBiologia
Teacher_001CarmenMatematica
Teacher_002VeronicaMatematica
Teacher_003JorgeInglese

Questo è ancora un progetto debole, che introduce una duplicazione non necessaria e ciò che viene chiamato anomalie nell'inserimento dei dati , il che significa solo che potrebbe contribuire a dati incoerenti.

Ad esempio, se un insegnante ha più record, cosa succede se alcuni dati devono essere modificati, ma la persona che esegue la modifica dei dati non si rende conto che esistono più record? La tabella conterrà quindi dati diversi per lo stesso individuo, senza alcun modo chiaro per identificarlo o evitarlo.

Rompendo questo tavolo in due tabelle, Insegnanti e Corsi (come visualizzato sopra), crea la corretta relazione tra i dati e quindi aiuta a garantire la coerenza e l'accuratezza dei dati.