ツリー構造を表す ID と ParentID を持つデータベースに隣接リストがあります。
-a
--b
---c
-d
--e
もちろん、レコードでは ParentID が ID と同じであってはなりませんが、無限ループを防ぐために循環参照も防止する必要があります。これらの循環参照は、理論的には 2 つ以上のレコードを含む可能性があります。( a->b、b->c、c->a など)
レコードごとに、パスを次のような文字列列に保存します。
a a
b a/b
c a/b/c
d d
e d/e
私の質問は次のとおりです。挿入/更新するときに、循環参照が発生するかどうかを確認する方法はありますか?
ネストされたセットモデルなどについてすべて知っていることを付け加えておく必要があります。保存されたパスを使用した隣接方法を選択したのは、はるかに直感的だからです。トリガーと別のパステーブルで動作するようになりました。循環参照の可能性を除いて、魅力的に動作します。