Previous: 関数従属
Up: データベースの論理設計
Next: 第二正規形
Previous Page: 関数従属
Next Page: 第二正規形
次のようなテーブルを考えてみよう。
学生番号 氏名 所属 履修科目 点数 ----------- ------------- ---------- ----------- ------ 0001 丸山不二夫 経営情報 UNIX 88 C 53 OA 30 0002 山田太郎 経営情報 UNIX 92 C 78 OA 72 0003 山田太郎 英文情報 OA 86 ----------- ------------- ---------- ----------- ------
このテーブルは、普通のテーブルとしては問題ないが、リレーショナル・データ ベースのテーブルとしては、「テーブルの項目には複数の値を入れることは出来ない」 という条件を満たしていないので、不十分である。 このテーブルは、次のように書き直され(第一正規化)ねばならない。
学生番号 氏名 所属 履修科目 点数 ----------- ------------- ---------- ----------- ------ 0001 丸山不二夫 経営情報 UNIX 88 0001 丸山不二夫 経営情報 C 53 0001 丸山不二夫 経営情報 OA 30 0002 山田太郎 経営情報 UNIX 92 0002 山田太郎 経営情報 C 78 0002 山田太郎 経営情報 OA 72 0003 山田太郎 英文情報 OA 86 ----------- ------------- ---------- ----------- ------
こうして得られたテーブルは、リレーショナル・データベースのテーブルの満たす べき最低限の要件は満たしているが、第一正規化以前のテーブルに比べて、冗長な 印象を与えるのは否めない。実は、この「冗長」という印象は、第一正規化のせいだけ ではない。
このテーブルでは、各人の所属と科目毎の成績が主に記録されているのだが、この二つ はもともと独立のものである。テーブルの中で、各人の成績毎に氏名や所属が冗長に 繰り返されるのは、そのためである。次の二つのテーブルが、もとのテーブルと等し い情報を持つことは明らかである。二つのテーブルを、「学生番号」についてジョイン をとれば、もとのテーブルが再現されるのもすぐ分かるであろう。 我々は、この二つのテーブルを元のテーブルのより「正規化」された形と考えることが できる。
学生番号 氏名 所属 学生番号 履修科目 点数 ----------- ------------- ---------- ----------- ----------- ------ 0001 丸山不二夫 経営情報 0001 UNIX 88 0002 山田太郎 経営情報 0001 C 53 0003 山田太郎 英文情報 0001 OA 30 ----------- ------------- ---------- 0002 UNIX 92 0002 C 78 0002 OA 72 0003 OA 86 ----------- ----------- ------
maruyama@wakhok.ac.jp