sql >> Databáze >  >> RDS >> PostgreSQL

syntaxe cizího klíče postgresql

Za předpokladu této tabulky:

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

Existují čtyři různé způsoby, jak definovat cizí klíč (při práci s jedním sloupcem PK) a všechny vedou ke stejnému omezení cizího klíče:

  1. Inline bez uvedení cílového sloupce:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students
    );
    
  2. V souladu s uvedením cílového sloupce:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students (student_id)
    );
    
  3. Mimo řádek uvnitř 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 samostatná alter table prohlášení:

    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);
    

Kterému dáváte přednost, je věcí vkusu. Ale měli byste být ve svých skriptech konzistentní. Poslední dva příkazy jsou jedinou možností, pokud máte cizí klíče odkazující na PK, která se skládá z více než jednoho sloupce - v takovém případě nelze definovat FK "inline", např. foreign key (a,b) references foo (x,y)

Pouze verze 3) a 4) vám dá možnost definovat vlastní název pro omezení FK, pokud se vám nelíbí ty systémem generované z Postgresu.

serial datový typ není ve skutečnosti datovým typem. Je to jen krátký zápis, který definuje výchozí hodnotu pro sloupec převzatý ze sekvence. Tedy jakýkoli sloupec odkazující sloupec definovaný jako serial musí být definován pomocí příslušného základního typu integer (nebo bigint pro bigserial sloupce)




  1. Lumen - Vytvořte připojení k databázi za běhu

  2. Nastavení jazykových parametrů Oracle pro DG4ODBC

  3. Jak znovu vytvořit nekonzistentní PostgreSQL Slave

  4. Jak vložit řetězec, který obsahuje &