ER図は、エンティティ(実体)間の関連性を示すことができます。
ER図を利用することにより、データベースの構造を直感的に理解することが可能になります。
そのためのツールがいろいろと公開されています。
データベースからER図をリバース生成できるツールも公開されています。
ただ、このようなツールはデータベース設計の最中には利用できません。
通常、設計中はテーブル定義書があるだけです。
そのテーブル定義書からER図を作成できたら便利だと思いませんか?
設計中のため試行錯誤でテーブル定義はコロコロと変わるでしょう。
でも、その段階からER図があればデータベース設計が効率良く進むはずです。
設計の可視化によって、理解が促進されます。
実際、すでにChatGPTでそのことを試している人もいます。
今回は、Claude 3でそのことを試そうということです。
ChatGPT 4よりClaude 3の方が優秀という結果が出ています。
ベンチマーク結果は、次の記事内で説明しています。
【Claude 3】テーブル定義書からER図の自動生成
利用するのは、最も賢いClaude 3 Opusです。
課金が必要となります。
検証のためには、まずテーブル定義書を用意する必要があります。
次の記事内で用いているサンプルデータベースを利用します。
テーブル定義書の該当する部分のみを取得します。
その実体は、DDLファイル(クエリ)になります。
下記でダウンロードできるようにしています。

これをClaude 3にアップロードして、プロンプトを加えます。

これだけでER図が作成されるのです。
Mermaid記述ですけどね。
結果的に言うと、次のような出力が出来上がりました。
erDiagram
Actor {
int actor_id PK
varchar first_name
varchar last_name
timestamp last_update
}
Category {
int category_id PK
varchar name
timestamp last_update
}
Film {
int film_id PK
varchar title
text description
year release_year
int language_id FK
int rental_duration
decimal rental_rate
int length
decimal replacement_cost
enum rating
timestamp last_update
text[] special_features
tsvector fulltext
}
Film_Actor {
int actor_id PK, FK
int film_id PK, FK
timestamp last_update
}
Film_Category {
int film_id PK, FK
int category_id PK, FK
timestamp last_update
}
Language {
int language_id PK
char name
timestamp last_update
}
Inventory {
int inventory_id PK
int film_id FK
int store_id FK
timestamp last_update
}
Rental {
int rental_id PK
timestamp rental_date
int inventory_id FK
int customer_id FK
timestamp return_date
int staff_id FK
timestamp last_update
}
Payment {
int payment_id PK
int customer_id FK
int staff_id FK
int rental_id FK
decimal amount
timestamp payment_date
}
Staff {
int staff_id PK
varchar first_name
varchar last_name
int address_id FK
varchar email
int store_id FK
boolean active
varchar username
varchar password
timestamp last_update
bytea picture
}
Customer {
int customer_id PK
int store_id FK
varchar first_name
varchar last_name
varchar email
int address_id FK
boolean activebool
date create_date
timestamp last_update
int active
}
Address {
int address_id PK
varchar address
varchar address2
varchar district
int city_id FK
varchar postal_code
varchar phone
timestamp last_update
}
City {
int city_id PK
varchar city
int country_id FK
timestamp last_update
}
Country {
int country_id PK
varchar country
timestamp last_update
}
Store {
int store_id PK
int manager_staff_id FK
int address_id FK
timestamp last_update
}
Film }o--|| Language : language_id
Film ||--o{ Film_Actor : film_id
Film ||--o{ Film_Category : film_id
Film ||--o{ Inventory : film_id
Actor ||--o{ Film_Actor : actor_id
Category ||--o{ Film_Category : category_id
Inventory ||--o{ Rental : inventory_id
Inventory }o--|| Store : store_id
Rental ||--o{ Payment : rental_id
Rental }o--|| Customer : customer_id
Rental }o--|| Staff : staff_id
Staff ||--o{ Payment : staff_id
Staff |o--|| Store : manager_staff_id
Staff }o--|| Address : address_id
Customer ||--o{ Payment : customer_id
Customer }o--|| Address : address_id
Customer }o--|| Store : store_id
Address }o--|| City : city_id
City }o--|| Country : country_id
Store }o--|| Address : address_id
ただ、Claude 3と複数回のやり取りを行っています。
関連テーブルのリレーションを表現する際、変なところがありました。
それをClaude 3に指摘して、最終的に上記の出力となっています。
関連テーブル以外は、一発目で問題なしという結果でした。
まあ、とにかくスゴイの一言です。
ER図としての確認は、上記で載せたnoteのページで確認できます。
もちろん、完璧ではないところもあるでしょう。
参考資料として見ると、十分だとは思います。
【ChatGPT 4】テーブル定義書からER図の自動生成
同じDDLファイルを用いて、ChatGPTでも試してみました。
その結果が、以下。

合計3回、DDLを分析しようと試みました。
最終的には、DDLファイルの分析自体は諦めたようです。

ちなみにファイルサイズは、50kb程度に過ぎません。




