「データベース設計は論理設計の段階だと図を描くのに時間かかるし、物理設計だとORMに合わせたマイグレーションを書くのがめんどくさい」
こんな悩みはないだろうか。
確かに、データベース設計の論理設計では ER図を書く際に、図をどう配置するかなどの本質的ではない部分で多くの時間が取られてしまう。
また、物理設計の段階では、普段書き慣れない部分でもあるため、ちょっとした書き方で躓いてしまったりする。
筆者は、データベース設計にはこれら二つの本質的ではない課題が存在すると思っている。こういった課題を解消するために過去色々なツールを使ってきた。今回の記事ではその中でも特に効果が高かったツールを2つに厳選して紹介する。
それではみていこう。
データベースの論理設計を圧倒的に楽にするツール:PlantUML
まずはデータベースの論理設計にかかる時間を圧倒的に減らすツールの紹介だ。
結論から言うとPlantUMLを使うのがおすすめだ。PlantUMLであれば付加価値が高い「設計する」作業に集中できるからだ。
そもそも、論理設計の作業を大別すると以下2つに分解できる。
・具体的なエンティティを設計する
・各エンティティの関連などを図示する(図をみやすく配置して、矢印で多重度を示したり)
後者の図示する作業は付加価値が低い割に手間がかかる。作業者的には、自分の頭の中の情報を他人にもわかりやすいように整形しているだけだ。しかし、エンティティの数が多くなると、見やすくする工夫にかなりの時間がかかる。
例えば、以下のようなオンラインスクールの論理設計を行ったとしよう。
ここに変更を加えようとすると、今存在している箱を移動したりする必要が出てくる可能性があるのがわかると思う。例として以下のような変更をするとしよう。
・一つのレッスンごとに複数の教授が担当できる
・一つの資料を複数の教授によって作成できる
変更前 | 変更後 |
---|---|
上記の画像の通り、複数の箱を移動し、関連付けの矢印を付け直す必要がある。
しかし、PlantUMLであれば作業者は前者のエンティティの設計だけを行えば良く、後者の図示化はツール側で勝手に行ってくれる。
PlantUMLで実際にデータベース設計を行う: 具体的なエンティティを設計する
ここでは具体的な作業手順を例にして、PlantUMLの使い方を見てみよう。
まずは具体的なエンティティを設計するために、以下の2つのステップを行う。
・どのようなエンティティが必要かを洗い出す
・各エンティティに必要なプロパティを洗い出す
エンティティを洗い出す
コードとその出力結果は以下の通りだ。
class students {
}
class courses {
}
class studentsCourses {
}
プロパティを洗い出す
コードとその出力結果は以下の通りだ。
class students {
id: int
email: string #unique
name: string
startedAt: datetime
}
class courses {
id: int
name: string
}
class studentsCourses {
id: int
student_id: int
course_id: int
}
note bottom of studentsCourses
Unique constraint on (student_id, course_id)
end note
PlantUMLで実際にデータベース設計を行う: 各エンティティの関連などを図示する
このステップでは、洗い出したエンティティ間の関連づけをわかりやすくするために、本来であれば以下の2つを行う。
・見やすい位置に各エンティティを配置する
・エンティティ間の紐付けを矢印を使って表現する
しかし、これはPlantUMLでは関連付けのコードを書くだけで大丈夫だ。配置や矢印の描画自体はツール側がやってくれる。
エンティティ間の関連を図示する
コードとその出力結果は以下の通りだ。
class students {
id: int
email: string #unique
name: string
startedAt: datetime
}
class courses {
id: int
name: string
}
class studentsCourses {
id: int
student_id: int
course_id: int
}
note bottom of studentsCourses
Unique constraint on (student_id, course_id)
end note
courses ||–o{ studentsCourses
students ||–o{ studentsCourses
データベースの物理設計を圧倒的に楽にするツール:PlantUML+ChatGPT
次に、データベースの物理設計にかかる時間を圧倒的に減らすツールの紹介だ。
結論から言うとPlantUMLとChatGPTを使うのがおすすめだ。PlantUMLをもとにして、ほぼ自動で必要なコードを出力してくれるためだ。
例えば、前の章でサンプルとして使っていた「生徒とコース」のER図のPlantUMLをもとに、物理設計に使うコードを出力してもらう。
ここでは、筆者がよく使う以下二つのフレームワークのマイグレーションのコードを出力してもらう。
・Ruby on Rails
・Prisma(Node.js & TypeScriptのORM)
Ruby on RailsのマイグレーションをPlantUML+ChatGPTで作る
class users {
id: int
email: string #unique
name: string
}class courses {
id: int
name: string
}class usersCourses {
id: int
user_id: int
course_id: int
}note bottom of usersCourses
Unique constraint on (user_id, course_id)
end notecourses ||–o{ usersCourses
users ||–o{ usersCoursesこれでRailsのマイグレーション書いてください。
ユニークキー制約までしっかりつけたマイグレーションを書いてくれた。
PrismaのマイグレーションをPlantUML+ChatGPTで作る
class users {
id: int
email: string #unique
name: string
}class courses {
id: int
name: string
}class usersCourses {
id: int
user_id: int
course_id: int
}note bottom of usersCourses
Unique constraint on (user_id, course_id)
end notecourses ||–o{ usersCourses
users ||–o{ usersCoursesこれでPrismaのマイグレーション書いてください。
こちらも問題なくマイグレーションを作成できた。
まとめ
この記事ではデータベース設計に使えるツールとしてPlantUMLとChatGPTの組み合わせを紹介した。
データベース設計では付加価値の低い作業をどんどんツールに任せてしまって、より本質的な「設計」に集中することがおすすめだ。
この記事が、読者の方がデータベース設計をする際に、より本質的な作業に時間を割けることにつながってくれたら幸いだ。