2010-04-12 4 views
8

클래스 테이블 상속 (this answer 참조)을 사용하여 전문화/일반화 모델을 만들려고합니다.클래스 테이블 상속 vs. 비정규 화

그러나 동일한 동료에 대해 50 개 이상의 중복되는 특수화가 있기 때문에 동료가 유지 관리 및 성능 문제가 있습니다. 그의 제안은 다음과 같은 열이있는 테이블을 작성하는 것입니다 : 일반 테이블

  • 참조
  • 참조 속성을 유지하는 테이블에 전문의 유형을 유지하는 테이블을 참조

그런 식으로 모든 속성은 하나의 테이블에서 관리되며 특수화 열을 사용하여 필터링 할 수 있습니다. 이 디자인이 무엇인지 모르겠지만 어떻게 든 관련이 있다고 생각합니다. EAV ...

내 관심사는 modification anomalies입니다. 그러나 그 외에도 어떤 이유가 있는지는 잘 모르겠습니다. 하나의 솔루션이 다른 솔루션보다 명확하게 우수합니까? 아니면 하나만 선택하고 계속 진행해야합니까?

답변

7

테이블을 디자인 할 때 나는 일반적으로 사용법 하나를 염두에두고 디자인합니다.

어떻게 데이터를 쓰고 어떻게 다시 쿼리 할 것입니까? 나는 성능, 반복성 등을 고려하여 디자인을 읽기 또는 쓰기로 편향시킨다.

귀하의 질문에 귀하의 사용법에 대한 설명이 없으므로 여기서의 모든 제안은 완전한 추론입니다. 하루에 20k 행을 삽입하면 하루에 5 개를 삽입하는 것과 디자인이 달라집니다. 또한 모든 유형의 열에서 하루에 20,000 건의 검색을 실행해야하거나 하루에 5 번을 실행해야하는 경우에도 마찬가지입니다. 이들은 테이블 설정 방법에 영향을 미칩니다. 그와

말했다 일반적인 접근 방식은 이런 식으로 뭔가를 할 수 있습니다 :

50+ 전문 테이블을 겹치는에 쿼리를 작성하는 악몽이 될 것입니다. 나는 1 개의 일반 테이블과 아마도 5 개의 다른 일반 테이블을 만들려고 할 것입니다. 여기서 "Single Table Inheritance"(각 테이블에 적용되지 않는 몇 개의 컬럼이있을 수 있지만 포함되어 있습니다. 가능한 많은 유형의 열을 다룹니다. 거기에서 EAV와 같은 접근 방식으로 나머지 열을 덮습니다.

+0

그냥 회의에서 돌아 왔는데 그 결과는 우리가 끝내었던 것과 매우 비슷합니다. 대부분의 특수화는 정보 용 이었으므로 일반 데이터 모델 접근 방식을 사용했습니다. 좋은 성능을 필요로하는 전문화/우리는 많은 쿼리를 계획했지만, 클래스 테이블 상속을 사용했습니다. 고마워, 훌륭한 답변! –

관련 문제