ITパスポート講座の講師ブログ

よくあるご質問 -データベース正規化の必要性-

皆さん、こんにちは!
ITパスポート講座担当の小野です。
徐々に涼しい時期になってきました。体調管理には気をつけていきましょう!

 今回は、よくあるご質問のうち、データベースの正規化の必要性についてご紹介しましょう。正規化は3段階で行われますが、1つのセルに1つの情報が入れられた状態を、第1正規化が終わった状態としています。ほとんどのデータベースは、データ作成時点でこの状態にあるかも知れません。

(表1)【得点表】(第1正規化終了)
学籍番号 氏名 学科コード 学科名 履修科目 得点
0001 山田一郎 01 経済 経済学 82
0001 山田一郎 01 経済 簿記 65
0002 鈴木次郎 02 経営 経済学 75
0002 鈴木次郎 02 経営 簿記 83

 この状態で表の整理を終えたとしましょう。
 例えば、山田一郎さんの学科が[経営]に変わったとしたら、この表でどんな操作が必要になるでしょう? この部分をすべて書き換えなければなりませんね。
 この表では4つのデータしかありませんし、学科も[経済]と[経営]の2つだけですから直接この表を書き換える手間もそれほどないかもしれません。しかし、学科が10、学生の述べ受験科目が5,000くらいある表で、10人の学科が変わったとしたらどうでしょう? [経済]から[経営]の変更、[経済]から[法学]への変更などバラバラな感じの学科変更があった場合、書き換える作業中にミスが生じる可能性が非常に高くなります。そうすると、山田一郎さんの経済学の得点を示す行では学科名が[経営]になっているにもかかわらず、簿記の得点を行では学科名が「法学]になってしまうというミスが起こってしまう可能性が高くなるわけです。

そこで、第2正規化を行います。
 
(表2)
【得点表】(第2正規化終了)
学籍番号 履修科目 得点
0001 経済学 82
0001 簿記 65
0002 経済学 75
0002 簿記 83

【学生表】(第2正規化終了)
学籍番 氏名 学科コード 学科名
0001 山田一郎 01 経済
0002 鈴木次郎 02 経営

 こうすると、学科が変わった人の学科名だけを書き換えれば済むようになります。
 山田一郎さんの列の学科名だけを書き換えれば済むことになります。学科変更をした人が10人いたとしても、表1を書き換えるよりもミスは激減するでしょう。
 しかし、まだ十分ではありません。例えば「経済学科」が「経済政策学科」へ変わるような、学科名自体の変化が起こったとしましょう。【学生表】の学科名を学生数の分だけすべて書き換えなければなりません。しかも、学科名が変わった学科の部分だけに限ってです。やはり、ここでもミスが生じる可能性が高そうですね。【学生表】には在籍する学生分の行があり、数百~数千になるでしょうから。

 そこで、第3正規化を行います。

(表3)
【得点表】(第3正規化終了)
学籍番号 履修科目 得点
0001 経済学 82
0001 簿記 65
0002 経済学 75
0002 簿記 83

(表3)【学生表】(第3正規化終了)
学籍番号 氏名 学科コード
0001 山田一郎 01
0002 鈴木次郎 02

(表3)【学科表】(第3正規化終了)
学科コード 学科名
01 経済
02 経営

 これで学科名が変わった場合には、ここだけを書き換えれば済むようになります。
 
 このように正規化を行うと、表の一部を修正しなければならない場合にも最小限の修正で済むようになります。これをテキストでは「②メンテナンス(情報更新)がしやすくなる」と表しています。表1よりも表3のメンテナンスが圧倒的にラクである点は上記の例でご理解いただけると思います。
 また、重複部分がなくなる=同じデータがある場合に1回だけ保存することによって、全体のデータ量を減らすことが可能です。表1では全部で24個のデータがあります(四角で囲んだ中の各セル)。一方、表3ではデータは22個に減っています。表1でもう1行追加されると6個のデータが追加されますが、表3の場合には【得点表】に3個のデータしか追加されません。【学生表】や【学科表】に追加する事柄はないからです。よって、データが増えるほど、1つの表に記載する事柄を少なくしておくことにより、データ量を減らすことができます。これをテキストでは「①各表のデータサイズが小さくなる」と表しています。

 このように正規化することで、更新作業もラクになるし(ミスも少なくなるし)、データ量も少なくなるという利点があるわけですね。