我正在使用single table inheritance
的概念,因为当然是OOP考虑因素
例如,PostLike
和TopicLike
继承自Like
类
我发现这种方法存在两个问题:
我不是数据库专家,因此我想了解这个数据库设计的见解以及这两个问题是否至关重要。
答案 0 :(得分: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;
}
您将获得表格Like
:
----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post | 1 | a | NULL | p1 |
|topic | 2 | b | t1 | NULL |
----------------------------------
正如您所看到的,对于“PostLike”项目,您将拥有NULL“主题”值。
但是现在,磁盘空间如果不是真正的问题。
我看到单表继承的唯一缺陷是,如果你有很多属性,列数可能很大,并且在模型中添加新属性/列更难(如果你必须应用一个数据库演变)。
和AFAIK,ebean only supports“单表继承”。