プログラミング

正規化とは?データベーススペシャリスト対策1日目

来年の春にデータベーススペシャリストの試験を受けようと考えています。そこで勉強したことをインプットだけで終わらせるのではなくブログにてアウトプットをしていきます。その日勉強したこと・疑問点をまとめて投稿していきます。今回は1日目です。30日目までは続けていきたいです。

今日の勉強したこと

正規化の基本

正規化

正規化とは一定のルールに従って変形を行うこと。ここでいう変形とは関係を分解することである。もっとかみ砕いて言うと、1つの表を複数の表に分けること。

正規化の目的

タプルの更新時(タプルの挿入、更新、削除)に起こる以上である更新時異常を排除すること。

1つのデータは一か所のみに存在する「一か所一事実」が実現できる。

データの重複をなくすことで更新時に複数箇所を更新する必要がなくなる。

具体例を使って考えてみる。次のような関係「伝票」を考える。

伝票番号顧客番号顧客名商品番号数量
0112田中商事2001100
0222佐藤商店2008300
0222佐藤商店2002200
0331鈴木工業2007400

このような関係があったとき、もし仮に顧客名である佐藤商店の名前を変えなければならなくなったとすると、二箇所変更する必要がある。これだと更新時に異常が起こる可能性がある。この表だと佐藤商店は二つしかないだもっと大きなデータだとデータの漏れがあるかもしれない。それを防ぐために正規化を行う。

正規化をすれば上の表は次のようになります。厳密には次の表は間違っています。今回は具体例として説明するために分かり易くしました。

伝票番号顧客番号商品番号数量
01122001100
02222008300
02222002200
03312007400
顧客番号顧客名
12田中商事
22佐藤商店
31鈴木工業

上の表で顧客名を変える際は一か所だけ変更すれば済みます。間違いが起こりにくいです。

ただし正規化にはデメリットもあります。正規化は表を分解するので、データを扱う際には表の結合操作を行わなければなりません。つまり、処理速度が遅くなってしまうことがあります。

正規化を行う上で関数従属性を理解しておく必要があります。

関数従属性とは

ある属性Xの値が決まれば別の属性Yの値が一意に決まる性質。

数学の関数と同じです。y=xという一次式のようにxの値が決まればyの値は一つだけに決まります。あるものが一つ決まればそれに伴ってもう一つのものが決まる関係です。

ここまでが正規化の基本知識です。次は第一正規化のやり方について勉強します。

RELATED POST

COMMENT

メールアドレスが公開されることはありません。