スケーラブルデータベースサーバ HiRDB Version 8 解説(Windows(R)用)
データベース中の表は,それぞれ独立しているのではなく,お互いに関連を持っている場合があります。一方の表に関連するデータがないと,ほかの表でそのデータの意味がないことがあります。表間のデータの参照整合性を保つため,表定義時に特定の列(外部キーといいます)に定義する制約が参照制約です。参照制約及び外部キーを定義した表を参照表,外部キーによって参照表から参照される表を被参照表といいます。なお,被参照表には外部キーによって参照される主キーを定義しておく必要があります。
なお,SQLやユティリティの実行などで被参照表と参照表間の参照整合性が保証できなくなる場合があります。この場合,参照表は検査保留状態になります。検査保留状態については,「5.10 検査保留状態」を参照してください。
被参照表と参照表の例を次の図に示します。この例では,商品表が参照表,製造元表が被参照表となります。参照表の外部キーから主キーを参照し,製造元名が分かります。
図5-8 被参照表と参照表の例
参照制約については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
参照制約を有効にするためには,外部キーによって参照される主キーを被参照表に定義しておく必要があります。定義系SQLのCREATE TABLEで被参照表にPRIMARY KEY(主キー)を指定します。また,検査保留状態を使用するには,pd_check_pendingオペランドにUSEを指定するか,又はオペランドの指定を省略します。
参照表には,FOREIGN KEY(外部キー)を指定し,FOREIGN KEY句中に次の指定をします。
CASCADE,又はRESTRICTを指定した場合の被参照表と参照表の動作について説明します。
CASCADEを指定すると,被参照表の主キーに変更があった場合,外部キーも同じように変更されます。なお,参照表の外部キーに変更がある場合,主キーに変更後の値と同じ値の行があるかどうかをチェックして,参照制約違反エラーになれば外部キーは変更されません。
CASCADEを指定している場合,被参照表及び参照表にSQLを実行するときの動作の例を次の図に示します。
図5-9 被参照表に更新SQLを実行するときの動作の例(CASCADE指定時)
図5-10 参照表に更新SQLを実行するときの動作の例(CASCADE指定時)
RESTRICTを指定すると,被参照表の主キーに変更がある場合,外部キーに同じ値の行があれば,参照制約違反エラーになり,主キーは変更されません。なお,外部キーに変更がある場合,主キーに同じ値の行があるかどうかをチェックして,参照制約違反エラーになれば外部キーは変更されません。
RESTRICTを指定している場合,被参照表にSQLを実行するときの動作を次の図に示します。参照表の動作は,CASCADE指定時(図5-10を参照)と同じです。
図5-11 被参照表に更新SQLを実行するときの動作の例(RESTRICT指定時)
被参照表及び参照表に対する操作系SQL(PURGE TABLE文を除きます)によるデータ操作は,HiRDBがSQL実行時にチェックし,整合性を保証します。ただし,次に示すデータ操作をした場合,整合性を保証できなくなることがあります。
これらの操作をした場合,データの整合性を確認する必要があります。データの整合性確認手順については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。また,pd_check_pendingオペランドにUSEを指定していて,これらの操作をした場合,参照表は検査保留状態になります。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.