我了解reason ActiveRecord chooses not to deal with foreign keys。但是,出于性能原因,我需要至少在外键字段上有索引。在几乎所有带有外键列的模型中,我在关联的另一端都有一个对应的has_one
或has_many
,所以这些索引真的很重要。
这种标准做法是在Rails中手动创建外键列的索引吗?这样做有什么问题吗?
我知道我可以将架构样式更改为SQL,但我希望保持数据库独立性。我也知道foreigner gem。但是,我喜欢ActiveRecord的理念,我只需要更好的性能。
答案 0 :(得分:12)
在Rails 4中,对此的看法似乎转向使用索引。如果使用“references”类型生成模型,它将在迁移中自动为您创建索引。
rails g model Cat owner:references
生成以下内容:
class CreateCats < ActiveRecord::Migration
def change
create_table :cats do |t|
t.references :owner, index: true
t.timestamps
end
end
end
答案 1 :(得分:2)
使用rails3,只需在迁移中添加索引,在create_table
调用后,使用add_index
创建所需的索引。
这样做和it is considered a good practice没有问题。
使用rails 4,使用t.references
作为外键,将自动创建索引。