我想出了一个数据库架构,但我觉得它比我的旧SQL习惯更容易受到Rails ORM的影响。这是我开发的模式。
目前,我已经为上图中的所有表格制作了模型,但是,在研究了关联之后,我相信我可以使用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
容易得多。
我是否努力想要一个标准化的数据库?我应该以不同的方式思考这个问题吗?我感谢任何帮助或指导。
答案 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
所以你只是从内部查询到外部查询,希望你有这个想法。