2011-04-18 5 views
1

다른 필드가있는 여러 유형의 사용자 (예 : 차용자, 대금업자, 스폰서 등)가있는 피어링 대출 신청서를 작성 중입니다. 또한, 이러한 사용자 중 일부는 두 가지에 속할 수 있습니다 (즉, 대금업자가 스폰서가 될 수도 있음). 이 경우 단일 테이블 상속이 좋은 아이디어입니까? 그렇다면 한 사용자가 하나의 "유형"필드가있는 두 그룹에 속할 수 있습니까? STI가 갈 길이 없다면 어떻게해야할까요? 결국, 다른 테이블을 사용하면 동일한 정보를 여러 데이터베이스에 저장해야하는데, 이는 효율적으로 보이지 않습니다.레일 3 사용자 데이터베이스 설계 문제 - 단일 테이블 상속 또는?

미리 도움 주셔서 감사합니다 !!

답변

1

각 사용자의 역할이 임대/거래 유형에 따라 결정된다고 생각하는 것이 안전하다고 생각합니다. 즉, D1과 두 명의 사용자가 U1U2 인 경우 U1이 스폰서인지 차용인지를 정의하는 거래입니다.

내가 제안하는 것은 사용자 계층을 STI로두고 다른 클래스, 예를 들어 DealUserRole (Deal, User, Role)을 도입하는 것입니다.

0

내가 작업 한 보석 (시민) - http://peterhamilton.github.com/citier을 사용하여 상속을 진행할 수 있습니다. 아직 개발 중이지만 현재 정상적으로 작동 중입니다. 서로 다른 클래스에 많은 고유 필드가있는 경우 STI보다 훨씬 좋음 STI는 Null로 남겨 둡니다. Plus MTI는 나중에 더 많은 확장이 가능합니다. 나는 또한 당신에게 사용자를위한 역할을 소개 할 필요가 있다는 것에 동의한다. 하지만 나는 이것을 사용하여 부모 (User 클래스)에 링크 할 수 있으므로 모든 하위 유형의 사용자에게 적용될 수 있다고 생각합니다.

class User < ActiveRecord::Base 
    has_many :roles 
end 

class Role < ActiveRecord::Base 
    acts_as_citier 
    has_many :users 
end 

class Borrower < Role 
    acts_as_citier 
    #Other borrower stuff 
end 

class Lender < Role 
    acts_as_citier 
    #Other lender stuff 
end 

관련 문제