2012-04-22 3 views
0

저는 데이터베이스 스키마를 만들었지 만, 레일스 ORM보다 이전 SQL 습관에 더 많은 영향을 받았다고 생각합니다. 여기에 제가 개발 한 스키마가 있습니다. enter image description here모델 연관성을 통해 쿼리를 쉽게 만들기

현재 위 이미지의 모든 테이블에 대한 모델을 만들었지 만 연관성을 연구 한 후에 레일스 연결을 사용하여 다 대다 관계형 테이블을 생성 할 수 있다고 생각합니다.

내 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보다 훨씬 쉽게 만들고 싶습니다.

정규화 된 DB를 확보하는 데 너무 열심히 노력하고 있습니까? 이 문제에 대해 다르게 생각해야합니까? 도움이나 안내에 감사드립니다.

+0

이 안내서를 읽었습니까? http://guides.rubyonrails.org/association_basics.html – MikDiet

답변

0

연관성을 통해 has_many를 살펴보십시오.

0

귀하의 DB 디자인은 괜찮습니다 ...

일반적인 많은 관계로 하나

사용자 모델, 그리고 그것으로 사용자 ID를 갖는 주제 모델 .. SQL 측면에서 지금

당신은 주제에 사용자 ID를 넣어 것입니다. 주제 [ID, 사용자 ID, 마크]

그렇게 될 모델에서 당신은 세부 사항

읽기 http://guides.rubyonrails.org/association_basics.html이이어야 once..and 어쩌면 두 테이블에 그것을 레일 콘솔에서 조금 시도 .. userid belongs_to User 정의합니다 .. . 당신은 갈 수있을 것입니다 ...

또한 http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

0

DB를 디자인은 게임을 제외하고, 확인을 보인다 ... 예와 좋은 명확한 설명이 거기에 '리티 및 단체를'제목에서 볼있다 - 팀 연인 관계, 마녀가 불명확하지만 질의의 방향은 단지 무엇이 더 쉬운가.

위에서되지 건물을 시작하려고하지만, 기지에서, 귀하의 경우 귀하의 요청에

<%= Year.find(TeamYear.find(TeamUser.find(player_stat.team_user_id).team_year_id).year_id).year %> 

Team.find(TeamYear.find(Game.find(player_stat.game_id).away_team_year_id).team_id).name 

변환을

<%= player_stat.team_user.team_year.year %> 

로 변환하고 쿼리 ~

TeamYear.find(player_stat.game.away_team_year_id).team.name 

내부 쿼리에서 외부 쿼리로 이동하기 만하면됩니다.

관련 문제