一度学ぶMS-Accessもう一度学ぶMS-Access読者になるもう一度学ぶMS-Access2014-08-25主キーと外部キーによる参照リレーションシップリレーションシップとは、列の間の参照に関して設定するものであることを述べました。その参照というのは基本的に主キーと外部キーの関係を指しており、Excelの関数のようにどこか別のセルを指定して値を引用することとは意味合いが違います。ここでは、具体的な設定を説明する前に、リレーションシップの設定の対象となる”主キーと外部キーによる参照”の例を見ていきます。はじめの例として、主キーの節で現れたテーブルを再掲します。メーカーテーブルの主キーはメーカーコード、商品テーブルの主キーは商品コードとなっています。はちみつメロン再度説明しますが、この例では、メーカーテーブルだけでなく、商品テーブルにもメーカーコードという列があり、両方のテーブルで同じ値を記録しています。これの意味するところは明らかですが、商品テーブル側のメーカーコードはその商品を製造したメーカーを表しており、それがどのような会社かを知りたい場合は、メーカーコードをもとにメーカーテーブルを参照することによりメーカーをただ1つに特定し、その情報を得ることができるというわけです。商品テーブルのメーカーコードはメーカーテーブルのメーカーコードを参照している、というわけです。このとき、商品テーブル側のメーカーコードを外部キーといいます。メーカーテーブル側のメーカーコードは主キーとなっていますので同じ値は1つしか現れませんが、外部キーである商品テーブル側のメーカーコードは主キーではなく、同じ値が何度も現れます。1つのメーカーは一般に多数の商品を作っているので、これは常識に照らして当然の結果といえます。このようなテーブルを作っただけでは、両者に関係があるものと解釈できる、というだけにすぎません。実際に、外部キーとして主キーの値と整合しない値が記録される恐れがあり、そうなった場合には(例えばメーカーテーブルのメーカーコードとして1,2,3という値しか存在しないにもかかわらず、商品テーブルのメーカーコードとして7とか15などといった値が記録されたとしたら)両方のテーブルに矛盾が生じ、本当にメーカーとその商品の関係を記録しているものなのかどうか判断できない状態となってしまいます。そこで、後で見るように、これらの列の間でリレーションシップの設定を行うことにより、主キーと外部キーによる参照を具体的に定義づけ、テーブル間の矛盾を防ぐことができるというわけです。後で改めて触れますが、正確には主キーと外部キーの間以外にもリレーションシップは設定できます。主キーと外部キーの間に設定することが基本であり、それ以外の列どうしに設定する必要性はあまりありません。ところで、次の例はどうでしょうか。2014時間外勤務テーブルの主キーは{社員番号,年月日}、所有資格テーブルの主キーは{社員番号,資格コード}です。どちらのテーブルにも社員番号という列があり、同じ番号であれば同じ社員を指しています。確かに両方のテーブルに共通する社員番号が現れています(1,3,5)。残業した社員が何か資格を持っている必然性はありませんし、逆に資格を持っている社員が必ず残業をするという必然性もありません。両方のテーブルにある社員番号の値の整合性というものを考慮する必要がないのです。このような列は参照関係にあるとはいえず、リレーションシップの設定を行う意味もありません。次のようになると少し様子が違ってきます。上記の例に「社員テーブル」が加わったものです。2014時間外勤務テーブルも所有資格テーブルも会社の社員について記録するためにあります。社員テーブルに存在しない者を記録することはありませんので、時間外勤務テーブルに記録される社員番号は社員テーブルの社員番号として存在するものでなければなりませんし、所有資格テーブルの社員番号についても同様です。これらの列の値には整合性が求められるのです。時間外勤務テーブルの社員番号は社員テーブルの社員番号を参照していますし、所有資格テーブルの社員番号も社員テーブルの社員番号を参照しているということになります。これらはそれぞれリレーションシップの設定に適した列となっています。次の例はどうでしょうか。契約テーブル(主キーは契約ID)において1件の契約ごとに1人の担当者のコードが記録されており、その値は社員テーブル(主キーは社員コード)の社員コードに相当しています。1件の契約ごとに1人の社員が担当者として割り当てられていることを表しています。営業2課この場合、担当者コード、社員コードというように列の名前は異なりますが、社員コードという主キーと担当者コードという外部キーによる参照となっています。これらはリレーションシップの設定に適した列といえます。読者になるこのブログについてスポンサーリンク注目記事サイト内検索スポンサーリンクはてなブログをはじめよう!accs2014さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。