Vincoli
Regole che proteggono i dati
Sezione intitolata “Regole che proteggono i dati”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?”.
I vincoli più comuni
Sezione intitolata “I vincoli più comuni”Ecco quelli che incontrerai più spesso:
| Vincolo | A cosa serve |
|---|---|
PRIMARY KEY | identifica ogni riga |
FOREIGN KEY | collega una tabella a un’altra |
UNIQUE | impedisce valori duplicati |
NOT NULL | rende una colonna obbligatoria |
CHECK | controlla una regola personalizzata |
DEFAULT | assegna un valore se non lo specifichi |
Un esempio completo
Sezione intitolata “Un esempio completo”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.
Perché sono utili
Sezione intitolata “Perché sono utili”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.
Un esempio con CHECK
Sezione intitolata “Un esempio con CHECK”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.
Un esempio con DEFAULT
Sezione intitolata “Un esempio con DEFAULT”DEFAULT entra in gioco quando non specifichi un valore.
attivo BOOLEAN DEFAULT TRUESe inserisci un cliente senza dire se è attivo, il database userà TRUE.
È come dire: “se non ricevi istruzioni diverse, parti da questo valore”.
Riepilogo rapido
Sezione intitolata “Riepilogo rapido”- I vincoli sono regole applicate dal database.
PRIMARY KEYidentifica le righe.FOREIGN KEYprotegge i collegamenti tra tabelle.UNIQUEevita duplicati.NOT NULL,CHECKeDEFAULTaiutano a mantenere dati più puliti.