楽々ERDレッスン

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

このERDだけを見ると、正規化が不十分である、という印象を受けます。しかし実際には、「商品ごとに単価が決まっている」と「値引きをすることがある」という2つの「事実の存在」が確認できるのです。データベース設計の要点となるのは、「One Fact in One Place」という、1つの事実は1つの場所にのみ存在することです。逆に言えば、2つの事実を1つの場所に置いてはいけないのです。正規化というと、1つの事実を2つ以上の場所に置くのを排除するということに目が向き過ぎるあまり、分けて保持すべきものまで一緒にしてしまい窮屈なデータ構造にしてしまうケースによく出会います。そうなってしまうと、結局はプログラミング言語でどうにか見分けることになり、見分けるためにxx区分のようなものが導入され、それを判定するIF分が増えていき、どんどんロジックの複雑さを促進してしまうのです。それが結果として「正規化は実務で使えない」という俗説につながってしまうのですが、きちんと考えるべき点を考えれば十分実務で使えるどころか、非常に効果的になるのです。

タイトルとは裏腹に、データモデリングにまつわる要所の考え方をわかりやすく解説されていて、とても勉強になった。結構前に読んだ本であるけれど、「数学的正規化と業務的正規化」「履歴や時系列に状態遷移するデータの扱い」「実績系・計画系・分析系の違い」など、見出し部分を振り返ることで、勘所を思い出すことができる。
システムとデータ構造は、どんな業務課題を解決するために設計されようとしているのか、すなわち、アーキテクチャ・ドライバは何であるのかを、しっかりとモデリングを担当するメンバー間で共有しなければ、どれだけ正規形の定義に精通していたとしても、妥当な設計は見いだせないのだということを、本書の考え方とサンプルを通じて振り返ることができる。