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

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

リレーションと正規化(1)

テーブルの関連付け――リレーションを設定するには、業務を構成する種々の情報群が複数のテーブルに分割されていなければなりません。正しく結びつけるためには、正しく分かれていることが重要です。このことについて考えておきましょう。


- テーブルの「関連付け」とは? -

 リレーショナルデータベースの解説では、「テーブル同士を関連付ける」「フィールドを関連付ける」などといった説明をよく目にします。しかし、よく考えてみると「関連付ける」とはどういうことなのか、関連付けるのは「テーブルなのかフィールドなのか?」――といった疑問も生じます。

この辺りのことを整理しておきましょう。まず「関連付ける」ためには、元の情報が別々になっていなければなりません。元の情報とは「テーブル」です。リレーショナルデータベースでは、業務を構成する様々な情報群を一定の意味に基づいて切り分け、テーブルとして構成します。これを「テーブルの正規化」と呼んでいます。


- ボウリング、営業成績、健康診断… -

テーブルの正規化については、とかく難しい言葉で語られがちです。ここではごく単純に説明しておきましょう。難しく考えることはありません。実務で使える程度にあっさりと、イメージで捉えておけばいいのです。

例えば、会社でボウリング大会が開催されたとします。その成績をデータベースで管理するとなると、参加した社員一人ひとりに対して

  氏名 1ゲーム目の点数 2ゲーム目の点数 3ゲーム目の点数 総得点

といった情報が必要になります。

ボウリング大会はリクリエーション行事ですが、業務では営業成績を管理するために

  氏名 今月の販売額 累計販売額

といった情報が必要になりますし、厚生部門では健康診断の結果として

  氏名 身長 体重 右視力 左視力 …

のような情報が必要になるでしょう。その他にも、勤務実績(いわゆる「勤怠」)の情報や給与・報酬関係の情報、年休(年次有給休暇)消化の情報などなど、各社員ごとにたくさんの情報が存在します。


- 社員Aさんに関するたくさんの情報 -

ここでは「氏名」を基準に社員を特定する形になっていますが、それでは同姓同名の社員を識別できないので、実際には社員番号(あるいは「社員ID」)を使って特定することになるでしょう。厳密に考えれば、「支社ID/部署ID/個別ID」を連結した記号番号を用いるなど、結構複雑な構成となるはずです(が、ここはあっさりと流しましょう)。

さて、社員Aさんは

  ボウリング大会で「130、110、150」と好成績を出して堂々3位でした。

しかし

  今月の営業実績は売上高3,648,000円と低迷して営業部15人中12位でした。

ついでに6月に行われた健康診断では

  身長168cmで体重86kg、右視力0.5、左視力0.8、高血圧でコレステロール値も高く「要再検査」と診断されました。

そして

  Aさんは1965年9月8日生まれで1987年4月1日に採用され、1993年に大阪支社から本社営業部に異動、現在の基本給は316,000円、現時点での残年休は18日…

といった基本データがあります。


- 全部Aさんの情報だが役割は異なる -

これらの情報は、すべて「Aさん」という1人の社員に従属するデータです。ですが、すべてを

  社員ID:082010321 A山B男 1965/09/08 1987/04/01 1993/04/01 316,000 18 130 110 150 3 3,648,000 15 168 86 0.5 0.8…

などと列挙してよい訳ではありません。このような“ごった煮”の情報は扱いに非常に手こずります。

理由はお分かりでしょう。ボウリング大会の成績を知りたいだけなのに、採用年月日から身長、体重に基本給……そのときの目的には関係のない情報がすべて読み込まれます。年休を1日消化しただけでも、この膨大な情報を書き換えなければなりません。

そういった無駄を省き効率的な処理を行うために、これらを役割別に切り分けます。手作業なら

  社員名簿/勤務実績簿/営業実績簿/健康診断票/年休消化簿/健康診断票

などの帳簿や帳票で管理するところです。

要するに

  Aさん個人の情報と、Aさんの営業成績、Aさんの勤務実績
  Aさんの健康診断結果、Aさんのボーリング大会の成績
  ――これらは“Aさん”をキーにしてすべてつながっているけれども
  データの役割・種類としてはすべて異なるものである

ということです。



トップページ
リレーションと正規化(1)
テーブルの「関連付け」とは?
ボウリング、営業成績、健康診断…
社員Aさんに関するたくさんの情報
全部Aさんの情報だが役割は異なる
リレーションと正規化(2)
リレーションは2つのテーブルの関係
SQLによる関連付け
3つのテーブルを関連付ける
あとがき
Copyright © GrapeCity inc. All rights reserved.