デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - 始めるその前に (知っておくと便利)正規化とは?

 

 

 

はじめに

正規化はご存知でしょうか。データベースの基礎概念です。

Wikipediaによると、

正規化(せいきか、英語: normalization)とは、データ等々を一定のルール(規則)に基づいて変形し、利用しやすくすること。

とあります。

データベースを一定のルールに従って、分けていきデータを管理・利用しやすくしようという概念です。一定のルールで第1正規化から第3正規化まで分けることができます。社内の自動化を考える意味では、第1正規化と第2正規化の違いが分かれば十分だと思います。

 皆さん、商品マスタなど何気なく使っていませんか?なぜマスタが必要なんでしょうか。マスタ*1こそが正規化の概念だと私は思っています。売上伝票を帳票の形にして、マスタができるまで分け続けると自然に正規化ができます。

 

非正規化

表でないものを示します。例えば下のような形です。

 

f:id:makkynm:20200614160421p:plain

非正規化

 これだと、伝票のヘッダー情報が表の形になってないですよね。

 

セルの結合が使用されている

そのほか、セルの結合が使用されているのも非正規化に当てはまります。

f:id:makkynm:20200614160536p:plain

非正規化


 

第1正規化

表の形をしたもの。請求書から台帳に移した形ですね。セルの結合をなくした状態です。 

f:id:makkynm:20200229145556p:plain

第一正規化

 

第2正規化

全ての非キー属性は、いかなる候補キーにも部分関数従属していない(完全関数従属である)こと

 が定義のようです。参考:情報処理教科書 データベーススペシャリスト 2020年版

私の理解は、「候補キーをベースに表を分ける」です。

 

候補キーとは?

まずキーとは、「テーブルの行を一意に特定する上でカギとなるコラム」という意味です。第1正規化の例を見てみましょう。

このテーブルの中では、下記のどちらかの組み合わせであれば、必ず表の行を特定できますよね。

  1. 「伝票番号」+「ライン番号」
  2. 「伝票番号」+「商品番号」

例えば、「伝票番号」="0046222"+「ライン番号」="001"と指定してあげれば、1行目であることを特定できます。この組み合わせを”候補キー”と呼びます。

キーの考え方はリレーショナルデータベースの考え方の基礎です。

 

第2正規化に分けてみる 

さて、実際に第2正規化を作ってみましょう。まず、候補キーの要素を〇で囲みます。その後、そこから決まるコラムを同じ色で色分けしてみます。

f:id:makkynm:20200229153633p:plain

候補キーと各要素の従属関係

 この色分けをもとに分ければ第2正規化完成です。 最終的にできるのは3種類(売上ヘッダ、売上明細、商品マスタ)です。

f:id:makkynm:20200229160133p:plain

売上ヘッダ

f:id:makkynm:20200229160911p:plain

売上明細(sales item)

f:id:makkynm:20200229160224p:plain

商品マスタ

第3正規化

最後に第3正規化です。定義は、

全ての非キー属性は、いかなる候補キーにも推移的関数属性していない

参考:情報処理教科書 データベーススペシャリスト 2020年版

 

私の定義は、「分けられるだけ分けてみる、計算できるものは抜く」です。

 

 

分けられるだけ分けてみる

売上ヘッダの「店舗ID」と「担当者ID」がキーとなって分けられそうなので分けてみましょう。 

f:id:makkynm:20200229161536p:plain

売上ヘッダ

f:id:makkynm:20200229161503p:plain

店舗マスタ

f:id:makkynm:20200229161607p:plain

担当者マスタ

計算できるものは抜く

さて最後に計算できるコラムを抜いてみます。

売上ヘッダ:「合計」「消費税」「請求額」

売上明細:「小計」

が計算できるコラムなので、これらを削除します。これで第3正規化が完成です!

f:id:makkynm:20200229162210p:plain

売上ヘッダ

f:id:makkynm:20200229162118p:plain

売上明細(sales item)

 

なぜ正規化が大事なの?

なぜマスタファイルが大事か?という問いと同じです。

先ほどの社員表の例で説明します。先ほどの社員表、部署名が「開発」から「研究開発」に変更になったとします。このとき正規化を行っていた場合は部署名マスタのテーブルにある部署名を1つ変更すればよいことになりますが、正規化を行っていない場合、全ての項目を一つ一つ変えていくことになります。

もしこれが社員1万人の会社だとしたら、、探して変更してを何千回も手で行っていた場合ミスが起こりかねないですよね、、

また、新しい商品が追加されたとき、商品マスタがなかったらどうなるでしょうか。お客様が注文するまでその商品は存在できないことになってしまいます。

そんなことが起こらないように、どんなシステムもこのようなデータ構造を持っています。

 

おわりに

サンプルデータを用意するのに億劫ですでに挫折しそうになっていました、、

自分のペースでゆっくり書こうと思います。情報系のバックグラウンドがないため独学で書いているので、何か間違いを見つけた場合はコメントいただけると幸いです。

 

 

 

余談

今回紹介するのは、希望を捨てないという意味を込めて、不朽の名作「ショーシャンクの空に」です。主人公が希望を捨てずにショーシャンク刑務所で過ごしていく映画です。刑務所の中での難しい人間関係をうまく過ごしていく映画かと思いきや、最後のどんでん返しで伏線を一気に回収していくのがいいですよね。なるほどーー、こう来るかーーと思いながらすべてが繋がっていくのが本当に気持ちいいです。どんな状況にも機転を利かせて対応し、希望を捨てずに貫き通すという姿を見て感化されながら毎日過ごしたいものです。 

ショーシャンクの空に(字幕版)

ショーシャンクの空に(字幕版)

  • 発売日: 2013/11/26
  • メディア: Prime Video
 
ショーシャンクの空に(吹替版)

ショーシャンクの空に(吹替版)

  • メディア: Prime Video
 

 

 

www.youtube.com

*1:マスターデータの略。何かの基礎となるデータのことで、いわゆる社員名簿や、商品表などのことを指します。参考:マスタとは「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典