繁体   English   中英

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

[英]single table inheritance (with Ebean + Play! framework)

我正在使用single table inheritance的概念,因为当然是OOP考虑因素。
例如, PostLikeTopicLike继承自Like类。
我发现这种方法存在两个问题:

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

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

如果你只有一个表而不是两个,那么读取会更快,因为你会避免“连接”。 但是你会使用更多空间,因为你会有一个额外的“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”项,您将拥有NULL“主题”值。

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

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

而AFAIK, ebean只支持 “单表继承”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM