2010-07-05 4 views
11

동물이라 불리는 클래스가 있다면 개와 물고기가 서브 클래스입니다. 동물에는 '색'이라는 속성이 있습니다. 개에는 꼬리 길이라는 특성이 있으며 물고기에는이 특성이 없습니다. 물고기에는 "weight"라는 속성이 있습니다. 개에는이 속성이 없습니다.수퍼 클래스, 하위 클래스 관계를 데이터베이스에 구현하는 방법은 무엇입니까?

그래서이 정보를 저장할 데이터베이스를 설계하고 싶습니다. 어떻게해야합니까? 여기에 몇 가지 아이디어가 있습니다 :

아이디어 1 : 동물 표를 만들고 테이블에 유형이 있는지, 어떤 종류의 동물인지, 개가 아니면 개 표에서 결과를 얻으십시오.

동물 : 색상 : 문자열 유형 : int로

유형 : 개 : 0 물고기 : 1

개 : TailLength가 : int로

생선 : 무게 :

를 int로

아이디어 2 : 개 테이블과 피쉬 테이블 만 데이터베이스에 저장하고 동물 t 할 수 있는.

개 : 색상 : 문자열 TailLength : int로

물고기 : 색상 : 문자열 무게 :이처럼 시도 할 수

답변

12

두 가지 방법은 당신이 언급 한 :

  • 전체 상속 계층에있는 개체를 나타내는 하나의 테이블. 전체 계층 구조에 필요한 모든 열과 특정 개체가 어떤 하위 클래스인지 알려주는 "형식"열이 있습니다.
  • 복제 스키마가있는 상속 계층 구조에 각각 콘크리트 클래스에 대해 하나의 테이블이 있습니다.

이 다른 두 사람에 의해 보충 될 수 :

은 상속 계층 구조의 각 클래스에 대한
  • 한 테이블 - 당신은 지금 동물 테이블을 가지고 있고, 서브 클래스는 일반적인 가리 외래 키와 테이블이 데이터 세트는 동물입니다.
  • 일반 스키마 - 개체를 저장할 테이블이 있고 해당 개체에 연결된 모든 특성 집합을 지원하는 특성 테이블이 있습니다.

각 접근법에는 장단점이 있습니다.

는 또한 이러한 SO 주제를 살펴 :

, 그들이 거의 없습니다하지만,이 객체 지향 데이터베이스 데이터베이스에 더 자연스럽게 객체를 나타냅니다 거기은, 쉽게이 문제를 해결할 수 있음을 주목해야한다 업계에서 자주 사용됩니다.

+0

: 여기 관계형 DB를 비교하여 그들이 당신에게이 문제에 완전히 목적 (ㅎ)보기를 제공하지 않지만, 이러한 데시벨을 설명하는 몇 가지 링크가 있습니다 마지막 1 번째 링크가 삭제됩니다. – philipxy

0

: INT

Animal 
    PK animal_id 
    FK animal_type 
    STRING animal_name (eg. 'Lassie') 

AnimalTypes 
    PK animal_type 
    STRING animal_type_name (eg. 'Dog') 

AnimalAttributes 
    PK attribute_id 
    STRING attribute_name (eg. 'tail length') 

AnimalToAttributes 
    PK id 
    FK animal_id 
    FK attribute_id 
    INTEGER value (eg. 20) 

당신이 할 수있는이 방법을 동물마다 하나 또는 여러 개의 속성이 있습니다 (선택할 수있는 것은 사용자의 몫입니다).

0

사용을 한 당신이 참고로 관계 제로에 또는 1, 데이터베이스 스키마 디자인 언어에서 테이블이라고 클래스 - 서브 클래스 또는 슈퍼 클래스

Create Table Animal 
    (animalId Integer Primary Key Not null, 
    Other columns generic to all animals) 

    Create Table Birds 
    (BirdId Integer Primary Key Not Null 
    references Animal(AnimalId), 
    -- other columns) 
관련 문제