Mail
 ナビゲーション リンクのスキップ

10.リレーション

★リレーション

リレーショナル(関連)データベースと言うぐらいですから、リレーションはリレーショナルデータベースの最も大きな特徴です。
ただしリレーションを設定しなくても、データを参照する事だけを考えると、大きな問題はありません。
実際に意識してリレーションを設定しないケースもあります。(私が経験したプロジェクトは、偶然か設定しないケースが殆どです)

★参照整合性

リレーションを設定するメリットは、参照整合性を保つことができるということで、簡単に言いますと、参照した際にエラーにならないようにできるということです。
どのような場合にエラーになるかと言いますと、例えばある曲を登録し、その曲の作曲家も登録したとします。
この場合、曲テーブルのレコードには、作曲家IDが登録され、作曲家テーブルに、作曲家のレコードが登録されます。


その後、この作曲家のレコードを削除してしまうと、曲テーブルのレコードには、存在しない作曲家IDが残ったままになり、以下のように、2つのテーブルを内部結合して参照するようなSQLはヒットしなくなります。
「SELECT 曲テーブル.曲名,作曲家テーブル.作曲家名 FROM 曲テーブル,作曲家テーブル WHERE 曲テーブル.作曲家ID = 作曲家テーブル.作曲家ID AND 曲テーブル.曲ID = 1;」

リレーションを設定すると、このようなケースを、ユーザが意識することなく、データベースの機能で防ぐことが出来ます。
上記の例を用いると、作曲家のレコードを削除する際に、削除を許さないか、逆にその作曲家が作曲した曲のレコードを自動的に削除することで、整合性を保ちます。
Accessの場合、リレーション設定画面で「レコードの連鎖削除」オプションを選択すると、削除したデータと関連したデータを削除しますし、オプションを選択しないと、削除を許可しません。

先ほど、意識してリレーションを設定しないケースがあると言いましたが、どのような場合でしょうか?
再度上記の例を用いると、作曲家の情報を消しても、曲の情報は残したい場合が、そうです。
この場合も、参照整合性は意識する必要があり、参照した際にエラーにならないようなプログラム上の工夫が必要になります。(例えば外部結合に変更するなど)
データモデリングの際には、参照整合性を十分に意識して、リレーションを考えます。

リレーションはSQLで設定出来ますが、最近ではビジュアルツールで設定する事もできます。