如何为RoR中不同运动的运动员建模?

时间:2013-04-01 18:57:52

标签: ruby-on-rails model

我正在构建一个具有以下要求的应用程序:

  

- >用户可以是不同团队的玩家。    - >团队可以是运动类型。

我的问题是:

  

- >因为对于每种运动类型,我想存储玩家的不同信息,那么建模的最佳方式是什么?

我曾想过为每种运动设计几种模型(和表格),例如:

Basketball_Players,Football_Players等等,但我不确定这是不是一个好方法。你通常如何在RoR上做到这一点?

1 个答案:

答案 0 :(得分:0)

我会说你有两个选择,我不知道在不知道你的申请要求的细节的情况下,确实可以说哪种方法是“最正确的”。

给出的是您将拥有sport表和player表。我可以肯定地说。问题是如何连接这两者。

选项1:单个联接表

您可以拥有一个名为player_sport(或其他)的表格,其中包含player_id列,sport_id列和serialized_player_data列或类似内容根据运动情况,保留序列化的球员数据(可能是JSON)。 优点:简单架构。 缺点:未正确规范化,因此存在不一致。

选项2:每项运动的单独联接表

这是您在问题中提到的内容,其中您有basketball_playerfootball_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_playerplayer_sport会有heightweight以及与所有体育相关的其他列。

如果您正在寻找建议,我可能会做选项2,或者,如果看起来有足够的重叠使其有意义,选项3。