是否需要将“add_index”放入迁移中一对多?

时间:2014-07-21 01:16:42

标签: ruby-on-rails ruby ruby-on-rails-3.2 relational-database

例如,在此迁移中,我有一对多的关系"类别有很多子类别"。如果我没有把" add_index:subategories,:category_id",它仍然可以工作。

class CreateSubcategories < ActiveRecord::Migration
  def change
    create_table :subcategories do |t|
      t.string :nombre
      t.string :descripcion
      t.integer :category_id

      t.timestamps
    end
    add_index :subcategories, :category_id
  end
end

对于验证外键我使用此

validates :category, presence: true

1 个答案:

答案 0 :(得分:1)

建议在这样的列上添加索引,因为据说你将在两个表中执行多次查找。在关系数据库中,列category_id将是subcategories表上的外键,它引用id表的category列。您可以在维基百科上找到有关Database index的更多信息(最快的参考)。

当然,您可以跳过为此列创建索引,但最终会导致性能下降。当然没有索引它会工作,但我相信你也想要一个明智的可用性应用程序 - 在性能方面的可用性。当您的表变大(理论上)时,您最终会注意到涉及两个或多个表categoriessubcategories的联接的数据检索相对较慢。

当然,人们可以争辩说维护索引会有性能损失,即DBMS必须经过额外的写入。因此,无论您是否拥有更多的数据检索或数据写入,都取决于您和您的业务需求。如果你有更多的数据检索,那么一定要去索引,如果你认为没有多少读取,只有你认为你的应用程序可以使用的写入(不太可能),那么确定你可以跳过它。

考虑到您在category存在时执行验证的情况。我肯定会添加索引。