2009-02-12 78 views
1

我在我的數據庫中有一張表,其中概念上的記錄可以是其他rcords的子項。該表具有非空名稱字段。我需要確保一組兒童中的每個姓名都是唯一的,但不能覆蓋整個數據庫。我想在數據庫中使用約束來強制執行此操作。什麼是實現這一目標的最佳方式? 我知道我將不得不做一個查詢在某個時候在這個過程是這樣的:SQL Server 2005數據庫中的複雜查詢

@NameParameter NVARCHAR(512) 
Select Name from MyTable 
WHERE [email protected] 

的問題是我在哪裏把這個查詢?

回答

2

我可能沒有正確理解你的問題,但我的建議是創建另一個引用子記錄的父列。然後,您可以基於這兩列創建一個多列索引,以加快在where子句中將這些列引用到一起的任何查詢...因此,您的唯一性來自{parent_name,child_name}。對這兩列的約束將作爲該表的關鍵字,並且不允許重複。

@childname NVARCHAR(255), @parentname NVARCHAR(255) 
SELECT * FROM [child_records] 
WHERE [parent_name] = @parentname 
AND [child_name] = @childname 
1

乍一看,我認爲這應該進入「而不是觸發器」。這link提供了一個很好的例子。