我需要在 T-SQL 中有一个具有以下结构的表
KEY Various_Columns Flag
1 row 1 F
2 row_2 F
3 row_3 T
4 row_4 F
要么没有行,要么最多一行可以有值为 T 的标志列。我的开发人员声称这可以通过在表上放置一个检查约束来实现。
问题:
- 是否可以在数据库级别将这样的约束放在数据库本身(即行间约束)上,而不是放在更新或插入行的业务规则中
- 这样的表是正规形式吗?
- 或者正常形式是否需要删除 Flag 列,而是(比如说)有另一个简单的表或变量包含 Flag=T 的行的值,即在上述情况下 row=3。
最佳答案
1 否。检查约束是每行。也没有其他约束会这样做。
您需要以下之一:
- 触发器(所有版本)
- 带过滤器 Flag = T 的索引 View ,以及 Flag 上的唯一索引(SQL Server 2000+)
- 过滤索引(SQL Server 2008)
2 足够好
3 真的矫枉过正。您正在拆分相同的数据以避免上述解决方案之一。但是使用单行表,ID 列的 FK,以及 Flag 的唯一约束
关于sql - SQL 数据库中的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876236/