0

我们围绕我们的业务模型设计了我们的数据库,每种业务类型都有一个表。但是,由于为几种相似类型设置单独的表会导致性能问题,因此我正在考虑将几个相关表扁平化为一个带有鉴别器列的表,以识别每行的实际子类型。

我们的标准化模型的问题:

  • 其他几个核心表具有对这些子类型之一的多态引用,需要联合查找以确定哪个表包含其引用的对象
  • 在这些子类型的联合中搜索和索引是一种常见的操作,效率低下
  • 语义相同的列在多个表中重复

由于我们使用的是 Hibernate 和 JPA,多态连接很困难,我们不能使用视图。

扁平化的缺点:

  • 我们的代码现在负责这些子类型的引用类型完整性,而不是在数据库中设置外键限制
  • 对于与该类型无关的列,每一行都有空值
  • 向任何子类型添加一列需要向整个表添加一列
  • 特定于一种子类型的列不能标记为非空

这个相关的 SO question建议保持规范化设计,但在他们的情况下,子类型仅共享 100 列中的 10 列。我们的扁平表总共包含 15 列:11 列由每个子类型共享,另外 4 列由多种类型(但不是全部)共享。

这是扁平化有意义的场景吗?

4

0 回答 0