如果您只有一个表而不是两个表,读取速度会更快,因为您将避免“连接”。 但是,您将使用更多空间,因为您将有一个额外的“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 |
----------------------------------
正如你所看到的,对于“类柱”的项目,你将有一个NULL“主题”值。
但是时下,磁盘空间如果不是真正的问题。
我发现的单表继承的唯一缺陷是,如果您有很多属性,那么这些列的数量可能会很大,并且在模型中添加新的属性/列更加困难(如果您必须应用数据库演变)。
和AFAIK,ebean only supports“单表继承”。
Martin Fowler建议STI通过CTI。当TB级驱动器花费60美元时,您不应该担心单个smallint或tinyint域的空间需求。 –
你可以发布一个链接到Martin Fowler recomendation,@NeilMcGuigan? – KirdApe
@KirdApe找不到链接,但我记得读过Fowler先生的一篇文章,指出他推荐STI作为最佳首选,尤其是对于敏捷开发。他并不是说CTI不好,只是它更复杂,速度更慢。 –