在Rails中建模比赛,这是postgres数组的好时机吗?

时间:2016-05-26 08:45:18

标签: ruby-on-rails arrays ruby postgresql

我即将在我的网站上建立竞赛功能。我有关于建模和postgresql数组数据类型的使用的问题,如果这是正确的用途。

功能

  

我的应用程序确实有一些用户,但我不希望比赛在用户/条目方面受到巨大压力。应用程序使用ruby 2.1.3,rails 4.1.6和postgresql 9.3.5运行。

我的想法:

在预测方面,不同的比赛将彼此相似。每场比赛都会有很多球员/球队(每场比赛都会有所不同)。用户将被要求预测哪些球队/球员获得第一名,第二名,第3-4名,第4-8名。

凭借这种心态,我认为我可以跳过让球队/球员进入自己的模式,而是让球队/球员可以在比赛桌内的阵列中进行选择。

我也在想我可以将条目预测放在条目表中,例如:第1,第2,第3-4(数组),第5-8(数组),同样的结果也会进入比赛表。< / p>

关系看起来像这样:

  

比赛

     
      
  • 有很多:条目
  •   
     

用户

     
      
  • 有很多:条目
  •   
     

条目

     
      
  • belongs_to:contest

  •   
  • belongs_to:user

  •   

我会在以下情况下查询数组:

1)条目 - 新:用户在表单中进行预测时需要查看哪些团队可用。

2)比赛 - 编辑:我需要通过球队展示位置更新比赛。

3)条目 - 更新:条目的自动评分,将参赛作品预测与竞赛答案/结果进行比较。

这会很好地利用postgresql数组类型吗?

1 个答案:

答案 0 :(得分:2)

Postgreq的JSONB允许索引,这使得它比非索引JSON类型更有效,理论上允许在关系数据库中进行非关系存储。

但是,在您的具体情况下,我会远离数组类型。这是个人意见,我认为Rails的ORM对于查询复杂的JSONB还不够友好,特别是当您决定添加更复杂的功能时。

根据经验,我会使用JSONB类型进行缓存和简单的值存储(即标签或关键字列表。是的,您可以将您的用户视为数组但是,如果您想要改变一些东西或者添加额外的信息,你最终会修改它并且很难处理它们,但不会对具有复杂关系的表格进行修改。