2009-05-20 89 views
2

說我有一個佈局如下表:確保在MS SQL服務器,數據庫級正確的數據

Id Int PRIMARY KEY IDENTITY 
DateFrom datetime NOT NULL 
DateTo datetime NOT NULL 
UserId Int 

用戶ID是外鍵的用戶表,以及顯然有更多的數據是不相關的這個問題。

我想要做的是確保每個用戶不能有任何重疊的「時期」,也就是說,我們有一行用戶1的數據,從2009年5月15日到2009年5月18日,那麼數據庫中不能包含任何其他行(2009年5月15日至18日,包括這兩個日期)中的任何行。

我如何以最好的方式解決這個問題?我最初的想法是使用觸發器,但我不確定如何和/或是否有更好的方式來做更像這樣的「自定義」數據驗證?

回答

1

您需要使用INSERT/UPDATE觸發器。確保在編寫觸發器時處理一次插入或更新多行的情況。

+0

我正在處理這個問題,編寫INSERT觸發器,同時開始考慮如何處理UPDATE的想法(因爲它需要運行所有它對最終結果的檢查),但我正在運行進入更新觸發器的死衚衕,任何提示? – kastermester 2009-05-20 16:40:48

0

一種方式做到這一點,特別是如果你的粒度是在一天的水平(順便說一句,如果是這樣的話,你是SQL Server 2008中,那麼你應該使用日期類型而不是日期時間),需要使用另一個表: UserId int, Day datetime, 主鍵(UserId,Day) 然後插入,刪除,更新任何用戶的所有日期插入,刪除,更新你的原始表,只是讓服務器的PK唯一性約束爲你做驗證。

相關問題