0

假设我有以下类别表:

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

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

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

4

2 回答 2

1

也许我在这里遗漏了明显的东西,但我认为这在 Oracle 中并不容易。

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

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

如果用户输入任何重叠数据,则在提交时将违反对物化的检查约束。

您需要编写前端以允许 Oracle 在提交时引发异常并向用户显示适当的消息。

例如,现在在最新版本的 Postgresql 中,使用排除约束非常容易。

于 2012-10-18T09:54:41.133 回答
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
于 2012-10-18T10:01:03.780 回答