Chiave straniere Postgresql

Chiave straniere Postgresql
Una chiave esterna è una o più colonne con valori che dipendono dalla chiave primaria. Questo vincolo viene utilizzato per unire due tabelle. In PostgreSQL, una chiave straniera aiuta a generare una relazione tra le tabelle, rendendo una tabella una tabella dei genitori e l'altra un bambino. La chiave esterna può essere creata utilizzando:
  • Crea query da tavolo
  • Aggiornamento/altera query

Sintassi

[Nome del vincolo] Tasto estero (colonne)
Riferimenti Parent_table (colonne)
[On Elimina Action]
[Sull'azione di aggiornamento]

La tabella di riferimento è la tabella principale. E la colonna per la chiave esterna è la chiave primaria del genitore.

Chiave estera Introduzione in Create Dichiarazione

Per quanto riguarda i vincoli chiave stranieri, abbiamo bisogno di due tabelle per illustrare il concetto. Cominciamo con la definizione di una tabella "designer" e il secondo è "categoria". Entrambe le tabelle vengono create utilizzando un'istruzione Crea.

>> Crea tabella designer (designer_id int generato sempre come identità, designer_name varchar (50) non null, chiave primaria (designer_id));

Nella tabella "Designer", Designer_id è impostato come chiave primaria. Ora crea la seconda tabella.

>> Crea tabella categoria (categoria_id int generato sempre come identità, designer_id int, category_id int, category_name varchar (200) non null, chiave primaria (categoria_id), vincolo fk_designer straniero chiave (designer_id) references designer (designer_id));

In questa tabella, Category_id è impostato come chiave primaria. Poiché entrambe queste tabelle devono unirsi al vincolo della chiave estera. Facciamo "Designer_id" la chiave estera in questa tabella. La tabella di riferimento è menzionata nella tabella in modo che la query possa essere facilmente eseguita cercando nella tabella.

Vincolo FK_Designer
Chiave straniera (designer_id)
Riferimenti designer (designer_id));

La tabella di design è la tabella principale, mentre la tabella "categoria" è la tabella dei figli. Ogni designer lavora su zero o più categorie di abbigliamento e uno o più designer considerano ogni categoria di abbigliamento.

NOTA: Per creare una chiave esterna dell'ID di una tabella nella seconda tabella, è importante creare quell'ID specifico come chiave primaria nella sua tabella. Altrimenti, non costituirà una chiave estera nell'altra tabella. Si verificherà un errore durante la creazione della chiave estera.

NESSUNA AZIONE

Dopo la creazione di tabelle, utilizziamo per immettere i valori in esso per comando "inserisci".

>> Insert in Designer (designer_name) valori ('Ahmad Shah'), ('Sajjad Hassan');

Allo stesso modo nel caso della seconda tabella, immettere i valori.

>> inserisci nella categoria (designer_id, category_name) valori (1, 'FROCK'), (1, 'FROCK'), (2, 'Suit'), (2, 'Suit-1');

Nella tabella "Categoria", i valori verranno inseriti in due colonne tra cui Category_Name e Designer_ID. Abbiamo aggiunto lo stesso numero per l'ID e lo stesso nome per la categoria_name qui per soddisfare la condizione. Ora applica il comando Elimina per dimostrare il tipo di chiave esterna "nessuna azione". In questo comando, abbiamo fornito un numero ID per eliminare la riga specifica dalla tabella.

>> Elimina da Designer Where Designer_id = 1;

Questa query non eseguirà correttamente. Mostrerà un messaggio di errore come visualizzato nello snap come menzionato sopra. Questo errore è dovuto a "nessuna eliminazione nessuna azione". PostgreSQL mostra la violazione del vincolo perché designer_id = 1 è per due righe attualmente presenti nella tabella.

Imposta null come opzione sulla clausola Elimina

Crea una tabella denominata "dipendente" con EMP_ID come chiave primaria.

>> Crea un dipendente di tabella (emo_id generato sempre come identità, emp_name varchar (50) non null, chiave primaria (emp_id));

Quando eseguiamo la query, viene visualizzato un messaggio che mostra che la nostra query viene eseguita correttamente. Dopo aver creato la tabella dei dipendenti, creare la tabella dei figli "Informazioni" utilizzando "EMP_ID" come chiave esterna.

