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

Menghubungkan tabel ketiga ke tabel jembatan dalam asosiasi banyak ke banyak

+1 untuk Matt Fenwick. Saya ingin menambahkan bahwa Anda ingin sedikit berhati-hati dengan batasan kunci asing Anda. Anda pada dasarnya memiliki dua opsi, yang keduanya dapat terlihat sangat mirip, tergantung pada pilihan kunci utama Anda.

Opsi satu adalah:Lupakan perpotongan sederhana antara TEACHER dan INSTRUMENT dan ganti dengan persimpangan kompleks yang menyertakan teacher_id , instrument_id dan level_id . Ketiga kolom ini akan menjadi kunci utama (gabungan) dari tabel persimpangan ini. Dalam opsi ini, Anda memiliki batasan kunci asing yang ditentukan di teacher_id dan instrument_id (dan level_id jika ini sebenarnya adalah kunci asing ke LEVEL tabel dan bukan hanya kode integer atau string).

Opsi dua adalah:Pertahankan persimpangan sederhana antara TEACHER dan INSTRUMENT (sebut saja TEACHER_INSTRUMENT meskipun itu tidak imajinatif) dan tambahkan tabel sub-anak yang mendefinisikan level yang bisa diajarkan. Tabel sub-anak ini (sebut saja SKILL ) memiliki level_id dan kunci asing untuk TEACHER_INSTRUMENT . Jika kunci utama TEACHER_INSTRUMENT adalah kombinasi dari teacher_id dan instrument_id lalu SKILL tabel akan memiliki tiga kolom yang sama seperti pada opsi satu. Apa yang membuat opsi ini berbeda? Batasan kunci asing dari SKILL harus ke meja persimpangan, bukan ke TEACHER dan INSTRUMENT .

Mengapa ini penting? Jika Anda memilih opsi satu, Anda mungkin perlu memiliki beberapa logika kueri tambahan untuk mendapatkan kisi keterampilan yang terisi penuh, karena tidak ada batasan integritas referensial yang dapat Anda tentukan yang akan memastikan bahwa semua tingkat keterampilan diisi untuk setiap kombinasi guru/instrumen.

Di sisi lain, jika Anda memilih opsi dua, Anda memiliki keuntungan pemisahan kekhawatiran antara siapa yang dapat menggunakan apa dan seberapa baik mereka dapat mengajarkannya.

Apa yang ingin Anda hindari adalah memiliki satu tabel yang hanya berisi hubungan guru/instrumen dan kemudian tabel kedua yang (secara independen) mengulangi hubungan itu tetapi menambahkan detail tingkat keterampilan. Jika Anda melakukannya, Anda berisiko mengalami dua hal ini menjadi tidak sinkron.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP/MySQL Masukkan nilai nol

  2. Ulangi array input formulir di php

  3. TO_DAYS() Contoh – MySQL

  4. kesalahan terus muncul di kode saya (koneksi sudah terbuka)

  5. Kesalahan Sintaks PHP PDO atau pelanggaran akses:1064 saat dimasukkan