0

我想出了一个数据库模式,但我觉得它比 Rails ORM 更受我旧 SQL 习惯的影响。这是我开发的架构。 在此处输入图像描述

目前,我已经为上图中的所有表制作了模型,但是,在研究了关联之后,我相信我可以使用 Rails 关联来制作一些多对多的关系表。

在我的 PlayerStats#index 中,我发现自己在做一些<%= Year.find(TeamYear.find(TeamUser.find(player_stat.team_user_id).team_year_id).year_id).year %>我知道不好的事情。因此,我正在寻找有关如何基于上述规范化模式构建模型关联的指导。这是我的猜测:

用户.rb has_many :team_users

Team.rb 属于_to :team_year

Year.rb 属于_to :team_year

Team_Year.rb has_many :teams has_many :years

Team_User.rb belongs_to :user belongs_to :team_year has_one :role

Game.rb has_many :team_years

Player_stats.rb 属于_to :team_user 属于_to :game

我不确定我是否走在正确的轨道上。此外,我不确定如何利用声明这些关联。我肯定想让 Team.name(给定 Player_Stat.game_id)比Team.find(TeamYear.find(Game.find(player_stat.game_id).away_team_year_id).team_id).name.

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

4

3 回答 3

0

通过关联查看 has_many。

于 2012-04-22T06:01:44.390 回答
0

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

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

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

现在在 sql 术语中,您将在 Subject 中放置一个用户 ID。主题[ id, userid, 标记]

所以在主题模型中你将定义userid belongs_to User..

至少详细阅读http://guides.rubyonrails.org/association_basics.html一次......也许在 Rails 控制台中用一张两张桌子试一试......你会很高兴......

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html也有很好而清晰的解释,其中包含标题“基数和关联”的示例......

于 2012-04-22T06:19:21.727 回答
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

所以你只是从内部查询到外部查询,希望你明白了。

于 2012-04-22T06:39:59.497 回答