2012-04-22 59 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 

所以你只是从内部查询到外部查询,希望你有想法。