0

私はデータベース スキーマを思いつきましたが、Rails ORM よりも古い SQL の習慣に影響されているように感じます。これが私が開発したスキーマです。 ここに画像の説明を入力

現在、上の画像のすべてのテーブルのモデルを作成しましたが、関連付けを調査した結果、Rails Associations を使用して多対多のリレーショナル テーブルを作成できると考えています。

私の 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 所属先 :team_year

Year.rb 所属先 :team_year

Team_Year.rb has_many :teams has_many :years

Team_User.rb の所属先 :ユーザーの所属先 :team_year has_one :役割

Game.rb has_many :team_years

Player_stats.rb 所属先 :team_user 所属先 :ゲーム

正しい軌道に乗っているかどうかはわかりません。さらに、これらの関連付けの宣言を利用する方法がわかりません。Team.name (指定された Player_Stat.game_id) を よりもはるかに簡単にしたいと思いTeam.find(TeamYear.find(Game.find(player_stat.game_id).away_team_year_id).team_id).nameます。

正規化された DB を取得しようと努力しすぎていませんか? この問題を別の方法で考えるべきですか?ヘルプやガイダンスに感謝します。

4

3 に答える 3

0

アソシエーションを通じてhas_manyを見てください。

于 2012-04-22T06:01:44.390 に答える
0

あなたのDBデザインは素晴らしいです...

たとえば、一般的な1対多の関係を考えてみましょう。

ユーザーモデル、およびユーザーIDを持つサブジェクトモデル。

SQL用語では、SubjectにユーザーIDを入力します。件名[id、userid、marks]

したがって、サブジェクトモデルで定義しますuserid belongs_to User

http://guides.rubyonrails.org/association_basics.htmlこれを少なくとも1回は詳細に読んでください。そして、2つのテーブルが1つあるRailsコンソールで少し試してみてください...

また、 http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.htmlには、「カーディナリティと関連付け」という見出しの例を使用した、わ​​かりやすい説明があります...

于 2012-04-22T06:19:21.727 に答える
0

Game-TeamYear の関係を除いて、DB の設計は問題ないようですが、クエリの方向性は単に実行しやすいだけではありません。

あなたの場合、あなたのクエリでは、上からではなく、ベースから建物を始めてみてください

<%= 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 に答える