Chiavi e vincoli comunemente usati in SQL

Quali sono chiavi e vincoli?

Un database deve rispettare determinate proprietà per mantenere l’integrità e la qualità dei dati che sta memorizzando. Chiavi e vincoli sono regole che definiscono quali valori di dati sono consentiti in determinate colonne di dati. Sono un concetto di database importante e fanno parte della definizione dello schema di un database. La definizione di chiavi e vincoli fa parte del processo di progettazione del database e garantisce che i dati all’interno di un database siano affidabili e ne mantengano l’integrità. I vincoli possono essere applicati a una colonna specifica, a un’intera tabella, a più tabelle o a un intero schema. Un sistema di database affidabile garantisce che i vincoli rimangano in ogni momento. Le chiavi sono un tipo speciale di vincolo utilizzato per stabilire relazioni e unicità.

Chiave primaria

Una parte necessaria per stabilire relazioni tra due entità o due parti di dati è identificare correttamente i dati. In SQL, l’identificazione univoca dei dati è fondamentale. Una chiave primaria è un identificatore univoco per una riga di dati. Nell’analogia del foglio di calcolo che abbiamo usato finora, c’è sempre stata una colonna id. Mentre qualsiasi colonna può servire come chiave primaria, l’utilizzo di una colonna denominata id è facile per ragioni mnemoniche ed è una convenzione popolare. In un RDBMS, ogni tabella può avere solo una chiave primaria.

Una chiave primaria è un identificatore univoco garantito per una riga in una tabella. Per questo motivo, possiamo utilizzare il valore della chiave primaria di una riga per fare riferimento a quella riga da altre tabelle. Nel capitolo precedente, abbiamo stabilito relazioni tra più tabelle basate su questo, ma i database relazionali hanno bisogno di un modo per relazionarsi tra loro e la colonna della chiave primaria è un modo per farlo in modo efficiente. In PostgreSQL, le chiavi primarie ricevono anche vantaggi in termini di prestazioni poiché è noto che verranno utilizzate frequentemente per cercare i dati, specialmente nelle ricerche multi-tabella.

Tieni presente che non tutte le colonne denominate “id” sono chiavi primarie; questa è solo una convenzione. Inoltre, le chiavi primarie possono avere qualsiasi nome.

Abbiamo già visto la sintassi per designare una colonna come colonna chiave primaria nei capitoli precedenti:

Diamo un’occhiata al comando precedente che crea una tabella chiamata users, dal punto di vista della comprensione delle chiavi primarie.

  1. id colonna è la chiave primaria di questa tabella. Possiamo anche dire che il vincolo della chiave primaria è stato applicato alla colonna id.
  2. id può contenere solo valori numerici (int).
  3. Per ogni nuova riga aggiunta alla tabella, il campo id verrà automaticamente incrementato di 1. Con molti RDBMS, viene utilizzata la parola chiave AUTO_INCREMENT. Con PostgreSQL, usiamo serial per incrementare automaticamente i nostri ID e impostare il loro tipo come integer. Non è necessario specificare manualmente il valore della chiave primaria ogni volta che inserisci i dati, PostgreSQL lo farà per te se specifichi serial come tipo per id.

Chiave esterna

Le colonne chiave esterne vengono utilizzate per fare riferimento a un’altra riga di dati, magari in un’altra tabella. Per fare riferimento a un’altra riga, il database ha bisogno di un identificatore univoco per quella riga. Pertanto, le colonne di chiavi esterne contengono il valore della chiave primaria della riga di riferimento. Ad esempio, una tabella potrebbe avere una colonna chiamata user_id come colonna di chiave esterna, che corrisponde alla colonna id della tabella users. Le chiavi esterne sono il modo in cui RDBMS imposta le relazioni tra righe di dati, nella stessa tabella o tra tabelle.

È possibile vedere dall’istruzione SQL precedente che la riga per stabilire questa relazione è

FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE

Nell’esempio precedente id è la chiave primaria della tabella books, che viene utilizzata per stabilire una relazione con la tabella recensioni. I dati id vengono memorizzati nella tabella recensioni nel campo book_id per mappare i libri con le recensioni. La clausola ON DELETE CASCADE indica che se un libro viene eliminato vengono eliminate anche tutte le recensioni associate a quel libro.

Chiave composita come chiave primaria

Nel capitolo precedente abbiamo creato una relazione molti-a-molti, in cui la nostra chiave primaria era composta da due colonne. Il user_id e il book_id entrambi insieme formavano la chiave primaria per la tabella di riferimento incrociato come si può vedere in questa riga dell’istruzione SQL.

PRIMARY KEY (user_id, book_id)

Quando un primary_key è costituito da una coppia univoca PRIMARY KEY (user_id, book_id), è noto come chiave composita. Di solito si verifica nelle relazioni molti-a-molti e dobbiamo aggiungere una tabella aggiuntiva per memorizzare questi dati di relazione. La chiave composita garantisce che i dati nella tabella siano univoci per la relazione tra l’utente e il libro. Esempio:

|User_id | Book_id | | 1 | 1 | | 1 | 2 | | 2 | 1 | 

Vincoli univoci

Oltre alla chiave primaria, un database consente anche di applicare un vincolo univoco su qualsiasi colonna del database. Ad esempio, nella tabella libri, possiamo scegliere non solo di avere book_id come chiave primaria univoca, ma anche di memorizzare il numero ISBN del libro. Il ISBN, International Standard Book Number è un numero unico di 10 cifre per un libro. Possiamo scegliere di progettare il nostro database per rendere unica questa colonna. Anche se questa non è una chiave primaria, gli ISBN duplicati non saranno consentiti nella tabella books e la qualità dei dati verrà mantenuta.

Il vincolo univoco non consente la voce duplicata nella tabella books per il valore della colonna di isbn.

Vincoli NOT NULL

Abbiamo visto “NOT NULL” in molte delle nostre istruzioni SQL. Il vincolo NOT NULL impedisce a una colonna di consentire un valore null (cioè questa colonna deve contenere dati). Questo è importante per i campi chiave. Ad esempio: se si desidera aggiungere un utente a un database, è necessario fornire un nome utente. Senza questo vincolo il database si riempirebbe di valori null e diventerebbe meno utile.

In che modo SQL gestisce queste relazioni?

PostgreSQL consente relazioni tra lo schema e i dati di tabelle diverse attraverso l’uso di CHIAVI ESTERNE e un’operazione chiamata a JOIN. Come suggerisce il nome, lo scopo è quello di unire le tabelle. Attraverso questo meccanismo possiamo, ad esempio, ottenere tutti i dettagli dell’autore della tabella delle recensioni mostrata sopra, poiché ha un campo user_id che si riferisce alla tabella user. Ecco un rapido esempio:

Ora che abbiamo capito come creare più tabelle e le chiavi di ruolo giocano nello stabilire relazioni, daremo un’occhiata più approfondita ai vari join e come le query SQL vengono costruite utilizzando questi join per recuperare i dati richiesti da più tabelle.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.