マスタテーブルとマスタじゃないテーブル
今の会社ではDBの設計もさせていただいているのですが、
いつもなんとなくでやってしまうのがコレ。
「何がマスタテーブルで何がマスタテーブルじゃないの?」
例えばこれ。
id | name |
1 | 春 |
2 | 夏 |
3 | 秋 |
4 | 冬 |
これは「季節マスタ」でよいでしょう。(なんとなく)
じゃあこれは?
id | user_id | login_datetime |
1 | 823 | 2015-08-01 12:34:56 |
2 | 674 | 2015-08-01 12:37:21 |
... | ... | ... |
これは「ログイン時刻ログ」とかであり、マスタではないでしょう。(なんとなく)
それならこれは?
user_id | name | mail_address |
1 | ほげほげ | hoge@***.com |
2 | ふがふが | fuga@***.com |
... | ... | ... |
ユーザマスタ? マスタじゃない?
というかそもそもマスタじゃないなら何と呼ぶの?
ちなみにこういう類のテーブルは、今の会社(web系)ではマスタではなく、
前の会社の出向先(非web系)ではマスタでした。
とりあえず呼び名については、検索してみたところ
「マスタ」と「トランザクション(もしくは略してトラン)」
としていることが多い…のですかね。
今の会社でも、前の会社(の出向先)でもトランザクションとは呼ばなかったので、
調べて初めて知りました。
というかデータベース周りの話で「トランザクション」は紛らわしくないかなあ。
ではとりあえずそのへんの単語の定義を調べてみましょう。
参考:マスタデータとトランザクションデータ - graffe.jp
http://www.graffe.jp/blog/392/
マスタが固定「的」、トランが流動「的」…。
「なんとなく」から脱出できないこの感じ。そりゃわかるよ、うん。
まあ結局のところはどう調べても「場合による」という身も蓋もない感じなんですが、
読んでわりとしっくりきたのがこちら。
参考:userテーブルはマスターテーブル?DBのTABLEをいくつかの種別に分ける目的について - INNOBASE技術ブログ
http://blog.innobase.co.jp/entry/2014/09/04/032408
このロリBBAは方向性が違う
について詳しく聞きたい… というのは置いといて。
多くのWEBシステムの場合ニックネームなどユーザーが自身で更新するデータが多いのでユーザーデータとなります。
業務システムでは管理者がユーザーデータを管理しユーザーが更新できないことも多いのでマスタとして扱われることも多いでしょう
なるほど、今の会社と前の会社(の出向先)の違いはそれに当てはまりますね。
今の会社はweb系でSNSや通販サイトなどを作っているのでユーザデータはマスタではなく、
前の会社の出向先は業務系で、取引銀行データはマスタだった、という感じです。
(…というかweb系業務系というくくりもまたアレですが。業務用のwebアプリって業務系かなあ)
先の例で言うと、「季節テーブル」を
不特定多数のユーザが編集できるということはないでしょうし、
逆に「ログイン時刻」はユーザが(意図的にではないが)更新するものです。
「ユーザデータ」はSNSのように自由に登録できるのであればマスタとは呼び難いかもしれませんが、
特定の「取引先データ」を業務の管理者のみが更新するのであればマスタと呼んでよいかもしれません。
でも、完全にその法則に従うとブレるところがまた出てきますね。
例えば「元々は管理者だけが更新していたテーブルを一般のユーザも更新できるよう仕様変更したら、わざわざテーブル名も変えるのか?」とか。
まあ、論理名物理名がマスタだったりそうじゃなかったりするだけであって、
それでクエリを組む時にどうなるってわけじゃないんですよね。
なので、まあ、他の人が見たときに構造を理解しやすいような区分けさえできればよいのかなーと思いました。まる。