我有一张桌子,可以为顾客存储类别组合。类别的数量可能会发生变化,但每个客户的细分数必须始终小于或等于100%。
custom type_ pct
------- ------- -----
Cust1 Type A .33
Cust1 Type B .17
Cust1 Type C .50
Cust2 Type A .30
Cust2 Type D .10
Cust2 Type E .10
Cust2 Type F .50
关于如何添加检查约束以强制执行此规则的任何想法? 这是我的开始......
ALTER TABLE cust_mix ADD CONSTRAINT ttl_pct_mix CHECK (SUM (pct) <= 1);
但是这会检查所有行,而不管客户ID
答案 0 :(得分:2)
仅通过添加约束,您将无法实现此目的。插入/更新后需要一个触发器来检查数据库端。
答案 1 :(得分:0)
不确定在PostgreSQL中是否可以使用SQL Server,但是,您实际上不必检查特定的客户ID以检查您的约束。您可以检查最大SUM是否有效。这可能有助于将其纳入约束。
例如:
(
SELECT TOP 1
SUM(pct)
FROM
cust_mix
GROUP BY
custom
ORDER BY
SUM(pct) DESC
) <= 1