CASO 1:
se è necessario creare una chiave esterna durante la creazione di una nuova tabella
CREATE TABLE table1(
id SERIAL PRIMARY KEY,
column1 varchar(n) NOT NULL,
table2_id SMALLINT REFERENCES table2(id)
);
I comandi precedenti creeranno una tabella con il nome 'table1' e tre colonne denominate 'id' (chiave primaria), 'column1', 'table2_id' (chiave esterna della tabella1 che fa riferimento alla colonna id della tabella2).
DATATYPE 'serial' renderà la colonna che utilizza questo tipo di dati come colonna generata automaticamente, quando si inseriscono valori nella tabella non è necessario menzionare questa colonna, oppure si può dare 'default' senza virgolette nella posizione del valore.
Una colonna chiave primaria viene sempre aggiunta all'indice della tabella con il valore 'tablename_pkey'.
Se al momento della creazione della tabella viene aggiunta una chiave esterna, viene aggiunto A VINCITORE con il motivo '(nome_tabella_attuale) _ (nome_chia_id_estero) _fkey'.
Quando si aggiunge una chiave esterna, dobbiamo inserire la parola chiave "RIFERIMENTI" accanto al nome della colonna perché vogliamo dire ai postgres che questa colonna fa riferimento a una tabella e quindi accanto ai riferimenti dobbiamo dare la tabella come riferimento e tra parentesi dare il nome della colonna della tabella referenziata, in genere le chiavi esterne vengono fornite come colonne chiave primaria.
CASO 2:
se si desidera una chiave esterna per una tabella esistente su una colonna esistente
ALTER TABLE table1
ADD CONSTRAINT table1_table2_id_id_fkey
FOREIGN KEY (table2_id) REFERENCES table2(id);
NOTA: le parentesi '()' dopo FOREIGN KEY e REFERENCES tabel2 sono obbligatorie altrimenti postgres genererà un errore.