2014-01-13 3 views

답변

0

캡틴이 팀 구성원과 비즈니스 논리가 크게 다른 경우가 아니면 동일한 모델이어야합니다.

언급 한대로 역할을 사용하여 차이를 처리하거나 (모두가 속하는 Team 모델을 가지고 있다고 가정) 팀장을 별도의 연결을 통해 팀과 관련시킬 수 있습니다. 다음과 같은

뭔가 : 여기

class Team 
    has_one :captain, class_name: 'TeamMember' 
    has_many :team_members 
end 
1

나의 첫번째 질문은 : 당신이 팀 캡틴에 대해 생각할 때, 당신은의 맥락에서 무감각 될 것입니다 그 사람에 대한 정보를 저장해야합니다 팀 멤버? 그리고 캡틴은 객체 모델과 관련된 많은 양의 행동이나 논리를 필요로 할 것인데, 이는 다른 팀 구성원과 관련이 없습니까? 이 두 가지 중 하나라도 그렇다면, 이제 캡틴을 분리하면 장기적으로 더 깨끗한 스키마로 끝날 수 있습니다.

예를 들어, 팀장의 좋아하는 음식과 음악을 저장하기 위해 여러 개의 열이 필요하지만 나머지 팀원은이 정보를 신경 쓰지 않으면 " 팀 캡틴 (team captain) "과"팀원 (team member) "은 서로 밀접한 관련이 있다면 실제로는 다른 동물입니다.

또한, 어떤 팀 캡틴이 어떤 팀의 캡틴인지 추적해야합니까? 그렇다면 스키마가 좀 더 단순해질 수 있습니다. 특별한 팀의 주장들이 팀을 captaining하고 있다는 사실이다 만드는 유일한 경우에, 당신은 대략 다음과 같이 대다 스키마를 고려할 수 :

  • team_members를 (ID, 이름 , 좋아하는 색깔, 무엇이든)
  • captains_to_teams (MEMBER_ID, team_id)
  • members_to_teams (MEMBER_ID, team_id)
  • 어쩌면

심지어 간단한, 당신은 트루 경우 일이 각 사람은 단일 팀과 연관 될 것이라는 점을 당신은 시간이 지남에 따라 장의 자격 또는 회원의 변화를 추적 할 필요가없는 경우 :

  • team_members (ID, 이름, 좋아하는 색깔, team_id, is_captain)
  • 팀 (ID, 이름) 위의 두 시나리오 중 하나에서

, 나는 선장이 살 수 있습니다, 그래서 당신은 팀의 주장에 대해 "많이"추가 정보를 저장할 필요가 없습니다 겠지 팀 멤버들과 함께 (그리고 팀 멤버들과 함께). 그러나 선장, 팀 구성원과 관련이없는 정보에 대해 더 많은 정보를 추적해야하는 경우 선장을 별도의 테이블로 분리하는 것이 더 예쁘고 더 합리적 일 수 있습니다.

관련 문제