Junior
Come vengono configurate le relazioni tra le tabelle nei database relazionali?
sobes.tech AI
Risposta dell'AI
Nei database relazionali, le relazioni tra le tabelle vengono configurate tramite chiavi esterne (Foreign Keys).
Una chiave esterna è una colonna o un insieme di colonne in una tabella che fa riferimento alla chiave primaria (Primary Key) di un'altra tabella. Essa stabilisce una relazione logica tra i record di due tabelle.
Durante la configurazione della relazione:
- Si definisce la chiave primaria nella tabella "genitore" (Parent). La chiave primaria identifica univocamente ogni record.
- Nella tabella "figlio" (Child), si crea una colonna (o un insieme di colonne) che fungerà da chiave esterna.
- Questa colonna nella tabella "figlio" si collega alla chiave primaria della tabella "genitore".
- Vengono stabilite restrizioni di integrità dei dati:
- REFERENCES: Indica a quale tabella e colonna (chiave primaria) fa riferimento la chiave esterna.
- ON UPDATE behavior: Definisce cosa succede con i record nella tabella figlio quando la chiave primaria nella tabella genitore viene modificata. Le opzioni sono:
CASCADE: Le modifiche vengono propagate ai record figli.SET NULL: I valori della chiave esterna nella tabella figlio vengono impostati a NULL.RESTRICT: L'operazione di modifica è vietata se esistono record figli correlati.NO ACTION: Simile a RESTRICT nella maggior parte dei SGBD.SET DEFAULT: I valori della chiave esterna vengono impostati al valore di default.
- ON DELETE behavior: Definisce cosa succede con i record nella tabella figlio quando vengono eliminati record nella tabella genitore. Le opzioni sono le stesse di
ON UPDATE.
Esempio di sintassi SQL per creare una relazione:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY, -- Chiave primaria nella tabella Customer
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, -- Chiave esterna che fa riferimento a customer_id nella tabella Customers
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE -- Quando customer_id in Customers viene modificato, si aggiorna anche in Orders
ON DELETE CASCADE -- Quando un Customer viene eliminato, vengono eliminati anche i suoi Orders
);
Tipi di relazioni tra le tabelle:
| Tipo di relazione | Descrizione | Esempio |
|---|---|---|
| Uno a Uno (1:1) | Una riga nella prima tabella corrisponde a una riga nella seconda e viceversa. Caso raro nei database relazionali. | Utente e il suo profilo. |
| Uno a Molti (1:N) | Una riga nella prima tabella corrisponde a molte righe nella seconda, ma ogni riga nella seconda corrisponde solo a una nella prima. | Cliente e i suoi ordini. |
| Molti a Molti (N:M) | Molte righe nella prima tabella corrispondono a molte righe nella seconda, e viceversa. Si realizza tramite una tabella intermedia (di collegamento). | Prodotti e categorie. |
Per la relazione Many-to-Many, si crea una terza tabella contenente chiavi esterne di entrambe le tabelle da collegare.
CREATE TABLE Products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255)
);
CREATE TABLE Categories (
category_id INT PRIMARY KEY,
category_name VARCHAR(255)
);
CREATE TABLE ProductCategories ( -- Tabella di collegamento
product_id INT,
category_id INT,
PRIMARY KEY (product_id, category_id), -- Chiave primaria composta
FOREIGN KEY (product_id) REFERENCES Products(product_id),
FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);