サーバサイドエンジニアの坂根です。
最近某企業から販売されるウイスキーの価格改定が発表されましたね。
国産ウイスキーが転売されることなく、安定供給されることを切に願います。
さて、今回はデータ設計で気をつけていることについて話していきます。
何を大事にしているか
ヒトコトで言ってしまうと、現実に忠実であることです。
システムのデータと現実は、しばしば対になります。 そしてシステムの関心事が増えると、現実に沿ってデータを増やします。 現実に反するマジカルな設計になっていると、データを増やす際に歪な形で積み上げていくことしかできず、最終的にはジェンガのように崩れてしまうのです。
現実に反するマジカルな設計
では、マジカルな設計とは何か?具体例を基に見ていきましょう。
初期
資産管理システムを構築します。
どの社員に液晶モニタを貸与したか、一覧で表示できるようにしましょう。
中期
一部の社員からモニタが小さいというクレームがあり、大きめのモニタを導入することになりました。 資産としては別物なので、管理システムでも違いが分からなければなりません。
インチ数が分かればいいんだな!とストレートに付加します。
後期
資金が潤沢になり、業務効率を少しでも上げるために予備のモニタを購入できることになりました。 社員に貸し出さない予備資産を登録します。
社員にぶら下げることができなくなってしまったため、やむを得ず在庫として登録することを考えます。
しかし資産を一覧で可視化しようと思うと、社員と在庫の双方を集計しなければならなくなりました。
現実に忠実な設計
では、現実をできるだけ忠実に再現するとどのようになるでしょうか?
初期
社員に貸与した液晶モニタを、一覧で表示できるようにします。
中期
貸与したモニタのインチ数が区別できるようにします。
後期
在庫を登録できるようにします。
拡張性
後者の設計では、今後1人に貸与するモニタの数が複数に増えた場合でも無理なく対応できそうです。 それは、データが現実に通じており、似た土台から変化を起こすことができるからです。
つまり、拡張性高く保つためには、現実に忠実であることが重要なのです。
まとめ
検索効率を上げる、特定の何かに特化する、そのために現実を犠牲にすることもあるでしょう。 それでも私は、現実に忠実なモデルを起こした後、犠牲にするもの(リスク)を認識したうえで取捨選択します。
みなさんも良いデータ設計ライフを!
ジモティーではバックエンドに熱い魂を捧ぐ仲間を募集しています。 ご興味のある方はこちらを御覧ください。