テーブルの関連付け――リレーションを設定するには、業務を構成する種々の情報群が複数のテーブルに分割されていなければなりません。正しく結びつけるためには、正しく分かれていることが重要です。このことについて考えておきましょう。
- テーブルの「関連付け」とは? - リレーショナルデータベースの解説では、「テーブル同士を関連付ける」「フィールドを関連付ける」などといった説明をよく目にします。しかし、よく考えてみると「関連付ける」とはどういうことなのか、関連付けるのは「テーブルなのかフィールドなのか?」――といった疑問も生じます。
この辺りのことを整理しておきましょう。まず「関連付ける」ためには、元の情報が別々になっていなければなりません。元の情報とは「テーブル」です。リレーショナルデータベースでは、業務を構成する様々な情報群を一定の意味に基づいて切り分け、テーブルとして構成します。これを「テーブルの正規化」と呼んでいます。
- ボウリング、営業成績、健康診断… - テーブルの正規化については、とかく難しい言葉で語られがちです。ここではごく単純に説明しておきましょう。難しく考えることはありません。実務で使える程度にあっさりと、イメージで捉えておけばいいのです。
例えば、会社でボウリング大会が開催されたとします。その成績をデータベースで管理するとなると、参加した社員一人ひとりに対して
氏名 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さん”をキーにしてすべてつながっているけれども データの役割・種類としてはすべて異なるものである
ということです。
|
|
|