可以通过约束在Oracle中完全建模一对一关系吗?换句话说,PARENT实体总是完全具有子实体的n-CHILDREN,并且每个孩子只有一个父母.
将n视为数据库常量.
解决方法
即使多个会话正在进行更新,这样做也是非常容易的.如果你尝试使用触发器,你会陷入混乱,Oracle的声明性约束不足以表达这一点.
它可以按如下方式完成: –
>在父表和子表上创建物化视图日志
>创建将它们连接在一起的物化连接视图,并计算按父组分组的子项数.这必须是快速通知
>在物化连接视图上设置一个约束,即子记录的计数必须等于“n”(数据库常量)
然后,您可以执行一系列插入/更新/删除语句.提交时,物化视图将刷新,如果不满足条件,则此时将出现约束违规错误.
奖励的一点是只包括未通过约束的行进入物化视图(HAVING count(ChildId)<> 5),因此您不会浪费任何存储空间.