エンティティと関係を表す設計図
データを「分析・モデリングに使える形に整える」工程。 分析の質はここで 8 割決まります。
本ページでは ER図 を、 定義・前提条件・使い方・落とし穴の順に整理して解説します。 厳密な定義より、 まず何を、 いつ、 どう使うかを理解することを優先してください。
エンティティと関係を表す設計図
英語名 Entity-Relationship Diagram。
この用語を理解・使用するときは、 次のような前提を意識してください:
SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:
1 2 3 4 5 6 7 8 9 10 11 12 | import pandas as pd import numpy as np # データ読み込み df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1) print(df.shape) print(df.dtypes) print(df.describe()) # 「ER図」の文脈で扱う場合の例: # 分野: データエンジニアリング # 関連手法は同カテゴリの他用語を参照してください。 |
具体的なコードは データエンジニアリング を参照してください。
分析結果を報告するときに含めるべき情報:
SSDSE-B-2026 は都道府県×年度の長形式パネルデータ。 これを ER 図化すると次のような構造:
[Prefecture] [Year]
PK: code ←──→ PK: year
prefecture_jp
│
│ 1:N
↓
[Statistics]
FK: code (Prefecture.code)
FK: year (Year.year)
PK: (code, year)
total_population
aged_population
births
deaths
migration_in
...
consumption_total
「都道府県マスタ」「年度マスタ」「統計値ファクトテーブル」の 3 テーブル構成にすると、 後で都道府県名の表記揺れ(旧字体・略称)に対応しやすい。
| テーブル | 主キー | 関連 | 典型ロウ数 |
|---|---|---|---|
| Prefecture | code (R01000等) | 1:N → Statistics | 47 |
| Year | year (2018-2023) | 1:N → Statistics | 12 |
| Statistics | (code, year) 複合 | N:1 → Pref/Year | 564 |
SSDSE-B-2026 は1NF(第一正規形)でほぼ平坦だが、 都道府県名と年度は冗長。 3NF 化するとリレーショナルDB として保守性が上がる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # SSDSE-B-2026 を 3NF に分解する
import pandas as pd
import sqlite3
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
pref = df[['地域コード','都道府県']].drop_duplicates().rename(
columns={'地域コード':'code','都道府県':'name'})
year = pd.DataFrame({'year': sorted(df['年度'].unique())})
stat = df[['年度','地域コード','総人口','65歳以上人口','出生数','死亡数']].rename(
columns={'年度':'year','地域コード':'code'})
con = sqlite3.connect(':memory:')
pref.to_sql('Prefecture', con, index=False)
year.to_sql('Year', con, index=False)
stat.to_sql('Statistics', con, index=False)
# 結合クエリ(ER関係に沿った JOIN)
q = '''SELECT p.name, s.year, s.総人口, s.65歳以上人口
FROM Statistics s
JOIN Prefecture p ON s.code=p.code
WHERE s.year=2023 ORDER BY s.総人口 DESC LIMIT 5'''
print(pd.read_sql(q, con))
|
| 記法 | カーディナリティ表現 | 代表ツール | 採用領域 |
|---|---|---|---|
| Chen 記法 | 菱形+数字 (1:N) | 原典の論文 | 学術・教科書 |
| IE 記法 (Crow's foot) | 鳥足記号 | ERwin, MySQL Workbench | 業務系・公的 |
| UML クラス図 | クラス+関連線 | Lucidchart, draw.io | オブジェクト指向統合 |
SSDSE-B-2026 を 3NF 化すると、 47 都道府県 × 12 年 = 564 行のファクトテーブルになり、 集計クエリの保守が圧倒的に楽になる。
分析用 DWH では、 3NF まで正規化せずスター・スキーマ(ファクト+ディメンション)が一般的。 SSDSE-B-2026 を BI 連携するなら、 1 ファクトテーブル+ 都道府県/年度/指標カテゴリの 3 ディメンションで構成すると BigQuery/Snowflake で高速。