かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

外部キー制約、テーブル間の整合性を保つための制約

time 2017/01/11

外部キー制約、テーブル間の整合性を保つための制約

テーブルに登録するデータを制限する機能である制約があります。制限したいデータを登録しようとした時にORACLEが自動的にエラーを返してくれるので、使い方次第では便利な機能です。

その中でも、外部キー制約(参照制約・参照整合性制約)について、本記事では解説します。

sponsored link

外部キー制約(参照制約・参照整合性制約)とは

外部キー制約(参照制約・参照整合性制約)とは、あるテーブルの項目値が、参照先のテーブルに存在しない値が登録されるのを許可しないという制約です。関連するテーブル間の整合性を保つための制約ですね。

例えば、受注履歴テーブルの取引先コードに、取引先マスタに存在しない値は登録できないというものです。

実際にそのようなデータを登録しようとするとSQLエラーになります。
ただし、NULLの登録は可能です。

設定方法

外部キー制約の設定方法は、テーブル作成時や変更時にCONSTRAINT句を指定します。

制約名は、省略可能です。省略時はORACLEが自動的に命名します。

文法(テーブル作成時)

文法(テーブル変更時)

オプション
オプションは、参照先テーブルのデータ削除時に、参照元テーブルに存在した時の動作を指定します。

削除方法

外部キー制約の削除方法は、テーブル変更時にDROP CONSTRAINTを指定します。

また、参照元テーブルのテーブル削除(DROP TABLE)時には、外部キー制約も合わせて削除されます。
参照先テーブルのテーブル削除(DROP TABLE)時には、オプション(CASCADE CONSTRAINTS)をつけることで外部キー制約も合わせて削除されます。オプション指定しない場合は、エラー(ORA-02449)となります。

文法

文法(参照先テーブルの削除)

注意点

注意点を以下にまとめました。

  • 参照先項目には、主キーまたは一意キーが張られている必要がある参照先項目には、主キーまたは一意キーが張られている必要がある
  • 参照先テーブルのトランケートはNG
  • 参照先テーブルのテーブル削除はオプション(CASCADE CONSTRAINTS)をつける必要がある
  • 参照元項目へのNULLの登録はOK

まとめ

関連するテーブル間の整合性を保つための制約である外部キー制約について見てきました。

データ登録時や削除時に、自動で整合性チェックをしてくれるので、不整合なデータが絶対に登録されないというメリットがあります。

しかし、その代償として、参照先テーブルのトランケートが出来ないなどの使いにくさもあります。(外部キー制約を事前に削除しておく等の方法はありますが)

外部キーを使用すべきか、またはアプリ側でデータ更新時のチェックを徹底するべきか、よく検討した上で作成するとよいでしょう。
関連


sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link