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

Kunci asing merujuk kunci asing lainnya di PostgreSQL

Batasan kunci asing tidak peduli apakah kolom yang direferensikan merujuk ke kolom lain itu sendiri. Tetapi kolom yang direferensikan harus Jadilah unik. Itulah pesan kesalahan yang memberitahu Anda (cukup jelas).

Yang Anda lewatkan adalah kunci asing batasan dapat didasarkan pada beberapa kolom . Ini akan berhasil:

FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission

Mengganti:

FOREIGN KEY (num) REFERENCES submission(num),
FOREIGN KEY (user_id) REFERENCES submission(user_id),
FOREIGN KEY (assignment_id) REFERENCES submission(assignment_id)

Bentuk singkat dari sintaks (REFERENCES submission ) dimungkinkan, karena Anda mereferensikan kunci utama, yang merupakan default.

Plus, Anda dapat menyederhanakan:buat submission.num kunci utama kolom tunggal, jatuhkan kolom yang berlebihan user_id dan assignment_id dari correction dan kurangi batasan fk menjadi (num) - seperti yang dibahas dalam jawaban @Tim .

Selama Anda memiliki batasan fk multikolom, pertimbangkan NOT NULL batasan pada setiap kolom referensi (seperti yang dikomentari oleh @joop). Jika tidak, satu atau lebih nilai NULL di kolom referensi memungkinkan untuk keluar dari batasan fk dengan MATCH SIMPLE default perilaku. Ini mungkin disengaja atau tidak, biasanya tidak .
Atau pertimbangkan MATCH FULL untuk batasan fk multicolumn hanya mengizinkan jika semua kolom referensi adalah NULL. Detail:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melewati banyak nilai dalam parameter tunggal

  2. Izin ditolak saat mencoba mengimpor file CSV dari PGAdmin

  3. Apa itu pengguna super postgres?

  4. PostgreSQL cara melihat kueri mana yang telah dijalankan

  5. Bagaimana membandingkan dua array dan hanya memilih elemen yang tidak cocok Di postgres