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程度に過ぎません。