質問: ### validationとテーブルの制約について * DBに保存する前にシステムとして許可している値かモデル層で検証するためにvalidationを用いると思うのですが、テーブル側でも同内容の制約を設ける必要はあるのでしょうか? * 例えば、user_name登録時の字数を30文字以内でvalidationをかけ、さらにテーブル側でも以下のようにlimit制約をつけているのをよくみます.意味としては同じだと思っているのですが、なぜ二つつけているのでしょうか?ご教示いただけると幸いです。 `t.string :name, limit: 30, null: false`
回答: 考え方は諸所あると思いますが、 DBでの設計/制約はあくまでデータ設計及びパフォーマンス設計の観点から行われ モデル側ではあくまでモデルの仕様に沿ったvalidateするという別の層の考えであるため というのが一つの回答かと思います。 実際問題として困る点としては、 例えば、DB設計と制約の設定が適切にかけられていない場合、 パフォーマンスに悪影響が出たり、ソースコードの不備によって不正なデータが入る余地が生まれてしまいます。