出于面向对象编程的考虑,我正在使用单表继承
的概念。
例如,PostLike
和TopicLike
都是从Like
类继承而来。
我认为这种方法存在两个问题:
- 与其说有两个表(PostLike和TopicLike),不如说只有一个包含所有点赞信息的“大表”。
- 该表还有一个额外的列称为dtype,用于记录标识(即点赞类型)。从长远来看,这可能会造成巨大的磁盘空间浪费。不是吗?
我不是数据库专家,因此我想听听您对这种数据库设计以及这两个问题是否至关重要的见解。
出于面向对象编程的考虑,我正在使用单表继承
的概念。
例如,PostLike
和TopicLike
都是从Like
类继承而来。
我认为这种方法存在两个问题:
我不是数据库专家,因此我想听听您对这种数据库设计以及这两个问题是否至关重要的见解。
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的“topic”值。
但是现在,磁盘空间不是真正的问题。
我唯一看到单表继承的缺点就是如果您有很多属性,则列数可能会非常大,并且难以向模型中添加新的属性/列(如果您必须应用数据库演进)。
据我所知,ebean仅支持“单表继承”。