在完全规范化的关系数据库中存储图形

Tim*_*Tim 13 language-agnostic database-design graph relational-database data-structures

目标

找到一个完美,灵活的模式,用于存储许多不同类型的对象,关系数据库中它们之间具有各种各样的链接.


问题

EAV是RDBMS正常限制的一种解决方法.

如果你要规范化EAV架构,那将是丑陋的.


理念

如果EAV正常化,那将是丑陋的.

我们传统上手工维护这些架构的事实是否限制了它们的复杂性和功能?

但如果以编程方式维护和查询,那有什么关系呢?


图表

如果nn不同的表中有不同的实体,为什么不让代码生成n(n+1)/2链接表以及它们之间的查询?这不会导致规范化架构中的真实图形吗?

在高度相互关联的数据库中,总是会有比指数更多的边缘.为什么不专注于创建正确的标准化Verticle(n实体表)并让我们的代码保持边缘(n^x链接表)?


结论

系统能否规范化EAV并维护最终的复杂模式?

复杂的图形可以存储在(并保持真实)关系数据库中吗?

我确信之前已经完成了,但我从未见过它.我错过了什么?


示例问题

存储印刷品及其书目数据

  • 许多属性可能不仅仅是字符串而是整个对象.
  • 在库世界中,没有简单(和关系)模式可以在没有极其复杂的模式的情况下"无损地"存储数据.
  • 许多不同类型的关联和关联对象
    • 及其相关属性(可能会有很大差异).
    • 他们之间有许多不同类型的关系.

问题

" 你想解决什么问题? " -
皮特

我正在寻找关系数据库系统中EAV,图形和多态关系的规范化解决方案.

" 我不愿意成为那些在投入生产后必须理解或维护它的人. " -
安德鲁

这种"传统维护"正是我所说的应该是自动化的.这不是很大的咕噜声吗?

Per*_*DBA 5

由于您正在编辑问题,因此必须处于活动状态.

是的,为了您描述的目的和用途,有更好的方法来设计它.

第一个问题是EAV,通常执行得非常糟糕.更准确地说,EAV人群,因此文献质量不高,标准不能保持,因此关系数据库的基本完整性和质量丢失了.这导致了许多记录良好的问题.

你应该考虑适当的学术派生的替代方案.这保留了完整的关系完整性和功能.它被称为第六范式.EAV实际上是6NF的一个子集,没有完全理解; 更常见的6NF再现.

正确实现6NF特别快,因为它存储列而不是行.因此,您可以以这种方式映射数据(图形系列,数据点),以便获得平坦的高速,而不管用于访问图形的向量.(您可以将重复消除到比5NF更高的顺序,但这是高级用法.)

"高度相互关联"根本不是问题.这就是关系数据库的本质.这里需要注意的是,它必须是真正的标准化,而不是一堆不连贯的平面文件.

自动化或代码生成不是问题.当然,如果您需要质量和可维护性,则需要扩展SQL目录,并确保它是表驱动的.

我对这些问题的回答提供了对该主题的全面处理.由于提出了背景和论点,最后一个特别长.
EAV-6NF答案一个
EAV-6NF答案两个
EAV-6NF答案三

这个也是值得的:与
架构相关的问题