2011-01-20 86 views
1

对不起奇怪的标题,不知道如何更好地命名Q.所以:Oracle:约束,取决于另一个表

我有3个表格。 EntityA,EntityB,AB。经典的多对多实现。

是否有可能创建约束强制要求ALWAYS有A和B

之间的至少一个关系

实施例的工作流程:

一个)插入A,插入B,插入关系,提交; SUCCESS
b)插入A,插入B,提交; FALSE

所以问题是:是否有任何on commit触发?或者类似的东西。

回答

2

没有这样的事情作为ON COMMIT触发器。但是,通常可以使用物化视图模拟ON COMMIT触发器的行为。在你的情况,你可以

  • 创建三个表物化视图日志
  • 创建快速刷新物化视图联接三个表
  • 创建提出如果有异常的物化视图的约束有任何行验证失败

当您提交时,会发生物化视图刷新。如果物化视图上的约束失败,则提交失败。

+0

嗯,是的,它可以工作。感谢您的回答,但我刚刚创建了包含所有数据并验证它的程序包。 – zerkms 2011-01-20 06:20:29

0

您可以在AB上设置延迟约束条件,该条件将仅在相同的提交时检查值的有效性。 您可以在EntityA和EntityB表中设置AB表的PK以进行参考,反之亦然(取决于设置延迟约束)。 假设这个插入操作在同一个事务中,那么如果没有有效的条目进入AB表,那么你可能会推出这些更改。

+0

嗯,我已经在AB上创建了延迟约束。在`b)`情况下它不会触发。 – zerkms 2011-01-20 06:12:37