テーブルの関連付けは、常に2つのテーブルの間でしか成立しません。3つ以上のテーブルを関連付ける場合でも、「関連付け」という状態そのものは2つのテーブルの間でのみ成立しているのであって、同時に3つ以上のテーブルが関連付けられることはありません。
- 3つのテーブルの関連付け - リレーションが常に2つのテーブル間の問題であるなどということは、一見どちらでもよいことのように思えます。実際、書籍などでもあまり説明されていません。しかしこのことは、リレーショナルデータベースを理解する上で非常に重要です。
元のテーブルが2つだけのリレーションならまったく問題はありませんが、2つ以上(多くの場合3~4個程度)のテーブルを関連付けた場合に、混乱が生じます。
例えば、厚生関係の事務で「社員Aさんの健康診断結果」と「社員Aさんの年休消化状況」を同時に確認する場合、テーブルは「社員」を中心に「健康診断結果」と「年休管理」が関連付けられ、図1のような形になります。しかしこれは、あくまでも「社員──健康診断結果」と「社員──年休管理」という「異なる2つのテーブルの関係を1つにまとめたもの」であって、3つのテーブルが同時並列的に関連している訳ではありません。
販売管理処理で商品を基準にした関連付けでは、図2のような形態があり得ます。
- テーブルの数は関係ない - サンプルのデータベースでも、このような関係を作ることはできます。テーブル「売上明細」から「商品ID」フィールドの値を介してテーブル「商品_mr」をたどり、販売された商品の情報を見ると、さらにそこから「仕入先ID」フィールドの値を介してテーブル「仕入先_mr」をたどり、その商品の仕入先の情報も確認できます。
この場合、一見
売上明細──商品_mr──仕入先_mr
と、3つのテーブルが一括して関連付けられているように見えますが、やはり「売上明細──商品_mr」と「商品_mr──仕入先_mr」という2つの異なったリレーションを、業務の都合で1つにまとめたものに過ぎません。
上の場合と違って、マスターとなっている「商品_mr」がさらに「仕入先_mr」を参照しているので、この関連付けを利用して処理を行う人にとっては、一連の関連した情報に見えるのです。
つまりこの場合は
「売上明細」(参照側)──(非参照側)「商品_mr」 「商品_mr」(参照側)──(非参照側)「仕入先_mr」
という具合に、テーブル「商品」が参照側と非参照側の両方の役割を持っているため、テーブル「商品_mr」を介して「売上明細」と「仕入先_mr」までもがつながっているように見えるだけなのです。
|
|
|