2013-04-01 64 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.這不是一個容易的模型! –