今回はリレーショナルデータベースの正規化(英語:Normalization)について、非正規系、および6種類の正規形についてご紹介し、さらに通常時実務で必要となるボイスコッド正規形までについては変換手順もあわせてご紹介したいと思います。
目次
1.非正規形と正規化のメリット
1.1 非正規形の特徴
正規化が行われておらず、一つのテーブルの中に同じような値が複数回登場するような表(テーブル)を、非正規形と呼びます。
例えば購入履歴を管理するケースを想定して考えてみます。1回の注文を1行で登録しているため、注文の品が増えるとどんどん横に長くなってしまうという難点があります。
以下の表は、非正規形のテーブル例です。
1.2 正規化のメリット
非正規形のままテーブルを利用するのでなく正規化を行うメリットには、次のようなものが挙げられます。
・データの汎用性アップ
データが整理されることで、他システムとの連携や移行などが行いやすくなります。
・データの容量削減
無駄な重複が削除されることにより、保存に必要なデータ領域の削減になります。
・データの保守性アップ
同じデータが何度も登場しないようにするため、変更があった場合の修正が容易になります。
例:取引先の社名が変更になった場合、取引先をまとめて登録していたマスタの1か所のみを修正するだけで複数の請求書に印字される社名が一括で変更できるなど。修正漏れの危険性も減ります。
1.3 正規化のデメリット
対して正規化を行うと発生するデメリットには、次のようなものが挙げられます。
・検索のパフォーマンスが低下する場合がある
整理しすぎると、条件により目的のものを取り出し難くなってしまうケースが発生します。そのためアクセス速度を重視する部分には、あえてあまり正規化を行わないという場合もあります。
2.第1正規形
2.1 第1正規形の特徴
第1正規化で行うことは、主にデータの(横方向の)繰り返しの整理です。
リレーショナルデータベースは縦にどんどんレコードを追加していく操作には適していますが、横のカラムは固定する必要があります。そこで、横の繰り返し部分を縦に並べるように変更します。
2.2 第1正規化の手順
第1正規形に変換するには、まず繰り返しになっている部分を特定します。
特定したら、繰り返しが横ではなく縦に伸びるように並べ替えます。
これで第1正規化は完了です。
3.第2正規形
3.1 第2正規形の特徴
第2正規化で行うことは、主に従属関係にあるデータの分離です。
3.2 第2正規化の手順
第1正規形では、明細が繰り返されるたびに本体部分の同じデータも繰り返されていました。その無駄を省くため、まず「本体」と「明細」を分離します。各明細がどの本体と結びつくのかは、今回は「注文番号」で特定しています。
さらに分離できる情報があります。例えば今回の場合は、「ユーザデータ」と「商品データ」です。しかしこのままでは「注文番号」のように一意に特定できるキーがないため、今回は「ユーザID」「商品番号」という項目を追加してみます。
「ユーザID」「商品番号」を追加して「ユーザデータ」と「商品データ」をそれぞれ別の表に分離すると、次のようになります。
なお正規化の操作ではないため今回は省いていますが、このままのデータでは主キー(プライマリキー)の重複でデータベースに登録することができません。そのため実践の場面では、主キーの重複を回避するために明細の行番号などの項目も追加して使用します。
4.第3正規形
4.1 第3正規形の特徴
第3正規化では、さらに推移的関数従属と呼ばれる従属関係の分離を行います。
4.2 第3正規化の手順
第2正規形で完成したテーブルを見ると、まだ分離できるところがあります。それはユーザデータの中にある、「送料区分」です。
図のように分離し、さらに送料区分に対応する料金情報なども付加しやすくなりました。
5.ボイスコッド正規形
5.1 ボイスコッド正規形の特徴
ボイスコッド正規系形を簡単に表すと、「第3正規形を強化したもの」です。主キー以外のカラムが全て主キーに完全関数従属であり、それ以外の従属関係があれば表を分離することが、ボイスコッド正規化になります。
5.2 ボイスコッド正規化の手順
例えばユーザデータにメールアドレスが含まれるとします。登録時に登録済メールアドレスの再登録をエラーとする処理などを行っておけば、ユーザ名とメールアドレスは1:1の関係にあると言えます。その場合、ボイスコッド正規化ではテーブルを2つに分離することになります。
6.第4正規形
6.1 第4正規形の特徴
第4正規化では、ボイスコッド正規化などを適用して3つ以上の主キーのみで構成されたテーブルから、さらに主キーを分解し、多値従属性を排除する処理を行います。
6.2 第4正規化の手順
第4正規形はWikipediaに分かりやすい変換手順の図が掲載されていますので、詳しくはそちらをご確認下さい。
【Wikipedia - 関係の正規化】
https://ja.wikipedia.org/wiki/関係の正規化
7.第5正規形
7.1 第5正規形の特徴
第5正規化は「射影-結合正規形」とも呼ばれ、第4正規化と同様に3つ以上の主キーのみで構成されたテーブルからさらに主キーを分解し、候補キーの中で結合従属性が満足されるように処理を行います。
7.2 第5正規化の手順
第5正規形もWikipediaに詳しい変換手順の図が掲載されています。第4正規形共にあまり実務で利用する場面はありませんが、興味のある方はご覧になってみて下さい。
【Wikipedia - 関係の正規化】
https://ja.wikipedia.org/wiki/関係の正規化
8.実務で特に重要なのは第3正規形まで
冒頭でも述べていますが、実務で特に重要なのは第3正規形までであり、たまにボイスコッド正規形も利用する機会があるというイメージです。これからデータベースの設計を勉強したいという方は、特に第3正規形までをしっかりと覚えておいてみて下さい。