データベース千夜一夜第11回

テーブルの関連付け(1)~SQLによるリレーションの基本 長谷川裕行
有限会社 手國堂

リレーションは2つのテーブルの関係

テーブルの関連付けは、常に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」までもがつながっているように見えるだけなのです。



トップページ
リレーションと正規化(1)
リレーションと正規化(2)
リレーションは2つのテーブルの関係
3つのテーブルの関連付け
テーブルの数は関係ない
SQLによる関連付け
3つのテーブルを関連付ける
あとがき
Copyright © GrapeCity inc. All rights reserved.