Comprendere la definizione e il ruolo delle chiavi primarie e chiavi esterne in SQL

Le chiavi primarie e le chiavi esterne in SQL sono concetti fondamentali nella progettazione di database. La chiave primaria identifica in modo univoco ciascun record, mentre la chiave esterna costruisce le relazioni tra tabelle diverse. In questo articolo, approfondiremo la definizione, il ruolo e i metodi di configurazione di queste chiavi con esempi concreti, per aiutarvi a comprendere meglio la progettazione di database.

Indice

Definizione e ruolo della chiave primaria

La chiave primaria (Primary Key) è una chiave utilizzata per identificare in modo univoco ciascun record all’interno di una tabella di un database. Deve essere univoca e non può contenere valori NULL. È consigliato impostare una chiave primaria per ogni tabella, in modo da garantire l’integrità dei dati.

Caratteristiche della chiave primaria

  • Unicità: La chiave primaria identifica in modo univoco ciascun record, pertanto non può avere valori duplicati.
  • Non-NULL: La chiave primaria non può contenere valori NULL.
  • Una per tabella: Ogni tabella può avere una sola chiave primaria.

Ruolo della chiave primaria

La chiave primaria svolge i seguenti ruoli:

  • Identificazione univoca dei record: Impedisce la duplicazione dei dati identificando in modo univoco ciascun record.
  • Base per le relazioni: Serve come base per stabilire relazioni con altre tabelle.

Definizione e ruolo della chiave esterna

La chiave esterna (Foreign Key) viene utilizzata per riferirsi alla chiave primaria di un’altra tabella. È fondamentale per definire le relazioni tra tabelle e per mantenere l’integrità dei dati.

Caratteristiche della chiave esterna

  • Referenzialità: La chiave esterna fa riferimento alla chiave primaria di un’altra tabella.
  • Integrità: Garantisce che i dati referenziati esistano effettivamente.
  • Permette valori NULL: In alcuni casi, la colonna della chiave esterna può accettare valori NULL.

Ruolo della chiave esterna

La chiave esterna svolge i seguenti ruoli:

  • Costruzione di relazioni: Definisce le relazioni tra tabelle, assicurando l’associazione corretta dei dati.
  • Mantenimento dell’integrità dei dati: Impedisce l’inserimento o l’aggiornamento di dati che non esistono nella tabella referenziata.

L’uso delle chiavi esterne è essenziale per garantire l’accuratezza e l’integrità dei dati nel database.

Differenze tra chiave primaria e chiave esterna

Sebbene entrambe le chiavi svolgano un ruolo fondamentale nella progettazione dei database, ci sono differenze chiare tra la chiave primaria e la chiave esterna.

Caratteristiche e ruolo della chiave primaria

  • Unicità: La chiave primaria identifica in modo univoco ciascun record.
  • Non-NULL: Non può contenere valori NULL.
  • Una per tabella: Ogni tabella ha una sola chiave primaria.

Caratteristiche e ruolo della chiave esterna

  • Referenzialità: Fa riferimento alla chiave primaria di un’altra tabella.
  • Integrità: Garantisce che i dati referenziati esistano.
  • Permette valori NULL: In alcuni casi, può accettare valori NULL.

Differenze tra chiave primaria e chiave esterna

  • Scopo: La chiave primaria identifica univocamente i record di una tabella, mentre la chiave esterna viene utilizzata per costruire relazioni tra tabelle.
  • Vincoli di unicità: La chiave primaria deve essere sempre univoca e non può contenere valori NULL, mentre la chiave esterna non deve necessariamente essere univoca, a condizione che i valori siano validi nella tabella referenziata.
  • Numero per tabella: In ogni tabella può esserci una sola chiave primaria, mentre è possibile avere più chiavi esterne.

Comprendendo queste differenze, è possibile utilizzare in modo appropriato le chiavi primarie e le chiavi esterne nella progettazione dei database.

Come impostare una chiave primaria

Il comando SQL per impostare una chiave primaria è semplice e viene definito durante la creazione della tabella. È anche possibile aggiungere una chiave primaria a una tabella esistente. Di seguito sono riportati i metodi specifici.

Impostare una chiave primaria durante la creazione della tabella

Questo è un esempio su come impostare una chiave primaria al momento della creazione di una tabella. Di seguito è mostrato come impostare user_id come chiave primaria nella tabella Users.

CREATE TABLE Users (  
    user_id INT NOT NULL,  
    username VARCHAR(50),  
    email VARCHAR(50),  
    PRIMARY KEY (user_id)  
);

Spiegazione del codice

  • CREATE TABLE Users: Crea una tabella chiamata Users.
  • user_id INT NOT NULL: Definisce la colonna user_id come un intero che non può essere NULL.
  • PRIMARY KEY (user_id): Imposta user_id come chiave primaria della tabella.

Aggiungere una chiave primaria a una tabella esistente

