我正在开发一个使用rails
的代码库,以前的开发人员已经在postgres
中创建了一些相互引用的模型。但是,即使数据库未将字段显示为activerecord
,他们仍使用primary_key
的{{1}}字段。这有什么好处或缺点吗?请记住,“假” primary_key
字段上有一个索引。
primary_key
实际的primary_key是# models
class A < ActiveRecord:Base
has_many :bs, primary_key: :special_id
end
class B < ActiveRecord::Base
belongs_to :a, primary_key: :special_id, foreign_key: :special_id
end
上的id
,但是架构包括B
和id
。索引存在于special_id
答案 0 :(得分:1)
从理论上讲,好处是它更具可读性。在您的情况下,A.find(id).bs
将加入B
表中具有对应的b_id
的{{1}},在这种情况下,A
可能不像使用其他名称那样直观{1}}。
从性能的角度来看,只要主键和外键列上都有索引,就不会有明显的区别。 special_id
方法最终将导致查询,因此唯一的计算成本是交换has_many
生成的查询字符串中的列名。
您可以尝试使用各种键声明对基准进行基准测试,但是如果它使查询时间增加甚至一毫秒,我会感到惊讶。