既存のデータベースから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エディタでの再構築

  1. 各テーブルに対してエンティティを作成
  2. すべてのカラムを型と制約付きで追加
  3. 主キーと外部キーをマーク
  4. 外部キー分析に基づいてリレーションシップを描画
  5. エンティティを論理的に配置(関連エンティティを近くに)

ステップ5:検証とドキュメント化

ダイアグラムを実際のデータと比較:

  • カーディナリティは意味をなすか?(COUNTクエリで確認)
  • 外部キーで強制されていない暗黙のリレーションシップはあるか?
  • 未使用のカラムや孤立したテーブルはあるか?

大規模スキーマのヒント

  • ドメインでグループ化: 関連テーブルをクラスター化(ユーザー管理、注文、在庫)
  • コアエンティティから始める: 最も重要な5-10のテーブルを最初に識別
  • 色分けを使用: 異なるモジュールやドメインに異なる色
  • メタデータテーブルを無視: マイグレーション履歴、セッションストレージなどはスキップ

ユースケース

ドキュメントのない既存のデータベースを持つプロジェクトに参加した場合。ERDのリバースエンジニアリングは、データモデルの理解、リレーションシップの識別、チーム全体に役立つドキュメントの作成に役立ちます。

試してみる — ERD Editor

フルツールを開く