SQL 对列值的约束取决于其他列的值

SQL Constraint on column value depending on value of other column

首先,我有简单的 [SomeType] table,包含列 [ID][Name]

我还有 [SomeTable] table,字段如下:

[ID], 
[SomeTypeID] (FK), 
[UserID] (FK), 
[IsExpression]

最后,我必须在数据库层上做一个约束:

不知道是不是复杂条件,不知道怎么写。您将如何实施此类约束?

您可以使用过滤索引执行此操作:

CREATE UNIQUE NONCLUSTERED INDEX [IDX_SomeTable] ON [dbo].[SomeTable]
(
    [UserID] ASC
)
WHERE ([SomeTypeID] <> 1 AND [IsExpression] = 1)

或:

CREATE UNIQUE NONCLUSTERED INDEX [IDX_SomeTable] ON [dbo].[SomeTable]
(
    [UserID] ASC,
    [SomeTypeID] ASC
)
WHERE ([SomeTypeID] <> 1 AND [IsExpression] = 1)

取决于您要实现的目标。一个用户只有一个 [IsExpression] = 1 而不考虑 [SomeTypeID] 或者你只想一个用户有一个 [IsExpression] = 1 和一个 [SomeTypeID].