我在互联网上搜索并试图找到答案 - 我应该以我是一个完全业余的人来回答这个问题。
编辑:数据库类型是 mySQL
编辑:带大小不是动态的;他们是为表演乐队准备的,即 5 首歌曲永远是 Vocals |吉他 |钥匙 |低音 |鼓
编辑:我在底部包含了一些示例数据
所以,问题是这样的:
我有一张音乐家表(musiciansID)
我有一个表角色(rolesID),这是他们在乐队中的角色(主唱、吉他等)
我有一个musicians_roles(musiciansID,rolesID)表。音乐家可以演奏多种乐器。
我有一张特定乐队(乐队 ID)(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:
乔·布洛格斯,萨克斯
乔·博格斯,鼓
莎拉新秀丽,主唱
山姆钟乳石,鼓
骑自行车,吉他
特雷西·希尼,贝斯
Band_Roles:
5 首,人声
5 件,键盘
5 件,吉他
5 件,鼓
5 件,贝司
6 件,人声
6 件,键盘
6 件,吉他
6 件,鼓
6 件,贝司
6 件,萨克斯
乐队中的音乐家:
5 件,主唱,莎拉新秀丽
5 件,键盘,NULL
5 件,吉他,NULL
5 件,鼓,山姆钟乳石
5 件,低音,空
然后,比如说我试图让 Sarah Shiney 弹吉他,但它会失败。
非常感谢您的时间!
答案 0 :(得分:1)
-- Role ROL exists.
--
role {ROL}
PK {ROL}
-- Musician MUS exists.
--
musician {MUS}
PK {MUS}
-- Musician MUS can play role ROL.
--
musician_role {MUS, ROL}
PK {MUS, ROL}
FK1 {MUS} REFERENCES musician {MUS}
FK2 {ROL} REFERENCES role {ROL}
-- Band BND exists.
--
band {BND}
PK {BND}
-- Band BND has role ROL.
--
band_role {BND, ROL}
PK {BND, ROL}
FK1 {BND} REFERENCES band {BND}
FK2 {ROL} REFERENCES role {ROL}
约束,正如我从示例中理解的那样:
每位音乐家最多可以在一个乐队中演奏;每个乐队:该乐队中可以有不止一位音乐家演奏。
对于每个乐队和角色:只有一位音乐家在该乐队中担任该角色。
-- Musician MUS plays in band BND in role ROL.
--
musician_band_role {MUS, BND, ROL}
PK {MUS}
AK {BND, ROL}
FK1 {MUS, ROL} REFERENCES musician_role {MUS, ROL}
FK2 {BND, ROL} REFERENCES band_role {BND, ROL}
注意:
All attributes (columns) NOT NULL
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key