首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL扩展检查约束

SQL扩展检查约束
EN

Stack Overflow用户
提问于 2014-02-25 14:29:25
回答 1查看 118关注 0票数 0

有可能有一个复杂的检查约束吗?

例如,我有一个customers表,其中每个记录都分配了一个customer类型。

因此,我可以有几个相同类型的客户。

我想为每种类型设置一个客户,作为该类型的“主要”帐户,但是每种类型只有一个客户可以是主客户。

是否可以在IsPrimary字段中添加一个check约束,检查所有相同类型的客户,看看是否已经有一个标记为主用户?

显然,我可以在C#代码中这样做,但我希望这是额外的检查。

我也可以使用触发器,但我想坚持约束,这样我就可以以同样的方式处理所有错误。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-25 14:41:59

这并不完全是一个检查约束问题。这是一个过滤唯一的索引问题。

代码语言:javascript
代码运行次数:0
运行
复制
create unique index customers_type_isprimary on customers(type)
    where isPrimary = 1;

这将确保最多为每种类型设置一个客户的isPrimary标志。

编辑:

过滤索引是一个有趣的创造。除了之外,还有各种解释它们的资源(比如文档 )。

其思想是只在索引创建步骤中与where子句匹配的行上构建索引。这样做的原因之一是为了缩小索引的大小。

这里有一个数据结构的用例。您可能有一堆在isPrimary = 1上筛选的查询。你永远不会在isPrimary = 0上过滤--你只需要把它从where子句中删除。为什么将索引与所有不必要的值混在一起?如果谓词在查询中,则可以使用索引。

unique指数的情况更有说服力。过滤后的唯一索引完全按照您的要求执行--确保为每种类型设置最多一个IsPrimary值。为此,它仅为具有type集的客户在IsPrimary上创建索引。索引的“唯一”部分保证每种类型只在索引中出现一次,并且扩展到每个type只能有一个客户设置type

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22017151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档