2013-04-01 26 views
0

我建立具有以下要求的应用程序:如何在RoR中模拟不同体育运动员的球员?

- >用户可以是不同的球队的球员。 - >一个团队可以是一种运动类型。

我的问题是:

- >由于每个运动型我想不同的信息存储播放器,这将是模型,最好的方法是什么?

我曾经想过上有几种模式(和表)为每一种运动,例如:

Basketball_Players,Football_Players等等,但我不知道这将是一个不错的办法。你通常如何在RoR上做这件事?

回答

0

我想说你有两个选择,我不知道在不知道应用程序需求细节的情况下,确定哪种方法是最“正确”的方法是真的。

给出的是,你将有一个sport表和一个player表。我可以肯定地说。问题是你如何连接两者。

选项1:单一的连接表

你可以有一个表称为player_sport(或其他)与player_id列,一列sport_idserialized_player_data列或类似的东西,在那里你会保持序列化的播放器数据(可能是JSON)取决于运动。 优点:简单的架构。 缺点:未正确归一化,因此受到不一致的影响。

选项2:一个单独的连接表中的每个运动

这是你在你的问题,那就是你有一个basketball_playerfootball_player,等等。这里提到什么对你也就会有一个player_id列,但可能不是sport_id列,因为如果您在表名中指定了运动权限,那么该列将会是多余的。由于您现在可以自由地将所需属性直接存储在列中,因此需要有一个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

+0

贾森感谢您的回答。但我有个问题。 “团队”和“球员”之间的关系是什么?我的意思是,如果我有一个叫Team的模型,我是否需要拥有诸如“has_many soccer_players,has_many basketball_players ...”之类的联盟?你会怎么做? –

+0

我不明白为什么你不能只用'team_id'和'player_id'来创建'player_team'表。 'team'表中会有'sport_id';据我所知,没有必要为'player_team'知道它适合哪种运动。 –

+0

我实际上越来越倾向于选项1或选项3.这不是一个容易的模型! –