知识卡片

数据库只是实现细节:区分重要的数据模型与不重要的数据库工具

普通读书笔记卡

内容

从系统架构角度看,数据库并不重要——它是实现细节,与整个系统架构的关系,就像门把手和整栋房屋架构的关系。这个比喻容易招致争议,关键要澄清的是:这里说的不是数据模型。为应用程序中的数据设计结构,对系统架构而言当然重要,但数据库不等于数据模型——数据库只是一款用来存取数据的软件工具,从架构视角看,工具通常是无关紧要的底层实现细节、达成目标的手段,优秀架构师不该让实现细节污染整个系统架构。以关系型数据库为例:它的基本原理由Edgar Codd在1970年定义,80年代中期已成为数据存储设计的主流,优雅、自律、稳健,是一种非常优秀的数据存储与访问技术——但不管它设计得多有智慧、多符合数学原理,它终究只是一种技术,一种实现细节。表模型把数据按行组织成表结构,对某类数据访问需求确实方便,但这本身没有系统架构意义上的重要性:应用程序的用例不该知道、也不该关心这么低层次的实现细节,需要了解表结构的代码理应被限制在系统架构最外圈、最低层的工具函数里。很多数据访问框架允许把数据行/数据表以对象形式在系统内部到处传递——这在架构上是彻头彻尾的错误,会让用例、业务逻辑甚至UI都和数据的关系模型绑在一起。

参考来源

- 位置:《架构整洁之道》第30章《数据库只是实现细节》引言"关系型数据库"(源文件:_epub-src/text/part0015_split_000.html) - 结论依据:原文用门把手与房屋架构的比喻说明数据库是实现细节,明确区分重要的数据模型与不重要的数据库软件本身,并指出把数据行/表以对象形式在系统内传递是架构上的错误,会导致用例、业务逻辑、UI都与数据关系模型绑定,直接支撑本卡片结论。 - 原始内容:从系统架构的角度来看,数据库并不重要——它只是一个实现细节……很多数据访问框架允许将数据行和数据表以对象的形式在系统内部传递。这么做在系统架构上来说是完全错误的,这会导致程序的用例、业务逻辑、甚至UI与数据的关系模型相互绑定在一起。