Di seguito è illustrato come aggiungere una chiave primaria a una tabella esistente. Questo è un esempio su come aggiungere order_id come chiave primaria alla tabella Orders.

ALTER TABLE Orders  
ADD PRIMARY KEY (order_id);

Spiegazione del codice

  • ALTER TABLE Orders: Modifica la tabella Orders.
  • ADD PRIMARY KEY (order_id): Aggiunge order_id come chiave primaria.

Impostare correttamente la chiave primaria garantisce l’unicità e l’integrità dei dati nel database.

Come impostare una chiave esterna

Il comando SQL per impostare una chiave esterna può essere eseguito durante la creazione di una tabella o successivamente su una tabella esistente. Impostare correttamente una chiave esterna permette di stabilire relazioni tra tabelle e garantire l’integrità dei dati.

Impostare una chiave esterna durante la creazione della tabella

Questo è un esempio di come impostare una chiave esterna durante la creazione della tabella. Di seguito, customer_id della tabella Orders viene collegato a customer_id della tabella Customers.

CREATE TABLE Customers (  
    customer_id INT NOT NULL,  
    customer_name VARCHAR(100),  
    PRIMARY KEY (customer_id)  
);  

CREATE TABLE Orders (  
    order_id INT NOT NULL,  
    order_date DATE,  
    customer_id INT,  
    PRIMARY KEY (order_id),  
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)  
);

Spiegazione del codice

  • CREATE TABLE Customers: Crea una tabella chiamata Customers.
  • PRIMARY KEY (customer_id): Imposta customer_id come chiave primaria.
  • CREATE TABLE Orders: Crea una tabella chiamata Orders.
  • FOREIGN KEY (customer_id) REFERENCES Customers(customer_id): Collega customer_id della tabella Orders a customer_id della tabella Customers.

Aggiungere una chiave esterna a una tabella esistente

Di seguito è illustrato come aggiungere una chiave esterna a una tabella esistente. Questo è un esempio di come aggiungere customer_id come chiave esterna alla tabella Orders.

ALTER TABLE Orders  
ADD CONSTRAINT fk_customer  
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id);

Spiegazione del codice

  • ALTER TABLE Orders: Modifica la tabella Orders.
  • ADD CONSTRAINT fk_customer: Aggiunge un vincolo chiamato fk_customer.
  • FOREIGN KEY (customer_id) REFERENCES Customers(customer_id): Collega customer_id della tabella Orders a customer_id della tabella Customers.

Impostare correttamente la chiave esterna permette di stabilire relazioni tra tabelle e garantire l’integrità dei dati.

Esempio di progettazione di tabelle con chiave primaria e chiave esterna

Di seguito è riportato un esempio concreto di progettazione di tabelle utilizzando chiavi primarie e chiavi esterne. Questo esempio costruisce un database per la gestione delle informazioni sui clienti e sugli ordini.

Progettazione della tabella dei clienti

Innanzitutto, progettiamo una tabella Customers per gestire le informazioni sui clienti. La colonna customer_id sarà utilizzata come chiave primaria.

CREATE TABLE Customers (  
    customer_id INT NOT NULL AUTO_INCREMENT,  
 

 customer_name VARCHAR(100) NOT NULL,  
    contact_email VARCHAR(100),  
    PRIMARY KEY (customer_id)  
);

Spiegazione del codice

  • customer_id INT NOT NULL AUTO_INCREMENT: Definisce la colonna customer_id come un intero con incremento automatico e senza valori NULL.
  • PRIMARY KEY (customer_id): Imposta customer_id come chiave primaria.

Progettazione della tabella degli ordini

Successivamente, progettiamo una tabella Orders per gestire le informazioni sugli ordini. La colonna order_id sarà utilizzata come chiave primaria e customer_id sarà una chiave esterna che fa riferimento alla colonna customer_id della tabella Customers.

CREATE TABLE Orders (  
    order_id INT NOT NULL AUTO_INCREMENT,  
    order_date DATE NOT NULL,  
    customer_id INT,  
    PRIMARY KEY (order_id),  
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)  
);

Spiegazione del codice

  • order_id INT NOT NULL AUTO_INCREMENT: Definisce la colonna order_id come un intero con incremento automatico e senza valori NULL.
  • order_date DATE NOT NULL: Definisce la colonna order_date come un tipo data senza valori NULL.
  • FOREIGN KEY (customer_id) REFERENCES Customers(customer_id): Collega customer_id della tabella Orders a customer_id della tabella Customers.

Relazione tra le tabelle

Questa progettazione stabilisce una relazione tra la tabella Customers e la tabella Orders attraverso la colonna customer_id. Questo consente di tracciare facilmente tutti gli ordini effettuati da un determinato cliente.

Domande frequenti sulle chiavi primarie e chiavi esterne

