
igaigaさんにデータベースモデリングワークショップを開催してもらいました
はじめに
SREチームで働いているimaharuです。
GMOペパボさんの「DBモデリングとRSpecのワークショップを行いました」を読んで興味を持ったので、技術顧問であるigaigaさんに弊社でもワークショップを開催して頂きました。
本記事では、ワークショップを通して学んだこと、感想をお伝えします。
ワークショップ概要
データベースモデリングの概要説明後、以下の課題について議論しました。なお、詳細な要件については、設計者が決定します。
図書館で貸出中の書籍が戻った時に連絡をもらえる「書籍予約申込」
1を拡張し、市内の別の図書館から取り寄せる
私の考えた設計は以下の通りです。


議論の様子
上記の設計では、「取り寄せ依頼・発送・到着」「貸出・返却」「排架・返架」を個別テーブルに切り出しています。
現在の状態を知りたいとき、JOINするテーブルが増えるためパフォーマンスが悪くなります。
パフォーマンスが問題になった時、以下のような対策を講じれるのではないかと盛り上がりました。
テーブルを一つにして、状態の変更を一つのカラムで表現する
親テーブルに現在の状態をキャッシュし、子テーブルで各イベントを管理
各テーブルが本当に必要なのか見直す
書き込みと読み込みのデータベースを分ける
図書館毎にデータベースを分ける
過去xx日前の履歴を別サーバーに移す
学び・感想
「取り寄せ依頼・発送・到着」と数珠繋ぎにテーブルを切り出す。親テーブルを導入する。自分の中で、どちらの方法を取るのかという基準がないと気づくことができました。他のテーブルと関連を持ちたいか(価値を生むか)で判断できるのではないかと気づきを得ました。
詳しい要件に関しては設計者が考えることになっていたため、各人が発表されたテーブル設計は大きく異なっていました。何を実現したいかということを明らかにすることがデータベース設計において重要なのだとわかりました。
参加者の反応
参加者の今までの図書館の利用体験によって設計が各々異なっていて、こりゃ最初に前提のすり合わせと認識合わせしないとテーブル設計の話が噛み合わないわと思いました。(テーブル設計に限らない話)
「テーブル設計を通じて業務に詳しくなれる」ことをこのワークショップで体験できて、私も勉強になりました!一言で図書館といっても、いろいろなスタイルがあるのですね。
業務系アプリなどドメイン知識を結構深く理解してないとModel設計しづらい部分などもありそうだなぁ、という感想。
業務アプリの設計はまずドメインの理解とその認識合わせが必要になることがわかるナイステーマ、ナイスワークショップでした。
終わりに
データベースモデリングワークショップを通して、現実世界をモデリングすることの楽しさと難しさを学ぶことができました。
データベースモデリングワークショップ以外にも以下、画像のように定期的にigaigaさんと議論することで技術力向上を図っています。
グロービスでは、議論しながら技術向上し、ビジネスを加速させたい仲間を募集しています。是非、カジュアル面談などで議論(バトル)しましょう。

気軽にクリエイターの支援と、記事のオススメができます!