PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

sintaks kunci asing postgresql

Dengan asumsi tabel ini:

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

Ada empat cara berbeda untuk mendefinisikan kunci asing (ketika berhadapan dengan satu kolom PK) dan semuanya mengarah ke batasan kunci asing yang sama:

  1. Sebaris tanpa menyebutkan kolom target:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students
    );
    
  2. Sejalan dengan menyebutkan kolom target:

    CREATE TABLE tests 
    ( 
       subject_id SERIAL,
       subject_name text,
       highestStudent_id integer REFERENCES students (student_id)
    );
    
  3. Keluar dari baris di dalam 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. Sebagai alter table yang terpisah pernyataan:

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

Yang mana yang Anda sukai adalah masalah selera. Tetapi Anda harus konsisten dalam skrip Anda. Dua pernyataan terakhir adalah satu-satunya opsi jika Anda memiliki kunci asing yang mereferensikan PK yang terdiri dari lebih dari satu kolom - Anda tidak dapat mendefinisikan "inline" FK dalam kasus itu, mis. foreign key (a,b) references foo (x,y)

Hanya versi 3) dan 4) yang akan memberi Anda kemampuan untuk menentukan nama Anda sendiri untuk batasan FK jika Anda tidak menyukai yang dihasilkan sistem dari Postgres.

serial tipe data sebenarnya bukan tipe data. Ini hanya notasi tangan pendek yang mendefinisikan nilai default untuk kolom yang diambil dari urutan. Jadi setiap kolom referensi kolom yang didefinisikan sebagai serial harus didefinisikan menggunakan tipe dasar yang sesuai integer (atau bigint untuk bigserial kolom)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengonfigurasi PostgreSQL untuk Observabilitas

  2. Bagaimana cara menghubungkan aplikasi C# Windows mobile 6.5 ke database Postgres?

  3. Tidak dapat mendekripsi menggunakan pgcrypto dari AES-256-CBC tetapi AES-128-CBC tidak masalah

  4. pg_restore Alternatif - Pencadangan PostgreSQL dan Pemulihan Otomatis dengan ClusterControl

  5. Pisahkan data kolom yang dipisahkan koma menjadi kolom tambahan