跨其他列的SQL Server唯一列值(在另一个表中)

时间:2013-06-07 10:08:52

标签: sql sql-server sql-server-2008 tsql

我正在使用SQL Server 2008.我有以下基本架构:

  • Table1Field1, Field2
  • Table2Field3

我需要Field1是唯一的(允许空值)。我可以这样做:

create unique nonclustered index IX_Table1_Field1 
on [Table1] (Field1)
where Field1 is not null

但是,我还需要Field1Field2Field3之间保持唯一。即如果我要在Field1中使用Field1, Field2中使用的值,或Field3,则不允许使用该值。

这是否可以使用索引? (我怎么能实现这个目标?)

1 个答案:

答案 0 :(得分:0)

说实话,这听起来像是一个错误的设计。虽然理论上可以通过触发器实现您所说的内容,但是您有这种不寻常的约束这一事实表明这些表可能无法正确建模。

也许如果您解释了两个表格和三个字段代表的内容,我们可以更好地了解您是如何实现此设计的,并且可能能够提出替代方案。

需要考虑的事项:虽然您只提到Field1的限制,但通常多字段约束涉及所有字段。 Field2是否也受到字段1,2和3的限制?那么Field3呢?如何更改或删除记录有任何限制吗?