Tsql 我应该如何在Sql Server中执行此操作(业务逻辑)?约束?

Tsql 我应该如何在Sql Server中执行此操作(业务逻辑)?约束?,tsql,database-design,sql-server-2008,constraints,unique,Tsql,Database Design,Sql Server 2008,Constraints,Unique,我希望向表中添加某种类型的业务逻辑约束,但不确定如何/在何处添加 我有一个包含以下字段的表 ID整数标识 HubId整数 类别整数 无特征位 富纳查(200) 等等 所以我希望你只能有一个特色的东西,每个hubId+分类 eg. 1, 1, 1, 1, 'blah' -- Ok. 2, 1, 2, 1, 'more blah' -- Also Ok 3, 1, 1, 1, 'aaa' -- constraint error 4, 1, 1, 0, 'asdasdad' -- Ok. 5,

我希望向表中添加某种类型的业务逻辑约束,但不确定如何/在何处添加

我有一个包含以下字段的表

  • ID整数标识
  • HubId整数
  • 类别整数
  • 无特征位
  • 富纳查(200)
等等

所以我希望你只能有一个特色的东西,每个hubId+分类

eg.
1, 1, 1, 1, 'blah'  -- Ok.
2, 1, 2, 1, 'more blah' -- Also Ok
3, 1, 1, 1, 'aaa' -- constraint error
4, 1, 1, 0, 'asdasdad' -- Ok.
5, 1, 1, 0, 'bbbb' -- Ok.

etc.
因此,要插入的第三行将失败,因为该中心和类别已经有了一个特色内容


这可能吗?

您使用数据库约束来保护数据。对我来说,业务逻辑是计算、复杂逻辑或逐行处理:不是一种独特的约束

在这种情况下:

  • 插入后,可以使用触发器进行检查
  • 将索引视图筛选IsFeatured=1定义为在HubId、CategoryId、IsFeatured上
  • 使用,因为您有SQL Server 2008(类似于索引视图)
  • 我个人倾向于选择3

    附言:你提到的articleID在哪里

    这项质询的目的是:

    编辑:

    基本上,你会的

    CREATE UNIQUE INDEX IX_Foo ON Mytable (HubId, CategoryId) WHERE IsFeatured = 1
    

    因此,现在只对IsFeatured=1的数据子集检查唯一性(HubId,CategoryId),articleId的可能重复是一个错误。我已经修好了,上图。所以已筛选的索引。。听起来很有趣。。。brb(读到了这篇文章)。。嗯,我想我的头刚爆了。你能详细说明一下过滤后的索引吗?这是“数据子集”还是“异构数据”?我觉得自己很愚蠢:(…因为这是一个索引,所以我仍然需要使用AFTER insert(和update)触发器,对吗?(索引只会加快触发器中的select查询)…那么使用检查约束+过滤索引呢?(我想如果可能的话,应该在触发器上使用检查约束)@gbn awesomesauce!!确认。我不仅可以得到一个索引(帮助提高查询速度),还可以提供约束!你爸爸是谁?(他是干什么的)。干杯,伙计!哦,这是过滤索引的一个很好的用途。