PR

Excelデータベースの正規化とは?表/テーブルの分割手順と実務解説

Thumbnail for Excelデータベースの正規化とは?表/テーブルの分割手順と実務解説
  • 「Excelテーブルでデータ管理しているが、重複が多くて修正するときが大変…」
  • 「Excelでリレーショナルデータベースを再現したいが、テーブル設計の考え方がわからない…」
  • 「表をマスタとトランザクションに分割する方法が知りたい…」

このような問題は、 テーブルの正規化で解消 できます。Excelで効率的にデータを管理するには、1つの表にすべてを詰め込むのではなく、役割ごとにテーブルを分割する「正規化」が有効です。

本記事では、Excelにおけるテーブル正規化の手順と、実務で使えるテーブル設計の考え方を解説します。

「Excelデータベース」と「RDB」の違い

Excelで「データベース」というと、テーブル化した1つの表を指すことが多いです。一方、MySQL・Access・PostgreSQLなどの専用データベースシステム(DBMS)では、複数のテーブルに分割して管理するリレーショナルデータベース(RDB)が標準的です。Excelでも疑似的にRDBを再現できますが、そのためにはテーブルの正規化(分割)が前提となります。

Excelによるデータベースの基本については、下記の記事をご覧ください。

理由|テーブル分割・正規化しなかった場合の問題点

テーブルを分割せずに1つの表に情報を詰め込み続けると、次のような問題が発生します。

 

重複データの発生

同じ顧客が複数回購入するたびに、「顧客名」「顧客住所」などの文字列が全行に重複して入力されます。 データ量が増えるほど、ファイルサイズが肥大化 します。

 

更新時異状(アノマリー)

データを追加・修正・削除するたびに、意図しない不具合が起きます。この問題を 「更新時異状(アノマリー)と呼びます

異状の種類具体的な問題
修正異状1社の住所変更に伴い、その顧客が登場するすべての行を書き換える必要がある修正漏れが起きると、データに不整合が生じる。
挿入異状売上が発生していない段階では、新規顧客や新規商品の情報を単独で登録できない 設計上の制約がある。
削除異状特定の売上レコードを削除すると、そのレコードにしか存在しなかった顧客・商品の情報まで同時に消える

Before/After|正規化前後のテーブル構造

 

正規化前(非正規化状態)

取引履歴(イベント情報)と顧客・商品情報(属性情報)が、すべて1つのシートに混在しています。

受注番号受注日顧客ID顧客名顧客住所商品ID商品名単価数量
10012026/06/01C01株式会社A東京都...P01ノートPC100,0002
1002P02マウス5,0005

「株式会社A」「東京都...」が2行に重複しています。 顧客数・購買回数が増えるほど、重複行は際限なく増えていきます

 

正規化後(リレーショナル状態)

「イベント(売上の事実)を記録するトランザクションテーブルと、「属性(顧客や商品の情報)を管理するマスタテーブルに分離します。各テーブルはID列(キー)で関連付けます。

T_売上(トランザクション)

受注番号受注日顧客ID商品ID数量
10012026/06/01C01P012
1002P025

M_顧客(マスタ)

顧客ID顧客名顧客住所
C01株式会社A東京都...

M_商品(マスタ)

商品ID商品名単価
P01ノートPC100,000
P02マウス5,000

「株式会社A」の住所を変更する場合、M_顧客テーブルの 1箇所を修正するだけで完了 します。

 

2種類のテーブル:マスタとトランザクション

データベース設計では、「イベント(売上・入出庫など)と「属性(顧客情報・商品情報など)を別々のテーブルで管理します。

マスタとトランザクションの例
格納データテーブルの種類テーブル名のプレフィックス(接頭語)
属性マスタ(ディメンション)M_(Master)商品リスト、顧客台帳、名簿
イベントトランザクション(ファクト)T_(Transaction / Table)売上明細、入出庫履歴、ログデータ

テーブルの種類の通称はさまざま

