Postgres Foreign Key Constraint Tutorial

Introduzione

Se stai lavorando con i dati in PostgreSQL, è importante sapere come utilizzare le chiavi esterne. Una chiave esterna è un tipo specifico di vincolo SQL progettato per mantenere l’integrità referenziale tra due tabelle. In parole povere, una chiave esterna è una colonna o un insieme di colonne che stabilisce un collegamento tra i dati in due tabelle. La chiave esterna per una tabella fa riferimento alla chiave primaria per l’altra tabella, creando così una relazione tra le tabelle. In questo articolo, spiegheremo come creare una chiave esterna Postgres e guardare alcuni esempi del suo utilizzo.

Prerequisiti

Mentre procediamo con questo tutorial, lavoreremo con tabelle che avranno una relazione di chiave esterna, quindi dovrai assicurarti che sia Postgres che la sua interfaccia a riga di comando psql siano installati. Avrai anche bisogno di avere due tabelle che condividono quel vincolo per una delle rispettive colonne.

Assicurarsi di avere accesso a psql

È possibile utilizzare il comando psql -V per verificare che psql e Postgres siano installati e funzionino correttamente. Utilizzare il comando psql da solo per connettersi a Postgres e immettere l’interfaccia della riga di comando.

NOTA: Se si ottiene un errore con il messaggio psql: FATAL: role "linux" does not exist, Postgres sta probabilmente tentando di utilizzare il nome utente del sistema per connettersi con psql. Per rimediare a questo, utilizzare il comando sudo -u postgres -i per passare il nome utente a postgres, quindi provare ad accedere di nuovo a psql.

Schermata di psql versione e il ruolo di "linux" non esiste errore per Postgres

Creare tabelle per la chiave esterna

La prima cosa che dovrete fare è creare un database utilizzando il psql interfaccia a riga di comando:

Possiamo creare il nostro database PostgreSQL usando la sintassi dei comandi di base illustrato di seguito:

1
CREARE DATABASE db_name;

Ecco un esempio:

1
CREA DATABASE testdb;

Possiamo anche creare una tabella che funge da tabella “madre” o una tabella che ha una relazione con altre tabelle. Ci piacerebbe utilizzare la sintassi di base illustrato di seguito:

1
CREATE TABLE NOME_TABELLA(COLUMN_NAME + DATA_TYPE + VINCOLO )

ai fini di questo tutorial, creiamo una tabella denominata price con una chiave primaria id:

1
CREA prezzo TABELLA (id INT CHIAVE PRIMARIA, prezzo REALE);

Nella sezione successiva, creeremo un’altra tabella che avrà una relazione di chiave esterna alla colonna id della tabella dei prezzi.

Utilizzando il vincolo della chiave esterna

Come accennato in precedenza, un vincolo FOREIGN KEY fa riferimento alla chiave primaria in un’altra tabella. Possiamo avere più chiavi esterne in una tabella; ogni chiave dipenderà dalla sua relazione con qualche altra tabella.

Per creare una tabella con un vincolo FOREIGN KEY, è necessario fare riferimento all’altra tabella. Diamo un’occhiata al seguente esempio:

1
2
3
4
5
CREATE TABLE auto(
car_id INT NOT NULL,
prezzo INT RIFERIMENTI di prezzo (id),corrispondente
di TESTO nome,
marca di TESTO);

si Noti che il cars tabella ha una chiave esterna che fa riferimento alla price tabella. Ciò significa che i valori delle colonne della chiave esterna nella tabella “figlio” provengono dalla tabella “madre” come riferimento.

Per visualizzare una tabella con i dettagli, utilizzare \d comando seguito dal nome della tabella:

1
2
3
4
5
6
7
8
9
TABELLA “pubblico.auto”
COLONNA | TIPO | Confronto | valori null | DEFAULT
——–+———+———–+———-+———
car_id | INTEGER | | NOT NULL |
prezzo | INTEGER | | |
nome | testo | | |
marca | testo | | |
vincoli di CHIAVE esterna:
“cars_price_fkey” CHIAVE esterna (prezzo) RIFERIMENTI di prezzo(id)

Si potrebbe anche dichiarare il vincolo di chiave esterna in modo esplicito utilizzando il FOREIGN KEY e parole chiave quando si dichiara il nome della colonna nella nostra CREATE TABLE comando:

1
2
3
4
5
6
7
8
CREATE TABLE auto(
car_id NOT NULL,
prezzo INT,
di TESTO nome,
marca di TESTO
CHIAVE PRIMARIA (car_id),
FOREIGN KEY (prezzo) RIFERIMENTI di prezzo(id);
);

A questo punto, è lecito chiedersi che cosa sarebbe accaduto se avete accidentalmente cancellato un record nella tabella cars— sarebbe un errore? In realtà, Postgres non ti consentirà di eliminare il record a meno che non venga eliminato anche il record dell’altra tabella corrispondente.

È possibile utilizzare una delle seguenti opzioni– NO ACTION,DELETE CASCADE e DELETE RESTRICT — per decidere cosa dovrebbe accadere quando viene eliminato un record collegato a un’altra tabella.

Il seguente esempio mostra il vincolo DELETE RESTRICT applicato a una tabella:

1
2
3
4
5
CREATE TABLE auto(
car_id INT NOT NULL,
prezzo INT RIFERIMENTI di prezzo (id) ON DELETE RESTRICT,
di TESTO nome,
marca di TESTO);

NOTA: Questo vincolo non consentono di eliminare una riga, a meno che tutti i valori collegati vengono rimossi o il vincolo stesso viene rimosso.

L’esempio successivo mostra il vincolo DELETE CASCADE in azione:

1
2
3
4
5
CREATE TABLE auto(
car_id INT NOT NULL,
prezzo INT RIFERIMENTI di prezzo (id) ON DELETE CASCADE,
di TESTO nome,
marca di TESTO);

NOTA: Il DELETE CASCADE vincolo consente di eliminare un record padre, ma è importante essere consapevoli del fatto che suo figlio corrispondente record viene eliminato. L’eliminazione a cascata non è raccomandata per l’uso in produzione poiché è troppo facile eliminare involontariamente le righe in un’altra tabella.

L’opzione NO ACTION è un’azione predefinita in PostgreSQL che visualizza un errore se uno dei due vincoli sopra menzionati non è specificato.

Conclusione

In un database relazionale, è comune che i dati in tabelle diverse abbiano determinati collegamenti o relazioni. Un vincolo di chiave esterna fornisce un modo efficace per salvaguardare l’integrità referenziale di questi dati, assicurando che i dati non vengano eliminati da una tabella quando esiste una relazione con i dati in un’altra tabella. Questo tutorial ha fornito una panoramica di come funziona una chiave esterna Postgres e ha offerto esempi su come utilizzare questo vincolo in modi diversi. Con questi esempi da utilizzare come guida, sarete in grado di implementare relazioni di chiavi esterne nel proprio database PostgreSQL.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.