- DB自体にNotNull制約をつける
- モデルへのバリデーション(presence: true)
の違いは何かについて記述していきます。
NotNull制約とバリデーションの違い
結論から言うと、
DB自体にNotNull制約をつける
nillを拒否する(rollback)
モデルへのバリデーション(presence: true)
nil && 空文字("")を拒否する(rollback)
という違いがあります。
つまり、NotNull制約はnillは拒否するが、空文字が拒否しないということになります。
それでは、DB自体にNotNull制約をする必要はないのではないかという疑問が生まれます。
しかし、モデルへのバリデーションだけでなく、合わせてDB自体にもNotNull制約を記述する必要はあります。
DBにNotNull制約を記述する理由
様々な理由があるようですが、その中から抜粋して紹介させていただきます。
- プログラムのバグ等により、データに誤ってNullが入ってしまわないようにするため
- データとプログラムを切り離すため(もしもNullが入った場合に、DBエラーなのかプログラムのエラーなのかを知るため)