lec01 | lec02 | lec03

演習1   就職内定データベース

演習課題

ある大学の就職課が、学生の採用内定の進展状況をデータベースで管理したいと考えています。その為に必要な情報は、学生に関する情報、企業に関する情報、および「どの学生がどこの会社に内定したか」という採用内定に関する情報です。 このようなデータベースを作成して、必要な情報または就職指導に有用な情報を利用できるように考察しなさい。

目次

1節:テーブル設計

データベースの設計で最も重要なことは、何のために誰が利用するものなのか、その目的を明確にすることです。データベースを考えるには、目的=機能という言い方で捉え直してみるとよい。実際の業務のうち、どの機能をデータベースというシステムに移行するか企画し設計する、これは自分で考察してみなさい。

  1. 概念設計

データベースの設計の流れは、概念設計、論理設計、物理設計と進みます。まずは概念設計です。構築するシステムの全体像を、利用者と設計者が共有する為に、実体関連図(ER図)が使われる。 利用目的の要件が出揃ったら、業務でその情報を必要とするもので、利用者にとって管理しなければならないもの(実体, entity)を定義します。最初の演習課題では、既にそのような実体が明示されています。しかし、共有性の高い長期的な管理データ、毎日の内定発生の管理データ(元帳またはマスターテーブル)、および月別や年度別の内定を要約した管理データの3種類に分けて定義することが重要です。

実体が決まったら、実体の間のリレーションシップ(関連, relationship)を調べてそれを記述する。学生、企業、内定の関連は以下のようになる。

次は、実体の属性(attribute)の定義です。属性とは、実体を構成するデータ項目のことで、Microsoft Accessではテーブルのフィールド名(または属性名)と呼ばれる。ER図では、実体、関連、属性の3つの要素で実際の業務を表現します。
学生に関する情報、企業に関する情報、および採用内定に関する情報で必要だと思われる属性をそれぞれ以下のようにまとめてみます。

(注)学生と企業については、電話やe-mail、所属ゼミ、企業の採用担当者やホームページアドレス(URL)などまだ必要なデータ項目がありますが、ここでは演習課題としての作業を簡単にするため割愛しました。

一意識別子:
実体の中の個々のデータ(レコード)を一意に識別できる属性のことを「一意識別子」という。関係データベースでは実体をテーブルで実現します。一意識別子はテーブルの「主キー」に相当する。学生に関する情報では学籍番号が「学生CD」の代替で主キーとなります。企業CDと内定IDはそれぞれのテーブルの主キーとなります。

テーブル設計の問題点:
一見するとこの3つのテーブルには何も問題がないように見えます。しかし、実際にデータを入力し利用する場面を想像すると、次のような問題があることが分かります。

  1. フィールド値の重複: ある学科の学生が100名あればその数だけ学科名が重複します。企業の産業分類も重複します。例えば、今年から就職課が産業分類を変えたい場合、関連する企業すべてを抽出してもれなく変更する必要が生じます。変更ミスをすればテーブルに不整合が含まれてしまう危険がある。
  2. フィールド間の従属関係: 例えば、ある学生の内定情報を修正したい場合、入力すべきフィールドは最小限になるようにします。その結果、修正漏れによってテーブルが不整合になる危険を防止できます。今回のテーブルでは上の(i)を解決すればこの問題はなくなります。内定が決まるという個々の事象に一意の「内定ID」をもつレコードを入力します。つまり、内定IDが決まれば、そのレコードの内定日、学籍番号、企業CDが決まるという従属関係にある。
  3. 記憶領域のむだな消費: 学生や企業の詳細情報は1つあるだけで十分です。採用内定テーブルには学生や企業の主キーとなるフィールドのみを含めます。学科や産業分類も台帳(マスター)を作るべきです。

テーブルの分割:
上で述べた問題点を解決する為には、学生テーブルを学生元帳テーブルと学科テーブルに分割します。最初のフィールドを主キーとし、矢印は従属関係を示します。企業テーブルについても、企業元帳テーブルと産業分類テーブルに分割します。採用内定テーブルは元のままで十分です。共有性の高い長期的な管理データのテーブルには「○○△マスター」というテーブル名を付けるようにします。

  1. 論理設計

以上のような手順でテーブルの分割を行うことを「テーブルの正規化」といいます。本格的なテーブルの正規化は、第1正規化、第2正規化、第3正規化の手順を追って行われます。 ここからの工程では具体的に次の作業を行い、もう少しデータベースを意識した設計を進めていく。そして、データベースシステムとしての要件を満たすすべての属性を完備した「詳細なER図」を完成させる。 詳細なER図に基づいて、モデルの論理的なデータ構造を表現するものとして「表、索引、ビュー」を作成する。

