Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Precisa de alguns conselhos e feedback sobre a codificação de um relacionamento muitos:muitos no MySQL


Uma criança não pode ter mais de 2 pais, ambos têm papéis específicos (mãe vs. pai) e pode haver uma situação em que um ou ambos os pais são desconhecidos.

Portanto, este não é um relacionamento real "muitos para muitos", na verdade "muitos para zero ou um ou dois", que pode ser representado naturalmente assim (ambos MotherID e FatherID são NULL-capazes):



Se você colocar LastName em ambos Parent e Player (ou uma superclasse comum no seu caso), isso também abrange naturalmente a situação em que os pais têm sobrenomes diferentes dos filhos.

Você pode facilmente obter "filhos por pai" como este (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

...e dinamize os dados no código do seu aplicativo, se for o que você deseja.

O modelo acima permite incompatibilidade entre Parent gênero e seu papel de mãe/pai. Se você quiser evitar isso, você pode ir ao mar e fazer algo assim ...



...mas prefiro não complicar e ficar com o primeiro modelo e aplicar isso no nível do aplicativo.