我有两个表:
Department
Professor
其中 Department
有一个名为 HeadID
的属性,引用了 Professor
,
而 Professor
有一个名为 DeptID
的属性,引用了 Department
。
它们构成了一个循环关系。
但问题是:如何向这些表中的任意一个插入一行数据?
在我尝试插入一行数据后,Oracle 报错 "parent key not found"。
这里描述的其他解决方案更简单。
但是,如果您真的希望DB描述您的业务(这不一定是最佳方法),那么您可以拥有另一个表,比如DEPT_HEAD_POSITIONS
。 Department
表将具有FK(HeadID)引用此表,而Professor
表将具有另一个可空字段作为对此新表的FK。
现在,您拥有的是:
根据SQL-92标准,由多个列组成的外键可以允许其中一个列包含没有匹配值的情况。为了避免这种情况,在所有外键列上创建NOT NULL约束。
因此,我认为您可以在其中一行中插入数据,而不必在外键列中提供值,然后在第二个表中引用第一个表中主键的值插入行,然后您可以继续进行...
如果您有重新设计模式的权限,那么您应该这样做。如果没有,我认为最简单和最好的方法是在deathApril的评论中描述的。
在您想要添加一个新部门和一个新教授来领导它的用例中,您最好:
Oracle和SQL Server不允许循环引用,因为当从一个表中删除具有对另一个表中的另一行(外键)的依赖关系的行时(引用正在被删除的行),总会出现问题...... 更多信息:点击这里
headid
在部门中可以为空,首先插入部门,然后插入教授,最后更新部门... - AprillionDepartment
表中的HeadID
和Professor
表中的DeptID
均为NOT NULL
。 - sc1013