INNOBASE技術ブログ

技術的なことエンジニア的なこと制作的なこと全般

userテーブルはマスターテーブル?DBのTABLEをいくつかの種別に分ける目的について

新規WEBシステムのデータベース設計を軽く眺めていたところ、不思議な定義を見つけました。
user テーブルがマスターテーブルの扱いになっています。
設計者に聞いてみると「業務系システムではユーザーテーブルはマスタですよ?」とのこと
業務系ではそれもありうるな、と一定納得しつつ
そもそも何故マスターとトランザクション(ユーザー) テーブルを分ける必要があるのか?
という辺りから振り返り、ユーザーテーブルが何に分類されるべきか再考してみました。

テーブルを分類する目的について

まずはググってみる

マスターデータとは - IT用語辞典 Weblio辞書

マスターデータとは、主に企業が社内向けや業務向けなどで構築する情報システムにおいて、製品や顧客や会計など多くのデータベースで共通となる、基本的な情報のことである

こちらのページのようにマスターテーブル(あるいはマスターデータ)とトランザクションテーブル(あるいはトランザクションデータ)の説明は多くの場合業務システムを前提に説明されていることが多いようです。
マスターは基本情報、トランザクションは取引の情報と概念で説明されています。
なるほど、この基準で言うとuser テーブルはマスタとなります。
でもこの説明はWEBシステムでテーブル種別を区別するにはなにか物足りない

テーブルを分類するのはデータの扱い方が違うから

WEBを前提にした記事が少ないのは、WEBシステムではテーブルを分類する目的が明確で迷う人が少ないからでしょう。
ズバリ、テーブルを分類する目的はデータの扱い方を分類によって変える必要があるということです。
特にキャッシュ戦略に関わってきて、日々早いレスポンスを要求されるWEB屋さんはこれを常に意識しているはず。

WEBシステムでよく見られるテーブル(データ)の分類

  • metaデータ
  • masterデータ
  • userデータ
  • logデータ

(historyデータ)

テーブル種別別のデータの取扱い

metaデータ

絶対に更新されない固定データです。プログラム上で定数とされることもあります。
システム上では高速なローカルキャッシュに読み込んでおいて、DBに問い合わせることをほぼしないようなデータとして扱われます。
例えばDVDの種類定義テーブルなどがこれにあたります。
id1: DVD / id2: Blu-ray

masterとして扱っても問題が無いため、metaとmasterは一緒くたに扱われることも多いですね。

masterデータ

管理者が更新する可能性がある、基本的な情報…と概念だけだと判別しづらいのですが扱い方で判別するとスッキリします。
管理者のみが更新するデータでユーザーは更新しない、高速なローカルキャッシュに読み込まれ管理者がデータを更新したときなど管理者が任意のタイミングでキャッシュのリフレッシュを実行することが出来るデータ、そのように取り扱われるデータ。
例えば所持しているDVDのデータなどがこれにあたります。
id:1,title:攻殻機動隊 / id:2,title:AKIRA / id:3,title:EVANGELION

userデータ

ユーザーが更新しうる、ユーザーのアクションによって更新されうるデータ全般
WEBサーバーが複数並列するシステムを考えるとわかりやすいのですが、ユーザーが現在アクセスしているサーバーのキャッシュのみが更新されると並列するWEBサーバー間でデータの整合性がとれなくなってしまうので、userデータには高速なローカルキャッシュを利用することが出来ません。
キャッシュする場合はmemcached などKVSにキャッシュされ並列するWEBサーバーの共有キャッシュとします。
例えば、DVDを見た感想のデータがuserデータにあたります。
id:1,master_dvd_id:2,body:このロリBBAは方向性が違う

※ masterの更新時は管理システムがすべてのWEBサーバーのキャッシュを更新できるものとする。

logデータ

userデータの中でも通常のシステムから参照されない統計用や、何か会った時の調査用のデータをlogデータとして切り出すことがあります。
logデータはデータ量も多くなるのでDBを分け、master に blackhole engine / slave - standby にarchive engine を採用するなど他と扱いが変わってきます。
閲覧履歴をユーザーに開示する仕様がある場合この閲覧履歴のデータはlogデータにならないので注意が必要です。


で、結局userテーブルはマスターテーブルなのか?

回答としては歯切れの悪いケースバイケースとなりますが、多くのWEBシステムの場合ニックネームなどユーザーが自身で更新するデータが多いのでユーザーデータとなります。
業務システムでは管理者がユーザーデータを管理しユーザーが更新できないことも多いのでマスタとして扱われることも多いでしょう

トランザクションデータ?ユーザーデータ?

業務システムではデータをマスターとトランザクションに大分することが多いようです。
大規模なWEBシステムでは上記のようにより細かく分類する必要が有るためトランザクションデータとは呼ばないことが多くユーザーデータなどと呼ばれることが多い気がします。
取引(トランザクション)って業務システム以外では命名的にピンと来ないからWEBではあまり言われないのかな
呼び方は何が正しいのかよくわかりませんが、名詞は社内ローカルな呼び方などもあるので
名詞よりも何故分類するのか、どう扱うのかを覚えておけば良いかなとあまり私はこだわっていません。

実は正しい呼び方・定義があるのかもしれない、なにかご存知のかたいましたら教えて下さい。