单表继承(使用Ebean + Play!框架)

soc*_*ket 5 java database-design jpa ebean playframework-2.0

我当然正在使用single table inheritanceOOP考虑因素的概念.
例如,PostLikeTopicLikeLike类继承.
我发现这种方法存在两个问题:

  1. 而不是两个表(PostLike和TopicLike),我得到了喜欢的"一大桌子".
  2. 这个表有一个名为dtype的额外列,它可以识别记录(即类似的类型).从长远来看,它可能是磁盘空间的巨大浪费.不是吗?

我不是数据库专家,因此我想了解这个数据库设计的见解以及这两个问题是否至关重要.

nde*_*rge 7

如果你只有一个表而不是两个,那么读取会更快,因为你会避免"连接".但是你会使用更多空间,因为你会有一个额外的"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;
}
Run Code Online (Sandbox Code Playgroud)

你会得到表格Like:

----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post  |  1 |   a |  NULL |   p1 |
|topic |  2 |   b |    t1 | NULL |
----------------------------------
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,对于"PostLike"项,您将拥有NULL"主题"值.

但是现在,磁盘空间如果不是真正的问题.

我看到单表继承的唯一缺陷是,如果你有很多属性,列数可能很大,并且在模型中添加新属性/列更难(如果你必须应用数据库演变) .

而AFAIK,ebean只支持 "单表继承".