2011-08-25 3 views
0

내가 가진 테이블DB 스키마 문제

  • 사용자,
  • 클럽 (id, creator_id, name, description)
  • 모노 폴리 (id, results)
  • 위험 (id, results, risk_specific_field)

관계는 다음과 같습니다

  • 는 // 나는
  • CLUBS 1:n RISK

사용자가 친구의 클럽을 만들고 다른 게임 (독점, 위험)를 재생하는 클럽에 초대

  • CLUBS 1:n MONOPOLY
  • 그들 사이의 약한 개체가 있습니다.

    게임이 예인 경우. 독점 그러면 GameMonopoly 표 사이에 관계가 있어야합니다. 약한 엔티티가 N : N 관계를 깨는 데 사용되기 때문에이 접근법이 좋은지 혼란 스럽습니다. 1 : n (하나의 게임은 Monopoly 테이블의 1 행과 관련이 있습니다. N 행 Game 테이블에 Monopoly). 또한이 방법은 그것을 게임의 유일한 유형이 Monopoly이었다 내 Games 테이블에 id_monopoly 필드 를 추가하고이 될 경우 우리의 응용 프로그램은 자신의 테이블 등

    와 함께 게임의 새로운 유형을 추가 할 수 있지만 것이기 때문에 내 애플은 Risk도 내가 이런 식으로 할 수 없어.

    지옥은 여기 나에 관한 어떤 :)

    +0

    @marc_s는 - 편집 – luigi7up

    답변

    0

    을 내가 당신을 위해 무엇을 찾고있는 것은 다형성 협회입니다, 제대로 이해하고 나에 대해 분명 바랍니다.

    대신 단지 id_monopoly를 추가, 당신은 그것을 일반화하고 다음과 같은 두 개의 필드, 추가합니다 :

    id_game, type_game-id_game는 "외래 키"독점 또는 위험 중 하나이며, type_game 중 하나입니다 "독점 "또는"위험 ".

    여기서 잡는 부분은 적절한 테이블에서 ID를 조회하는 응용 프로그램 논리가 필요하다는 것입니다.이 논리는 복잡해 질 수 있지만 귀하의 경우에 도움이되기를 바랍니다.

    +0

    네 주셔서 감사합니다, 당신은 바로 :) 그래서, 당신은 두 개의 외래 키 ... defenitely 일하는 것이 이러한 접근 방식을 제안하고있어,하지만 적합한 솔루션이다? 내 말은, 이런 경우를 본 적이 없기 때문에 나는 모른다./ – luigi7up

    +0

    네, 이것은 일반적인 해결책입니다. 동일한 개념을 사용하는 레일 가이드의 경우 http://guides.rubyonrails.org/association_basics.html#polymorphic-associations을 볼 수 있습니다. 필요한 로직 때문에 자주 사용되지는 않겠지 만, 당신이 설명한 것처럼 당신이 이것을 할 수있는 방법입니다. 비록 당신이 그것을 제어 할 수 있다면, 다형성 연관이 필요 없다는 요구 사항을 변경하는 것을 고려할 것을 권한다. – Zaki

    1

    enter image description here