2012-04-22 68 views
0

我想出了一個數據庫模式,但我覺得它比我的舊SQL習慣更受Rails ORM的影響。這是我開發的模式。 enter image description here使模型關聯更容易查詢

目前,我已經爲上圖中的所有表格創建了模型,但是在研究關聯之後,我相信我可以使用Rails關聯來生成一些多對多關係表。

在我的PlayerStats#index中,我發現自己在做的事情,如我知道的<%= Year.find(TeamYear.find(TeamUser.find(player_stat.team_user_id).team_year_id).year_id).year %>不好。所以,我正在尋找關於如何基於上面的規範化模式來建立模型關聯的指導。這是我的猜測:

User.rb 的has_many:team_users

Team.rb belongs_to的:team_year

Year.rb belongs_to的:team_year

Team_Year.rb 的has_many:團隊 has_many:年

Team_User.rb belongs_to:用戶 belongs_to的:team_year HAS_ONE:角色

Game.rb 的has_many:team_years

Player_stats.rb belongs_to的:team_user belongs_to的:遊戲

我不知道如果我在正確的跟蹤與否。此外,我不知道如何利用聲明這些關聯。我一定希望讓Team.name(給出Player_Stat.game_id)比Team.find(TeamYear.find(Game.find(player_stat.game_id).away_team_year_id).team_id).name容易得多。

我是否努力擁有規範化的數據庫?我應該以不同的方式思考這個問題嗎?我感謝任何幫助或指導。

+0

您是否閱讀本指南? http://guides.rubyonrails.org/association_basics.html – MikDiet 2012-04-22 05:34:03

回答

0

你的數據庫設計是好的...

考慮瞭如常見的一對多關係:

用戶模型,並與它有一個用戶ID主題模型..

現在,在SQL方面,你會放一個用戶ID的主題。主題[ID,用戶ID,標記]

所以在主題模式,您將定義userid belongs_to User ..

閱讀http://guides.rubyonrails.org/association_basics.html對此進行了詳細ATLEAST once..and也許嘗試在軌控制檯一點與一個兩個表..而你會好去...

而且http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html已與例如漂亮和清晰的解釋來自於它的標題'基數和協會的期待......

0

的DB設計看起來不錯,除了遊戲--TeamYear關係,女巫不清楚,但查詢的方向不只是什麼更容易做。

嘗試從頂部開始的建築,而是來自基地,在您的案件查詢

<%= Year.find(TeamYear.find(TeamUser.find(player_stat.team_user_id).team_year_id).year_id).year %> 

轉變成

<%= player_stat.team_user.team_year.year %> 

和查詢

Team.find(TeamYear.find(Game.find(player_stat.game_id).away_team_year_id).team_id).name 

變換到

TeamYear.find(player_stat.game.away_team_year_id).team.name 

所以你只是從內部查詢到外部查詢,希望你有想法。