【ChatGPT】【活用方法】DDL(SQL) から ER図を作成する
試したこと
- データベースのSQL(DDL)をMermaid形式ER図に変換する
- Mermaid形式ER図をデータベースのSQL(DDL)をに変換する
モチベーション
実際のエンジニアリング作業でよくある問題として、肥大したデータベースをER図に起こして整理したいというニーズはあるかなと思います。
このような問題を解決するツールは世の中にあるりますが、インストールが必要であったり手間がかかることも少なくないと感じます。
例
早速やってみましょう。
例としてブログアプリケーションのデータベースのDDLを使って変換作業をしてみます。
このDDLは、ユーザー、投稿、コメント、カテゴリを管理するためのテーブルを定義しています。ユーザーは複数の投稿を持ち、投稿は複数のコメントを持つことができます。また、投稿は複数のカテゴリに属することができます。
CREATE TABLE `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `posts` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`title` VARCHAR(255) NOT NULL,
`content` TEXT NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `comments` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`post_id` INT UNSIGNED NOT NULL,
`content` TEXT NOT NULL,
`created_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `categories` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `post_categories` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`post_id` INT UNSIGNED NOT NULL,
`category_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`),
FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
これをChatGPTに以下のプロンプトで変換をお願いしてみます。
以下のMySQLのDDLから Mermaid記法でER図を作成してください。
ただし、作成にあたって以下の条件に合わせてください。
- mermaid version: 9.1.7
- Zennで表示する
===========================
<DDLをここにコピーする>
※ 「Zennで表示する」 初めこれをつけないで作成したらzennで使えないシンタックスになっていたので追加しました。
こちらが出力されたER図です。
```mermaid
erDiagram
users ||..|| posts : has
users ||..|| comments : writes
posts ||..|| comments : has
categories ||..|| post_categories : has
posts ||..|| post_categories : belongs_to
users {
int id
varchar username
varchar email
varchar password
datetime created_at
datetime updated_at
}
posts {
int id
int user_id
varchar title
text content
datetime created_at
datetime updated_at
}
comments {
int id
int user_id
int post_id
text content
datetime created_at
}
categories {
int id
varchar name
}
post_categories {
int id
int post_id
int category_id
}
表示されていますね。
ER図からDDLを出力する
- DDL -> ER図
ができるということは逆もできそうですよね。ということでやってみました。
以下のMermaidのER図からMySQLのDDLを出力してください。
ただし、作成にあたって以下の条件に合わせてください。
- MySQL version: 8.0.31
==========================
<上のER図を貼る>
出力は以下のようになりました。
CREATE TABLE `users` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL
);
CREATE TABLE `posts` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`title` VARCHAR(255) NOT NULL,
`content` TEXT NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE `comments` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`post_id` INT NOT NULL,
`content` TEXT NOT NULL,
`created_at` DATETIME NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (post_id) REFERENCES posts(id)
);
CREATE TABLE `categories` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL
);
CREATE TABLE `post_categories` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`post_id` INT NOT NULL,
`category_id` INT NOT NULL,
FOREIGN KEY (post_id) REFERENCES posts(id),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
Mermaidに情報が足りないので修正は必要そうですが、構文的には合っていそうですね。
条件に色々と付与すれば、作業時間は短縮できそうです。
まとめ
本記事では、ChatGPTを活用して、エンジニアリング作業における生産性向上の方法を紹介しました。ChatGPTを利用することで、既知のものから既知の別のものへの変換作業が大幅に簡素化され、エンジニアリング作業の効率化につながります。
例として、DDLからER図への変換と、ER図からDDLへの変換を行いました。これらの作業は、手動で行うと手間がかかるものです。ChatGPTを利用することで、これらの作業を自動化することができ、時間を節約することができます。
今後も、ChatGPTの活用方法について、実践的な内容を紹介していきます。
Discussion