关系数据库经常用于存储各种风格的图(树、有向图、无向图……)。
那么为什么没有一个主要的 DBMS(Microsoft、MySql、Oracle、PostgreSQL、SqlLite,仅举几个字母顺序)包含将关系视为图形的库支持?
一些理想的功能,例如:
- 约束检查(连通性、非循环性、平面性……)
- 常用功能(最短路径、最小生成树、传递闭包、最大流/最小割、团检测、哈密顿/欧拉循环......)
- 提高上述任何一项的性能所需的辅助数据结构
在数据库之外建立对其中一些事物的支持很复杂,因为(除其他原因外):
- 它本质上很复杂(图书馆在这里提供帮助)
- 大量数据通常支持简短的答案:运行最短路径算法的外部客户端需要与数据库非常“健谈”,或者需要检索比需要的数据量大得多的数据;任何一种选择都对网络不利
- 当完整性依赖于图论约束时保持完整性需要访问所有建议的更新,因此需要一个触发器,并且在许多系统中从触发器访问现有图形库很复杂
- DBMS 存储管理器和优化器具有独特的定位,可以解决辅助数据结构的问题,就像它们处理索引一样
这不是一个修辞问题,我实际上想知道是否有有趣的技术(或历史)原因。