>> Crea tabella info (info_id int generato sempre come identità, info_id int, emp_id int, info_name varchar (200) non null, chiave primaria (info_id), vincolo fk_employee straniera chiave (emp_id) dipendente (emp_id) sul set di eliminazione null) ;

Eseguire la query e vedrai che la tabella è creata. Come l'istruzione tabella "create" utilizzata in precedenza, questa è la stessa. Qui abbiamo aggiunto proprietà.

"Su elimina set null". Questa azione viene applicata nella clausola di Elimina. Ora dobbiamo riempire le tabelle con i valori.

>> inserisci nei valori dei dipendenti (emp_name) ("Sophia Smith"), ("Rubi Williams"), ("Victoria Gomex"); >> Insert in Info (emp_id, info_name) valori (1, "impiegato"), (1, "manager"), (2, "manager"), (3, "impiegato");

Il comando ELETE è costituito dalla clausola "dove" per identificare l'ID da eliminare dalla riga nel dipendente della tabella.

>> Elimina dal dipendente dove EMP_ID = 2;

I dati pertinenti verranno eliminati sull'esecuzione della query. Vedremo il tavolo risultante lasciato dopo quella domanda.

>> Seleziona * da informazioni;

Le righe che hanno il riferimento specifico nella tabella dei figli "informazioni" sono impostate su null perché abbiamo usato l'azione set di set elimina nel comando alla creazione della tabella.

Utilizzando un comando alter tabella

Negli esempi precedenti, abbiamo visto come applicare i vincoli al momento della creazione delle tabelle. Cosa succede se hai creato le tabelle con vincoli FK (chiave estera) e, in seguito, si desidera aggiungere vincoli? Ecco una soluzione a questa domanda. In primo luogo creeremo due tabelle. Ma al momento della creazione della tabella, non è necessario identificare la chiave esterna nella seconda tabella per renderla da bambino.

>> Crea tabella infermiera (infermiere_id int non null, infermiere_name varchar (55) non null, infermiere_location varchar (55) non null, chiave primaria (infermiera_id)); >> Crea tabella clinic clinic_id int, infermiere_id int, clinic_details varchar (50) non null, clinic_type varchar (50) non null);

Questa tabella non contiene i vincoli e i riferimenti della chiave estera, ecc. Dopo l'inserimento, ora aggiorneremo la tabella consentendo i vincoli ad essa.

>> Alter Tabella Clinic Aggiungi vincolo fk_nurse Foreign Key (clinic_id) riferimenti infermiera (infermiere_id) su eliminare cascata su aggiornamento limit;

La tabella avrà ora la chiave estera dopo l'alterazione.

Rimuovi i vincoli dalla tabella

A tale scopo, utilizziamo Alter Command. Questo comando rimuoverà solo i vincoli dalla tabella.

Questo è necessario per eliminare l'intero tavolo. Ma è impossibile eliminare o abbandonare tale tabella che ha un join con l'altra tabella sotto forma di una chiave esterna. Quindi in primo luogo, rimuoviamo il fk_constraint della tabella prima creata dal secondo. Considera la tabella "designer" e la tabella dei bambini "categoria".

>> Vincolo di caduta della categoria della tabella altera fk_designer;

Dopo aver visto che la query viene eseguita. Ora applica il comando drop.

>> drop table se esiste designer;

Il diagramma rappresenta le chiavi estranee all'interno delle tabelle. Dalla rappresentazione ERD, abbiamo fatto uno scatto per chiarire l'ambiguità riguardo ai vincoli dell'immagine; Puoi vedere i join nei tavoli che abbiamo creato in questo articolo.

Conclusione

"Foreign Key Postgresql" mostra la relazione di giunzione tra due tabelle. Prendere il record di una tabella causando un cambiamento in un'altra può essere eseguita solo attraverso questo vincolo. La relazione genitore-figlio è integrata condividendo le chiavi. Questa chiave può essere introdotta nella creazione o nell'aggiornamento della tabella. Entrambi i metodi sono spiegati in questa guida. Questi esempi descrivono l'importanza delle chiavi in ​​tutte le tabelle utilizzate in qualsiasi database.