2009年9月18日

[mysql 15023] Re: DBをどこまで正規化すべきか?

こんにちは。
ミヤタと申します。


MySQLの話題という訳ではありませんが、あまりメールの飛ばないMLなので。

> これって、DBのサイズを優先するか、SQLの実行時間を優先するか?
> って事で選ぶので良いのでしょうか?


正規化を行った後、計算負荷が高い項目については計算結果を保存しておく
ような非正規化についても検討しろと参考書に記載はありませんでしたか。

データ量は大したことが無いと思いますが、計算負荷を減らすため、
業務システムでは、明細行の合計を受注テーブルに持つのが普通だと思います。


> (商品単価は今後の価格改定の可能性を考えると、注文明細に覚えこまして
> しまうべきなんですよね?)

データの属性によります。
商品マスタなどではなく、注文などの履歴データであれば、おっしゃる通り、
注文時の単価を保持している必要があります。


> 本を読んでると、正規化は正義のような書き方をしているような感じもしますが、
> 本来しなくてもいいようなレベルの事でも、本では説明をする為に、正規化を
> しているような気がするのです。

正規化を行った上で、そのデータの使い方として必要があれば非正規化を行う
という事です。


> 消費税なんかも悩ましいところです。

消費税も同じです。
履歴(注文)データであれば、その時の消費税額を保持している必要があります。
税率だけを持っていてもダメではありませんが、端数処理などで確定した金額も
持っているべきだと思います。

商品マスタであれば、内税か外税か、課税対象か非対象かの属性は持っていても
いいと思いますが、消費税率は商品とは関係ないので別のテーブルに持っていて、
注文時にそれを使えば良いと思います。


> そうなると、小計、税額、合計を覚える必要があるって事になりますよね?

その通りです。


> 他にも、郵便番号を123-456と覚えていた場合、

郵便番号は XXX-XXXX と桁が決まっているように思いますので、ハイフンは
無しで保存していてもいいのではないでしょうか。
電話番号だと、検索で使う場合は入力値と検索値を別に保存した方が便利
かもしれません。

--
Masaki Miyata
catlover@xxxxx

投稿者 xml-rpc : 2009年9月18日 05:47
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/88690
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。