2017-09-10 12 views
0

私は1対1の関係を持つ2つのテーブルを持っています(そして関係は片側からのみ必須です)。次のように:Oracleの2つのテーブルの制約を確認してください

create table PRS (
    id number(18) not null, 
    common_code varchar2(10), 
    constraint pk_prs primary key (id)); 

create table RLP { 
    id number(18), 
    spec_code varchar2(20), 
    constraint pk_rlp primary key (id), 
    constraint fk_rlp_prs foreign key (id) references prs(id) on delete cascade); 

を値を持たなければなりませんRLP少なくともcommon_codeの1またはspec_codeでレコードを挿入する際に問題があります。

制約を使用してこの制約を適用することはできますか、または唯一のソリューションはトリガーを持っていますか?

+0

これは奇妙なデータモデルのようです。なぜ彼らは2つのテーブルですか?親カラム 'prs.common_code'はnullになり、"子 "カラム' rlp.spec_code'に値が設定されます。それらは実際にビジネスルールかもしれませんが、おそらくそれをモデル化するより良い方法があるかもしれませんか? – APC

+0

私はHibernateをORMとして使用しています。* joined subclass *メソッドを使用しています。クラスPRSには複数の子があり、それぞれ独自のテーブルがあり、その子の1つ(RLP)には別のフィールドが存在し、 2つのコード列のうちの1つを入力する必要があります。 'spec_code'を親クラスのテーブルに移動することはできますが、そこには属していないため、一部のデータベースの制限が正しいデータモデルに影響します(これは適切ではないようです)。 –

+0

したがって、 'prs'の与えられたインスタンスは1人の子しか持てませんか?サブクラスが 'rlp'の場合、サブタイプ' abc'の別の子は存在できません。すべてのサブクラステーブルで同じコード列を作成するルールは同じですか、それともそれぞれ独自のルールがありますか? – APC

答えて

0

2つのテーブルに制約を作成する方法がないようですが、唯一の解決策は、希望の状況で例外をスローするトリガーを作成することです。