Oracle:约束,取决于另一个表

时间:2011-01-20 04:55:38

标签: oracle triggers constraints

对不起奇怪的标题,不知道如何更好地命名Q.所以:

我有3张桌子。 EntityA,EntityB,AB。经典的多对多实现。

是否有可能创建约束,要求总是在A和B之间至少有一个关系。

示例工作流程:

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

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

2 个答案:

答案 0 :(得分:2)

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

  • 在三个表上创建物化视图日志
  • 创建一个可快速刷新的物化视图,连接三个表
  • 在物化视图上创建约束,如果存在任何未通过验证的行,则会引发异常

提交时,将进行物化视图刷新。如果物化视图上的约束失败,则提交失败。

答案 1 :(得分:0)

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