Tengo una entidad que no puede existir sin ser definida por otra, y quiero que esta entidad participe en una relación de muchos a muchos.
Ejemplo: un artista tiene un álbum (el álbum no puede existir sin un artista), el álbum también tiene muchas pistas, pero la misma pista puede existir en muchos álbumes.
Así que tenemos una relación de muchos a muchos entre el álbum y las pistas.
Si el álbum es una entidad débil, entonces su clave principal es una clave externa que hace referencia al artista, por lo tanto, no puede ser una clave externa para otra tabla que represente una relación de muchos a muchos.
La pregunta es: ¿es posible tener este tipo de relación en SQL, y si es así, cómo lo expreso?
database-design
foreign-key
referential-integrity
Raiden Freeman
fuente
fuente
artist_id
clave externa que hace referencia al artista. Si desea asignar una sola pista a varios álbumes, utilice una tabla de asignación contrack_id, album_id
. Fácil :)Respuestas:
Creo que puedes, usando un diagrama de relación "diamante":
fuente
(albumID, trackNo)
y agregaré la otra restricción Unique, también.Desafortunadamente, no tengo suficiente representante para comentar la respuesta de ypercubeᵀᴹ , por lo que publicaré una respuesta alternativa en su lugar, estoy de acuerdo con esa respuesta en general, pero creo que la clave principal y las contracciones únicas
AlbumTrack
son incorrectas dado que los álbumes y las pistas son débiles entidades. Por ejemplo, los siguientes datos válidos serían, con las restricciones prescritas, no permitidos:En cambio, establecería
PRIMARY KEY (artistID, albumID, trackID)
y soltaría la restricción única, lo que resultaría en:Las pistas todavía están limitadas a ocurrir como máximo una vez por álbum.
Además, la pregunta en realidad no especifica que las pistas son entidades débiles (solo que los álbumes lo son): si las pistas pueden existir independientemente de los artistas, las tablas
Track
yAlbumTrack
se definen de manera ligeramente diferente:fuente