在数据库中不是primary_key时使用has_many:primary_key

时间:2019-01-02 16:34:05

标签: ruby-on-rails postgresql activerecord

我正在开发一个使用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,但是架构包括Bid。索引存在于special_id

1 个答案:

答案 0 :(得分:1)

从理论上讲,好处是它更具可读性。在您的情况下,A.find(id).bs将加入B表中具有对应的b_id的{​​{1}},在这种情况下,A可能不像使用其他名称那样直观{1}}。

从性能的角度来看,只要主键和外键列上都有索引,就不会有明显的区别。 special_id方法最终将导致查询,因此唯一的计算成本是交换has_many生成的查询字符串中的列名。

您可以尝试使用各种键声明对基准进行基准测试,但是如果它使查询时间增加甚至一毫秒,我会感到惊讶。