新手问题 rails 用索引确认唯一性?如果这么,为什么要这样做?感觉不符合直觉。。。

zzz6519003 · 2018年03月25日 · 最后由 dcitpx.com 回复于 2018年08月15日 · 1811 次阅读
class CreateContactGroups < ActiveRecord::Migration
  def change
     create_table :contact_groups do |t|
      t.integer :owner_id
      t.string :group_name
      t.timestamps
    end
    add_index :contact_groups, :owner_id
    add_index :contact_groups, [:owner_id, :group_name], unique: true
  end
end

add_index :contact_groups, [:owner_id, :group_name], unique: true 求解析这句~~

这不是数据库层面的唯一性保证么...

应用层是保证不了唯一性的,跟框架无关

应用层面的唯一性验证因为 race condition 不能完全保证数据唯一(虽然大部分情况下够用)。下面的链接跟 Rails 无关,不过足以解释你的问题:

https://hexdocs.pm/ecto/Ecto.Changeset.html#unsafe_validate_unique/4 https://hexdocs.pm/ecto/Ecto.Changeset.html#unique_constraint/3

我认为应用层验证唯一性更大的意义在于 validate errors message 的统一处理。

这问题很复杂,头像是本人的话我们加个微信慢慢探讨

应用层没法保证,遇到过并发导致的问题

唯一性用索引确认最方便啊。应用层确认的话,还要开事务或者加锁,然后要么滚回,要么阻塞,不如直接让能保证原子性的数据库来保证唯一性。

自学就是会遇到很多不懂的问题,也没有大神带,想要多学一门技术的可以考虑大聪 IT 培训,学到的东西很多,关键超划算的,带你写项目啊

网籽点击了解一下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号