我正在開發一個業務管理系統,在那裏我有使用管理的層次結構式的樹狀結構的客戶名單:存儲的樹狀結構數據庫,發出帶有循環引用
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
但數據庫不會讓我創建這個表,因爲它導致的是現在允許週期性參考。對代碼中的循環節點檢查樹結構,因此實際的循環不會成爲問題。但是,我希望這種關係在我刪除節點時自動刪除。
是否有任何簡單的方法來完成這項工作或圍繞循環參考檢查?
謝謝你的時間!
您確定只是因爲您刪除了客戶B而想刪除客戶C嗎?客戶C不會成爲客戶A的直接子女嗎? –
您可以在客戶表上使用觸發器,您可以從映射表中刪除相應的條目。 –