假设我有以下类别表:
Category MinValue MaxValue
A 1 2
B 3 9
C 10 0
上面我用0表示没有最大值。这些值可由最终用户配置。他们将能够添加和删除类别,并修改最大值和最小值。我可以在表格上放置任何约束以确保没有两个范围重叠吗?
此表将使用Web应用程序进行修改,因此我可以使用Javascript预先验证对表的更改,因此即使是防止重复的算法也可能就足够了。
答案 0 :(得分:1)
也许我错过了这里显而易见的事实,但我认为这在甲骨文中并不容易。
我见过使用物化视图的解决方案
如果用户输入任何重叠数据,那么实体化的检查约束将违反 on commit 。
您需要编写前端以允许Oracle在提交时引发异常并向用户显示相应的消息。
现在,在最新版本的Postgresql中,使用排除约束非常容易。
答案 1 :(得分:0)
我不认为您可以使用约束来执行此操作,但是您应该能够创建before insert/update
触发器并使用raise_application_error
在插入违反条件时中止插入。
像...一样的东西。
if exists (select * from yourtable where :new.minvalue<maxvalue and :new.maxvalue>minvalue)
begin
raise_application_error(...)
end