daisuzz.log

楽々ERDレッスンを読んだ

「楽々ERDレッスン」を読んだので、忘備録として書いていきます。

自分がこの本を知ったきっかけは、下記イベントページでおすすめの参考書として紹介されていたことがきっかけです。

DB設計したいNight #1 - connpass

この本では、正規化について、重要だがやりすぎてしまうとアプリケーション側で区分や条件分岐を使った判定処理をする必要が出てきてシステムを複雑にしてしまうので、業務の要件的に意味が異なる場合は重複した情報を複数のテーブルに持たせよう、ということが書かれています。ER設計というと正規化が第一に言われますが、ビジネス要件を考慮してどこまで正規化を行えばいいのかであったり、ケースに応じたテーブル設計とはどういうものか?というところが曖昧になっていたり自信がなかったりするので、こうした解説がされているのはとても参考になりました。

また、IDとコードの違いについて、会員コードや地域コードなど「〜コード」と呼ばれるものはビジネスロジックを表したユーザーインターフェースであることが多く、エンティティの主キーにしてしまうと業務上の仕様変更によって多くのエンティティを変更する必要が出てきてしまうので擬似的なIDを別で用意して、その用意したIDを主キー(サロゲートキー)とした方がよい、ということが書かれていました。ナチュラルキーにすべきなのかサロゲートキーにすべきなのかは一概に言えないので、業務上の要件を考慮して、変更が明らかに発生しないものであればナチュラルキーを主キーにすべきだと思いますし、変更が発生しそうなキーであれば主キーにすべきではないと思います。こういった選択については、考えられるメリット・デメリットを考える経験が不足していると感じているので、まだまだ勉強しないといけないなと思っています。

さらに、エンティティは、業務用語や「だれ」「なに」など疑問詞を使って、イベントを表すエンティティとリソースを表すエンティティに分けて考えるとERの設計がやりやすいということが書かれていました。ER設計をイベントとリソースの探索と捉えると、ER設計をおこなうことで結果として、業務フローの改善やドメイン知識の深い理解に繋がるのだと思います。

本の後半は、レシートや請求書、注文明細など実在する具体的なケースをつかったER設計を紹介しているので、今度はチームで一緒にER設計をやってみると新しい発見であったり設計の観点が見つかるのではないかなと思っています。