正規化の話

RIPosted by

では、正規化の話です。簡単に言って正規化っていうのは、様々な要素から構成されているテーブルを分離させてしまう事です。しかし、勘や経験でテーブルを分離させていてはそれが正しいのか評価する事ができません。正規化の理論はその基準になってくれるものです。

・非正規形から第一正規形
繰り返しグループを排除ために、繰り返しグループとキーとなる項目で分割する。

・第一正規形から第二正規形
主キー以外のキー項目に関数従属しているものを分割する

・第二正規形から第三正規形
推移的に関数従属しているものを分割する。

第二正規形のテーブル

受注テーブル

伝票番号 日付 顧客コード

顧客テーブル
顧客コード 顧客名 住所 市役所コード 電話番号

数量テーブル
伝票番号 商品コード 数量

商品テーブル
商品コード 単位 単価

市役所の電話番号は、市役所コードに関数従属関係になっています。顧客コードが決まれば、市役所コードが決まり、市役所コードが決まれば、電話番号が決定する。このような状態を推移関数従属といいます。

第二正規形の推移関数従属を排除すると、第三正規形になるので、

受注テーブル
伝票番号 日付 顧客コード

顧客テーブル
顧客コード 顧客名 住所 市役所コード

電話番号テーブル
市役所コード 電話番号

数量テーブル
伝票番号 商品コード 数量

商品テーブル
商品コード 単位 単価

これで、第三正規形の完成です。多くのシステムではここまで、正規化すれば実用レベルです。例えば市役所の電話番号が変わった場合、第二正規形では複数の電話番号を更新する必要がありますが、第三正規形まで行うと、電話テーブルの一つのレコードを更新するだけで済みます。顧客の社名が変わる場合でも一箇所で済みます。商品が増えた場合も1レコードの追加です。この様な状態を一事実一箇所(1 fact in 1 place)といい、データの操作が最小の労力で行えます。効率が良いですね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA