Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

【DB設計】テーブルのカラムに更新者/更新日時は必要か?

今回は、以下のテーマを掘り下げてみたいと思います。

テーマ

テーブルのカラムに更新者/更新日時は必要か?

見解

プログラミングの世界(イミュータブルオブジェクト)からインフラの世界(イミュータブルインフラストラクチャ)に拡がった不変性の流れがDBにも波及し、そもそもUPDATEを許可しない手法が出てきました。 これにより、状態が変更されなくなるので、トラッキングする必要性もなくなります。

www.slideshare.net

モデルの複雑性を増すのは、CRUDのうちのUPDATEに関する要件です。 モデルに対するデータの更新を極限まで削ることによって、拡張に対して開いていて、修正に対して閉じている堅牢なものにします。

UPDATEできないデータベースも登場しています。

www.infoq.com

情報は事実の集合であり、事実は起きたことです。人は過去を変えられません。つまり、データベースはその部分を更新するのではなく、事実を蓄積するものなのです。過去は忘れられる一方で、変えることはできません。そのため、誰かが住所を「変更」したら、Datomicは過去の事実を置き換えるのではなく、新しい住所を持つという事実を記憶します。

従来どおりUPDATEを許可する場合は、何か問題があったときにトレースするのに更新者/更新日時が必要ですが、この目的であれば、DBの監査機能を使いましょう。情報の量と正確性の点でベターです。

www.sqlquality.com

まとめ

更新者/更新日時を使うのは間違いではありませんが、最適解は他にあるかもしれません。今までそうだったからという理由で思考停止しないようにしたいものです。