0

データベースにリレーションシップテーブルを追加することを考えています。同じテーブル内のPKを指すFKを使用して、一種の逆リレーションシップ機能を含めたいと思います。たとえば、次のようなテーブルRELATIONSHIPがあるとします。

ID (PK)    Relation      ReverseID (FK)
1          Parent        2
2          Child         1
3          Grandparent   4
4          Grandchild    3
5          Sibling       5

まず、これも可能ですか?第二に、これはこれを行うための良い方法ですか?そうでない場合、あなたの提案は何ですか?

4

1 に答える 1

2

1)可能です。

2)あなたの場合、あなたが望むほど望ましくないかもしれません-非周期的構造とは対照的に、あなたはサイクルを持っています-これのためにあなたのFKが所定の位置にあるならあなたはそれらの行をそのまま挿入することはできません。1つの可能性は、テーブルDDLのReverseID列でNULLを許可した後、NULLのReverseIDを持つすべての行を挿入してからUPDATEを実行して、参照する有効な行を持つReverseID列を設定する必要があることです。もう1つの可能性は、foreginキーを無効にするか、データが完全に有効な状態になるまで作成せずに適用することです。

3)ほぼ毎回このような操作を行う必要があり、すべての関係に逆数がある場合は、スキーマでNOT NULLを適用できないか、制約を定期的に無効にしてから再度有効にします。

4)きょうだいの状況は同じです。

これが何らかの方法で制御され、その影響を理解していれば、設計を使用しても問題ありません。

于 2013-03-25T21:57:14.547 に答える