0

Oracle には、3 つの列で構成される Category というテーブルがあります。
ID = システムによって生成された一意のキー 、
Catgeory_name = 300 char 、parent_id = のいずれかであり、このカテゴリの親がないことを意味する -1 である可能性があります。前述の ID 列の値を parent_id として使用します。

問題は、親であるカテゴリを削除すると、すべての子も自動的に削除する必要があることです。私の質問は次のとおりです。SQLはこれを自動的に行う手段を提供しますか、それともC#である上位層の言語で処理する必要がありますか。

たとえば、2 つのテーブル間に外部キーの状況があった場合、SQL は ON DELETE CASCADE を提供して、元のレコードの削除要求時に依存レコードと親レコードを削除することを知っています。

ただし、上記の状況を自動的に処理する SQL の方法はわかりません。つまり、上記の表で親が削除されると、すべての子も削除されます。

よろしくお願いします。

4

1 に答える 1

2

親が存在しない場合にparent_idに設定されている場合、で主キーを参照NULLする外部キーを定義できます。categorycategory

SQL> create table category (
  2    id number primary key,
  3    category_name varchar2(300),
  4    parent_id number references category( id )
  5  );

Table created.

次に、親行が削除されたときに子を自動的に削除する外部キー制約を宣言できます。

適切なを使用するのではなく、実際に-1のマジック値を使用して親が存在しないことを示したい場合は、-1の行をテーブルNULLに挿入してから、外部キー制約を作成できます。しかし、それはを使用するよりもはるかにエレガントではありません。categoryidNULL

于 2012-12-04T18:04:31.407 に答える