新年のブログに書いたように、今年は本を読み勉強したいと思っています。そこでお正月休みに読んだ技術評論社 WEB+DB PRESS Vol.13のイミュータブルデータモデルで始める 実践データモデリングの読書メモを書いておきます。
技術評論社 WEB+DB PRESS Vol.130
イミュータブルデータモデルとは
この記事の著者、川島 義隆さんがアップしたイミュータブルデータモデル (入門編)のスライドがあります、これを見て興味を持ったら技術評論社 WEB+DB PRESS Vol.13を購入してみると良いと思います。この記事はスライドの内容の詳しい解説と、実践・応用を追加したものです。
イミュータブルデータモデルとは、スライドの最初にも書かれているようにデータが変更(UPDATE)されないデータモデリング(テーブル設計)です。スライドの最初には以下のように書かれています、
- モデルの複雑性を増すのは、CRUDのうち のUPDATEに関する要件です。
- モデルに対するデータの更新を極限まで 削ることによって、拡張に対して開いていて、修正に対して閉じている堅牢なも のにします。
- 実際にはUPDATE全くなしに業務アプリ ケーションを作るのはハードル高すぎる ので、ミュータブルな箇所を特定し、ー定の意味付けをおこないUPDATEを許可する、という文脈です。
- 「更新日時」という属性を徹底的に排除 することにより、イミュータブルなモデルの獲得を目指します。
過去に作ったシステムで思考実験
私は本を読んだだけでは理解できてない事が多いです、読んだ技術・手法をためしてみてはじめて理解、腑に落ちる事が多いです。
現状
そこで過去に作ったECサイトのデータベースの一部をイミュータブルデータモデルで作ってみました。
現状のシステムのデーターベースの一部は、以下の図のようになっています。
- 商品テーブル : 販売している商品の情報
- 商品品種・在庫テーブル : 衣類や靴など1つの商品に色やサイズ違いがある商品のバリエーションを、ここでは商品品種と呼んでいます
- 商品の在庫数はバリエーション単位で管理されるので在庫のデータも一緒に含んでいます
- 注文テーブル : ショッピングカートに入れた商品を購入した際に出来るでデータ
- 注文詳細テーブル : 一度の購入で複数を商品を買えるので、購入した商品品種の集まりデータ
イミュータブルデータモデル
上のモデルの中でイミュータブルでないのは在庫です(実際には注文もイミュータブルではないのですが、今回は省略します)。そこで在庫まわりをイミュータブルにしてみましょう(この結果は私の思いつきなので、もっと良いモデルがあると思われます)。
- まず、商品品種、在庫が同じテーブルなのはOne Fact in One Placeに反するので別テーブルに分けました
- このECサイトでは在庫は別システムで管理されていて、1日に1回ECサイトにアップロードされるので、在庫テーブルのデータは1日に1回作成されます
- アップロードされた在庫数は本日在庫カラムに入っています
- 購入された在庫(商品)は出荷商品というテーブルにデータが追加します
- ECサイト画面の在庫数は在庫・本日在庫 マイナス 対応する出荷商品の件数になります
思考実験の考察
さて、今回追加された出荷商品というテーブルは何かの役に立つのでしょうか? 実際の出荷される在庫(商品)は存在し、その在庫の保管場所や配送などの状態管理に使えるかもしれません。
しかし、このECサイトは乗馬用品を販売しているので1日の販売個数はそれほでもなく、業務は人手を介しながら上手く回っているようです。
現在この会社では在庫管理や販売管理は別システム行っています、実は電話・FAXを使ったカタログ販売も行っています。ECサイトはシンプルにECサイトとしての役割に徹しているのも、良い事だと思います。
ただし、この会社でECサイトを中心に在庫管理や販売管理も取り込んで行くと考えると、イミュータブルデータモデルでモデリングするのは役に立ちそうです。上げた出荷商品のような意識されてないデータが発見されています。
まとめ
イミュータブルデータモデルの検討は有用だと思う
将来システムが大きくなる、または大きくなり出したときに、イミュータブルデータモデルを検討し、今までよく見えてなかったデータを意識できるのは有用だと思いました。
1冊の本として出版して欲しい
この記事は、データモデリング入門記事でもありますが、ページ数が限られているので、データモデリングの入門書をある程度知らないと理解が難しいかも知れません。初心者はスライドの参考文献に上げられている楽々ERDレッスンなどを読むことをお薦めします。
是非、将来は1冊の本として出版して欲しいです。
T字形ERは良い本だったのかも
このイミュータブルデータモデルは佐藤 正美さんのT字型ERをベースにしています。私も昔T字形ER データベース設計技法という本を読みましたがエキセントリックな文章に戸惑い、十分に理解できていなかったようです。