Mysql
 sql >> Database >  >> RDS >> Mysql

Hai bisogno di consigli e feedback sulla codifica di una relazione molti:molti in MySQL

Un bambino non può avere più di 2 genitori, entrambi hanno ruoli specifici (madre contro padre) e può esserci una situazione in cui uno o entrambi i genitori sono sconosciuti.

Quindi questa non è una vera relazione "molti a molti", in realtà "molti a zero o uno o due", che può essere rappresentata naturalmente in questo modo (entrambi MotherID e FatherID sono abilitati NULL):

Se metti LastName in entrambi Parent e Player (o una superclasse comune nel tuo caso), questo naturalmente copre anche la situazione in cui i genitori hanno cognomi diversi dai loro figli.

Puoi quindi ottenere facilmente "figli per genitore" in questo modo (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 scambia i dati nel codice della tua applicazione se è quello che desideri.

Il modello sopra consente la mancata corrispondenza tra Parent sesso di s e il suo ruolo madre/padre. Se vuoi evitarlo puoi esagerare e fare qualcosa del genere...

...ma preferirei non complicare e attenermi al primo modello e applicarlo a livello di applicazione.