Mysql
 sql >> Base de données >  >> RDS >> Mysql

Besoin de conseils et de commentaires sur le codage d'une relation plusieurs à plusieurs dans MySQL

Un enfant ne peut pas avoir plus de 2 parents, les deux ont des rôles spécifiques (mère contre père) et il peut y avoir une situation où l'un ou les deux parents sont inconnus.

Ce n'est donc pas une vraie relation "plusieurs à plusieurs", c'est en fait "plusieurs à zéro ou un ou deux", qui peut être naturellement représenté comme ceci (à la fois MotherID et FatherID sont NULL-able):

Si vous mettez LastName dans les deux Parent et Player (ou une superclasse commune dans votre cas), cela couvre aussi naturellement la situation où les parents ont des noms de famille différents de ceux de leurs enfants.

Vous pouvez alors facilement obtenir des "enfants par parent" comme ceci (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

...et faire pivoter les données dans votre code d'application si c'est ce que vous souhaitez.

Le modèle ci-dessus permet une incompatibilité entre Parent son sexe et son rôle de mère/père. Si vous voulez éviter cela, vous pouvez aller trop loin et faire quelque chose comme ça...

... mais je préfère ne pas compliquer et m'en tenir au premier modèle et l'appliquer au niveau de l'application.