Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

Excelでビッグデータを乗りこなせ(7.テーブルの正規化)

前回はExcelとは異なるデータベースの独自要素を盛り込みつつSQLiteデータベース・テーブルを作成した。

www.excellovers.com

今回はデータベースの独自要素、「正規化」を考慮してデータベースを分割することにチャレンジしてみます。

正規化前のテーブル構成

前回作成したテーブルの構成はこの様になっています。

赤色の仕訳IDはPRIMARY KEY制約がかかっています。
f:id:ExcelLover:20190720132547j:plain

項目と日付にはインデックスが設定されています。
f:id:ExcelLover:20190720132608j:plain

正規化

Excelユーザーにとって耳馴染みのない正規化とはいったいなんなんでしょうか。

正規化とは、データなどをある基準や形式に適合するように、一定の手順や規則に従って変形・変換すること。様々な分野で用いられる概念であり、それぞれ目的や方法などが大きく異なる。

リレーショナルデータベース(RDBMS)では、データの保守性向上や処理の高速化を図るため、データベース内で同じ情報が複数の箇所に重複して記録されず、個々のテーブルは主キーから直接連想されるデータのみで構成されるよう設計するのが理想とされている。

正規化)

見よう見まねですが実際に正規化を進めていってみたいと思います。


正規化は正規化前の非正規形第1正規形~第5正規形のそれぞれの段階があります。

一般的には非正規形を第1・第2・第3の正規形まで順に正規化していくようです。


第1正規形

第1正規形とは、リレーショナルデータベースでデータの冗長性や不整合を排除した正規形の一つで、一つの行(レコード)の中で特定の項目が繰り返し含まれたり、複数の値を連結した値が含まれるような構造を廃したもの。そのような形式に変換することを第1正規化という。

第1正規形

わかりにくいですが、以下のようなことを行います。

  • 各テーブルで繰り返し現れるグループを除去します。
  • 関連するデータごとに 1 つのテーブルを作成します。
  • 関連するデータ セットを主キーで識別します。

データベースの正規化の基礎

うきうき家計簿から出力されたCSVは以下のような構成です。

この中で「繰り返し現れるグループ」この辺りでしょうか。
f:id:ExcelLover:20190720132721j:plain

上記の範囲を「関連するデータごとに1つのテーブル」を作成します。

列を切り出してテーブルにする際に前回も行った「関連するデータセットを主キーで識別」出来るように設定します。

このように分けてみました。

前回作成した「仕訳」テーブルから3つのテーブルを切り出しました。

・科目マスター (項目・内訳)

・お店マスター (お店)

・口座マスター (口座)


切り出したテーブルにそれぞれ主キーを設定しました。

各テーブルはこのような状態です。
f:id:ExcelLover:20190720132805j:plain
f:id:ExcelLover:20190720132817j:plain
f:id:ExcelLover:20190720132833j:plain

第2正規形

リレーショナルデータベースでデータの冗長性や不整合を排除した正規形の一つで、ある表(リレーション)が第1正規形であり、かつ、レコード中の非キー項目のうち、主キーのいずれかが定まれば一意に定まるようなものを排除して独立した表として分離したものを第2正規形(second normal form)という。そのような形式に変換することを第2正規化という。

第2正規形)

これまた何のことかよくわかりませんが以下のような事を行います。

  • 複数のレコードに該当する値のセットごとに 1 つのテーブルを作成します。

  • これらのテーブルを外部キーと関連付けます。

    データベースの正規化の基礎


外部キーの関連付けをしてみます。

関連付けはExcelでいうとvlookupで別シートからデータを持ってくるような感じです。
f:id:ExcelLover:20190720135306j:plain

それぞれのマスターテーブルがvlookupでいうところの参照範囲になります。
仕訳テーブルとそれぞれのテーブルはそれぞれのIDで紐付けられています。

第3正規形

リレーショナルデータベースでデータの冗長性や不整合を排除した正規形の一つで、ある表(リレーション)が第2正規形であり、かつ、レコード中の非キー項目のうち、他の非キー項目のいずれかが定まれば一意に定まるようなものを排除して独立した表として分離したものを第3正規形(third normal form)という。そのような形式に変換することを第3正規化という。

第3正規形

  • キーに従属しないフィールドを除去します。

今回の例で言えば「科目マスター」の項目が該当すると思う。

このテーブルを更に「項目マスター」と「内訳マスター」に分割してみる。

この結果各テーブルの関連付けはこのようになった。
f:id:ExcelLover:20190720162102j:plain

まとめ

テーブルの分割を行ってみましたが、正直まだまだ消化不良でよく理解できていないなぁと言う感じです。

この辺りはもう少し数をこなしてみないと駄目ですね。

次回は今回のテーブル構成を実現するためのコードを紹介してみようと思います。