update translation for network model, suggested by @Zhayhp

This commit is contained in:
Gang Yin 2021-12-22 15:22:52 +08:00
parent 4b2bdd08b9
commit 076fd93b1c

20
ch2.md
View File

@ -39,7 +39,7 @@
当时的其他数据库迫使应用程序开发人员必须考虑数据库内部的数据表示形式。关系模型致力于将上述实现细节隐藏在更简洁的接口之后。
多年来在数据存储和查询方面存在着许多相互竞争的方法。在20世纪70年代和80年代初络模型和分层模型曾是主要的选择,但关系模型随后占据了主导地位。对象数据库在20世纪80年代末和90年代初来了又去。XML数据库在二十一世纪初出现但只有小众采用过。关系模型的每个竞争者都在其时代产生了大量的炒作但从来没有持续【2】。
多年来在数据存储和查询方面存在着许多相互竞争的方法。在20世纪70年代和80年代初状模型network model和分层模型hierarchical model曾是主要的选择但关系模型relational model随后占据了主导地位。对象数据库在20世纪80年代末和90年代初来了又去。XML数据库在二十一世纪初出现但只有小众采用过。关系模型的每个竞争者都在其时代产生了大量的炒作但从来没有持续【2】。
随着电脑越来越强大和互联,它们开始用于日益多样化的目的。关系数据库非常成功地被推广到业务数据处理的原始范围之外更为广泛的用例上。你今天在网上看到的大部分内容依旧是由关系数据库来提供支持,无论是在线发布,讨论,社交网络,电子商务,游戏,软件即服务生产力应用程序等等内容。
@ -182,23 +182,23 @@ IMS的设计中使用了一个相当简单的数据模型称为**层次模型
同文档数据库一样IMS能良好处理一对多的关系但是很难应对多对多的关系并且不支持连接。开发人员必须决定是否复制非规范化数据或手动解决从一个记录到另一个记录的引用。这些二十世纪六七十年代的问题与现在开发人员遇到的文档数据库问题非常相似【15】。
那时人们提出了各种不同的解决方案来解决层次模型的局限性。其中最突出的两个是**关系模型relational model**它变成了SQL统治了世界和**网络模型network model**最初很受关注但最终变得冷门。这两个阵营之间的“大辩论”在70年代持续了很久时间【2】。
那时人们提出了各种不同的解决方案来解决层次模型的局限性。其中最突出的两个是**关系模型**relational model它变成了SQL并统治了世界和**网状模型**network model最初很受关注但最终变得冷门。这两个阵营之间的“大辩论”在70年代持续了很久时间【2】。
那两个模式解决的问题与当前的问题相关,因此值得简要回顾一下那场辩论。
#### 网模型
#### 网模型
模型由一个称为数据系统语言会议CODASYL的委员会进行了标准化并被数个不同的数据库厂商实现它也被称为CODASYL模型【16】。
模型由一个称为数据系统语言会议CODASYL的委员会进行了标准化并被数个不同的数据库厂商实现它也被称为CODASYL模型【16】。
CODASYL模型是层次模型的推广。在层次模型的树结构中每条记录只有一个父节点在网络模式中每条记录可能有多个父节点。例如“Greater Seattle Area”地区可能是一条记录每个居住在该地区的用户都可以与之相关联。这允许对多对一和多对多的关系进行建模。
模型中记录之间的链接不是外键,而更像编程语言中的指针(同时仍然存储在磁盘上)。访问记录的唯一方法是跟随从根记录起沿这些链路所形成的路径。这被称为**访问路径access path**。
模型中记录之间的链接不是外键,而更像编程语言中的指针(同时仍然存储在磁盘上)。访问记录的唯一方法是跟随从根记录起沿这些链路所形成的路径。这被称为**访问路径access path**。
最简单的情况下,访问路径类似遍历链表:从列表头开始,每次查看一条记录,直到找到所需的记录。但在多对多关系的情况中,数条不同的路径可以到达相同的记录,网模型的程序员必须跟踪这些不同的访问路径。
最简单的情况下,访问路径类似遍历链表:从列表头开始,每次查看一条记录,直到找到所需的记录。但在多对多关系的情况中,数条不同的路径可以到达相同的记录,网模型的程序员必须跟踪这些不同的访问路径。
CODASYL中的查询是通过利用遍历记录列和跟随访问路径表在数据库中移动游标来执行的。如果记录有多个父结点即多个来自其他记录的传入指针则应用程序代码必须跟踪所有的各种关系。甚至CODASYL委员会成员也承认这就像在n维数据空间中进行导航【17】。
尽管手动选择访问路径够能最有效地利用20世纪70年代非常有限的硬件功能如磁带驱动器其搜索速度非常慢但这使得查询和更新数据库的代码变得复杂不灵活。无论是分层还是网模型,如果你没有所需数据的路径,就会陷入困境。你可以改变访问路径,但是必须浏览大量手写数据库查询代码,并重写来处理新的访问路径。更改应用程序的数据模型是很难的。
尽管手动选择访问路径够能最有效地利用20世纪70年代非常有限的硬件功能如磁带驱动器其搜索速度非常慢但这使得查询和更新数据库的代码变得复杂不灵活。无论是分层还是网模型,如果你没有所需数据的路径,就会陷入困境。你可以改变访问路径,但是必须浏览大量手写数据库查询代码,并重写来处理新的访问路径。更改应用程序的数据模型是很难的。
#### 关系模型
@ -240,7 +240,7 @@ CODASYL中的查询是通过利用遍历记录列和跟随访问路径表在数
大多数文档数据库以及关系数据库中的JSON支持都不会强制文档中的数据采用何种模式。关系数据库的XML支持通常带有可选的模式验证。没有模式意味着可以将任意的键和值添加到文档中并且当读取时客户端对无法保证文档可能包含的字段。
文档数据库有时称为**无模式schemaless**但这具有误导性因为读取数据的代码通常假定某种结构——即存在隐式模式但不由数据库强制执行【20】。一个更精确的术语是**读时模式schema-on-read**数据的结构是隐含的,只有在数据被读取时才被解释),相应的是**写时模式schema-on-write**传统的关系数据库方法中模式明确且数据库确保所有的数据都符合其模式【21】。
文档数据库有时称为**无模式schemaless**但这具有误导性因为读取数据的代码通常假定某种结构——即存在隐式模式但不由数据库强制执行【20】。一个更精确的术语是**读时模式**即schema-on-read数据的结构是隐含的,只有在数据被读取时才被解释),相应的是**写时模式**即schema-on-write传统的关系数据库方法中模式明确且数据库确保所有的数据都符合其模式【21】。
读时模式类似于编程语言中的动态运行时类型检查而写时模式类似于静态编译时类型检查。就像静态和动态类型检查的相对优点具有很大的争议性一样【22】数据库中模式的强制性是一个具有争议的话题一般来说没有正确或错误的答案。
@ -821,9 +821,9 @@ SELECT ?personName WHERE {
SPARQL是一种很好的查询语言——哪怕语义网从未实现它仍然可以成为一种应用程序内部使用的强大工具。
> #### 图形数据库与网模型相比较
> #### 图形数据库与网模型相比较
>
> 在“[文档数据库是否在重蹈覆辙?](#文档数据库是否在重蹈覆辙?)”中我们讨论了CODASYL和关系模型如何竞相解决IMS中的多对多关系问题。乍一看CODASYL的网模型看起来与图模型相似。CODASYL是否是图形数据库的第二个变种
> 在“[文档数据库是否在重蹈覆辙?](#文档数据库是否在重蹈覆辙?)”中我们讨论了CODASYL和关系模型如何竞相解决IMS中的多对多关系问题。乍一看CODASYL的网模型看起来与图模型相似。CODASYL是否是图形数据库的第二个变种
>
> 不,他们在几个重要方面有所不同:
>