sql >> Base de Datos >  >> RDS >> Mysql

Necesito algunos consejos y comentarios sobre la codificación de una relación muchos:muchos en MySQL

Un niño no puede tener más de 2 padres, ambos tienen roles específicos (madre vs. padre) y puede haber una situación en la que uno o ambos padres sean desconocidos.

Entonces, esta no es una relación real de "muchos a muchos", en realidad es "muchos a cero o uno o dos", que puede representarse naturalmente así (ambos MotherID y FatherID son compatibles con NULL):

Si pones LastName en ambos Parent y Player (o una superclase común en su caso), esto también cubre naturalmente la situación en la que los padres tienen apellidos diferentes a los de sus hijos.

Luego puede obtener fácilmente "hijos por padre" 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

...y pivote los datos en el código de su aplicación si eso es lo que desea.

El modelo anterior permite la discrepancia entre Parent El género y el rol de madre/padre. Si quieres evitar esto, puedes ir por la borda y hacer algo como esto...

...pero prefiero no complicarme y quedarme con el primer modelo y hacer cumplir esto a nivel de aplicación.