database-design - 类表继承与非规范化

标签 database-design relational-database specialization

我正在尝试对特化/泛化建模,倾向于使用类表继承(请参阅 this answer )。

但是,我的同事有维护和性能方面的问题,因为同一张 table 会有很多(50 多个)重叠的特化。他的建议是创建一个包含以下列的表:

  • 引用总表
  • 对维护特化类型的表的引用
  • 对维护属性值的表的引用

  • 这样,所有属性都保存在一个表中,并且可以通过特化列进行过滤。我不知道这个设计叫什么,但我担心它与 EAV 有某种关系...

    我最关心的是 modification anomalies ,但除此之外,我没有看到任何理由这是一个坏主意。一种解决方案是否明显优于另一种,还是我们应该只选择一个然后继续?

    最佳答案

    在设计表格时,我通常会考虑一件事:使用。

    我将如何在那里写入数据以及如何查询回来。我将设计偏向于读取或写入,基于哪个对性能更重要,重复程度等。

    你的问题并没有真正解释你的用法,所以我在这里回答中的所有建议都是完全的推测。如果每天插入 20k 行,设计将与每天插入 5 行不同。此外,如果您需要每天对任何类型的任何列运行 20k 次搜索,或者每天运行 5 次。这些会影响您设置表格的方式。

    话虽如此,一般的方法可能是做这样的事情:

    50 多个重叠的专业表将是编写查询的噩梦。我会尝试提出 1 个主要的通用表,也许还有 5 个左右的其他通用表,您可能会在其中稍微涉足“单表继承”(其中您可能有几列不适用于每种类型,但包括在内)您涵盖了尽可能多类型的尽可能多的列)。从那里用类似 EAV 的方法覆盖剩余的列。

    关于database-design - 类表继承与非规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2623719/

    相关文章:

    php - 如何根据所选选项存储不同类型的数据

    c++ - 省略基于模板参数的类模板方法

    c++ - 以模板类作为参数专门化模板结构

    database - 考虑部分依赖信息的关系数据库设计?

    sql - 如何在 postgresql 中存储和搜索连字符/非连字符的 url 名称?

    php - "Conditional"根据字段值加入?

    c++ - 在派生类中调用 sizeof(*this)

    具有任务依赖性的任务管理器应用程序的 MySQL 表结构

    mysql - 设计漫画可以有多个章节的数据库

    mysql - 合并数据库记录的推荐技术