林試圖建立一個數據庫(如圖)
的標準之一是,所使用的任何儀器只能由1名音樂家在一個時間使用。
我想知道如何實現它,這樣的架構?
另一個標準是每首歌中的音樂家中有一位是製作人。我將如何實施該標準,以便製作人必須從該歌曲的音樂家名單中來?
也許這是2個無關的問題,我不確定?
林試圖建立一個數據庫(如圖)
的標準之一是,所使用的任何儀器只能由1名音樂家在一個時間使用。
我想知道如何實現它,這樣的架構?
另一個標準是每首歌中的音樂家中有一位是製作人。我將如何實施該標準,以便製作人必須從該歌曲的音樂家名單中來?
也許這是2個無關的問題,我不確定?
第一個問題:
如果合併songinstruments像這樣songmusicians表: songinstrumentsmusicians:
SongId
InstrumentId
MusicianId
,並加入獨特constraing爲(SongId,IntrumentId)
第二個問題:
向songmusicians(或songinstrumentsmusicians)添加一個製作者標誌。
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考試。
建議與問題無關(因爲它被回答):不要對錶格使用複數名稱。 – NoChance