1

我在我的模型中添加了这样的验证:

validates :name, uniqueness: {scope: user_id}

并在我的迁移中添加了这样的 add_index:

add_index(:posts, :name)

但我只是在 rails api页面上阅读了有关数据完整性的部分。

我想知道我的模型是否会有任何完整性错误,所以我的问题是:我应该将索引重写为吗?

add_index(:posts, [:name, :user_id]), 唯一的: true

谢谢大家,

4

2 回答 2

3

正如您可能已经知道的那样,您正在谈论的数据完整性可以在 2 个级别上实施:在应用程序级别和数据库级别。

在应用程序级别:您添加的验证。 在数据库级别:您建议的索引

您已经设置了第一个。所以,只要一切都通过你的 Rails 模型保存在数据库中,你就不会有任何数据库完整性问题。

但是,如果其他第三方应用程序可能会写入您的数据库,那么在数据库级别强制唯一性也不是一个坏主意。

即使第一个就足够了,也不设置第二个也不错。

此外,如果您碰巧经常查询与 user_id 关联的名称,实际上最好使用add_index(:posts, [:name, :user_id]),这样您的查询速度会更快一些。

于 2013-05-20T01:58:54.413 回答
1

是的 - 那将是一个好主意。您的模型验证意味着复合主键。

于 2013-05-20T01:22:53.057 回答