【问题标题】:Rails4 create join tabel no need to add primary key in Migration?Rails 4 创建连接表不需要在迁移中添加主键?
【发布时间】:2013-11-16 02:36:31
【问题描述】:

我用这个命令:

 rails g migration CreateJoinTableUserPloy user ploy

我检查了迁移文件:

    create_join_table :Users, :Posts do |t|
      #t.index [:user_id, :ploy_id]
      #t.index [:ploy_id, :user_id]
    end

有 2 个索引被默认注释。

然后我运行这个命令:

rake db:migrate

然后我检查我的数据库结构

而且我没有看到主键,是不是说join table不需要在数据库结构中添加索引和主键?

【问题讨论】:

  • 他们不需要 ID(或 ID 上的索引),因为您永远不会按 ID 搜索该表,您将始终搜索 user_id 和 post_id。
  • 我认为索引会影响数据库的性能,但是为什么rails不需要索引呢?
  • 哦,你的意思是迁移带有注释的那些索引?我想这些是帮助您创建迁移的提示,只需取消注释并将“ploy”替换为“post”即可。
  • 我认为您只需要注释掉的行之一,因此您必须通过取消注释来决定保留哪一行。

标签: ruby-on-rails rails-migrations


【解决方案1】:

http://meta.serverfault.com/a/1931 一致,我将对此作出回应,即使其中一些信息在评论线程中。

Rails 生成的连接表中没有主键(即由 create_join_table 创建的,用于名称为 JoinTable 的迁移),Rails 对主键没有内在要求。这是因为大多数纯连接表只能通过连接表的 id 访问,在这种情况下,primary_key 是不必要的。当然,您可以根据需要添加和指定主键列。

Rails 支持多列 primary_keys,尽管有多个 gem 提供这种支持,例如 https://github.com/composite-primary-keys/composite_primary_keys

此外,根本不需要创建索引。如果您愿意,您可以创建一个,它会加快对记录的访问,但会花费一些额外的时间来创建和更新记录。有关此问题的更多讨论,请参阅 https://stackoverflow.com/a/3658980/1008891

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多