我在我的模型中添加了这样的验证:
validates :name, uniqueness: {scope: user_id}
并在我的迁移中添加了这样的 add_index:
add_index(:posts, :name)
但我只是在 rails api页面上阅读了有关数据完整性的部分。
我想知道我的模型是否会有任何完整性错误,所以我的问题是:我应该将索引重写为吗?
add_index(:posts, [:name, :user_id]), 唯一的: true
谢谢大家,
我在我的模型中添加了这样的验证:
validates :name, uniqueness: {scope: user_id}
并在我的迁移中添加了这样的 add_index:
add_index(:posts, :name)
但我只是在 rails api页面上阅读了有关数据完整性的部分。
我想知道我的模型是否会有任何完整性错误,所以我的问题是:我应该将索引重写为吗?
add_index(:posts, [:name, :user_id]), 唯一的: true
谢谢大家,
正如您可能已经知道的那样,您正在谈论的数据完整性可以在 2 个级别上实施:在应用程序级别和数据库级别。
在应用程序级别:您添加的验证。 在数据库级别:您建议的索引
您已经设置了第一个。所以,只要一切都通过你的 Rails 模型保存在数据库中,你就不会有任何数据库完整性问题。
但是,如果其他第三方应用程序可能会写入您的数据库,那么在数据库级别强制唯一性也不是一个坏主意。
即使第一个就足够了,也不设置第二个也不错。
此外,如果您碰巧经常查询与 user_id 关联的名称,实际上最好使用add_index(:posts, [:name, :user_id]),这样您的查询速度会更快一些。
是的 - 那将是一个好主意。您的模型验证意味着复合主键。