Salta ai contenuti

Vincoli

I vincoli sono regole che il database controlla prima di salvare un dato.

Non servono a complicare la vita. Servono a evitare dati rotti, duplicati o incoerenti.

È come avere qualcuno all’ingresso di un magazzino che controlla: “questo pacco ha l’etichetta?”, “questo codice esiste già?”, “questo valore ha senso?”.

Ecco quelli che incontrerai più spesso:

VincoloA cosa serve
PRIMARY KEYidentifica ogni riga
FOREIGN KEYcollega una tabella a un’altra
UNIQUEimpedisce valori duplicati
NOT NULLrende una colonna obbligatoria
CHECKcontrolla una regola personalizzata
DEFAULTassegna un valore se non lo specifichi

Questa tabella usa più vincoli insieme:

CREATE TABLE clienti (
id INT PRIMARY KEY,
email VARCHAR(150) UNIQUE NOT NULL,
nome VARCHAR(100) NOT NULL,
eta INT CHECK (eta >= 0),
attivo BOOLEAN DEFAULT TRUE
);

Leggiamola pezzo per pezzo:

  • id INT PRIMARY KEY: ogni cliente ha un identificatore unico.
  • email VARCHAR(150) UNIQUE NOT NULL: l’email è obbligatoria e non può essere duplicata.
  • nome VARCHAR(100) NOT NULL: il nome è obbligatorio.
  • eta INT CHECK (eta >= 0): l’età non può essere negativa.
  • attivo BOOLEAN DEFAULT TRUE: se non dici nulla, il cliente parte come attivo.

Senza vincoli, il database potrebbe accettare dati sbagliati:

  • due utenti con la stessa email
  • un prodotto con prezzo negativo
  • un cliente senza nome
  • un ordine collegato a un cliente che non esiste

I controlli nel codice dell’applicazione sono utili, ma non bastano sempre. Il database è l’ultimo posto in cui puoi fermare un dato sbagliato prima che venga salvato.

CHECK ti permette di scrivere una regola semplice.

prezzo DECIMAL(10, 2) CHECK (prezzo >= 0)

Questa regola dice: il prezzo deve essere maggiore o uguale a zero.

Se qualcuno prova a inserire un prezzo negativo, il database rifiuta il dato.

DEFAULT entra in gioco quando non specifichi un valore.

attivo BOOLEAN DEFAULT TRUE

Se inserisci un cliente senza dire se è attivo, il database userà TRUE.

È come dire: “se non ricevi istruzioni diverse, parti da questo valore”.

  • I vincoli sono regole applicate dal database.
  • PRIMARY KEY identifica le righe.
  • FOREIGN KEY protegge i collegamenti tra tabelle.
  • UNIQUE evita duplicati.
  • NOT NULL, CHECK e DEFAULT aiutano a mantenere dati più puliti.