データベースに触れると、割とすぐに当たり前のように使われている言葉、マスターデータ(マスターテーブル)とトランザクションデータ(トランザクションテーブル) とはなんぞや。
色々解釈ありますが、私的には、
メンテナンスされ、常に最新なデータが反映されているのがマスタデータで、原則削除しないで履歴として残しておくデータがトランザクションデータです。
例えば、ネットで商品を購入し、その時の明細が以下のような感じだとします。
===================
4/20 注文番号 OR0000132
商品A (Item02001) 10000円 2個 小計20000円
商品B (Item02002) 5000円 1個 小計5000円合計 25000円
===================
これは購入後マイページで、見れるとします。
その後、商品Aが思ったより売れるので、お店が12000円に値上げしました。
新たにECショップでみると、12000円で売られていて、「安いときに買えてよかった。」って経験ありませんか?
後から、マイページの購入履歴で見たとき、購入履歴の商品の値段が12000円になるわけが無いですよね?
このように、売る時には常に最新のデータを表示するためのデータがマスタデータです。
しっかりメンテナンスされて、もちろん正規化されています。
そして、売れた後に証拠として残されるべき情報がトランザクションデータです。
原則削除は行わず、キャンセルになった場合などはステータス情報などが、”キャンセル済み”などになります。
値段などはシステムのミスなどでなければ、改変することはありません。
このように、履歴、証拠として残しておくデータで、それ故、日ごろの業務(transaction)を行っていると増えていくデータといういみで、トランザクションデータというようです。
よく、日ごろの業務を行うとお客様データは増えていくから、マスタではなくトランザクションデータではないのかという疑問を抱くことがあるのですが、お客様が現住所を変更したら、変更しますよね。過去の住所は原則必要ないですよね?
このようにメンテナンスされていくのでマスタデータといえます。
まぁ、私も今でも、「あれ、これってマスタだっけトランザクションだっけ?」と迷うような曖昧なデータはありますが・・・、そこらへん慣れですかね。
ちなみに以前、データベースの正規化(正規形)とはなんぞや の最後の方で、正規化しないデータもあると書きましたが、まさにそれがトランザクションデータです。
例えば、注文テーブルなどは、第二正規化あたりでよく止めておきます。
上を第二正規化まで進める下記のようになる。
そして、多くはここから正規化を行わない。
なぜなら、第三正規化は、導出項目である小計や合計など、購入時(取引時)の値段を削除するからです。
また、第三正規化では、商品をマスタ化する必要があるが、商品名や商品の値段は変わる可能性があり、変わるたびに過去の購入時の金額や商品名も変わってしまうことになる。
まぁ、難しいこと考えずに消したら困るし変わったら困るなら、それ以上は何もしなければいいだけやね。