全従業員が有効な部門に属しているかどうかを確認する場合は、データの参照整合性を維持する必要があります。 単純化されたデータベースシステムの参照整合性を維持するため、dept テーブルに一致するレコードが含まれているかどうかを確認し、新しい従業員レコードを挿入または拒否します。 これは問題が起きやすく、使い勝手が悪いアプローチです。 Oracle と互換性のある PolarDB データベースを使うと、データ管理を簡素化することができます。
このセクションでは、セクション 2.1.2 で示した emp テーブルの変更バージョンを示します。 外部キー制約がバージョンに追加されています。 次の例は、変更された emp テーブルです。
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
サンプルの emp テーブルで次の INSERT ステートメントを実行しようとすると、外部キー制約 emp_ref_dept_fk が dept テーブルでの部門 50 の存在を確認します。 この部門は存在しないため、ステートメントは拒否されます。
INSERT INTO emp VALUES (8000,'JONES','CLERK',7902,'17-AUG-07',1200,NULL,50);
ERROR: insert or update on table "emp" violates foreign key constraint "emp_ref_dept_fk"
DETAIL: Key (deptno)=(50) is not present in table "dept".
外部キーの動作は、アプリケーションに基づいて微調整することができます。 外部キーを正しく使用すると、データベースアプリケーションのパフォーマンスが向上します。 外部キーの使用の改善を推奨します。