PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

składnia klucza obcego postgresql

Zakładając tę ​​tabelę:

CREATE TABLE students 
( 
  student_id SERIAL PRIMARY KEY,
  player_name TEXT
);

Istnieją cztery różne sposoby definiowania klucza obcego (w przypadku pojedynczej kolumny PK) i wszystkie prowadzą do tego samego ograniczenia klucza obcego:

  1. W tekście bez wzmianki o kolumnie docelowej:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students
    );
    
  2. W zgodzie ze wzmianką o kolumnie docelowej:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students (student_id)
    );
    
  3. Poza linią wewnątrz create table :

    CREATE TABLE tests 
    ( 
      subject_id SERIAL,
      subject_name text,
      highestStudent_id integer, 
      constraint fk_tests_students
         foreign key (highestStudent_id) 
         REFERENCES students (student_id)
    );
    
  4. Jako oddzielna alter table oświadczenie:

    CREATE TABLE tests 
    ( 
      subject_id SERIAL,
      subject_name text,
      highestStudent_id integer
    );
    
    alter table tests 
        add constraint fk_tests_students
        foreign key (highestStudent_id) 
        REFERENCES students (student_id);
    

To, który wolisz, to kwestia gustu. Ale powinieneś być konsekwentny w swoich skryptach. Dwie ostatnie instrukcje są jedyną opcją, jeśli masz klucze obce odwołujące się do PK składającego się z więcej niż jednej kolumny - w takim przypadku nie możesz zdefiniować FK "inline", np. foreign key (a,b) references foo (x,y)

Tylko wersje 3) i 4) dają możliwość zdefiniowania własnej nazwy dla ograniczenia FK, jeśli nie podobają Ci się te wygenerowane przez system z Postgresa.

serial typ danych tak naprawdę nie jest typem danych. To tylko krótka notacja ręczna, która definiuje domyślną wartość kolumny wziętej z sekwencji. Tak więc każda kolumna odwołująca się kolumna zdefiniowana jako serial musi być zdefiniowany przy użyciu odpowiedniego typu bazowego integer (lub bigint dla bigserial kolumny)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć ciągi w polu ciągu w zapytaniu PostgreSQL „grupuj według”?

  2. Jak skonfigurować postgresql po raz pierwszy?

  3. Psql nie mógł połączyć się z serwerem:Brak takiego pliku lub katalogu, błąd 5432?

  4. Jak zresetować sekwencję dla identyfikatorów w tabelach PostgreSQL

  5. PostgreSQL — musi występować w klauzuli GROUP BY lub być używany w funkcji agregującej