2013-12-08 41 views
0

enter image description hereSQL數據建模

林試圖建立一個數據庫(如圖)

的標準之一是,所使用的任何儀器只能由1名音樂家在一個時間使用。

我想知道如何實現它,這樣的架構?

另一個標準是每首歌中的音樂家中有一位是製作人。我將如何實施該標準,以便製作人必須從該歌曲的音樂家名單中來?

也許這是2個無關的問題,我不確定?

+0

建議與問題無關(因爲它被回答):不要對錶格使用複數名稱。 – NoChance

回答

0

第一個問題:

如果合併songinstruments像這樣songmusicians表: songinstrumentsmusicians:

SongId 
InstrumentId 
MusicianId 

,並加入獨特constraing爲(SongId,IntrumentId)

第二個問題:

向songmusicians(或songinstrumentsmusicians)添加一個製作者標誌。

0

1問: 沿線是@拉約什-的VERes被標題下:

創建一個表:MuscicianInstrument

PK | 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 

有運行,將嘗試後解決#2考試。