建立模型关联可以使查询更容易

时间:2012-04-22 04:32:36

标签: ruby-on-rails ruby ruby-on-rails-3 orm model

我想出了一个数据库架构,但我觉得它比我的旧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:role

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容易得多。

我是否努力想要一个标准化的数据库?我应该以不同的方式思考这个问题吗?我感谢任何帮助或指导。

3 个答案:

答案 0 :(得分:0)

通过关联查看has_many。

答案 1 :(得分:0)

您的数据库设计很好......

考虑例如常见的一对多关系:

用户模型,以及具有用户ID的主题模型..

现在在sql术语中,您将在Subject中添加用户ID。主题[id,userid,marks]

因此在主题模型中,您将定义userid belongs_to User ..

至少阅读http://guides.rubyonrails.org/association_basics.html至少一次......也许可以在一个两个桌子的rails控制台中尝试一下......你会很高兴...

同样http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html有一个很清楚的解释,其中的标题是“基数和关联”中的示例...

答案 2 :(得分:0)

数据库设计似乎没问题,除了Game-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

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