2015-10-21 31 views
0

上的Active Record迁移部分3.2 Creating a Join Table Rails的指南说,指数不会默认连接表补充说:为什么Rails默认将索引添加到连接表中?

create_join_table也接受模块,你可以使用添加 指数(未通过创建默认情况下)或其他列:

class CreateJoinTableFooBar < ActiveRecord::Migration 
    def change 
    create_join_table :foos, :bars do |t| 
     # t.index [:foo_id, :bar_id] 
     # t.index [:bar_id, :foo_id] 
    end 
    end 
end 

当我运行的发电机,我确实可以看到,至少有一些指标默认情况下不添加0

Rails在默认情况下不添加这些索引的基本原理是什么?

另外,只是为了澄清,如果我不取消注释这些行,是否会生成以下任何索引:foo_id或:bar_id本身会生成?

+0

我不是一个很大的指数专家,但我的猜测是,拥有这两个指数没有多大意义。根据您的数据,这些数据之间可能会有很大的性能差异,应该由开发人员决定使用哪一个。 – BroiSatse

回答

2

默认情况下不添加到HABTM连接表

的关键是在这里:HABTM

has_and_belongs_to_many意味着是一种方法,根本就是两个或多个数据集连接在一起。没有必要为主要指标 - 只需两套foreign_keys

enter image description here


您可能希望添加索引等的原因是因为has_many :through(这是单机使用主要给你额外的属性加入)。

虽然has_many :through是为了给你使用中央模型来连接两个人的能力......

enter image description here

...它往往只是作为一个连接模型(即在上面的示例中,可以将联接模型称为physician_patients)。

如果您在此功能中使用has_many :through,您希望在连接表中包含索引。

相关问题