2013-05-20 1 views
3

많은 종류의 "요청"이있는 응용 프로그램을 설계하고 있습니다. 요청은 서로 매우 유사한 성격으로 처리되지만 서로 다른 데이터를 포함합니다.다른 속성을 가진 유사한 모델의 레일 데이터베이스 디자인

그들은 각각 약 1/3 정보의 같은 날짜, 사용자 정보 요청

그러나 다른 종류의 완전히 다른 정보를 등이 있고, 요청이 데이터베이스에 약 30 열을 가질 수 있습니다.

즉.

Form A 
Date Submitted 
User 
Email 
Provider 
Attribute A 
Attribute B 
Attribute C 
Attribute D 

Form A 
Date Submitted 
User 
Email 
Provider 
Attribute E 
Attribute F 
Attribute G 
Attribute H 

나는 결국 약 40 모델을 가지고, 그래서 별도의 테이블을 가지고 싶지 않아.

이것을 표현하는 가장 좋은 방법은 프로그램 및 양식의 레이아웃을 완전히 제어해야합니다.

이전에 HStore (포스트그레스 포함)를 사용하여이 작업을 수행했으며 다른 제안 사항이 있는지 궁금해하고있었습니다.

[EDIT] 동일한 속성을 건너 모델

예 :

:company_name,:contact_person,:physical_address,:contact_email,:contact_phone 

예 폼 A : B 형의

:mobile_current_provider,:num_mobile_connections,:num_smartphones,:operating_system,:num_high_voice_users 

:kw_per_month, :weekend_power, :three_phase_power, :seasonal_difference 

대부분의 f ields는 문자열 또는 정수 (소수 부울 포함)이지만 모두 문자열로 강제 변환 될 수 있습니다. 데이터의 대부분은 단순히 검색 및 계산 등

당신이
class A < C 

class B < C 

class C < ActiveRecord::Base 

을 STI

을 사용할 수 있도록 여러 테이블을하지 않으
+0

속성의 몇 가지 예가 도움이됩니다. –

+0

편집을 참조하십시오. 감사합니다. – JamesWatling

답변

1

추가 된 속성 예를 읽은 후에 다른 모델에 속하는 것이 더 좋습니다.

내 제안은 두 개 더 액티브 모델을 만드는 것입니다 : MobileUsageElectricityUsage

class User < ActiveRecords::Base 
    has_one :mobile_usage 
    has_one :electricity_usage 
end 

class MobileUsage < ActiveRecords::Base 
    belongs_to :user 
end 

class Electricity < ActiveRecords::Base 
    belongs_to :user 
end 

장점 :

  • 더 나은 조직. 모바일은 모바일 사용에 속하며 전기 요금은 전기 사용량에 속합니다.
  • 사용자에게 null 데이터가 없습니다. 하나의 모델 사용자에 모든 속성을 넣으면 일부 사용자는 전기가없는 모바일 정보가 많으며 그 반대의 경우도 있습니다. 그러면 테이블에 많은 양의 null 데이터가 남게됩니다.

그런 다음 양식 A의 경우 모바일 사용 속성을 중첩 된 양식으로로드 할 수 있습니다. 사용자의 속성은 사용자에게 저장되고 모바일 정보는 참조와 함께 모바일에 저장됩니다. B 형은 비슷합니다.

분리하면 처음에는 기본 정보를 입력 한 다음 나중에 세부 정보를 입력하도록 허용 할 수도 있습니다.

+0

이 예제에서는 문제가 없지만 이들 중 ~ 50 개가 있으며 선택 사항이며 별도의 개체로 처리해야합니다. – JamesWatling

+0

@JamesWatling, 특성이 많을수록 별도로 분리해야하는 필요성 모델링하고 구성하십시오. –

0

그리고에 사용되는 공통의 필드가 아닌, 표시하는 데 사용됩니다 C 테이블에는 모든 열, 공유 된 것, A 필드 및 B 필드가 있습니다.

+0

이것은 나쁜 생각이며, 왜 웹 전체에서 죽을까요? 나는 이것이 빠른 검색으로 왜 그렇게되는지 조사 할 것을 제안합니다. 나는이 주제를 잠시 동안 연구 해왔다. 결론은 모델이 유사하지만 공통된 속성이 거의 없다면 단지 자신 만의 테이블과 모델로 만드는 것 같다. –