はじめに
正規化はご存知でしょうか。データベースの基礎概念です。
Wikipediaによると、
正規化(せいきか、英語: normalization)とは、データ等々を一定のルール(規則)に基づいて変形し、利用しやすくすること。
とあります。
データベースを一定のルールに従って、分けていきデータを管理・利用しやすくしようという概念です。一定のルールで第1正規化から第3正規化まで分けることができます。社内の自動化を考える意味では、第1正規化と第2正規化の違いが分かれば十分だと思います。
皆さん、商品マスタなど何気なく使っていませんか?なぜマスタが必要なんでしょうか。マスタ*1こそが正規化の概念だと私は思っています。売上伝票を帳票の形にして、マスタができるまで分け続けると自然に正規化ができます。
非正規化
表でないものを示します。例えば下のような形です。
これだと、伝票のヘッダー情報が表の形になってないですよね。
セルの結合が使用されている
そのほか、セルの結合が使用されているのも非正規化に当てはまります。
第1正規化
表の形をしたもの。請求書から台帳に移した形ですね。セルの結合をなくした状態です。
第2正規化
全ての非キー属性は、いかなる候補キーにも部分関数従属していない(完全関数従属である)こと
が定義のようです。参考:情報処理教科書 データベーススペシャリスト 2020年版
私の理解は、「候補キーをベースに表を分ける」です。
候補キーとは?
まずキーとは、「テーブルの行を一意に特定する上でカギとなるコラム」という意味です。第1正規化の例を見てみましょう。
このテーブルの中では、下記のどちらかの組み合わせであれば、必ず表の行を特定できますよね。
- 「伝票番号」+「ライン番号」
- 「伝票番号」+「商品番号」
例えば、「伝票番号」="0046222"+「ライン番号」="001"と指定してあげれば、1行目であることを特定できます。この組み合わせを”候補キー”と呼びます。
キーの考え方はリレーショナルデータベースの考え方の基礎です。
第2正規化に分けてみる
さて、実際に第2正規化を作ってみましょう。まず、候補キーの要素を〇で囲みます。その後、そこから決まるコラムを同じ色で色分けしてみます。
この色分けをもとに分ければ第2正規化完成です。 最終的にできるのは3種類(売上ヘッダ、売上明細、商品マスタ)です。
第3正規化
最後に第3正規化です。定義は、
全ての非キー属性は、いかなる候補キーにも推移的関数属性していない
参考:情報処理教科書 データベーススペシャリスト 2020年版
私の定義は、「分けられるだけ分けてみる、計算できるものは抜く」です。
分けられるだけ分けてみる
売上ヘッダの「店舗ID」と「担当者ID」がキーとなって分けられそうなので分けてみましょう。
計算できるものは抜く
さて最後に計算できるコラムを抜いてみます。
売上ヘッダ:「合計」「消費税」「請求額」
売上明細:「小計」
が計算できるコラムなので、これらを削除します。これで第3正規化が完成です!
なぜ正規化が大事なの?
なぜマスタファイルが大事か?という問いと同じです。
先ほどの社員表の例で説明します。先ほどの社員表、部署名が「開発」から「研究開発」に変更になったとします。このとき正規化を行っていた場合は部署名マスタのテーブルにある部署名を1つ変更すればよいことになりますが、正規化を行っていない場合、全ての項目を一つ一つ変えていくことになります。
もしこれが社員1万人の会社だとしたら、、探して変更してを何千回も手で行っていた場合ミスが起こりかねないですよね、、
また、新しい商品が追加されたとき、商品マスタがなかったらどうなるでしょうか。お客様が注文するまでその商品は存在できないことになってしまいます。
そんなことが起こらないように、どんなシステムもこのようなデータ構造を持っています。
おわりに
サンプルデータを用意するのに億劫ですでに挫折しそうになっていました、、
自分のペースでゆっくり書こうと思います。情報系のバックグラウンドがないため独学で書いているので、何か間違いを見つけた場合はコメントいただけると幸いです。
余談
今回紹介するのは、希望を捨てないという意味を込めて、不朽の名作「ショーシャンクの空に」です。主人公が希望を捨てずにショーシャンク刑務所で過ごしていく映画です。刑務所の中での難しい人間関係をうまく過ごしていく映画かと思いきや、最後のどんでん返しで伏線を一気に回収していくのがいいですよね。なるほどーー、こう来るかーーと思いながらすべてが繋がっていくのが本当に気持ちいいです。どんな状況にも機転を利かせて対応し、希望を捨てずに貫き通すという姿を見て感化されながら毎日過ごしたいものです。
*1:マスターデータの略。何かの基礎となるデータのことで、いわゆる社員名簿や、商品表などのことを指します。参考:マスタとは「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典