sql >> Databasteknik >  >> RDS >> Mysql

Behöver lite råd och feedback om kodning av många:många-relationer i MySQL

Ett barn kan inte ha fler än 2 föräldrar, båda har specifika roller (mamma vs pappa) och det kan finnas en situation där en eller båda föräldrarna är okända.

Så det här är inte en riktig "många till många"-relation, det är faktiskt "många till noll eller en eller två", som naturligt kan representeras så här (båda MotherID och FatherID är NULL-kapabla):

Om du sätter LastName i båda Parent och Player (eller en vanlig superklass i ditt fall), detta täcker naturligtvis också situationen där föräldrar har andra efternamn än sina barn.

Du kan sedan enkelt få "barn per förälder" så här (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

...och pivotera data i din applikationskod om det är vad du vill.

Ovanstående modell tillåter oöverensstämmelse mellan Parent s kön och dess mamma/pappa roll. Om du vill förhindra detta kan du gå överbord och göra något liknande...

...men jag vill helst inte komplicera och hålla mig till den första modellen och genomdriva detta på applikationsnivå.



  1. Hur konfigurerar jag Rails för lösenordslös åtkomst till fjärrdatabas

  2. Varför uppstår fel när jag skickar flera frågor till mysqli_query?

  3. Fråga över flera databaser på samma server

  4. MySQL ställer in aktuellt datum i ett DATETIME-fält vid infogning