ある大学の就職課が、学生の採用内定の進展状況をデータベースで管理したいと考えています。その為に必要な情報は、学生に関する情報、企業に関する情報、および「どの学生がどこの会社に内定したか」という採用内定に関する情報です。 このようなデータベースを作成して、必要な情報または就職指導に有用な情報を利用できるように考察しなさい。
目次データベースの設計で最も重要なことは、何のために誰が利用するものなのか、その目的を明確にすることです。データベースを考えるには、目的=機能という言い方で捉え直してみるとよい。実際の業務のうち、どの機能をデータベースというシステムに移行するか企画し設計する、これは自分で考察してみなさい。
データベースの設計の流れは、概念設計、論理設計、物理設計と進みます。まずは概念設計です。構築するシステムの全体像を、利用者と設計者が共有する為に、実体関連図(ER図)が使われる。 利用目的の要件が出揃ったら、業務でその情報を必要とするもので、利用者にとって管理しなければならないもの(実体, entity)を定義します。最初の演習課題では、既にそのような実体が明示されています。しかし、共有性の高い長期的な管理データ、毎日の内定発生の管理データ(元帳またはマスターテーブル)、および月別や年度別の内定を要約した管理データの3種類に分けて定義することが重要です。
実体が決まったら、実体の間のリレーションシップ(関連, relationship)を調べてそれを記述する。学生、企業、内定の関連は以下のようになる。
次は、実体の属性(attribute)の定義です。属性とは、実体を構成するデータ項目のことで、Microsoft Accessではテーブルのフィールド名(または属性名)と呼ばれる。ER図では、実体、関連、属性の3つの要素で実際の業務を表現します。
学生に関する情報、企業に関する情報、および採用内定に関する情報で必要だと思われる属性をそれぞれ以下のようにまとめてみます。
一意識別子:
実体の中の個々のデータ(レコード)を一意に識別できる属性のことを「一意識別子」という。関係データベースでは実体をテーブルで実現します。一意識別子はテーブルの「主キー」に相当する。学生に関する情報では学籍番号が「学生CD」の代替で主キーとなります。企業CDと内定IDはそれぞれのテーブルの主キーとなります。
テーブル設計の問題点:
一見するとこの3つのテーブルには何も問題がないように見えます。しかし、実際にデータを入力し利用する場面を想像すると、次のような問題があることが分かります。
テーブルの分割:
上で述べた問題点を解決する為には、学生テーブルを学生元帳テーブルと学科テーブルに分割します。最初のフィールドを主キーとし、矢印は従属関係を示します。企業テーブルについても、企業元帳テーブルと産業分類テーブルに分割します。採用内定テーブルは元のままで十分です。共有性の高い長期的な管理データのテーブルには「○○△マスター」というテーブル名を付けるようにします。
以上のような手順でテーブルの分割を行うことを「テーブルの正規化」といいます。本格的なテーブルの正規化は、第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正規形を作成するには、繰り返し項目の分離と導出属性の除去を行う。
例:
|
⇒ |
|
および |
|
第2正規形:
第2正規形(2NF = second normal form)とは、第1正規形であって、かつ、主キーにキーではない属性(非キー属性)が完全に関数従属している形式の「表」である。主キーが複数の属性で構成されている場合に第2正規形でない可能性がある。第2正規形にするには、複合キーのすべてではなく一部にのみ関数従属していた場合、その部分を独立した実体に分割する。
例:
|
⇒ |
|
および |
|
第3正規形:
第2正規形には、非キー属性の間において関数従属の関係を持つものが残っている可能性がある。これはその実体の中に別の実体がまだ混在していることを意味する。
非キー属性の間に関数従属の関係がある場合を「推移関数従属」があるという。
第3正規形(3NF = third normal form)を完成させるには、第2正規形において、推移関数従属の関係があるものを別の実体に分割する必要がある。
このような正規形にする重要な意義は、「更新時異常の発生を抑制」すること、つまり「データの追加、削除等の結果としてデータベースのデータ値に矛盾が生じることを抑制」することです。
例:
この例では、企業CDと職種がキー(複合キー)で、「担当CD」と「担当者」は非キー属性である。しかし、「担当CD」→「担当者」の関数従属の関係がある。つまり、「企業CDと職種」→「担当CD」→「担当者」の推移関数従属の関係が存在している。
|
⇒ |
|
および |
|
実用的には、第3正規形まで求めればリレーショナルモデルとしては十分と言われている。 しかし、データの条件によっては更新時異常の発生問題を解決するにはより高次の正規化が必要になる場合がある。 高次の正規形としては、Boyce/Codd正規形、第4正規形、第5正規形が知られている。
就職内定データベースを構成する5つのテーブルについて、第3正規形の要件を満たしているか、再確認しなさい。
Go to TOP | (C) T. Katayama ----- Last updated: |