読者です 読者をやめる 読者になる 読者になる

マスタテーブル

DB

突っ込みどころは色々あるかもしれないけど、とりあえずまとめてみた。

マスタテーブルとは?

マスタテーブルやトランザクションテーブルという単語はよく聞くけど、会社によって、更にプロジェクトによってもまちまちで、これといった定義は(多分)存在しない。
しかし、ある程度共通認識となっているであろう点はいくつかあるので、それについて考察してみた。

マスタテーブル=更新が頻繁に起こらないテーブル

まず、マスタテーブルを更新が頻繁に起こらないテーブルという考え方から。
この考え方では明確な線引きは不可能だけど、特徴はよく表していると思う。
つまり、マスタテーブルと呼ばれるテーブルはトランザクションテーブルと呼ばれるテーブルよりも更新*1の頻度が小さい。

マスタテーブル=主要なテーブル

次に、マスタテーブルを主要なテーブルとする考え方。
これは、マスタを主要という言葉に置き換えただけにすぎず、あまり意味はないと思う。


ただし、主要ではなく重要としてしまうと明確に「間違い」と言えるので注意が必要。
なぜなら、見方によってはトランザクションテーブルの方が重要になるから。
例えばバックアップは考えないものとして、取引先マスタのデータが消えた場合と取引データが消えた場合を考えてみると、

  • 取引先マスタが消えてしまっても、自然キーを使用していれば取引データから復元できる可能性がある
  • 取引先マスタが消えてしまっても、取引自体をキャンセルする事態にはならなくて済む可能性がある
  • 取引データが消えてしまうということは、取引自体の消滅を意味する
  • 取引データが消えてしまうと、取引先マスタからの復旧は不可能

などなど。
個人情報などは通常、マスタテーブルに格納されるため、情報漏えいを考えるとマスタテーブルの方が重要*2と考える場合もあるだろうけど、一般化は出来ない。

何をマスタテーブルとし、何をトランザクションテーブルとすべきか

では、何をマスタテーブルとし、何をトランザクションテーブルとすべきか。
うーん、そもそも・・・

そもそも区別は必要か

はっきりいって、不要だと思う。
よく、「マスターテーブルはMから、トランザクションテーブルはTから始まる名前をつける」だとかの規約があるけど、これも不要だと思う。
この2つを区別することによる利点があんまりわからないというのが一番大きいかな。
そんな区別をやってる暇があったら、テーブル設計を勉強するだとか、個々のテーブルの特性をよく考えるだとか、他にすべきことがいくらでもあるはず。

*1:この場合の更新とは、INSERT/DELETE/UPDATEをひっくるめて更新と呼ばれる

*2:人工キーを使用していれば、トランザクションテーブルだけ見てもなにもわからない場合もある