Ci sono diverse domande comuni riguardanti le chiavi primarie e chiavi esterne. Di seguito vengono riportate alcune di esse con relative risposte.

Domanda 1: Una chiave primaria può essere composta da più colonne?

Risposta: Sì, una chiave primaria può essere composta da più colonne. Questo tipo di chiave viene chiamata chiave composita (Composite Key). Ad esempio, nella tabella OrderDetails è possibile utilizzare la combinazione di order_id e product_id come chiave primaria.

CREATE TABLE OrderDetails (  
    order_id INT NOT NULL,  
    product_id INT NOT NULL,  
    quantity INT,  
    PRIMARY KEY (order_id, product_id)  
);

Domanda 2: Una chiave esterna può fare riferimento a qualsiasi colonna di un’altra tabella?

Risposta: Una chiave esterna deve fare riferimento alla chiave primaria o a una chiave univoca dell’altra tabella. Questo garantisce l’integrità dei dati.

Domanda 3: È possibile modificare una chiave primaria?

Risposta: È possibile modificare una chiave primaria, ma ciò deve essere fatto con attenzione. Prima di procedere, è necessario valutare l’impatto sui dati esistenti e sulle relazioni tra le tabelle.

Domanda 4: È obbligatorio impostare una chiave esterna?

Risposta: Non è obbligatorio impostare una chiave esterna, ma farlo rende esplicite le relazioni tra tabelle e aiuta a mantenere l’integrità dei dati.

Domanda 5: Una chiave esterna può contenere valori NULL?

Risposta: Una chiave esterna può contenere valori NULL. In questo caso, indica che non esiste una relazione.

Queste domande e risposte aiutano a comprendere meglio le chiavi primarie e chiavi esterne.

Esercizi

Di seguito sono riportati alcuni esercizi per comprendere in modo pratico il concetto di chiavi primarie e chiavi esterne. Questi esercizi vi aiuteranno a verificare il corretto utilizzo di queste chiavi nella progettazione dei database.

Esercizio 1: Creazione di una tabella

Creare una tabella Products che soddisfi i seguenti requisiti:

  • Impostare product_id come chiave primaria
  • product_name non può essere NULL
  • price può essere NULL
-- Inserisci la tua risposta qui  
CREATE TABLE Products (  
    product_id INT NOT NULL,  
    product_name VARCHAR(100) NOT NULL,  
    price DECIMAL(10, 2),  
    PRIMARY KEY (product_id)  
);

Esercizio 2: Impostare una chiave esterna

Creare una tabella OrderItems che soddisfi i seguenti requisiti e stabilisca una relazione con le tabelle Orders e Products.

  • Impostare order_item_id come chiave primaria
  • Impostare order_id come chiave esterna che fa riferimento a order_id della tabella Orders
  • Impostare product_id come chiave esterna che fa riferimento a product_id della tabella Products
-- Inserisci la tua risposta qui  
CREATE TABLE OrderItems (  
    order_item_id INT NOT NULL AUTO_INCREMENT,  
    order_id INT NOT NULL,  
    product_id INT NOT NULL,  
    quantity INT,  
    PRIMARY KEY (order_item_id),  
    FOREIGN KEY (order_id) REFERENCES Orders(order_id),  
    FOREIGN KEY (product_id) REFERENCES Products(product_id)  
);

Esercizio 3: Inserimento dati e verifica delle relazioni

Inserire dati nelle tabelle Customers, Orders e OrderItems e verificare che le relazioni siano correttamente configurate.

-- Inserimento di dati di esempio  
INSERT INTO Customers (customer_name, contact_email) VALUES ('John Doe', 'john@example.com');  
INSERT INTO Orders (order_date, customer_id) VALUES ('2024-06-05', 1);  
INSERT INTO Products (product_name, price) VALUES ('Laptop', 1000.00);  
INSERT INTO OrderItems (order_id, product_id, quantity) VALUES (1, 1, 2);  

-- Query per verificare le relazioni  
SELECT * FROM Orders  
JOIN OrderItems ON Orders.order_id = OrderItems.order_id  
JOIN Products ON OrderItems.product_id = Products.product_id  
JOIN Customers ON Orders.customer_id = Customers.customer_id;

Questi esercizi vi permetteranno di comprendere come impostare correttamente chiavi primarie e chiavi esterne e verificare le relazioni nei database.

Conclusione

Le chiavi primarie e le chiavi esterne in SQL sono elementi essenziali nella progettazione di database. La chiave primaria identifica univocamente ciascun record, mentre la chiave esterna costruisce relazioni tra tabelle. Impostando correttamente queste chiavi, è possibile garantire l’integrità dei dati e gestirli in modo efficiente. Speriamo che questo articolo vi abbia aiutato a comprendere meglio la definizione, il ruolo e il metodo di configurazione delle chiavi primarie e delle chiavi esterne, e che possiate applicare queste conoscenze nella progettazione dei vostri database.

Indice