gpt4 book ai didi

sql - 造型音乐艺术家/团体

转载 作者:行者123 更新时间:2023-12-02 01:15:08 26 4
gpt4 key购买 nike

我正在构建一个网络应用程序来显示 50 年代和 60 年代的排行榜记录/专辑。

目前我有这样的东西(删除了很​​多不相关的东西):

group_performance_role

名为“group”的表曾被建模为“person”表、“person_group”连接表和“group”表。这个问题是我不能让外键“group_performance_role.group_id”同时引用“person”和“group”表。

我决定保留该结构,但要求每个“人”自动成为 1 个“组”;然而,这会产生命名歧义,意味着该表包含不止一件事 - 有时是一位艺术家(“John Lennon”),有时是一个乐队(“The Beatles”)。

我需要找到一种方法将艺术家(可以是一个人或一群人)与表演联系起来,同时避免不良做法,例如一张 table 可以容纳不止一种“类型”的东西。

在网上搜索过,但几乎找不到相关答案。非常感谢任何帮助/建议/建议!!

编辑:“角色”表是一个查找表,用于查找人员/组可以在表演中扮演的角色。示例:“艺术家”、“ Composer ”、“乐团指挥”等

最佳答案

考虑使用 inheritance为各种类型或艺术家建模:

(顺便说一句,您的 Group_Member 表允许分组。我猜这不是您想要的。)

enter image description here

但是,这忽略了角色可能因艺术家类型而异的任何差异。例如,让整个团队成为“指挥”毫无意义。如果强制执行这些类型的约束很重要,您可以采用“蛮力”方法并简单地将特定于个人的角色与特定于组的角色分开:

enter image description here

(顺便说一句,如果您想防止特定于组的角色和特定于个人的角色的名称重叠,您必须将两个角色表放在继承层次结构中。此处未显示。)

当然,这仍然不符合某些角色的基数。例如,只有一个人(每场演出)可以是“指挥”。要解决这个问题,您必须进一步扩展模型:

enter image description here

并且可能必须为这些组做类似的事情。

要通过这三种角色中的任何一种让所有参与给定表演(例如 27)的人,您需要一个与此类似的查询:

SELECT *
FROM Person
WHERE person_id IN (

SELECT person_id
FROM Group_Person JOIN Group_Performance_Role
ON Group_Person.group_id = Group_Performance_Role.group_id
WHERE performance_id = 27

UNION

SELECT person_id
FROM Person_Performance_MultiRole
WHERE performance_id = 27

UNION

SELECT person_id
FROM Person_Performance_SingleRole
WHERE performance_id = 27

)

请注意,这最多列出一个人,即使他们参与了多个角色的表演(例如,同一个人可以是“指挥”和在同一表演中扮演角色的小组成员)。

获得他们的角色名称,您可以:

SELECT Person.*, group_role_name
FROM Person
JOIN Group_Person
ON Person.person_id = Group_Person.person_id
JOIN Group_Performance_Role
ON Group_Person.group_id = Group_Performance_Role.group_id
WHERE performance_id = 27

UNION ALL

SELECT Person.*, person_multirole_name
FROM Person
JOIN Person_Performance_MultiRole
ON Person.person_id = Person_Performance_MultiRole.person_id
WHERE performance_id = 27

UNION ALL

SELECT Person.*, person_singlerole_name
FROM Person
JOIN Person_Performance_SingleRole
ON Person.person_id = Person_Performance_SingleRole.person_id
WHERE performance_id = 27

如您所见,我们不断使模型变得越来越精确,但也越来越复杂。我们甚至还没有进入歌曲和专辑,以及不断发展的小组成员(等等)。我想您有责任决定“精确”和简单之间的正确平衡点在哪里。

关于sql - 造型音乐艺术家/团体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12508912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com