我希望向表中添加某种类型的业务逻辑约束,但不确定如何/在哪里。
我有一个包含以下字段的表格。
等
所以我希望你的每个hubId + categoryId只能有一个特色东西。
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.
因此要插入的第三行将失败,因为该集线器AND类别已经具有特色功能。
这可能吗?
答案 0 :(得分:3)
您使用数据库约束来保护数据。对我来说,业务逻辑是计算或复杂逻辑或逐行处理:不是唯一约束的味道
在这种情况下:
我会亲自前往选项3
PS:你提到的articleID在哪里?
这个问题是:Combining the UNIQUE and CHECK constraints
编辑:
基本上,你要做
CREATE UNIQUE INDEX IX_Foo ON Mytable (HubId, CategoryId) WHERE IsFeatured = 1
因此,对于IsFeatured = 1
的数据子集,现在检查(HubId,CategoryId) 仅 的唯一性