0

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

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

我的问题是:

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

我考虑过为每种运动设置几个模型(和表格),例如:

Basketball_Players、Football_Players 等等,但我不确定这是否是一个好方法。您通常如何在 RoR 上执行此操作?

4

1 回答 1

0

我会说您有两个选择,而且我不知道在不知道您的应用程序要求的详细信息的情况下,是否真的可以说哪个是“最正确”的方法。

给定的是您将拥有一张sport桌子和一张player桌子。我可以肯定地说。问题是如何将两者联系起来。

选项 1:单个连接表

您可以有一个名为player_sport(或其他)的表,其中包含一player_id列、一sport_id列和一serialized_player_data列或类似的东西,您可以在其中保留序列化的球员数据(可能是 JSON),具体取决于运动。优点:简单的架构。缺点:没有正确规范化,因此会出现不一致。

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

这就是您在问题中提到的内容,您有一个basketball_player,football_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_playerplayer_sport会有height, weight, 和其他与所有运动相关的列。

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

于 2013-04-01T19:10:09.463 回答