RDBの履歴テーブルにdefault値を設定するのは避けよう
こんにちは!kossyです!
さて、今回はRDBの履歴テーブルにdefault値を設定するのは避けよう、という提言を
ブログに残してみたいと思います。
なぜdefault値を設定したらダメなの?
reading_recordテーブルのレコードにUPDATE文が走った場合、
UPDATEが走る前のreading_recordレコードがreading_record_historiesにinsertされるという仕様だったとします。
ここで、もしreading_recordレコードのとあるカラムがnullで、reading_record_historiesのとあるカラムにdefault値が設定されているとします。
この場合、reading_record_historiesはreading_recordのコピーレコード(主キー、created_atとかupdated_atは別)でないといけないのに、
意図しない値が入ることになります。(まぁ普通に実装してればないだろうけど、、、)
なので、「履歴テーブルにdefault値を設定するのは避けよう」という結論に至るわけです。
「普通に実装してれば」と記載しましたが、
reading_recordモデルにきちんとvalidationを貼ったり、default値を設定していれば問題ないと言うことです。
皆さんはどう考えますでしょうか。