我建立具有以下要求的應用程序:如何在RoR中模擬不同體育運動員的球員?
- >用戶可以是不同的球隊的球員。 - >一個團隊可以是一種運動類型。
我的問題是:
- >由於每個運動型我想不同的信息存儲播放器,這將是模型,最好的方法是什麼?
我曾經想過上有幾種模式(和表)爲每一種運動,例如:
Basketball_Players,Football_Players等等,但我不知道這將是一個不錯的辦法。你通常如何在RoR上做這件事?
我建立具有以下要求的應用程序:如何在RoR中模擬不同體育運動員的球員?
- >用戶可以是不同的球隊的球員。 - >一個團隊可以是一種運動類型。
我的問題是:
- >由於每個運動型我想不同的信息存儲播放器,這將是模型,最好的方法是什麼?
我曾經想過上有幾種模式(和表)爲每一種運動,例如:
Basketball_Players,Football_Players等等,但我不知道這將是一個不錯的辦法。你通常如何在RoR上做這件事?
我想說你有兩個選擇,我不知道在不知道應用程序需求細節的情況下,確定哪種方法是最「正確」的方法是真的。
給出的是,你將有一個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_player
,但player_sport
將有height
,weight
和其他與所有運動相關的列。
如果你正在尋找一個建議,我可能會做選項2,或者,如果它看起來像有足夠的重疊,它是有道理的,選項3
賈森感謝您的回答。但我有個問題。 「團隊」和「球員」之間的關係是什麼?我的意思是,如果我有一個叫Team的模型,我是否需要擁有諸如「has_many soccer_players,has_many basketball_players ...」之類的聯盟?你會怎麼做? –
我不明白爲什麼你不能只用'team_id'和'player_id'來創建'player_team'表。 'team'表中會有'sport_id';據我所知,沒有必要爲'player_team'知道它適合哪種運動。 –
我實際上越來越傾向於選項1或選項3.這不是一個容易的模型! –