2011-04-25 92 views
0

使用SQL Server 2K8 R2,我有兩個相關的表 - 成員和問卷。每個表都有一個名爲ID的BigInt PK。問卷有MemberID與正在填寫表格的成員進行聯繫。 隨着時間的推移,,成員可能會多次完成問卷。業務要求是每個成員每年完成一次最多調查問卷。 AFAIK使用簡單的CHECK CONSTRAINT無法解決這個問題。在1:M關係上強制執行數據驅動的1:1約束

是否有「乾淨」的方式來做到這一點?我希望能避免做類似如下:

CREATE TRIGGER tr_Questionnaire_Insert 
    ON Questionnaire 
    INSTEAD OF INSERT 
AS BEGIN 
    -- Check for a violation of once questionnaire per calendar year and if found, call RAISERROR 

    -- Otherwise continue with INSERT 
END; 

我不想使用這種方法的原因,主要是因爲它需要我(或任何人將保持在長期的這種解決方案)記住如果調查問卷的模式應該改變,則保持觸發。

回答

6

只需在包含MemberId和Year的問卷表上創建一個唯一索引。

+0

哈哈哈!我可以踢自己。看看當你太接近問題時會發生什麼?今天無法從樹上看到森林。 TYVM! – Yuck 2011-04-25 19:26:38