全従業員が有効な部門に属しているかどうかを確認する場合は、データの参照整合性を維持する必要があります。 単純化されたデータベースシステムの参照整合性を維持するため、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".

外部キーの動作は、アプリケーションに基づいて微調整することができます。 外部キーを正しく使用すると、データベースアプリケーションのパフォーマンスが向上します。 外部キーの使用の改善を推奨します。