2010-12-15 2 views
1

저는 최근에 Rails 애플리케이션을 상속 받았으며 앞으로 나아갈 아키텍처 결정에 대한 토론을하고 있습니다. 여기에 약간의 배경이 있습니다 ... 의견 감사합니다.레일 : 단일 테이블이이 문제의 좋은 선택입니까?

모두 16 개의 서로 다른 광고 유형이 있습니다. 모두 동일한 속성 집합이며, 하나 또는 두 개의 추가 속성이 있으며, 세 개 또는 네 개의 조합이 있습니다.

현재 각 광고 유형에는 각각의 열과 별도의 모델 및 테이블이 있으며 기본 CRUD에도 사용되는 별도의 컨트롤러와 뷰가 CMS에 있습니다. CMS는 inherited_resources를 사용하므로 일부 복제가 제한됩니다.

속성 세트를 썼습니다. 20 개 정도의 광고 유형이 모든 광고 유형에 적용됩니다. 특정 광고 유형에는 연관이 있습니다. 외래 키가 관련 테이블에 저장되어 있고 몇 개가 belongs_to 인 has_many 연관이 여러 개 있습니다.

광고에는 실제 동작이 없습니다. 특정 광고 유형은 다양한 페이지에 단순하게 표시되므로 특정 유형의 광고가 있는지를 판단 할 수있는 한 우리는 황금색입니다.

단일 모델, 테이블 및 컨트롤러로 이동하는 것에 대해 논쟁을 벌이고 있지만 가능한 한 많은 정보를 stackoverflow 커뮤니티에서 가져오고 싶습니다. 1) 문제에 적합합니까? 2) 성능 문제 3) 내가하지 못했던 잠재적 인 프로그래밍 병목 현상. 위치/: AD_TYPE/새 (예를 들어/홈페이지/ad_type_1/신규) :

ad_controller가 AD_TYPE 세트 @ad 만들 것 여기 내 생각


는 경로/가정 ... 지금까지입니다 params [: location] + params [: ad_type]에 추가하고 주어진 ad_type에 대해 적절한 부분을 표시하기위한 일련의 조건을 포함하는 새보기를 렌더링합니다. 제출하면 광고 유형에 대해 정의 된 예상 속성을 사용하여 광고를 작성하는 작성 작업이 실행됩니다.이 중 하나는 ad_type = homepage_ad_type_1입니다.

데이터 검색에 대해서는별로 생각하지 않았지만 ad_type 열이 올바르게 설정되었다고 가정하면 ad_type 열을 기반으로 레코드를 가져 오는 "of_type"범위를 만들 수 있어야합니다. 거기에 뭔가 빠졌는지 확실하지 않습니다.

유효성 검사는 ad_type 값에 따라 달라집니다.

주어진 시간에 얼마나 많은 광고가 존재하는지 확신 할 수 없지만 나중에 해결할 수 있다고 생각합니다. 부실 행의 일부를 ad_archives 테이블 또는 유사한 테이블로 이동하십시오.

귀하의 의견을 환영합니다. 감사.

+0

DB 디자인의 앱 세부 사항을 고려하면 APP에만 적합 할 수있는 DB로 연결됩니다. "5 월"은 앱이 어떻게 작동하기를 원하지만 데이터베이스가 최상의 결과를 제공하는지에 초점을 맞추지 않기 때문입니다. 하지만 거의 언제나 db가 개발자에 의해 개발 된 것을 보았을 때 다른 시스템/사람들이 같은 날짜에 도착해야만 제대로 작동합니다.사실상 개발자가 만든 다음 db로 추출됩니다. 당신이 몇 가지 멋진 스파게티를 가질 때까지 계속해서 ... 어떤 시스템 내에서도 안됩니다. 그러나 BETWEEN 시스템은 스파게티가 연결된 곳입니다. –

답변

1

아마 하나의 테이블 모델을 사용하고 싶지만, 여러 컨트롤러/뷰를 사용하는 것이 좋으면 하나의 컨트롤러로 제한 할 필요가 없으며 그 유형에 따라 광고를 계속 쿼리 할 수 ​​있습니다 조건문을 사용하지 않고. 예 :

create_table :people do |t| 
    t.string first_name 
    t.string last_name 
    # some other properties... 
    t.string type 
end 

class Student < Person 
end 

class Teacher < Person 
end 

Person.all # shows all students and teachers 
Teacher.all # shows all teachers 

따라서 교사 컨트롤러와 학생 컨트롤러뿐만 아니라 People 컨트롤러도 쉽게 만들 수 있습니다.

+0

하지만 이점이 있습니까? 왜 여러 컨트롤러/뷰가 필요합니까? 더 쉬운 쿼리를 위해 별도의 모델을 가지고있는 것을 볼 수 있습니다. –

+0

@ Eric M .: 귀하의 광고 유형마다보기가 다를 수 있습니다. 다른 컨트롤러를 사용하는 것이 가장 쉬운 방법입니다. 현재 특정 속성을 표시할지 여부를 결정하는 조건부가 있지만 시간이 지남에 따라 서로 다른 광고 유형에 차이가 있다면 어떻게됩니까? 컨트롤러와 뷰가 다르면이 시나리오를 더 잘 지원할 수 있으며 더 깨끗한 방법이라고 생각합니다. 그들은 공통점이있는 속성을 부분적으로 공유하고 필요에 따라 자체 필드를 추가 할 수 있습니다. – Samo

+0

나는 당신이 말하는 것을 이해하지만 코드 중복을 최소화하려는 목적을 저버리지는 않습니까? 조건부가 더러운 점이라면 뷰가 승락한다는 것에 동의합니다. –

관련 문제