データベースを設計しようとして、深刻な問題に直面しました。ノードのテーブルがあり、これらのノードからツリーを作成したいと考えています。
ノードは 1 回しか定義できませんが、ツリー内で何度も使用できます (ノードのすべての子は、同じ名前の他のノードと同じになります)。
これを行うために、親ノードが定義されているブランチと呼ばれるテーブルと、ノード テーブルの両方に対する FK を持つ子ノードを使用しました。
私の問題は、ノードが削除されたときにブランチも削除したいということですが、SQL サーバーが 2 つのノード (親と子)同じである可能性があるため、機能しないため、エラーが発生します:
FOREIGN KEY constraint on table may cause cycles or multiple cascade paths
これはトリガーを使用して修正できることはわかっていますが、トリガーを追加すると、削除の前にアクションを実行できないため、トリガーの INSTEAD を実行する必要があります。これにより、データベース内の他の FK が台無しになります。大規模なデータベースのすべての FK に対してそれらを作成する必要があります。
私が行ったよりもデータベースを設計するためのより良い方法があるかどうか疑問に思っていましたか? それとも、それと一緒に暮らして、至る所でトリガーを使用する必要がありますか
ありがとう
編集:
そのように設計されています:
Node {id, name, is_root}
Branch {id, node_parent_id, node_child_id}