1

我的数据库中有一个表,其中的记录在概念上可以是其他 rcords 的子项。该表有一个非空名称字段。我需要确保一组孩子中的每个名字都是唯一的,但不是在整个数据库中都是唯一的。我想使用数据库内的约束来强制执行此操作。实现这一目标的最佳方法是什么?我知道我将不得不在这个过程中的某个时刻进行如下查询:

@NameParameter NVARCHAR(512)
Select Name from MyTable
WHERE Name=@NameParameter

问题是我把这个查询放在哪里?

4

2 回答 2

2

我可能没有正确理解您的问题,但我的建议是创建另一个引用孩子父记录的列。然后,您可以基于这两列创建一个多列索引,以加快在 where 子句中同时引用这些列的任何查询......因此,您的唯一性将来自 {parent_name,child_name}。对这两列的约束将充当该表的键,并且不允许重复。

@childname NVARCHAR(255), @parentname NVARCHAR(255)
SELECT * FROM [child_records] 
WHERE [parent_name] = @parentname 
AND [child_name] = @childname
于 2009-02-12T05:33:53.903 回答
1

乍一看,我认为这应该进入“而不是触发器”。这个链接提供了一个很好的例子。

于 2009-02-12T05:28:06.320 回答