両方の列をNULL可能に宣言し、2つの列のうちの1つがNULLでないことを確認するチェック制約を作成できます。私は教授のためにと講師のための個別のテーブルを持っていると私はクラスが教授や講師ではなく、両方を持つことができるいずれかのようなクラスをモデル化したい場合
たとえば、私はこの
SQL> ed
Wrote file afiedt.buf
1 create table professor(
2 professor_id number primary key
3*)
SQL>/
Table created.
SQL> create table lecturer(
2 lecturer_id number primary key
3 );
Table created.
SQL> create table class(
2 class_id number primary key,
3 lecturer_id number references lecturer(lecturer_id),
4 professor_id number references professor(professor_id),
5 check((lecturer_id is null and professor_id is not null) or
6 (lecturer_id is not null and professor_id is null))
7 );
Table created.
SQL> insert into professor values(1);
1 row created.
SQL> insert into lecturer values(20);
1 row created.
SQL> insert into class values(1, 20, null);
1 row created.
SQL> insert into class values(2, null, 1);
1 row created.
SQL> insert into class values(3, 20, 1);
insert into class values(3, 20, 1)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.SYS_C0014175) violated
ような何かを行うことができますもちろん
は、データモデリングの観点から、頻繁にLECTURER
またはPROFESSOR
のいずれであってもよく、INSTRUCTOR
に非NULL可能外部キーでCLASS
テーブルを作成するINSTRUCTOR_TYPE
を持つ単一INSTRUCTOR
のテーブルを作成するために、良いアイデアになります表。
ビューの作成が最適でした – Aaron