I tuoi dati sono validi solo se ti puoi fidare. Utilizza i vincoli del database per assicurarti che sia accurato, affidabile e non interrompa il tuo modello di dati.

Punti chiave

  • Utilizza i vincoli SQL per mantenere l'integrità dei dati e garantire l'uniformità nel database. Il vincolo NOT NULL impone alle colonne di rifiutare valori NULL.
  • Implementare vincoli di chiave primaria per garantire l'unicità dei valori in una colonna o in un set di colonne. Ciò impedisce record duplicati in una tabella di database.
  • I vincoli di chiave esterna stabiliscono relazioni tra tabelle e impediscono azioni che distruggerebbero i collegamenti tra di loro. Garantiscono che un record nella tabella figlia faccia riferimento alla tabella padre.

Un database è essenziale per molte applicazioni, ma può diventare complicato se non si dispone di linee guida per l'archiviazione e l'elaborazione dei dati.

I vincoli SQL specificano le regole per la memorizzazione dei dati in una tabella. Quando imposti i vincoli, il database genererà un errore se provi a memorizzare dati che violano queste regole. I vincoli aiutano a mantenere l'integrità dei dati e a garantire l'uniformità nel database.

instagram viewer

Esistono diversi tipi di vincoli SQL che è possibile utilizzare; ecco alcuni dei più utili.

1. Vincolo NOT NULL

Le colonne del database, per impostazione predefinita, accettano dati con valori NULL. NULL significa essenzialmente che non esiste alcun valore. Il vincolo NOT NULL impone a una colonna di rifiutare valori NULL.

Questo vincolo garantisce che ogni colonna debba contenere un valore. Non è possibile aggiungere un record al database senza fornire dati per le colonne con il vincolo NOT NULL.

Prendiamo l'esempio di a Clienti tavolo. Ci sono alcuni dettagli necessari su ciascun cliente che desideri registrare, come il suo nome. Aggiungi il vincolo NOT NULL ai campi obbligatori per garantire che i clienti forniscano queste informazioni.

Ecco un esempio che mostra come utilizzare il vincolo NOT NULL in a Base di dati PostgreSQL:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);

Se provi a inserire un record cliente senza il file Età campo, il database lo accetterà senza errori:

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);

Tuttavia, se provi a inserire un record senza il file Nome di battesimo campo, il database lo rifiuterà con un messaggio di errore:

ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).

2. Vincolo CHIAVE PRIMARIA

Una CHIAVE è un attributo univoco impostato su una colonna o un campo che identifica la tupla (o un record) di una tabella nei sistemi di database. Un vincolo PRIMARY KEY garantisce l'unicità dei valori in una colonna o in un insieme di colonne. Funziona come un identificatore univoco in una riga, impedendo record duplicati in una tabella di database.

Le chiavi primarie contengono valori univoci e non possono contenere valori NULL. Ogni Tabella del database SQL deve avere una sola chiave primaria. La CHIAVE PRIMARIA può avere colonne singole o multiple.

Ad esempio, stai creando un database di record clienti. È necessario che ogni cliente inserisca il proprio numero ID in modo diverso da tutti gli altri. Puoi applicare il vincolo della chiave primaria per assicurarti che nessuno dei tuoi clienti abbia lo stesso numero ID.

Il codice seguente mostra come introdurre un vincolo di chiave primaria in un database MySQL:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);

Il database non accetterà quel valore se un utente immette un altro record con un ID simile. Invece, genererà un errore che indica la duplicazione. L'utente tenta di inserire due record con lo stesso ID nell'esempio seguente:

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );

Il database mostrerà un messaggio di errore:

Duplicate entry '1' for key 'PRIMARY'

Ma se modifichi l'ID del secondo cliente, il database accetta l'inserimento. Pertanto, la chiave primaria garantisce che non vi siano ID duplicati nei record dei clienti.

3. Vincolo CHIAVE ESTERA

Chiavi esterne stabilire relazioni tra due tabelle. Puoi aggiungere una chiave esterna a un campo/colonna in una tabella che fa riferimento alla chiave primaria in un'altra tabella.

La tabella con la chiave primaria è la tabella madre, mentre la tabella con la chiave esterna è la tabella figlia. Un record non può quindi esistere nella tabella figlia senza un riferimento alla tabella padre.

Il vincolo della chiave esterna impedisce azioni che distruggerebbero i collegamenti tra le tabelle. Ad esempio, non puoi GOCCIOLARE una tabella se si collega a un'altra con una chiave esterna. Dovrai eliminare entrambe le tabelle contemporaneamente.

A differenza di una chiave primaria, puoi duplicare una chiave esterna e averne più di una in un'unica tabella. Anche i valori delle chiavi esterne possono esserlo NULLO. Nell'esempio seguente è necessario utilizzare il file identificativo del cliente per creare un ordine.

CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);

CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');

INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');

Se provi a creare un ordine senza un file esistente identificativo del cliente, il database mostra un messaggio di errore:

Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))

4. Vincolo UNICO

Questo vincolo garantisce che due righe non possano avere gli stessi valori per una colonna specifica. Come le chiavi primarie, un vincolo univoco mantiene l'integrità dei dati e impedisce voci duplicate. Se lavori con un database mal progettato senza il vincolo UNIQUE, potresti dover farlo trovare ed eliminare i duplicati.

A differenza delle chiavi primarie, puoi avere molti vincoli UNIQUE su una tabella. Ad esempio, quando si crea un file Clienti tabella, potresti voler avere ID e numeri di telefono univoci. Per aggiungere tale vincolo utilizzando il server MySQL, utilizzare questa sintassi:

CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

Se inserisci record con lo stesso numero di cellulare nel database, verrà visualizzato un messaggio di errore.

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );

Il messaggio di errore sarà qualcosa del genere:

Duplicate entry '254000000' for key 'Mobile_No'

Questo vincolo UNICO garantisce che il database non avrà clienti con gli stessi ID o numeri di cellulare.

5. VERIFICA Vincolo

Il vincolo CHECK limita l'intervallo di valori inserito in una colonna. L'aggiunta di un vincolo CHECK su una colonna consentirà solo i valori specificati per quella colonna. Rafforza l'integrità dei dati garantendo che un utente inserisca solo dati validi in una tabella.

Il vincolo CHECK deve valutare un valore come TRUE o UNKNOWN per ogni riga o voce di tabella specificata. Se il valore è FALSE, il database mostra un messaggio di errore.

Ad esempio, nella tabella Clienti, potresti voler servire solo i clienti di età superiore a 18 anni. Puoi aggiungere un vincolo CHECK per assicurarti di non servire clienti minorenni. Puoi aggiungere il vincolo in un database PostgreSQL, come mostrato nel codice seguente:

CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

Ora se provi a inserire l'età di un cliente inferiore a 18 anni:

INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );

Il database mostrerà un messaggio di errore come questo:

ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)

Come aggiungere e rimuovere vincoli SQL dai database

I vincoli SQL non sono scolpiti nella pietra. È possibile aggiungere o rimuovere vincoli sulle tabelle esistenti utilizzando l'istruzione ALTER TABLE. L'istruzione ALTER consente di lavorare con vincoli per soddisfare le proprie esigenze di dati.

Esistono molti altri vincoli SQL che puoi imparare per progettare un database a tuo piacimento. Puoi iniziare con quelli elencati in questo articolo.