数据模型
2004年2月12日
我早期最喜欢的书籍之一是 Tsichritzis 和 Lochovsky 的 关于数据模型的书籍。这本书讨论了不同的数据思考模型,特别是当时讨论最多的三种模型:关系数据模型、层次数据模型 和 网络数据模型。
如今,我很少看到人们讨论不同数据模型的优缺点。谈论数据模型的人往往是数据库人员,而且大多数人似乎认为这场竞争早已由关系模型获胜。
然而,我认为这从来就不是真的,而且情况越来越有趣。
毫无疑问,关系模型在数据库领域占据主导地位,如今我遇到的几乎所有商业应用程序都使用 SQL 数据库,这对于 99% 的用户来说已经足够接近关系模型了。但是,如果你看一下内存中的数据结构,你会看到一个不同的世界。在这里,网络模型占据主导地位。事实上,人们经常会付出巨大的努力将磁盘上的关系模型转换为内存中的网络模型(我认为,这是 贫血领域模型 如此流行的原因之一。)
我发现这很有趣。我一次又一次地问人们,为什么他们要费尽心思将关系转换为记录。我得到的答案几乎总是归结为同一件事——大多数开发人员发现网络模型比关系模型更容易处理。当然,情况并非总是如此,但我确实认为大多数人更喜欢记录。
这可能与以下事实有关:虽然 SQL 非常适合数据库,但我们没有等效的内存处理机制。关系式思考是我发现 ADO.NET 有趣的地方之一,然而,我再次看到许多人不想以关系式风格使用数据集。
另一个不断挑战当前数据模型格局的是 XML 的兴起。基于 XML 的技术,如 XPath 和 XQuery,提供了一种访问层次数据结构的标准方法。在许多方面,XML 提供这种数据的标准文本序列化仅仅是拥有这种查询和操作层次数据的标准方法的额外好处。
我认为,一项根本性的技术转变将导致进一步的数据模型变化。随着内存大小增长速度与价格下降速度一样快,我们正越来越多地达到大多数数据库可以完全保存在内存中的程度。将此与持久化更改机制结合起来,你就拥有了一种完全不同的数据库,它对执行所需的操作有着根本不同的假设。(参见 Prevayler 作为这种思维方式的一个例子。我不知道他们的性能数据有多有效,但即使相差几个数量级,仍然令人印象深刻。)
因此,也许现在是时候再次抛开那些关于哪些数据模型有意义的假设,并开始思考这些模型的一些基本原理了。我的感觉是,不同类型的数据适合不同的模型。关系模型非常适合表格数据,但如果你想存储 暴风雨,它就非常糟糕。因此,了解不同的数据模型、使用它们的技術以及哪些模型适合哪些类型的数据是有意义的。