我使用单表继承
的概念当然是出于 OOP 的考虑。
例如,PostLike
和 TopicLike
继承自 Like
类。
我发现这种方法有两个问题:
- 我得到的不是两个表(PostLike 和 TopicLike),而是“一张大表”的点赞数。
- 此表有一个名为 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;
}
你会得到表格喜欢
:
----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post | 1 | a | NULL | p1 |
|topic | 2 | b | t1 | NULL |
----------------------------------
正如您所见,对于“PostLike”项目,您将拥有一个 NULL“主题”值。
但是现在,磁盘空间不是真正的问题。
我看到的单表继承的唯一缺陷是列数,如果你有很多属性,列数可能会很大,而且很难在你的模型中添加新的属性/列(如果你必须应用一个数据库演化)。
据我所知,ebean only supports “单表继承”。
关于java - 单表继承(使用 Ebean + Play! 框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661404/