テーブルの呼び方は文脈によって異なります。整理しておきます。

  • テーブル設計での呼び方:「マスタ」と「トランザクション」
  • Power Queryでの呼び方:「ディメンション」と「ファクト」
  • Excelでのプレフィックス(接頭語)M_(Master)T_(Transaction / Table)
    • T_ は "Transaction" ではなく "Table" を指し、マスタテーブル以外のテーブルに付けることが一般的です。

テーブル名の設定方法など、Excelテーブルの基本操作については、下記の記事をご覧ください。

テーブル設計|Excelデータベースの正規化手順の考え方

正規化は「多対多の関係をなくし、1対多の関係に分解していく」プロセスです。第1〜第3正規化の手順でテーブルを整理します。

 

ステップ1:第一正規化による「1セル1値」の徹底

第一正規化は、データを正しく集計・管理するために、表のセルを最小単位に整理する手順です。

. - 第1正規形の定義:1つのセルに1つの値のみを格納し、繰り返し項目(列)やセルの結合を排除した状態(アトミックな状態)

以下のような入力は、第1正規形に違反します。

  • 1つのセルにカンマやセル内改行で複数の値を記入している
  • セルを結合して複数のセルに1つの値を表示している
  • 「1月売上」「2月売上」「3月売上」のように、同一項目を複数列に並べている(クロス集計表)
 

ステップ2:第2・第3正規化によるマスタの切り出し

第2・第3正規化は、主キー(レコードを一意に特定する列)との関係をもとに、重複するデータを別のテーブル(マスタ)として切り出す手順です。

  • 第2正規形の定義:複合主キーの一部のキーにしか依存しない属性を、別テーブルに分離した状態(部分関数従属の排除)
    • 部分関数従属 とは、主キーが2つ以上の列(複合キー)でできているとき、その「一部のキー」だけでデータが決まる関係のこと
  • 第3正規形の定義:主キー以外の列に依存する属性を、別テーブルに分離した状態(推移的関数従属の排除)
    • 推移的関数従属 とは、「主キー以外の列」が決まるとデータが決まる関係のこと。主キーから見ると、別の列を挟んで(推移して)データが決まる状態。

推移的関数従属 とは、たとえば「顧客ID」が決まると「市区町村コード」が決まり、「市区町村コード」が決まると「市区町村名」が決まる関係のことです。

実務では「どの列が、どの列の値によって決まるか」を整理することで、分離先のテーブルを特定できます。

キー(決定項目)キーに直接従属する属性分離先テーブル
商品ID商品名、単価M_商品
顧客ID顧客名、顧客住所M_顧客
受注番号受注日、顧客ID、商品ID、数量T_売上
吉峰
吉峰

正規化には第4正規形・第5正規形なども理論上は存在しますが、第3正規形まで対応すれば実用上十分なケースがほとんどです。

 

ステップ3:スタースキーマで過度な正規化を防ぐ

専用のDBMSと違い、Excelでは正規化を進めすぎると逆に管理が複雑になり、パフォーマンスも問題になります。Excelデータベースでは「スタースキーマ」を採用し、テーブルの分割を必要最小限に留めるの方が良いです。

スタースキーマの構造

「ファクトテーブル(トランザクション)を中心置き、その周囲を「ディメンションテーブル(マスタ)が囲む構造。テーブルの 親子関係は1階層のみ とし、マスタからさらにマスタを分離するような多段構造は持たない。

テーブルの形特徴デメリット
スタースキーマ(非正規化)テーブルの数が少なく、構造がシンプル。同じデータが何度も重複して保存されるため、容量を消費する。
スノーフレークスキーマ(第3正規形まで分解)データの重複が一切なく、整理されている。使用する際に大量のテーブルを「結合(JOIN)しなければならず、 処理速度が大幅に低下するJOINの設定が複雑になる。

