我正在尝试为艺术家和歌曲建模,但我有一个问题,我有一个 Song_Performance 可以由许多艺术家表演(比如二重唱),所以我有一个 Artist_Group 来代表歌曲的演唱者。
好吧,我现在在 Artist 和 Artist_Group 之间建立了多对多的关系,其中 Artist_Group 由该组中的艺术家集合唯一标识。我可以创建一个交集实体,表示艺术家参与 Artist_Group (Artist_Group_Participation?)
我无法想出如何为 Artist_Group 实体提供一个主键,该主键保留了同一组艺术家代表同一组的事实,并且缺少 Artist_Group 实体的主键意味着我缺少一个Artist_Group_Participation 实体的外键。
John Carlis 和 Joseph Maguire 的“Mastering Data Modeling”一书提到了这种形状并将其称为“Many-Many Collection Entity”,并指出它非常罕见,但没有说明如何解决它,因为显然很多一对多关系不能直接存储在 RDBMS 中。我该如何代表这个?
编辑:
看起来每个人都在建议一个交叉表,但这不是我的问题。我有这个。我的问题是强制执行约束,即您不能添加 Artist_Group 条目,其中包含的艺术家组与现有组相同,忽略顺序。我想过让 Artist_Group 的 ID 是一个 varchar,它是组成它的各种艺术家的串联,如果顺序很重要,这将解决问题,但是为“Elton John and Billy Joel”设置一个 Artist_Group 并不能阻止添加“比利·乔尔和埃尔顿·约翰”的组合。