
我正在尝试建立一个数据库(如图)
其中一个标准是,所使用的任何乐器一次只能由一个音乐家使用。
我想知道我该如何实现这样的模式?
另一个标准是每首歌的一位音乐人是制作人。我如何实现这个标准,让制作人必须来自这首歌的音乐家名单?
也许这是两个不相关的问题,我不确定?
发布于 2013-12-10 05:34:02
第一个问题:
如果你像这样合并歌曲乐器和歌曲音乐家表:
SongId
InstrumentId
MusicianId并为(SongId,IntrumentId)添加唯一的约束
第二个问题:
添加一个制作人旗帜给乐手(或乐手)。
发布于 2013-12-10 06:40:34
第一个问题:沿着@lajos-veres的路线:
创建一个表: MuscicianInstrument
主键|ID
FK|MusicianID | int
FK|InstrumentID | inn
Endate |日期时间
下面是:(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我要跑了,考试结束后会试着解决第二个问题。
https://stackoverflow.com/questions/20459634
复制相似问题