문제

물론 OOP 고려 사항 때문에 single table inheritance의 개념을 사용하고 있습니다.
예를 들어, PostLikeTopicLikeLike 클래스에서 상속합니다.
이 방법론에 두 가지 문제가 있습니다.

  1. 두 개의 테이블 대신 (Postike and Topiclike) 나는 "하나의 큰 테이블"을 좋아합니다.
  2. 이 테이블은 레코드 식별 (즉, LiKe 유형)을 가능하게하는 dtype 이라는 추가 열을 갖는다.장기적으로 디스크 공간의 거대한 폐기물 가 될 수 있습니다.그렇지 않니?

    나는 DB 전문가가 아니며,이 데이터베이스 디자인에 대한 통찰력을 얻고 싶었고 그 두 가지 문제가 중요한지 여부에 관계없이.

도움이 되었습니까?

해결책

두 대신 테이블이 하나만있는 경우 "조인"을 피하기 때문에 읽기가 빨라집니다. 그러나 추가 "dtype"열이 있고 빈 열이 있기 때문에 더 많은 공간을 사용할 수 있습니다.

예제를 참조하십시오.여기에 모델이 있습니다 (JPA 주석이없는) :

public abstract class Like {
    public Long id;

    public String foo;
}

public class PostLike extends Like {

    public String post;
}


public class TopicLike extends Like {

    public String topic;
}
.

테이블 Like를 가져옵니다.

----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post  |  1 |   a |  NULL |   p1 |
|topic |  2 |   b |    t1 | NULL |
----------------------------------
.

및 "Postlike"항목에 대해 볼 수 있듯이 "주제"값이 있습니다.

그러나 요즘, 실제 문제가 아닌 경우 디스크 공간.

단일 테이블 상속으로 표시되는 유일한 결함은 많은 속성이 많으면 거대 할 수있는 열 수이며 모델에 새 속성 / 열을 추가하는 것이 더 어렵습니다 (응용 프로그램을 적용 해야하는 경우DB 진화).

및 afaik, Ebean은 "단일 테이블 상속"을 지원합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top