我的数据库中有一个表,其中记录在概念上可以是其他rcords的子项。该表具有非空名称字段。我需要确保一组子项中的每个名称都是唯一的,但不是整个数据库中的名称。我想使用数据库中的约束来强制执行此操作。实现这一目标的最佳方法是什么? 我知道我将不得不在此过程中的某个时刻进行查询:
@NameParameter NVARCHAR(512)
Select Name from MyTable
WHERE Name=@NameParameter
问题是我在哪里提出此查询?
答案 0 :(得分:2)
我可能没有正确理解你的问题,但我的建议是创建另一个引用孩子父记录的列。然后,您可以基于这两列创建A多列索引,以加快在where子句中引用这些列的任何查询...因此,您的唯一性将来自{parent_name,child_name}。对这两列的约束将作为该表的键,而不允许重复。
@childname NVARCHAR(255), @parentname NVARCHAR(255)
SELECT * FROM [child_records]
WHERE [parent_name] = @parentname
AND [child_name] = @childname
答案 1 :(得分:1)
乍一看,我认为这应该是“而不是触发器”。这个link提供了一个很好的例子。