我正在尝试建立一个数据库(如图)
其中一个标准是所使用的任何乐器一次只能由1位音乐家使用。
我想知道如何实现这样的架构?
另一个标准是每首歌曲中的一位音乐家是制作人。我如何实施该标准,以便制作人必须来自该歌曲上的音乐家名单?
也许这是两个无关的问题,我不确定?
答案 0 :(得分:0)
第一个问题:
如果您合并了songinstruments和songmusicians表,如下所示: songinstrumentsmusicians:
SongId
InstrumentId
MusicianId
并为(SongId,IntrumentId)
添加唯一约束第二个问题:
为歌曲音乐家(或歌曲音乐家)添加制作人标志。
答案 1 :(得分:0)
第1个问题: 沿着@ lajos-veres向前走的路线:
创建一个表:MuscicianInstrument
PK | ID
FK | MusicianID | INT
FK | InstrumentID |店
结束|日期时间
在此之后:(link) (这是假设SQL Server)
创建自定义检查功能并检查约束:
CREATE FUNCTION CheckActiveCount(
@MusicianId INT, @InstrumentId INT
) RETURNS INT AS BEGIN
DECLARE @ret INT;
SELECT @ret = COUNT(*) FROM MusicianInstrumnet
WHERE MusicianId = @MusicianId AND InstrumentId = @InstrumentId and (Enddate IS NULL OR Endate > CURDATE());
RETURN @ret;
END;
GO
ALTER TABLE MusicianInstrumnet
ADD CONSTRAINT CheckActiveMusicianInstrument CHECK (NOT (dbo.CheckActiveCount(MusicianId, InstrumentId) > 1));
GO
必须跑步,将在考试后尝试解决#2问题。