sql >> Databáze >  >> RDS >> Mysql

Potřebujete radu a zpětnou vazbu ohledně kódování vztahu many:many v MySQL

Dítě nemůže mít více než 2 rodiče, oba mají specifické role (matka vs. otec) a může nastat situace, kdy jeden nebo oba rodiče nejsou známí.

Nejedná se tedy o skutečný vztah „mnoho k mnoha“, je to ve skutečnosti „mnoho ku nule nebo jedna nebo dvě“, což lze přirozeně reprezentovat takto (obě MotherID a FatherID mají hodnotu NULL):

Pokud zadáte LastName v obou Parent a Player (nebo běžná supertřída ve vašem případě), to samozřejmě pokrývá i situaci, kdy rodiče mají jiná příjmení než jejich děti.

Takto snadno získáte „děti na rodiče“ (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

...a otočte data v kódu aplikace, pokud si to přejete.

Výše uvedený model umožňuje nesoulad mezi Parent pohlaví a jeho role matky/otce. Pokud tomu chcete zabránit, můžete jít přes palubu a udělat něco takového...

...ale raději nebudu komplikovat a zůstanu u prvního modelu a prosadím to na aplikační úrovni.



  1. Problémy aktivních záznamů CodeIgniter s voláním více uložených procedur

  2. Jak změnit úroveň kompatibility databáze s T-SQL

  3. Prisma, jak vyčistit databázi

  4. Tabulka uzavření MySql nepodporuje duplicitní podkategorie pro různé rodiče