データベース理論どおりに正規化を徹底すると(例:住所から都道府県・市区町村を別々のマスタに分割するなど)Excelではテーブルの階層が深くなりすぎ、管理と結合の処理負荷が過剰になります。

基本的には、下記を方針として考えれば良いでしょう。

  • マスタとトランザクションに分離する
  • マスタからさらにマスタを分離するのは特定の条件の場合(後述)とする。

マスタからさらにマスタを分離する判断基準

Excelデータベースでは、原則としてスタースキーマを維持しますが、以下の条件に当てはまる場合は、マスタをさらに分離することを検討します。

  • データ量が膨大で、重複によるサイズ増大が問題になる場合 :大量行のトランザクションテーブルに、選択肢の少ない属性(長い文字列など)が全行で重複して入っているケース。
重複するデータ量が膨大
  • 粒度が異なるデータが混在する場合 :トランザクションテーブルに「日単位の列」と「月単位の列」が混在しているケース(1対多の関係が崩れている場合)
粒度が異なる(1対多など)データを扱う場合

結合方法|分割したExcelテーブルのリレーション

テーブル間の関連付けのイメージ

RDBでは、分割したテーブルをキー列(ID列)を介して結合・連携してデータを取得します。Excelでも、以下の3つの方法でテーブル同士を関連付けて結合できます。

方法用途特徴
XLOOKUP / VLOOKUP / INDEX+MATCH 関数単一の値を参照する場合リアルタイムで更新される。数式が多いとファイルが重くなりやすい。
Power Query マージ2つのテーブルを結合する場合大量データの結合に向く。更新は手動または自動設定が必要。
Power Pivot リレーションシップ複数テーブルを結合する場合大量データを高速に処理できる。ピボットテーブルでの集計に向く。

Excelの限界|専用データベースへの移行目安

Excelは表計算ソフトであり、本格的なDBMSの代替にはなりません。Excelによるデータ管理では、以下の限界があります。

  • 容量と速度の限界 :データ量が増えると動作が極端に重くなり、強制終了のリスクが高まる。シートには104万行の上限があり、ビッグデータの格納には向かない。
  • 同時編集が困難複数人による同時更新ができずデータの消失や不整合が起きやすい。
  • 参照整合性の欠陥 :一方のテーブルを修正しても、関連する他方のテーブルは自動更新されない。矛盾が生じたままになるリスクがある。
  • 人的ミスの発生 :セル値の誤消去や、不適切なデータ型の入力を防ぐ仕組みが弱い。
  • セキュリティの脆弱性 :ファイル全体の流出リスクが常に存在する。

以下の状況に当てはまる場合は、専用のデータベースシステム(DBMS)への移行を検討してください。Excelの限界を超えて、本格的なデータベース運用を行いたい場合は、専用のシステム(DBMS)を検討する必要があります。検討タイミングの目安は以下の通りです。

  • ファイルを開く操作や計算処理に数分以上かかる。
  • 「誰かがファイルを開いていて更新できない」という状況が頻繁に起きている。
  • 参照数式が複雑化しており、メンテナンスが困難になっている。
  • データの不整合を修正する作業に、膨大な時間を費やしている。

まとめ|適切なテーブル設計でデータ管理を効率化

本記事では、Excelで、データ管理をするときのテーブル分割の考え方について解説しました。要点は以下の通りです。

  • テーブル分割のメリット : データの重複による容量肥大化と、修正・挿入・削除時のデータ不整合(アノマリー)を防ぐ。
  • Excelテーブルの設計方針 : 第1~3正規化によりテーブルをマスタとトランザクションに分離するが、「スタースキーマ」を採用してテーブル階層を深くしない。
    • 第1正規化 : 1セルに1値のみを格納し、セルの結合や繰り返し列を完全に排除する。
    • 第2・第3正規化 : 主キーや他の項目に依存する属性(商品名や顧客住所など)を別テーブルに分離する。

Excelデータベースの注意点・限界や、本格的なデータベースへの移行ステップについては、下記の記事にまとめています。