【问题标题】:validates :name, uniqueness: {scope: user_id}验证:名称,唯一性:{范围:user_id}
【发布时间】:2013-05-20 00:39:33
【问题描述】:

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

validates :name, uniqueness: {scope: user_id}

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

add_index(:posts, :name)

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

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

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

谢谢大家,

【问题讨论】:

    标签: ruby-on-rails unique data-integrity


    【解决方案1】:

    您所说的数据完整性可以在 2 个级别强制执行,您可能已经知道:在应用程序级别和数据库级别。

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

    您已经设置了第一个。因此,只要所有内容都通过 Rails 模型保存在 db 中,就不会有任何 db 完整性问题。

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

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

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

    【讨论】:

    • 嗨,是的,索引部分确实使查询速度更快......而且,传递多个属性时的顺序非常重要。像这样搜索 :name 或 :name 和 user_id 将是快速查询,仅搜索 user_id 并不多 :S.
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多