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