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

标签 java database-design jpa playframework-2.0 ebean

我使用单表继承的概念当然是出于 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;
}

你会得到表格喜欢:

----------------------------------
|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/

相关文章:

java - 使用java将json数组放入hashmap

数据库设计结构|产品与产品 child

mysql - MongoDB 适合处理 SQL 类型的数据吗?

java - DB 列上的 Spring JPA 错误返回与列名称相关的错误

hibernate - 我将如何使用 JPA 在同一对象上映射父/子关系

java - Java Swing 中 MouseMotionListener 的适当方法是什么?

java - 是否可以使用整型变量/整型数组变量作为jFugue中的注释

java - 第三方 bundle 导入并使用系统 bundle 导出的任何版本的包

mysql - 什么 MySQL 表设计在性能上更好?

java - 分离实体和被管理实体