LoginSignup
3
3

More than 3 years have passed since last update.

Not Null制約とバリデーション(presence: true)の違い

Posted at
  • DB自体にNotNull制約をつける
  • モデルへのバリデーション(presence: true)

の違いは何かについて記述していきます。

NotNull制約とバリデーションの違い

結論から言うと、
DB自体にNotNull制約をつける
nillを拒否する(rollback)

モデルへのバリデーション(presence: true)
nil && 空文字("")を拒否する(rollback)

という違いがあります。
つまり、NotNull制約はnillは拒否するが、空文字が拒否しないということになります。
それでは、DB自体にNotNull制約をする必要はないのではないかという疑問が生まれます。

しかし、モデルへのバリデーションだけでなく、合わせてDB自体にもNotNull制約を記述する必要はあります。

DBにNotNull制約を記述する理由

様々な理由があるようですが、その中から抜粋して紹介させていただきます。

参考にした記事

  • プログラムのバグ等により、データに誤ってNullが入ってしまわないようにするため
  • データとプログラムを切り離すため(もしもNullが入った場合に、DBエラーなのかプログラムのエラーなのかを知るため)
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3