Oracle 11gデータベースでは、プライマリ・キーI_Node(int)とI_Parent_Node(int)という別のレコードを参照する表があります。同じテーブルにルートノードにはI_Parent_Node = nullがあります。このようにして、ノード、リーフ、ブランチのツリー構造を形成します。自己参照表のOracleでの削除時間を改善する方法
ノードのブランチ全体を一度に削除する必要があります。ノードとそのすべての子を意味します。時には、これは多くの、多くのレコード、例えば50,000以上です。カスケード削除は自己参照テーブルでは許可されていないため、葉で始まり、ツリーをバックアップするために1つずつ削除する必要があります。私たちは何時間もの削除時間を経験しました。
オフピーク時に別のプログラムで削除マークされたノードをクリーンアウトする「削除用のマーキング」手法を検討していますが、データベース設計の変更など、ここで助けてください。私は仕事で学んだことを除いてOracleに訓練されておらず、データベースを作成した人々はそのような大量を念頭に置いていませんでした。私はまだ固定設計ではないので、データベース設計の変更を公開しています。
"カスケード削除は自己参照表では許可されていません"という意味ですか? 'create table test1(I_Node番号主キー、I_Parent_Node番号、制約test1_fk外部キー(I_Parent_Node)はdeleteカスケードでtest1(I_Node)を参照します); ' –