【发布时间】:2021-07-04 03:02:54
【问题描述】:
我已经在互联网上搜寻了这个问题的答案 - 我应该以我是一个完全的业余爱好者来开始这个问题。
编辑:数据库类型是 mySQL
编辑:乐队大小不是动态的;他们是为表演乐队准备的,即 5 首曲子永远是人声 |吉他 |键 |低音 |鼓
编辑:我在底部包含了一些示例数据
所以,问题是这样的:
我有一张音乐家表 (musiciansID)
我有一个表角色 (rolesID),这是他们在乐队中的角色(人声、吉他等)
我有一张音乐家角色表(musiciansID、rolesID)。音乐家可以演奏多种乐器。
我有一张特定频段 (bandID)(8 件、6 件)等的表格
我有一个 band_roles 表(bandID、rolesID)。
每个乐队都有特定的格式,例如 3 件 |声乐、吉他、鼓
我正在努力执行以下操作:
BandID = 1(例如 3 件)
BandID 的 RolesID = 1,2,3(人声、贝斯、鼓)
这就是我跌倒的地方
BandID 的 MusiciansID = 1,2,3(John, Paul, Ringo),但如果我尝试将 Ringo 作为贝司手,我希望约束失败。
如果这是超级简单的,我很抱歉,我只是没有词汇来搜索它。我感觉答案可能类似于下面的链接,但我无法让它工作。
https://dba.stackexchange.com/questions/34040/many-to-many-and-weak-entities
一些样本数据
音乐家:
乔博客
莎拉新秀丽
山姆钟乳石
唐自行车
特蕾西·希尼
角色:
人声
小号
萨克斯
吉他
低音
鼓
键盘
Musicians_roles:
Joe Bloggs,萨克斯
乔·布洛格斯,鼓
莎拉·新秀丽,主唱
山姆钟乳石,鼓
唐自行车,吉他
贝司特蕾西·希尼
乐队角色:
5 件,人声
5 件,键盘
5 件,吉他
5 件,鼓
5 件,贝司
6 件,人声
6 件,键盘
6 件,吉他
6 件,鼓
6 件,贝司
6 件,萨克斯
乐队中的音乐家:
5 件,人声,莎拉·新秀丽
5 件,键盘,NULL
5 件,吉他,NULL
5 件,鼓,山姆钟乳石
5 件,贝斯,NULL
然后,比如说我试图让 Sarah Shiney 弹吉他,它会失败。
非常感谢您的宝贵时间!
【问题讨论】:
-
许多乐队的成员数量往往是动态的,并且一直在变化。我会重新考虑是否真的需要特定的乐队表(bandID)(8 件,6 件)。
-
样本数据和期望的结果会很有帮助。
-
能否添加您在项目中使用的数据库类型标签
-
@jarlh 谢谢!我已经进行了编辑。它适用于特定格式的表演乐队,因此他们将始终拥有相同的乐器阵容(但不同的音乐家)
-
我认为不可能在数据库级别上限制它。该应用程序必须验证这样的关系。 Db 关系商店约束非常简单。
标签: mysql database-design