今回はデータベースの正規化について説明します。突然ですが、以下に示す表1のようなテーブルがあったとしたらどうでしょう。
表計算ソフトで管理しているデータならばこれでも問題ありませんが、RDBに登録するデータとしては、あまり良い例とはいえません。というのも、上のテーブルにはいくつかの問題点があるからです。
- 顧客名や商品名など重複した情報が多いため、データ量が不必要に大きくなりがち
- 同様の理由で、商品名や顧客名に変更があった場合に、関係するすべてのレコードを修正しなければならない
このような不具合を解消するために、データを一定の規則に従って分割し、データの重複を取り除くということが行われます。このような手続きのことを正規化と言います。正規化は、RDBにおいてデータが増大した場合にも、データの整合性を保つために重要な考え方です。
以下では、上記の注文書テーブルを正規化してみることにしましょう。
第1正規化
まず正規化の第1 段階では、「データ内の繰り返し部分をなくすこと」です。
データ内の繰り返し部分とは、この場合、商品名、単価、購入数です。このようにテーブル内に繰り返し項目を持っているのは好ましいことではありません。たとえば、注文書テーブルのケースならば、1人の顧客が1度に購入する商品の種類が必ずしも決まっているわけではありません。ある顧客は1種類しか買わないかもしれませんが、ある顧客は10種類の商品を1度に購入していくかもしれません。
テーブル上に繰り返し項目がある場合、想定される繰り返し上限をあらかじめ設定しておく必要があります。しかし、これはあまりに無駄なことですし、そもそもテーブル上の制約から1度に注文できる商品の種類が制限されてしまうというのは、本末転倒な話でしょう。このような繰り返し項目は別のテーブルとして分割してしまいます。第1正規化の結果、できたテーブルは表2の通りです。
なお、表内で色の付いている項目は主キーを表すものとします。