2013-05-20 38 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

是 - 这将是一个不错的主意。您的模型验证意味着一个复合主键。