私は、階層スタイルの管理を使用してツリーとして編成された顧客のリストを持つビジネス管理システムを開発しています。
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 はその子の 1 つの ID であり、子ノードごとに行を挿入します。
今、私がやっている問題は、このテーブルを更新し続けることです。顧客を削除するたびに、このテーブルの関係も削除したいと思います。次のようなものを使用してカスケードを使用してテーブルを作成しようとしました:
... FOREIGN KEY (fromID) REFERENCES CustomerNode(id) ON DELETE CASCADE,
... FOREIGN KEY (toID) REFERENCES CustomerNode(id) ON DELETE CASCADE
しかし、現在許可されている循環参照が発生するため、データベースはこのテーブルの作成を許可しません。ツリー構造はコードで循環ノードをチェックされるため、実際の循環は問題になりません。ただし、ノードを削除するたびに、この関係を自動的に削除したいと考えています。
これを達成したり、循環参照チェックを回避したりする簡単な方法はありますか?
御時間ありがとうございます!