まず、実体の間の関連を設定したときに「多対多」になっているものはないか。多対多の関係になっている場合は、実体の間に新しい実体を媒介させて2つの「1対多」の関連に分け多対多の関係を解消する。

次に、詳細属性の抽出を再検討する。画面や帳票などに必要な属性はすべて揃っているかを利用者の立場から検証する。実際に業務の流れを利用者にシミュレーションしてもらうと、例えば次のような新たな要求が生まれてくるかもしれない。

正規化の目的:
各実体の詳細属性が抽出できた段階で、テーブルの正規化という工程に入る。 正規化の理論は、1事実(同じ意味合いのデータ)を複数所有する実体を分解していくことで、実体内の属性を「1事実1か所」の単純な形式にするための指針です。 正規化されたデータ構造を正規形という。 リレーショナルモデルを提案したE.F.Coddは第1正規形から、第2正規形、第3正規形までを定義した。

第1正規形:
第1正規形(1NF = first normal form)とは、繰り返し項目を取り除き、単に2次元のフラットな形式で表現される「表」のことをいう。一般にXの任意の値に対してYの1つの値が対応する場合、属性Yは属性Xに「関数従属」であるといい、「X→Y」と表現する。 繰り返し項目とは、「X→Y」の関係があるとき、Yの値が複数存在してしまう状態の項目のことをいう。また、第1正規形では、1つの表内の属性でその値が他の属性の値から導かれる場合、その属性を「導出属性」といって、その導出属性は取り除かれる。 つまり、第1正規形を作成するには、繰り返し項目の分離と導出属性の除去を行う。
例:
企業CD企業職種勤務CD勤務地初任給
101A社営業職1010札幌188,000
1020仙台185,000
.........
201B社総合職1010札幌205,000
1030横浜212,000
1040川崎208,000
企業表
企業CD企業職種
101A社営業職
201B社総合職
および
勤務地待遇表
企業CD勤務CD勤務地初任給
1011010札幌188,000
1011020仙台185,000
101.........
2011010札幌205,000
201.........

第2正規形:
第2正規形(2NF = second normal form)とは、第1正規形であって、かつ、主キーにキーではない属性(非キー属性)が完全に関数従属している形式の「表」である。主キーが複数の属性で構成されている場合に第2正規形でない可能性がある。第2正規形にするには、複合キーのすべてではなく一部にのみ関数従属していた場合、その部分を独立した実体に分割する。
例:
勤務地待遇表
企業CD勤務CD勤務地初任給
1011010札幌188,000
1011020仙台185,000
101.........
2011010札幌205,000
201.........
初任給表
企業CD勤務CD初任給
1011010188,000
1011020185,000
101......
2011010205,000
201......
および
勤務地表
勤務CD勤務地
1010札幌
1020仙台
1030横浜
1040川崎

第3正規形:
第2正規形には、非キー属性の間において関数従属の関係を持つものが残っている可能性がある。これはその実体の中に別の実体がまだ混在していることを意味する。 非キー属性の間に関数従属の関係がある場合を「推移関数従属」があるという。 第3正規形(3NF = third normal form)を完成させるには、第2正規形において、推移関数従属の関係があるものを別の実体に分割する必要がある。 このような正規形にする重要な意義は、「更新時異常の発生を抑制」すること、つまり「データの追加、削除等の結果としてデータベースのデータ値に矛盾が生じることを抑制」することです。
例:
この例では、企業CDと職種がキー(複合キー)で、「担当CD」と「担当者」は非キー属性である。しかし、「担当CD」→「担当者」の関数従属の関係がある。つまり、「企業CDと職種」→「担当CD」→「担当者」の推移関数従属の関係が存在している。
企業CD企業職種担当CD担当者
101A社営業職1011有川一郎
101A社総合職1012石田文子
101A社研究職1013上野三治
201B社総合職1012石田文子
201B社SE1013上野三治
担当者表
担当CD担当者
1011有川一郎
1012石田文子
1013上野三治
および
企業相談表
企業CD企業職種担当CD
101A社営業職1011
101A社総合職1012
101A社研究職1013
201B社総合職1012
201B社SE1013

実用的には、第3正規形まで求めればリレーショナルモデルとしては十分と言われている。 しかし、データの条件によっては更新時異常の発生問題を解決するにはより高次の正規化が必要になる場合がある。 高次の正規形としては、Boyce/Codd正規形、第4正規形、第5正規形が知られている。

問題1

就職内定データベースを構成する5つのテーブルについて、第3正規形の要件を満たしているか、再確認しなさい。

go to top

2節:テーブルの作成


Go to TOP (C) T. Katayama ----- Last updated: