我即将在我的网站上建立竞赛功能。我有关于建模和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数组类型吗?
答案 0 :(得分:2)
Postgreq的JSONB
允许索引,这使得它比非索引JSON
类型更有效,理论上允许在关系数据库中进行非关系存储。
但是,在您的具体情况下,我会远离数组类型。这是个人意见,我认为Rails的ORM对于查询复杂的JSONB
还不够友好,特别是当您决定添加更复杂的功能时。
根据经验,我会使用JSONB
类型进行缓存和简单的值存储(即标签或关键字列表。是的,您可以将您的用户视为数组但是,如果您想要改变一些东西或者添加额外的信息,你最终会修改它并且很难处理它们,但不会对具有复杂关系的表格进行修改。