例如,在此迁移中,我有一对多的关系"类别有很多子类别"。如果我没有把" 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
答案 0 :(得分:1)
建议在这样的列上添加索引,因为据说你将在两个表中执行多次查找。在关系数据库中,列category_id
将是subcategories
表上的外键,它引用id
表的category
列。您可以在维基百科上找到有关Database index的更多信息(最快的参考)。
当然,您可以跳过为此列创建索引,但最终会导致性能下降。当然没有索引它会工作,但我相信你也想要一个明智的可用性应用程序 - 在性能方面的可用性。当您的表变大(理论上)时,您最终会注意到涉及两个或多个表categories
和subcategories
的联接的数据检索相对较慢。
当然,人们可以争辩说维护索引会有性能损失,即DBMS必须经过额外的写入。因此,无论您是否拥有更多的数据检索或数据写入,都取决于您和您的业务需求。如果你有更多的数据检索,那么一定要去索引,如果你认为没有多少读取,只有你认为你的应用程序可以使用的写入(不太可能),那么确定你可以跳过它。
考虑到您在category
存在时执行验证的情况。我肯定会添加索引。