首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对一对一关系进行建模

对一对一关系进行建模
EN

Stack Overflow用户
提问于 2009-08-05 20:25:45
回答 7查看 455关注 0票数 4

一对一的关系是否可以在Oracle中使用约束完全建模?换句话说,父实体始终恰好具有子实体的n个子实体,并且每个子实体只有一个父实体。

考虑n是数据库常量。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-08-05 21:29:26

要做到这一点,即使当多个会话正在进行更新时,它也是健全和正确的,这并不容易。如果您尝试使用触发器执行此操作,您将陷入一片混乱,而Oracle的声明性约束不足以表达这一点。

具体做法如下:

  1. 在父表和子表上创建实体化视图日志
  2. 创建将它们联接在一起的实体化联接视图,并计算按父表分组的子表的数量。这必须在提交时快速刷新
  3. 对物化连接视图设置了一个约束,即子记录的计数必须等于"n“(数据库常量)

然后,您可以执行一系列insert/update/delete语句。提交时,实体化视图将刷新,如果不满足条件,此时将出现违反约束的错误。

一个额外的技巧是只将不符合约束的行包含到物化视图中(具有count(ChildId) <> 5),这样就不会浪费任何存储空间。

票数 5
EN

Stack Overflow用户

发布于 2009-08-05 21:22:52

在更早的“鸡+蛋”点的基础上,您可以创建可推迟的约束,这些约束在提交时才会生效……这些会有帮助吗?

例如:

代码语言:javascript
运行
复制
ALTER TABLE AGREEMENTS ADD CONSTRAINT name FOREIGN KEY (column) REFERENCES table (column) DEFERRABLE INITIALLY DEFERRED;
票数 3
EN

Stack Overflow用户

发布于 2009-08-05 20:35:27

我不明白是怎么回事。这是一个古老的问题:“先有鸡还是先有蛋?”在尚未添加子元素的情况下,如何约束父元素,以及如何在没有父元素的情况下添加子元素?

您可以创建一个名为"ValidParents“的新表,该表只包含具有N个子in的父in,并使其与触发器保持同步。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1235544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档