我正在构建一个具有以下要求的应用程序:
- >用户可以是不同团队的玩家。 - >团队可以是运动类型。
我的问题是:
- >因为对于每种运动类型,我想存储玩家的不同信息,那么建模的最佳方式是什么?
我曾想过为每种运动设计几种模型(和表格),例如:
Basketball_Players,Football_Players等等,但我不确定这是不是一个好方法。你通常如何在RoR上做到这一点?
答案 0 :(得分:0)
我会说你有两个选择,我不知道在不知道你的申请要求的细节的情况下,确实可以说哪种方法是“最正确的”。
给出的是您将拥有sport
表和player
表。我可以肯定地说。问题是如何连接这两者。
选项1:单个联接表
您可以拥有一个名为player_sport
(或其他)的表格,其中包含player_id
列,sport_id
列和serialized_player_data
列或类似内容根据运动情况,保留序列化的球员数据(可能是JSON)。 优点:简单架构。 缺点:未正确规范化,因此存在不一致。
选项2:每项运动的单独联接表
这是您在问题中提到的内容,其中您有basketball_player
,football_player
等。此处您还有一个player_id
列,但可能不是sport_id
1}}列,因为在表名中指定运动权时,这将是多余的。拥有serialized_player_data
列的需求将会消失,因为您现在可以直接在列中存储所需的属性,例如: wrestling_player.weight_class_id
或其他什么。 优点:正确规范化。 缺点:更复杂的架构,因此您的应用程序代码中的工作量也会增加。
实际上还有第三种选择:
选项3:1和2的组合
在这里,你可以做你在选项2中做的所有事情,除了你将公共玩家属性移动到player_sport
表并保存basketball_player
等等,用于特定于运动的属性。因此weight_class_id
将留在wrestling_player
但player_sport
会有height
,weight
以及与所有体育相关的其他列。
如果您正在寻找建议,我可能会做选项2,或者,如果看起来有足够的重叠使其有意义,选项3。