まずは、吐露しておきますが、
私、データベース理論についてはほぼ素人です。
その素人の疑問です。
データベースのテーブル設計において、
作成日時と更新日時をカラムとしてほぼ無条件で付加しているのですが、
これは「一般的な」テーブル設計として妥当でしょうか?
今の参加プロジェクトのテーブルは、
マスタ系、トランザクション系に関わらず、
全てのテーブルについてそれらカラムが定義されています。
どこかでそういう日時をカラムとして保持することの是非の議論を見たような気がするのですが…
まあ、結論的には「ケースバイケース」なんでしょうけど。
あと、良い悪いは別にして、
いざ設けることになった場合、
カラム名称として適当なものはあるのでしょうか?
ちなみに、見たことある名称は、
作成日時:CREATE_DATETIME、CREATION_DATE
更新日時:UPDATE_DATETIME、MODIFIED_DATE
などです。
命名ポリシーとしては、何となく、
- 第三者が見てカラム内容が分かりやすい
- 長ったらしくない
すなわち、明瞭、簡潔であるようにすべきだ、と思います。
上記の例を見て、二点ほど議論のポイントがあるように思います。
'_'の前後でそれぞれポイントを挙げると、
「作成」「更新」という語を英語に訳す時に適当な語は何なのか?
というのが1点。
後は、DATETIMEとDATEで異なるニュアンスを意図的に伝えている場合があるのでは?
ということです。
前者については、英語圏の人が見ても同じ意味に取れるなら、
日本人が理解しやすい語を当てるのが妥当なんでしょうね。
私が例を見て感じるのは、作成日時、更新日時とも、
先に挙げられたほうが日本人定義、後の方が英語圏の人定義、に感じますね。
もっと単純に行くと、CREATEもINSERTに代えたいぐらい?
INSERT文の時に挿入されるカラムだからそれでいいんだよ、てな具合。
データ操作の総称を「CRUD」と言うらしいですが、
それを知っていると、CREATEもINSERTも一緒ちゃう?と感じるかもしれないですね。
後者は、結構根が深そう。
例えば、JavaのSunコーディング規約、みたいな、
(Oracle社の!?)カラム名の命名規約があればぜひ知りたいのですが、
あらかじめ規約を決めて定義しないとよろしくないですね。
実際あった話では、元々日付に関連するカラムを全てhoge_DATEとしていたが、
カラムの中には明示的に時分秒まで保持するカラムと、
日付のみしか保持しないカラムが存在するため、
同じカラム名の接尾辞だと混乱する、
よって日付のみのカラムはhoge_DATE、
時分秒まで保持するのはhoge_DATETIMEにする、
というのがありました。
確かOracleの仕様でDATE型で定義しても時分秒を保持するためだったと思います。
ど素人の私なんかが意見するなら、
データ型およびカラム名称はSQL標準に合わせて定義してください、
と思ってしまうんですが、
データベースエンジニアの方からすると、
絶対嫌(あるいは無理?)だったりするんでしょうね…
上記の例だと、(SQL標準自体よく知らないのですが…)
DATETIME→TIMESTAMPとか?
すごく奥が深すぎて、
簡単に意見できないのがこのデータベース関連の領域なんですよね…
最近のコメント