Sql数据建模

时间:2013-12-08 21:55:04

标签: sql database-design database-relations

enter image description here

我正在尝试建立一个数据库(如图)

其中一个标准是所使用的任何乐器一次只能由1位音乐家使用。

我想知道如何实现这样的架构?

另一个标准是每首歌曲中的一位音乐家是制作人。我如何实施该标准,以便制作人必须来自该歌曲上的音乐家名单?

也许这是两个无关的问题,我不确定?

2 个答案:

答案 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问题。