sql >> Database teknologi >  >> RDS >> PostgreSQL

postgresql udenlandsk nøgle syntaks

Forudsat denne tabel:

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

Der er fire forskellige måder at definere en fremmednøgle på (når man har at gøre med en enkelt kolonne PK), og de fører alle til den samme fremmednøglebegrænsning:

  1. Inline uden at nævne målkolonnen:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students
    );
    
  2. Inline med omtale af målkolonnen:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students (student_id)
    );
    
  3. Ude af linjen inde i 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. Som en separat alter table erklæring:

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

Hvilken man foretrækker er en smagssag. Men du bør være konsekvent i dine scripts. De sidste to udsagn er den eneste mulighed, hvis du har fremmednøgler, der refererer til en PK, der består af mere end én kolonne - du kan i så fald ikke definere FK'en "inline", f.eks. foreign key (a,b) references foo (x,y)

Kun version 3) og 4) vil give dig mulighed for at definere dit eget navn til FK-begrænsningen, hvis du ikke kan lide de systemgenererede fra Postgres.

serial datatype er ikke rigtig en datatype. Det er kun en kort håndnotation, der definerer en standardværdi for kolonnen taget fra en sekvens. Så enhver kolonne henvisning en kolonne defineret som serial skal defineres ved hjælp af den relevante basistype integer (eller bigint for bigserial kolonner)




  1. Sådan automatiseres migrering fra Standalone MySQL til Galera Cluster ved hjælp af Ansible

  2. Anmodningen mislykkedes med HTTP-status 401:Uautoriseret I SSRS

  3. Sådan kører du SHOW LOCALES i MariaDB

  4. Sådan vælger du det seneste sæt af daterede poster fra en mysql-tabel