6

我理解ActiveRecord 选择不处理外键的原因。但是,出于性能原因,我至少需要在外键字段上建立索引。在我几乎所有带有外键列的模型上,我都有一个对应的has_onehas_many在关联的另一端,所以这些索引真的很重要。

这是在 Rails 中为外键列手动创建索引的标准做法吗?这样做有什么问题吗?

我知道我可以将架构样式更改为 SQL,但我想保持数据库独立性。我也知道外国人宝石。但是,我喜欢 ActiveRecord 的理念,我只需要更好的性能。

4

2 回答 2

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
于 2013-08-18T18:05:06.787 回答
2

使用 rails3,只需在迁移中添加您的索引,在create_table调用之后,用于add_index创建您需要的索引。

这样做没有问题,这被认为是一种很好的做法

使用 rails 4,t.references用于您的外键和索引将被自动创建。

于 2013-08-18T18:10:27.930 回答