确保最大最小列不重叠

时间:2012-10-18 09:43:09

标签: sql oracle10g

假设我有以下类别表:

Category  MinValue  MaxValue
A         1         2
B         3         9
C         10        0

上面我用0表示没有最大值。这些值可由最终用户配置。他们将能够添加和删除类别,并修改最大值和最小值。我可以在表格上放置任何约束以确保没有两个范围重叠吗?

此表将使用Web应用程序进行修改,因此我可以使用Javascript预先验证对表的更改,因此即使是防止重复的算法也可能就足够了。

2 个答案:

答案 0 :(得分:1)

也许我错过了这里显而易见的事实,但我认为这在甲骨文中并不容易。

我见过使用物化视图的解决方案

  • 包含“类别”表中的重叠
  • 在提交时刷新
  • 有一个检查约束,它不包含任何行。这可以通过在物化视图中使用“rownum”列以及检查约束来实现,即“rownum”列的值始终为0。

如果用户输入任何重叠数据,那么实体化的检查约束将违反 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