具有多个级联路径的典型情况是这样的:具有两个详细信息的主表,例如“Master”和“Detail1”和“Detail2”。两个细节都是级联删除。到目前为止没有问题。但是,如果这两个细节都与某个其他表(例如“SomeOtherTable”)具有一对多的关系怎么办。SomeOtherTable 有一个 Detail1ID 列和一个 Detail2ID 列。
Master { ID, masterfields }
Detail1 { ID, MasterID, detail1fields }
Detail2 { ID, MasterID, detail2fields }
SomeOtherTable {ID, Detail1ID, Detail2ID, someothertablefields }
换句话说:SomeOtherTable 中的一些记录与 Detail1-records 相关联,SomeOtherTable 中的一些记录与 Detail2 记录相关联。即使保证 SomeOtherTable-records 永远不属于这两个 Details,现在也不可能对两个 Details 进行 SomeOhterTable 的记录级联删除,因为从 Master 到 SomeOtherTable 有多个级联路径(一个通过 Detail1,一个通过 Detail2)。现在你可能已经明白了。这是一个可能的解决方案:
Master { ID, masterfields }
DetailMain { ID, MasterID }
Detail1 { DetailMainID, detail1fields }
Detail2 { DetailMainID, detail2fields }
SomeOtherTable {ID, DetailMainID, someothertablefields }
所有 ID 字段都是关键字段和自动增量。关键在于 Detail 表的 DetailMainId 字段。这些字段既是关键又是参考约束。现在可以通过仅删除主记录来级联删除所有内容。缺点是对于每个 detail1-record 和每个 detail2 记录,还必须有一个 DetailMain-record(实际上是首先创建它以获得正确且唯一的 id)。