Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails数据建模_Ruby On Rails_Ruby_Caching_Data Modeling - Fatal编程技术网

Ruby on rails Rails数据建模

Ruby on rails Rails数据建模,ruby-on-rails,ruby,caching,data-modeling,Ruby On Rails,Ruby,Caching,Data Modeling,在我的公司,我们试图缓存一些从API查询的数据。我们正在使用Rails。我的两个模型是“查询”和“响应”。我想在查询和响应之间创建一个一对多的关系,其中,一个查询可以有多个响应 我认为这是正确的方法 Query = [query] Response = [query_id, response_detail_1, response_detail_2] 然后,在模型中,我进行了以下数据关联: class Query < ActiveRecord::Base has_many :respo

在我的公司,我们试图缓存一些从API查询的数据。我们正在使用Rails。我的两个模型是“查询”和“响应”。我想在查询和响应之间创建一个一对多的关系,其中,一个查询可以有多个响应

我认为这是正确的方法

Query = [query]
Response = [query_id, response_detail_1, response_detail_2]
然后,在模型中,我进行了以下数据关联:

class Query < ActiveRecord::Base
  has_many :response
end

class Response < ActiveRecord::Base
  belongs_to :query
end
但是我的老板让我在查询模型中使用数组列,删除模型之间的数据关联,并将每个响应记录的id放在查询模型的数组列中。因此,现在查询模型如下所示

Query = [query_id, [response_id_1, response_id_2, response_id_3,...]]

我只想知道两种方法的优点和缺点是什么,哪种方法是正确的

如果关系实际上是一对多关系,“标准”方法就是您最初建议的方法,或者使用连接表。您正在失去通过使用数组使用FK可以获得的引用完整性。Postgres几乎在数组列上有FK约束,但从我的研究来看,它目前似乎不在路线图中:

<>你可能会从数组方法中获得一些性能优势,如果你认为它是一个非规范化/缓存辅助的话。有关这方面的一些信息,请参见此答案,但仍建议使用连接表: . 这个答案和评论还提供了一些关于阵列性能和连接性能的想法:

使用阵列的另一个优点是,阵列将保持顺序,因此,如果顺序很重要,您可以从中获得一些好处:

但即使这样,您也可以将顺序直接放在responses表上(假设它们对每个查询都是唯一的),或者将其放在join表上

因此,总而言之,您可能会从数组外键中获得一些性能优势,它们可能有助于排序,但您将无法对它们实施FK约束(在撰写本文时)。除非出现特殊情况,否则最好还是坚持使用“子表上的FK列”方法,因为这种方法更为常见


诚然,这一切主要适用于SQL数据库,我注意到您在问题中没有具体说明。如果您使用的是NoSQL,可能还有其他的约定。

我不理解您的代码。什么是
Query=[Query]
“\u id”=Query.where(…)
应该如何工作?欢迎使用堆栈溢出。这个问题是在征求意见,而不是修正案或事实,这使它偏离了主题。获得你想要的答案的一个更好的方法是直接问你的老板为什么一个比另一个更可取;你的老板应该乐于解释。
Query = [query_id, [response_id_1, response_id_2, response_id_3,...]]