轨道,将多个复杂的关系存储到单个哈希记录中



我正在研究轨道协会。

假设,我有一个具有大量关联的表。

Sample.rb
has_many :sample_assoas 
has_many :assoas through: :sample_assoa
has_many :sample_assobs
has_many :assobs through: :sample_assob
has_many :sample_assocs
has_many :assocs through: :sample_assoc
and so on...

在这种情况下,我虽然由于关系复杂,这个过程会很慢。(因为轨道应该保持匹配关系以获得结果。

所以我想,如果我可以将所有关系数据存储到单个哈希以获得更快的结果,那会怎样?

Samples schema 
id :integer 
name :string
hash :something...?

我发现PostgreSQL"hstore"将数据存储在哈希中。

但是以这种方式存储是好主意吗?

或者你有什么建议吗?

谢谢

首先,模型可以具有任何数字或关联。它不会影响处理时间。hstore不能代替关联,两者都用于不同的功能。

关联用于简化查询构建。考虑:

class ModelA < ActiveRecord::Base
  has_many :modelbs
end
class ModelB < ActiveRecord::Base
  belongs :modela
end

您可以找到与模型 A 关联的 Model B 记录,如下所示:

@modela = ModelA.find(xxx)
@modelbs = ModelB.where(modela_id: @modela.id)

使用关联只需编写:

@modela = ModelA.find(xxx)
@modelbs = @modela.modelbs

hstore 用于以哈希格式保存值。 因此,它们不打算用作关联。在大多数情况下,我们不希望将记录保存在所有关联的表中。所以我们应该添加关联。如果在这种情况下使用 hstore,则大多数值将设置为 nil。

在使用 hstore 的情况下,您需要手动迭代哈希以获得所需的结果。

最新更新