2012-05-20 1 views
1

몇 가지 복잡한 데이터 관계가있는 Rail 3.2 앱을 제작하고 있습니다. 나는 데이터베이스를 구성하는 최선의 방법이 무엇인지 궁금하다.Rail 앱에서 양방향 다형성 관계의 단점은 무엇입니까?

내가 모델로하려는 데이터는 Facebook의 요소와 비교됩니다.

예를 들어, 사용자가 만들 수있는 항목이 있습니다 :

  • 의견
  • 사진
  • 게시물
  • 상태
  • 업데이트

이러한 각 항목 수 소속 :

  • 사용자
  • 비즈니스
  • 위치 그래서 예를 들면

는 "사용자 A는 파리에서 MacDonalds의에서 사진을 찍은".

각 사용자, 비즈니스 및 위치 페이지에 활동 스트림을 표시하려고합니다.

이렇게하는 방법은 양방향 다형성 관계가 있습니다.

class ActivityOwner 
    belongs_to :ownable, :polymorphic => true 
end 

class User | Business | Location 
    has_many :activity_owners, :as => :ownable 
end 

다음 activity_owner이 activity_feed 속한 것이며, activity_feed 많은 activity_owners있을 것 소유권

에 대한

class ActivityFeed 
    belongs_to :feedable, :polymorphic => true 
end 

class Comment | Photo | Status 
    has_many :activity_feeds, :as => :feedable 
end 

하나 : 활동에 대한

하나.

나는 그것이 의미가 있기를 바랍니다.

이 사례를 해결하는 좋은 방법입니까? 내가 생각해야 할 성능 문제가 있습니까? 더 좋은 방법이 있습니까?

다음과 같은 질문 :이 접근법을 사용하면 동일한 모델을 다양한 방식으로 다형성 관계에 매핑 할 수 있습니다. 예를 들어 사용자는 사진의 소유자가 될 수 있으며 태그가 지정된 사용자 일 수 있습니다.

나는 레일즈를 배우려고 노력하고 있는데, 나는이 문제에 대해 머리를 쓰려고 고심하고있다. 나는 다른 사람들의 의견, 경험, 아이디어뿐만 아니라 유용한 정보 나 가이드에 대한 조언을 정말 고맙게 생각한다.

감사합니다.

답변

0

http://blog.smartlogicsolutions.com/2008/06/13/ruby-on-rails-polymorphic-association-benchmarks/

는 오래 조금하지만 여전히 실제로 사용

더 큰 단점이 없다 통해 UR

+0

감사합니다. yuri,이 성능 수치를 아는 것이 정말 유용합니다. 내 관심사는 단순히이 테이블의 크기라고 생각합니다. 예를 들어 게시 된 모든 사진에는 ActivityOwner 테이블 (사용자, 회사, 위치)에 세 개의 레코드가 있습니다. 태그가 지정된 사용자 또는 좋아하는 사용자가 있거나 ...이 숫자가 더 커집니다. ActivityOwner 테이블은 빠르게 커지며 다형성 연결이 잘 수행되는 경우에도 여전히 약간의 오버 헤드가 있습니다. 그래서 더 좋은 방법이 있는지 궁금합니다. –

-1

재미있는 당신의 DB에서 바로 인덱스, 단지 적은 열을 사용하는 경우, 라이언에 의해 Polymorphic Association (revised)에서보세요 베이츠. 나는 그것이 당신이하려는 것을 완벽하게 접근 할 것이라고 생각합니다. 좋고 깨끗한 것

+0

안녕하세요, 저는 라이언이 철도 방송을 업데이트 한 것을 깨닫지 못했습니다. 기괴한 타이밍, 그것을 지적 해 주셔서 감사합니다. 제 질문은 정말로 다음 단계라고 생각합니다. 서로 다른 모델 (Ryan 사례 기사, 이벤트, 사진)을 단일 컬렉션에 결합하여 다른 소유자 모델에 표시 할 수있는 최상의 방법 –