如果我对这些数据库进行了验证,是否应该为null false和width添加数据库约束?

时间:2017-05-20 20:12:58

标签: ruby-on-rails database validation constraints

如果我已经有相同的验证,我应该何时添加数据库约束?

我知道如果某些内容对您的应用至关重要,例如确保用于用户身份验证的电子邮件地址是唯一的,那么您确实需要具有唯一约束的数据库索引。这是我关心的非任务关键领域。

例如,如果我有一个带有标题字段的文章表,我将在模型中设置一个约束,以防止提交空白标题。

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

最佳做法是向数据库添加null false约束吗?如果某个空白标题超出了模型验证,那么这不是一个关键任务问题。

最大长度是一个类似的问题。我还可以在文章模型中设置最大长度验证,以防止标题超过100个字符。

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

默认情况下,Postgres会将varchar字段的最大长度(Rails中的字符串类型)设置为255.如果过长的标题以某种方式超过了验证,那么它不是一个关键任务问题,那么是否有性能优势将数据库中的宽度约束设置为100个字符?或者如果是2个字符的state_code呢?如果模型验证会阻止它,那么在数据库中设置比默认宽度更短的宽度是否有最佳做法?

我在表单字段中添加HTML属性以检查是否存在和maxlength,因此可能会对同一输入进行三次检查。

1 个答案:

答案 0 :(得分:0)

简短的回答是它取决于并且意见各不相同。即使代码验证它,我也倾向于总是在数据库中有约束。由于开发人员,QA等可能会尝试将数据直接注入数据库。有约束强制执行约定。有关更多反馈,请参阅此Stack Exchange主题。