2017-05-20 59 views
0

我應該何時添加數據庫約束條件,如果我已經有驗證完成相同的事情?如果我對這些驗證進行驗證,是否應該爲null false和width添加數據庫約束?

我知道,如果某件事情對您的應用程序至關重要,例如確保用於用戶身份驗證的電子郵件地址是唯一的,那麼您確實需要具有唯一約束的數據庫索引。這是我有問題的非關鍵任務領域。

例如,如果我有一個標題字段的文章表,我會在模型中有一個限制,防止空白標題提交。

# 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屬性來檢查存在和最大長度,因此在同一個輸入上可能會有三次檢查。

回答

0

簡短的答案是,它取決於和意見各不相同。即使代碼驗證它,我也傾向於始終在數據庫中存在約束。因爲開發者,QA等可能試圖將數據直接注入數據庫。有一個約束強制約定。請參閱Stack Exchange線程獲取更多反饋。