首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql数据建模

Sql数据建模
EN

Stack Overflow用户
提问于 2013-12-09 05:55:04
回答 2查看 59关注 0票数 0

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

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

我想知道我该如何实现这样的模式?

另一个标准是每首歌的一位音乐人是制作人。我如何实现这个标准,让制作人必须来自这首歌的音乐家名单?

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

EN

回答 2

Stack Overflow用户

发布于 2013-12-10 05:34:02

第一个问题:

如果你像这样合并歌曲乐器和歌曲音乐家表:

代码语言:javascript
复制
SongId
InstrumentId
MusicianId

并为(SongId,IntrumentId)添加唯一的约束

第二个问题:

添加一个制作人旗帜给乐手(或乐手)。

票数 0
EN

Stack Overflow用户

发布于 2013-12-10 06:40:34

第一个问题:沿着@lajos-veres的路线:

创建一个表: MuscicianInstrument

主键|ID

FK|MusicianID | int

FK|InstrumentID | inn

Endate |日期时间

下面是:(link) (假设是SQL Server)

创建自定义检查函数和检查约束:

代码语言:javascript
复制
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

我要跑了,考试结束后会试着解决第二个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20459634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档