我有一列RSEFlag包含一个标志值,该标志值是 1、2、4 中的一个或多个之和。我有一个单独的表,其中包含每个标志值的描述:
RSECode RSEDescription
------- --------------
4 Environment
1 Reliability
2 Safety
我想限制我的RSEFlag列,使其小于或等于 RSE 表中值的总和。
这是一个值得的练习吗?最好的方法是什么?
我有一列RSEFlag包含一个标志值,该标志值是 1、2、4 中的一个或多个之和。我有一个单独的表,其中包含每个标志值的描述:
RSECode RSEDescription
------- --------------
4 Environment
1 Reliability
2 Safety
我想限制我的RSEFlag列,使其小于或等于 RSE 表中值的总和。
这是一个值得的练习吗?最好的方法是什么?
CHECK
针对 UDF 定义的约束来强制执行此操作,但这有很多警告。INSERT
和UPDATE
触发器来完成相同的工作。在 Oracle 中,您可以创建一个物化视图,将两个表连接在一起,并将您的
RSEFlag
列放在适当的总和旁边。然后,您将应用CHECK
约束来强制执行该RSEFlag <= RSECode_SUM
. 这个 Ask Tom 讨论有一个如何做到这一点的例子。(搜索alter table dept_tot_mvw add constraint
并注意这dept_tot_mvw
是一个物化视图。)不幸的是,您不能使用这种方法,因为 SQL Server 中的索引视图不允许使用约束。
IMO 这是不值得尝试使用 DRI 强制执行这种约束的练习,因为仅与 UDF 相关的并发问题和约束数据的触发方法 - 正如尼克提到的那样,还有其他警告
当然,您可以在事务 API 中“强制执行”这种约束 - 请参阅此处了解我对相关问题的回答,了解我的意思的详细信息