sql >> Database >  >> RDS >> Mysql

Advies en feedback nodig over het coderen van een veel:veel-relatie in MySQL

Een kind kan maximaal 2 ouders hebben, beiden hebben een specifieke rol (moeder vs. vader) en er kan een situatie zijn waarbij één of beide ouders onbekend zijn.

Dit is dus geen echte "veel op veel" relatie, het is eigenlijk "veel op nul of één of twee", wat natuurlijk als volgt kan worden weergegeven (beide MotherID en FatherID zijn NULL-staat):

Als u LastName in beide Parent en Player (of een veelvoorkomende superklasse in jouw geval), dit dekt natuurlijk ook de situatie waarin ouders andere achternamen hebben dan hun kinderen.

Je kunt dan gemakkelijk "kinderen per ouder" krijgen zoals deze (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

...en draai de gegevens in uw applicatiecode als u dat wilt.

Het bovenstaande model staat mismatch toe tussen Parent het geslacht en de moeder/vaderrol. Als je dit wilt voorkomen, kun je overboord gaan en zoiets doen...

...maar ik zou het liever niet ingewikkeld maken en bij het eerste model blijven en dit op applicatieniveau afdwingen.



  1. Hoe het aantal waarden te selecteren, gegroepeerd op bereiken

  2. Hoe verwijder ik uit meerdere tabellen met INNER JOIN in SQL server?

  3. Hoe een varchar-kolom te splitsen als meerdere waarden in SQL?

  4. Hoe meerdere items in een databasekolom op te slaan?