既存のデータベースからERDをリバースエンジニアリングする
既存のSQLスキーマからER図をリバースエンジニアリングする技法。CREATE TABLE文の読み取り、リレーションシップの識別、ビジュアルモデルの再構築を解説します。
Export & Integration
詳細な説明
SQLからダイアグラムへ
ERDのリバースエンジニアリングとは、既存のデータベーススキーマ(通常はCREATE TABLE文のコレクション)を取得して、ビジュアルなER図を再構築することです。ドキュメントのないデータベースを持つプロジェクトに参加する場合や、レガシーシステムを理解する必要がある場合に不可欠です。
ステップ1:スキーマの収集
データベースからDDLを抽出します:
-- PostgreSQL
\d+ table_name
-- または
pg_dump --schema-only database_name > schema.sql
-- MySQL
SHOW CREATE TABLE table_name;
-- または
mysqldump --no-data database_name > schema.sql
-- SQLite
.schema table_name
ステップ2:エンティティの識別
各CREATE TABLE文がエンティティになります。すべてのテーブルとそのカラムをリストアップします:
- テーブル名 → エンティティ名
- 各カラム → 型、NULL許容性、ユニーク性を持つ属性
PRIMARY KEY→ PKとしてマーク(ERDエディタではゴールド)
ステップ3:リレーションシップの識別
これらのパターンを探してリレーションシップを発見します:
| パターン | リレーションシップタイプ |
|---|---|
FOREIGN KEY (x_id) REFERENCES other(id) |
1対多(FK側が「多」) |
FOREIGN KEY (x_id) REFERENCES other(id) UNIQUE |
1対1 |
| 2つのFKと複合PKを持つ結合テーブル | 多対多 |
x_id REFERENCES same_table(id) |
自己参照 |
ステップ4:ERDエディタでの再構築
- 各テーブルに対してエンティティを作成
- すべてのカラムを型と制約付きで追加
- 主キーと外部キーをマーク
- 外部キー分析に基づいてリレーションシップを描画
- エンティティを論理的に配置(関連エンティティを近くに)
ステップ5:検証とドキュメント化
ダイアグラムを実際のデータと比較:
- カーディナリティは意味をなすか?(
COUNTクエリで確認) - 外部キーで強制されていない暗黙のリレーションシップはあるか?
- 未使用のカラムや孤立したテーブルはあるか?
大規模スキーマのヒント
- ドメインでグループ化: 関連テーブルをクラスター化(ユーザー管理、注文、在庫)
- コアエンティティから始める: 最も重要な5-10のテーブルを最初に識別
- 色分けを使用: 異なるモジュールやドメインに異なる色
- メタデータテーブルを無視: マイグレーション履歴、セッションストレージなどはスキップ
ユースケース
ドキュメントのない既存のデータベースを持つプロジェクトに参加した場合。ERDのリバースエンジニアリングは、データモデルの理解、リレーションシップの識別、チーム全体に役立つドキュメントの作成に役立ちます。