2013-05-20 36 views
1

我加入了這樣的一個我的模型驗證:驗證帶:姓名,唯一性:{範圍:USER_ID}

validates :name, uniqueness: {scope: user_id} 

而且加入這樣的一個add_index我的遷移:

add_index(:posts, :name) 

但我剛剛在rails的api page上讀到了關於數據完整性的部分。

我想知道我的模型上是否會有任何完整性錯誤,所以我的問題是:我應該將我的索引重寫爲?

add_index(:帖子,[:名:USER_ID]),獨特的:真正的

感謝所有,

回答

3

您正在討論的數據完整性可以在2個級別執行,您可能已經知道:在應用程序級別和數據庫級別。

在應用程序級別:您添加的驗證。 在數據庫級別:您建議的索引

您已經設置了第一個。所以,只要所有事情都通過Rails模型來保存在db中,你就不會有任何數據庫完整性問題。

但是,如果其他第三方應用程序可能寫入您的數據庫,那麼在db級別強制執行唯一性也不失爲一個好主意。

即使第一個是足夠的,不設置第二個也不錯。

此外,如果您碰巧經常查詢與user_id關聯的名稱,實際上最好使用add_index(:posts, [:name, :user_id]),這使您的查詢速度更快。

+0

嗨,是的,索引部分的確會讓查詢更快......而且,當傳遞多個屬性時它的順序非常重要。 就像搜索:名稱或:name和user_id將是快速查詢,用於搜索user_id不是很多:S。 – chopi321

+0

感謝您的回答, – chopi321

1

是 - 這將是一個不錯的主意。您的模型驗證意味着一個複合主鍵。