建立一对一关系

Ste*_*ven 4 oracle database-design

可以通过约束在Oracle中完全建模一对一关系吗?换句话说,PARENT实体总是完全具有子实体的n-CHILDREN,并且每个孩子只有一个父母.

将n视为数据库常量.

WW.*_*WW. 5

即使多个会话正在进行更新,这样做也是非常容易的.如果你尝试使用触发器,你会陷入混乱,Oracle的声明性约束不足以表达这一点.

它可以按如下方式完成: -

  1. 在父表和子表上创建实例化视图日志
  2. 创建将它们连接在一起的物化连接视图,并计算按父项分组的子项数.这必须是快速通知
  3. 在物化连接视图上设置一个约束,即子记录的计数必须等于"n"(您的数据库常量)

然后,您可以执行一系列插入/更新/删除语句.提交时,物化视图将刷新,如果不满足条件,则此时将出现约束违规错误.

额外的一点技巧是只包括未通过约束的行进入物化视图(HAVING count(ChildId)<> 5),这样就不会浪费任何存储空间.