Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hanya satu kunci dari kunci primer komposit sebagai kunci asing

Jawaban ini mengambil pertanyaan "tambahkan kunci asing ke table3 " berarti bahwa FK (kunci asing) telah ditambahkan di table3 mereferensikan salah satu kolom PK komposit (kunci utama) dari table4 . Dalam SQL standar, FK dapat mereferensikan subset PK yang tepat/lebih kecil.

Jawaban lain ini mungkin membutuhkan "tambahkan kunci asing ke table3 " artinya FK telah ditambahkan di table4 dengan salah satu kolom referensi PK table3 . Kolom FK yang ditetapkan dalam tabel tidak bergantung pada deklarasi PK atau UNIK apa pun di dalamnya.

Dalam SQL standar, FK dapat mereferensikan subset PK yang tepat/lebih kecil.

Daftar kolom yang direferensikan harus dinyatakan KUNCI UTAMA atau UNIK. (KUNCI UTAMA membuat batasan UNIK NOT NULL.) (Konstrain harus eksplisit, meskipun kumpulan kolom NOT NULL yang berisi kumpulan UNIK harus unik.)

Sayangnya MySQL memungkinkan Anda mendeklarasikan FK yang mereferensikan daftar kolom yang tidak UNIK. Meskipun FK atau satu referensi kolom non-NULL (OK dalam SQL standar) tidak diterapkan dengan benar, dan dokumentasi itu sendiri menyarankan untuk tidak melakukannya:

(Anda dapat merenungkan apa yang merupakan dan bukan operasi yang terdefinisi dengan baik, karena dokumentasi tidak benar-benar menjelaskan.)

1.8.2.3 Perbedaan Kunci Asing
13.1.18 BUAT TABEL Sintaks
13.1.18.6 Menggunakan ASING Kendala KUNCI

PS Re relasional vs SQL

Dalam model relasional, FK mereferensikan CK (kandidat kunci). Superkey adalah kumpulan kolom yang unik. CK adalah superkey yang tidak mengandung superkey yang lebih kecil. Satu CK bisa disebut PK (primary key). Ketika nilai kumpulan kolom harus muncul di tempat lain, kami mengatakan ada IND (ketergantungan penyertaan). Sebuah FK adalah IND untuk CK. Ketika IND menjadi superkey, kita bisa menyebutnya "foreign superkey".

SQL PK atau UNIQUE NOT NULL menyatakan superkey. Ini adalah CK ketika tidak berisi kumpulan kolom yang lebih kecil yang dideklarasikan sebagai SQL PK atau UNIQUE NOT NULL . SQL FK menyatakan superkey asing. Jadi SQL PK mungkin sebenarnya menjadi PK relasional (karenanya CK) dan UNIQUE NOT NULL mungkin sebenarnya menjadi sebuah CK. SQL FK untuk salah satu dari ini sebenarnya adalah FK relasional.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL max() dengan gabungan bagian dalam

  2. Bagaimana cara mendapatkan nilai kolom tunggal menggunakan MySQLi?

  3. Mengapa SQLAlchemy menjalankan Pembaruan tidak berfungsi

  4. Mengubah judul kolom SQL melalui kueri

  5. Bagaimana cara menggabungkan data dari beberapa tabel menggunakan SQL?