我正在开发一个业务管理系统,其中我有一个使用层次结构管理风格组织为树的客户列表:
Customer A
-- Customer B
-- Customer C
-- Customer D
我有一个存储所有客户数据(姓名、联系信息等)的表和另一个表来映射这棵树的关系:
CREATE TABLE customer_tree
(
"fromID" int,
"toID" int,
CONSTRAINT "fk_from_tree_customer" FOREIGN KEY (fromID) REFERENCES CustomerNode(id),
CONSTRAINT "fk_to_tree_customer" FOREIGN KEY (toID) REFERENCES CustomerNode(id),
"id" int IDENTITY(1,1) PRIMARY KEY)
基本上 fromID 是父节点,toID 是其中一个子节点的 ID,为每个子节点插入一行。
现在,我有一个问题是保持这个表更新。每当我删除客户时,我也希望删除此表中的关系。我尝试使用类似这样的级联来创建表:
... FOREIGN KEY (fromID) REFERENCES CustomerNode(id) ON DELETE CASCADE,
... FOREIGN KEY (toID) REFERENCES CustomerNode(id) ON DELETE CASCADE
但是数据库不允许我创建这个表,因为它会导致现在允许的循环引用。在代码中检查树结构的循环节点,因此实际循环不会成为问题。但是,我希望在删除节点时自动删除此关系。
有没有简单的方法来完成这个或解决循环参考检查?
谢谢你的时间!