簡體   English   中英

將列值限制為0或在插入時唯一

[英]Limit column value to 0 or to be unique on insert

我有一個表,其中int列應設置為零或表中尚不存在的值。 我可以使用CHECK CONSTRAINT阻止在此類列中插入非零重復值,還是應該使用BEFORE INSERT觸發器? 如果我能用兩者做到這一點,那么哪種設計更好?

從.NET Windows窗體應用程序我們使用全局事務范圍來包裝保存,在這兩種情況下我都希望插入失敗並且事務完全回滾,所以我不知道是否應該將回滾放入觸發器,這就是為什么我寧願嘗試檢查,如果可能的話。

數據庫:SQL 2008

謝謝。

請參閱Andriy M評論中的鏈接,它提到了2008年的新概念:過濾指數...

CREATE UNIQUE INDEX indexName ON tableName(columns) INCLUDE includeColumns WHERE columnName != 0

這將創建不為0的唯一項的索引。

任何插入重復的非零值的嘗試都將破壞索引的唯一性並導致錯誤。

為什么你使用零而不是null。 如果你把它作為null,那么db會通過一個可以為空的唯一約束輕松地為你處理它。

檢查約束,如果使用得當,可以防止錯誤數據。 他們不會將壞數據改為好。 出於這個原因,我會以觸發器為目標。 如果你可以滿足0為NULL的需求,你可以使用一個唯一約束,但無論如何,提供答案都是觸發器的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM