2011-12-03 11 views
2

Oracleテーブル(親、子、ルートの列の標準モデル)内に複数の階層を格納しており、階層が正しいことを確認するためにどのような制約を検討する必要があるか有効です。Oracleテーブルの複数の階層の妥当性を確認

私は、子、親、およびルートの列がすべて意味を持つようにしたいと考えています(たとえば、同じルートは2つの異なる階層に対して定義できません。 )

制約なしで定義されたリンクテーブル(!!)の不一致/不完全なデータ常には、アプリケーションがそれを回避しようとしているにもかかわらず、何らかの方法で狂っています。

トリガーは、単純な場合を除き、すべての場合では一般的に避けなければならないと考えています。このために制約をコードする方法がわかりません。ストアドプロシージャは唯一の実際の方法です(おそらくシリアル化可能なトランザクションモードセット) ?

答えて

1

外部キーは、CREATE TABLEステートメントで同じ制約テーブルを参照することはできませんが、ALTER TABLEステートメントで定義することはできません。

create table XXX (
    key number primary key, 
    parent number 
) 
/

alter table XXX add constraint XXX_FK foreign key (parent) references XXX 
/
+0

これは1つのコマンドで実行できますが、主キー列を明示的に参照する必要があります。例: '、制約xxx_fk外部キー(親)参照xxx(キー) '。 –