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

Har brug for nogle råd og feedback om kodning af mange:mange forhold i MySQL

Et barn kan ikke have mere end 2 forældre, begge har specifikke roller (mor vs. far), og der kan være en situation, hvor en eller begge forældre er ukendte.

Så dette er ikke et rigtigt "mange til mange" forhold, det er faktisk "mange til nul eller en eller to", som naturligt kan repræsenteres på denne måde (begge MotherID og FatherID er NULL-standbare):

Hvis du sætter LastName i begge Parent og Player (eller en almindelig superklasse i dit tilfælde), dækker dette naturligvis også over den situation, hvor forældre har forskellige efternavne end deres børn.

Du kan så nemt få "børn pr. forælder" som denne (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

...og pivot dataene i din ansøgningskode, hvis det er det, du ønsker.

Ovenstående model tillader mismatch mellem Parent s køn og dets mor/far-rolle. Hvis du vil forhindre dette, kan du gå overbord og gøre sådan noget...

...men jeg vil helst ikke komplicere og holde mig til den første model og håndhæve dette på applikationsniveau.



  1. Hvordan kan jeg få decimalerne i AVG til at fungere i sql til kun at begrænse til 2?

  2. 2 måder at erstatte en understreng i MariaDB

  3. Få kolonneprivilegier til en tabel i SQL Server ved hjælp af T-SQL:sp_column_privileges

  4. InnoDB-tabeller findes i MySQL, men siger, at de ikke eksisterer efter kopiering af database til ny server