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

Butuh saran dan umpan balik tentang pengkodean hubungan banyak:banyak di MySQL

Seorang anak tidak dapat memiliki lebih dari 2 orang tua, keduanya memiliki peran tertentu (ibu vs ayah) dan dapat terjadi situasi di mana salah satu atau kedua orang tua tidak diketahui.

Jadi ini bukan hubungan "banyak ke banyak" yang sebenarnya, ini sebenarnya "banyak ke nol atau satu atau dua", yang secara alami dapat direpresentasikan seperti ini (keduanya MotherID dan FatherID dapat NULL):

Jika Anda memasukkan LastName di kedua Parent dan Player (atau superclass umum dalam kasus Anda), ini juga secara alami mencakup situasi di mana orang tua memiliki nama belakang yang berbeda dari anak-anak mereka.

Anda kemudian dapat dengan mudah mendapatkan "anak per orang tua" seperti ini (SQL Fiddle )...

SELECT
    ParentID,
    Parent.FirstName ParentFirstName,
    Parent.LastName ParentLastName,
    PlayerID,
    Player.FirstName PlayerFirstName,
    Player.LastName PlayerLastName
FROM
    Parent
    LEFT JOIN Player
        ON Parent.ParentID = Player.MotherID
        OR Parent.ParentID = Player.FatherID
ORDER BY ParentId

...dan memutar data dalam kode aplikasi Anda jika itu yang Anda inginkan.

Model di atas memungkinkan ketidakcocokan antara Parent jenis kelamin dan peran ibu/ayahnya. Jika Anda ingin mencegahnya, Anda bisa berlebihan dan melakukan sesuatu seperti ini...

...tapi saya lebih suka tidak memperumit dan tetap menggunakan model pertama dan menerapkan ini di tingkat aplikasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. KONDISI MASUKKAN KE MySQL - DI MANA TIDAK ADA

  2. Urutan acak dengan Entity Framework dan MySQL

  3. buat daftar pekerjaan favorit menggunakan PHP dan MYSQL

  4. Innodb:Tidak dapat menemukan indeks FULLTEXT yang cocok dengan daftar kolom saat ditanyakan lebih dari 1 kolom

  5. Perilaku MySQL dari ON DUPLICATE KEY UPDATE untuk beberapa bidang UNIK