データベースの正規化|レシートから考えるPOSデータ分析(5)

AUTHOR :   ギックス

本記事は、株式会社ギックスの運営していた分析情報サイト graffe/グラーフ より移設されました(2019/7/1)

正規化によって、レシートデータを「整理」する

前回の記事「レシートからトランザクションテーブルを想像する」では、レシートの情報から1つのテーブルを作成しました。
receipt4-1
前回記事において、これはPOSシステム内にある「トランザクションテーブルの一部」と考えられると書きました。

トランザクションテーブルの”重複項目”を別のテーブルに切り出してみる:データベースの正規化

さて、このテーブルですが、重複している項目が多く、とても見づらいです。 そこで、重複している項目を別のテーブルに切り出してみます。この切り出す時に重要となるのが、「第2回」で出てきた分類です。

  1. 店舗ごとの情報
  2. レシートごとの情報
  3. 購入商品ごとの情報

それぞれの分類ごとに切り分ければ、”階層”が同じであるので重複している項目がなくなるはずです。実際に、1~3の分類で元の”トランザクションテーブル”を切り分けると下のようになります。
1.「店舗ごとの情報」を切り出したテーブル
receipt5-2
2.「レシートごとの情報」を切り出したテーブル
receipt5-3
3.「購入商品ごとの情報」を切り出したテーブル
receipt5-4
このように3つのテーブルに分けられました。
しかしながら、このままではそれぞれのデータベース同士が紐づいていません。2のテーブルのレシートのデータが1のテーブルのどの店舗のデータと紐づいているのか、3.のテーブルの購入商品のデータが2.のテーブルのどのレシートのデータと紐づいているかがわかりません。 そこで、これらのテーブル同士をつなぐため、店舗番号とレシート番号を用意します。
1の店舗ごとのテーブルの各行に店舗番号を、2のレシートごとのテーブルの各行にレシート番号をふり、テーブルの中に列として組み込みます。
1.「店舗ごとの情報」を切り出したテーブル
receipt5-5
2.「レシートごとの情報」を切り出したテーブル
receipt5-6
3.「購入商品ごとの情報」を切り出したテーブル
receipt5-7
これにより、各テーブル間のデータ同士が紐づきました。
このように、データの重複をなくすようにデータベースを整理することを、データベースの正規化と呼びます。正規化については記事「マスタデータとトランザクションデータついて(正規化編)|データ分析用語を解説」に詳しく記載していますので、こちらをご覧ください。

さらなるデータベースの正規化

上で作成したテーブルのうち3の購入商品ごとのテーブルを見てください。
receipt5-7
この中には同じ商品名の項目が含まれています。商品単価は商品ごとに設定されているので、商品名と商品単価は別のテーブルに切り出すことができそうです。
実際に切り分けてみると次のように2つのテーブルに分けられました。
3′. 購入商品ごとのテーブル
receipt5-84. 商品ごとのテーブル
receipt5-9
そして、3’の購入商品ごとのテーブルと4の商品ごとのテーブルを紐づけるために商品番号という列をそれぞれのテーブルに作成しています。
今回、データベースを正規化することによって、レシートに記載された項目をすべて盛り込んだ”トランザクションテーブル”を4つに分けました。このうち、1の店舗ごとのテーブルと4の商品ごとのテーブルは、「マスタテーブル」という種類のテーブルになります。これについては、次回に書いていきたいと思います。

連載/関連記事リスト:POSデータ分析
SERVICE