Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Benötigen Sie Ratschläge und Feedback zum Codieren einer Viele:Viele-Beziehung in MySQL

Ein Kind kann nicht mehr als 2 Elternteile haben, beide haben bestimmte Rollen (Mutter vs. Vater) und es kann Situationen geben, in denen ein oder beide Elternteile unbekannt sind.

Das ist also keine echte "viele-zu-viele"-Beziehung, sondern tatsächlich "viele zu null oder eins oder zwei", was natürlich so dargestellt werden kann (sowohl MotherID und FatherID sind NULL-fähig):

Wenn Sie LastName eingeben in beiden Parent und Player (oder in Ihrem Fall eine gemeinsame Oberklasse) umfasst dies natürlich auch den Fall, dass Eltern andere Nachnamen haben als ihre Kinder.

Sie können dann einfach "Kinder pro Elternteil" wie folgt erhalten (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

...und schwenken Sie die Daten in Ihrem Anwendungscode, wenn Sie dies wünschen.

Das obige Modell lässt eine Nichtübereinstimmung zwischen Parent zu das Geschlecht und seine Mutter/Vater-Rolle. Wenn Sie dies verhindern möchten, können Sie über Bord gehen und so etwas tun ...

...aber ich möchte es lieber nicht verkomplizieren und beim ersten Modell bleiben und dies auf Anwendungsebene durchsetzen.