データの正規化

データの正規化…データの重複をなくし、理解しやすく、更新や削除を容易に行えるデータ構造にすること。


非正規化の表
生徒コード生徒名担任コード担任名部活名
000003高島忠夫710101小林稔侍相撲、柔道、空手
000009鈴木その子881101北村総一郎柔道
000012江口洋介910401橋爪功 
000022石田純一950401竜雷太相撲

部活名でデータが複合している。関係データベースではこのようなデータの複合は許されない。


第1正規化
生徒コード生徒名担任コード担任名部活名
000003高島忠夫710101小林稔侍相撲
000003高島忠夫710101小林稔侍柔道
000003高島忠夫710101小林稔侍空手
000009鈴木その子881101北村総一郎柔道
000012江口洋介910401橋爪功 
000022石田純一950401竜雷太相撲

データの複合は解消された。しかし、このままでは『高島忠夫』を含む行を削除した場合、担任データ(小林稔侍)まで失われてしまう。

生徒コードは生徒名と部活名に、担任コードは担任名にそれぞれ従属しているので、これらを分離する。


第2正規化
担任コード担任名
710101小林稔侍
881101北村総一郎
910401橋爪功
950401竜雷太

生徒コード生徒名担任コード部活名
000003高島忠夫710101相撲
000003高島忠夫710101柔道
000003高島忠夫710101空手
000009鈴木その子881101柔道
000012江口洋介910401 
000022石田純一950401相撲

生徒データと担任データが独立された。しかし、このままでは『高島忠夫』を含む行を削除した場合、部活名(空手)まで失われてしまう。

生徒名と部活名は従属関係にあるので、分離する。


第3正規化
担任コード担任名
710101小林稔侍
881101北村総一郎
910401橋爪功
950401竜雷太

生徒コード生徒名担任コード
000003高島忠夫710101
000009鈴木その子881101
000012江口洋介910401
000022石田純一950401

生徒コード部活コード
000003sumo01
000003judo01
000003kara01
000009judo01
000022sumo01

部活コード部活名
sumo01相撲
judo01柔道
kara01空手

従属関係が完全に解消された。『高島忠夫』のデータを削除しても、『担任名』や『部活名』は削除されず、データの整合性が保てる。


back home