Ich habe eine Entität, die nicht existieren kann, ohne von einer anderen definiert zu werden, und ich möchte, dass diese Entität an einer Viele-zu-Viele-Beziehung teilnimmt.
Beispiel: Ein Künstler hat ein Album (das Album kann nicht ohne einen Künstler existieren), das Album hat auch viele Titel, aber der gleiche Titel kann in vielen Alben existieren.
Wir haben also eine Beziehung zwischen dem Album und den Tracks.
Wenn das Album eine schwache Entität ist, ist sein Primärschlüssel ein Fremdschlüssel, der auf den Interpreten verweist. Daher kann es kein Fremdschlüssel für eine andere Tabelle sein, die eine Viele-zu-Viele-Beziehung darstellt.
Die Frage ist: Ist es möglich, eine solche Beziehung in SQL zu haben, und wenn ja, wie drücke ich sie aus?
quelle
artist_id
Fremdschlüssel, der auf den Künstler verweist. Wenn Sie möchten, dass ein einzelner Titel mehreren Alben zugeordnet wird, verwenden Sie eine Zuordnungstabelle mittrack_id, album_id
. Easy :)Antworten:
Ich denke, Sie können mit einem "Diamant" -Beziehungsdiagramm:
quelle
(albumID, trackNo)
und auch die andere Unique-Einschränkung hinzufügen.Leider habe ich nicht genug Repräsentanten, um Kommentare abzugeben um die Antwort ypercube , daher werde ich stattdessen eine alternative Antwort posten. Ich stimme dieser Antwort im Allgemeinen zu, denke jedoch, dass der Primärschlüssel und die eindeutigen Einschränkungen
AlbumTrack
falsch sind, da Alben und Tracks beide schwach sind Entitäten. Beispielsweise würden die folgenden gültigen Daten mit den vorgeschriebenen Einschränkungen nicht zugelassen:Stattdessen würde ich setzen
PRIMARY KEY (artistID, albumID, trackID)
die eindeutige Einschränkung und löschen, was zu Folgendem führt:Titel dürfen weiterhin höchstens einmal pro Album vorkommen.
Außerdem gibt die Frage nicht an, dass Tracks schwache Entitäten sind (nur Alben). Wenn Tracks tatsächlich unabhängig von Interpreten existieren können, werden die
Track
undAlbumTrack
-Tabellen leicht unterschiedlich definiert:quelle