SQL でグラフをトラバースして更新する必要があります。
これを前向きに考えるために、例を挙げます。
- すべての企業は、特定のテーマについて他の企業を代表することができます。
- 企業はお互いを代表することができますが、同じ主題についてはできません
これは、次のようなテーブルを想定しています。
companies(id)
、representations(source_id, destination_id, subject)
。
しかし、ルールは、私の会社が特定の主題についてあなたの会社を代表しなくなった場合、私の会社からチェーンを下ったどの会社も同じ主題について私の会社を代表することはできないということです.
私の言いたいことを理解していただければ幸いです。
したがって、次のような単純なデータを使用します。
C1:
--sell--> C2
--pay--> C3
C2:
--sell--> C3
--pay--> C1
C3:
--mail--> C1
--sell--> C4
C4:
--deliver-->C1
ここで、表現を削除します (リレーションと呼ぶC2--sell-->C3
べきでした)。最終的には次の構造になります ( [X]
- 削除)。
C1:
--sell--> C2
--pay--> C3
C2:
[X]--sell--> C3
--pay--> C1
C3:
--mail--> C1
[X]--sell--> C4
C4:
--deliver-->C1
では、問題は、特定のテーマについて、私のチェーンの下流にあるすべての企業をどのように選択できるかということです。
再帰的な CTE 式がそれを行う唯一の方法だと思います。
ノート:
- 構造はツリーではなく、順序付き巡回グラフです。
- グラフデータベースは今のところオプションではありません (これはシステムのほんの一部です)
- 更新は即時である必要はなく、最終的に整合性がとれていれば問題ありません (数秒から数分程度)。