2017-05-20 8 views
0

同じことを行うバリデーションが既にある場合は、いつデータベース制約を追加する必要がありますか?これらに対して妥当性が確認されていればnull falseとwidthのデータベース制約を追加する必要がありますか?

ユーザー認証に使用される電子メールアドレスが一意であることを確認するなど、アプリにとって重要なことがある場合は、一意の制約を持つデータベースインデックスが必要になることは確かです。私が疑問を持っているのは、ミッションクリティカルではない分野です。

たとえば、タイトルのフィールドを持つ記事テーブルがある場合、モデルに空白のタイトル提出を禁止する制約があります。

# app/models/article.rb 
validates :title, presence: true 

データベースにnull false制約を追加することをお勧めしますか?何とか空白のタイトルがモデルバリデーションを過ぎてしまうと、それはミッションクリティカルな問題ではありません。

最大長も同様の質問です。私はまた、100文字以上のタイトルを防止する記事モデルで最大長の検証を設定することもできます。デフォルトのPostgresによって

# app/models/article.rb 
validates :title, presence: true, length: { maximum: 100 } 

過度に長いタイトルは何とかそれはそう、ミッションクリティカルな問題ではない検証を過ぎてしまった場合は255にvarchar型のフィールド(Railsの中に文字列型)の最大長を設定しますパフォーマンス上の利点があります100文字にデータベースの幅の制約を設定するのですか?または、2文字のstate_codeの場合はどうでしょうか?モデルの検証がそれを防止するならば、データベースの幅をデフォルトより短く設定することがベストプラクティスですか?

フォームのフィールドにpresence属性とmaxlength属性を追加して、同じ入力に対して3つのチェックがある可能性があります。

答えて

0

短い答えはそれが依存し、意見が異なります。私は、たとえコードがそれを検証したとしても、データベースに常に制約があることを好む傾向があります。開発者、QAなどが直接データをデータベースに注入しようとする可能性があるためです。制約があれば、条約が強制されます。より多くのフィードバックのためにこのStack Exchangeスレッドを参照してください。

関連する問題