0

マルチレベルのライブラリを実装しようとしています。親ノードは 1 つだけです。

Parent1
   - Child1
   - Child2
Parent2
   - Child1
   - Child2

リンクテーブルを使用してこれを実装することから始めました

LibraryItem -< LibraryItemLink (FkParentId)
            -< LibraryItemLink (FkChildId)

複数の親ノードと複数の子ノードを使用できるため、これは問題なく強力です。ただし、親ライブラリ アイテムを削除しようとすると問題が発生します。親ノードまたは子ノードの削除をカバーするために、両方の制約に「カスケード削除」を設定するのが理想的ですが、SQL Server は循環的な削除が発生する可能性があると考えているため、これを好みません。それで、私は自分自身の人生をトリッキーにしているのかどうか疑問に思いました。代わりに、LibraryItem への自己参照関連付けを使用する必要があります。

LibraryItem -< LibraryItem(Children)

これは、特に MVC3/EF5 の世界での CRUD の観点から、実装が容易でしょうか?

最後のオプションは、2 レベルの 2 テーブルで、はるかに簡単ですが、制限があります。

考えは大歓迎です。

4

1 に答える 1

1

テーブルにPARENT_ID 列を使用してLibraryItem、同じテーブルの PK に戻る NULLS と FK を許可します。

カスケード削除の問題については、INSTEAD OF DELETEそのテーブルでトリガーを使用します。

  1. PARENT_ID が削除される行の PK であるすべてのレコードを削除します
  2. 次に、親自体のレコードを削除します。
于 2013-08-08T14:57:58.427 に答える