SQL数据库中的约束

DAC*_*ACN 3 sql t-sql sql-server-2005 check-constraints

我需要在T-SQL中有一个表,它具有以下结构

KEY     Various_Columns       Flag
 1          row 1              F
 2          row_2              F
 3          row_3              T
 4          row_4              F
Run Code Online (Sandbox Code Playgroud)

没有行,或者最多只有一行可以使Flag值具有值T.我的开发人员声称这可以通过在表上放置检查约束来实现.

问题:

  1. 是否可以在数据库级别对数据库本身(即行间约束)进行此类约束,而不是在更新或插入行的业务规则中
  2. 这样的桌子是否正常?
  3. 或者正常形式需要移除Flag列,而是(比方说)有另一个简单的表或变量,其中包含具有Flag = T的行的值,即在上面的情况下row = 3.

gbn*_*gbn 7

1号.检查约束是每行.没有其他约束也会这样做.

你需要一个:

  • 触发器(所有版本)
  • 带有过滤器Flag = T的索引视图,以及Flag上的唯一索引(SQL Server 2000+)
  • 筛选索引(SQL Server 2008)

2足够好

3真的过度杀伤力.您正在拆分相同的数据以避免上述解决方案.但是使用一行表,FK表示ID列,以及对Flag的唯一约束