山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

データベースの正規化

最近の人はデータベースの正規化を

知っているのでしょうか。

結構DB設計を見ていると知らないのでは

ないかと見受けられることも多いです。


頑固職人のように、正規化も知らんとは

何事だ、と言うつもりはありません。

知らない人が多いということは、必要ない

からそうなっていると考えることもできます。


オイシックスのテーブル設計のコアの部分は

ちゃんと正規化しています。

それがよかったかどうかというとなかなか

疑問が残ります。


当初は受注明細テーブルに商品の価格を

持っておらず、商品マスタを参照する形に

なっていました。


その後、割引販売をすることになったときに

対応できず、価格ごとに異なる商品コードで

商品マスタを登録することになりました。

その後、割引価格のマスタを別に作り、

受注明細に価格を持つように変えました。


他にもマスタをたくさん分けたので結合が

たくさん必要になりました。


あまり更新しないデータはコピーしてしまった

ほうがselectするときによっぽど楽だし

パフォーマンスもよかったなという思いも

あります。


複合キーもなかなかやっかいです。

データベースの理論では一意に識別できる

キーは複合キーになりますが

実際に運用するシステムではキーは

単純なシーケンスにして、複合キーの

部分は制約でユニークにしたほうが

プログラムはよっぽど簡単です。


正規化はもはや知らなくてもいい

理論なのかもしれませんね。