当前位置: 首页 > 面试题库 >

由位列控制的UNIQUE约束

邹曦之
2023-03-14
问题内容

我有一张表,像

FieldsOnForms(
 FieldID int (FK_Fields)
 FormID int (FK_Forms)
 isDeleted bit
)

该对(FieldID,FormID)应该是唯一的,但只有在不删除该行(isDeleted = 0)的情况下,才可以。

是否可以在SQLServer 2008中定义这样的约束?(不使用触发器)

PS设置(FieldID,FormID,isDeleted)是唯一的,增加了将一行标记为已删除的可能性,但是我希望有机会将n行(每个FieldID,FormID)设置为isDeleted
= 1,并且只有一个与isDeleted = 0


问题答案:

您可以使用SQL Server 2008筛选索引功能来拥有唯一 索引
,也可以对视图应用UNIQUE索引(穷人筛选索引,可用于较早版本),但是不能像这样使用UNIQUE约束描述。

筛选索引的示例

 CREATE UNIQUE NONCLUSTERED INDEX IX_FieldsOnForms_NonDeletedUnique ON FieldsOnForms (FieldID,FormID) WHERE isDeleted=0


 类似资料:
  • SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 CREATE TABLE 时的 SQL UNIQUE 约束 下面的 SQL

  • 问题内容: 我有一个带有列-ID,Property,Property_Value的SQL Server表RealEstate。该表大约有5到1千万行,并且将来还会增加。我只想在此表中不存在Id,Property,Property_Value的组合时插入行。 示例表- 不允许插入。但是,还可以。我很好奇,知道这样做的“最佳”方法和 原因 。为什么这部分对我来说最重要。两种检查方法是- 在应用程序级别

  • 我正在工作的应用程序由一个导航抽屉组成,它是在一个活动中实现的。活动布局如下: 这是一个非常常见的模式,唯一经常变化的是容器布局中的片段。 如果片段中有一个滚动元素,在滚动时,CoordinatorLayout会很高兴地进行位置转换,包括Toolbar/AppBarLayout。 如何在这种情况下重置工具栏位置? 编辑:可能有bug,AppBarLayout偏移量更改监听器只有在重新启动应用程序时

  • 我有一个问题是这个问题的变体:Flink:如何存储状态和在另一个流中使用? 我有两条流: val ipStream:DataStream[IP地址]= <代码>val routeStream:数据流[路由表]= 我想知道哪个包裹使用哪条路线。通常可以通过以下方式完成: 这里的问题是,我无法在这里真正为流设置密钥,因为这既需要完整的表,也需要ip地址(并且密钥必须独立计算)。 对于中的每个元素,我需

  • 目前发现的问题和我的OSGi框架, > 无法仅列出捆绑包,因此我需要手动查找它们。 有些包由于相互依赖而无法解析,因此我得到了大量重复信息。 做这件事的更好方法是什么?

  • 我有 我怎样才能解决这个问题