共通カラムについて考える #RDB

DBのテーブル設計を行う際の、共通カラムについて考えてみた。

共通カラムって?

例えばこんな↓のカラムを「(一定の条件を満たした)テーブルすべて」が持っていること。

  • 登録日時
  • 登録ユーザ
  • 更新日時
  • 更新ユーザ

共通カラムの目的って?

個人的に、運用管理上必要なものだという認識。
アプリの機能や要件とは切り離されて考えるべきもの。

ソートや履歴管理機能に使いそうな気もするけど、それは「必要だから存在するカラム」のであって、「共通カラム」ではない。

例えば障害の原因調査や解析などにつかう、ログ的な役割のものだと思う。

更新系はいらなくね?

上記の目的を前提にした場合に、更新XX系は不要ではないかと思った。
とても中途半端だからである。

  • 「最終」更新しか保持していない
  • 「どんな変更か」は共通カラムだけでは確認できない

じゃあ、どうするか

登録XX系の共通カラムはあっていいと思う。
「これっていつのデータ?」がパッと分かるのは、現実的にとても有用な情報だと思うので。

更新XX系の共通カラムは持たせないで、履歴管理のテーブルを別個用意するべきじゃなかろうか。