2.2 关系和图:差异在哪里
到这里,我们已经提到了两种迥异的技术:关系型和图。当谈及关系型系统,我们指的是数据的组织方式更关注如何存储和检索真实世界的实体,例如人物、地点和事物。而谈及图系统的时候,我们指的是那些关注如何存储和检索关系的系统。这些关系代表了真实世界实体间的关系:人们认识他人,人们生活在什么地方,人们拥有事物,等等。
类似地,两个系统都可以呈现实体和关系,只是构建和优化的方向不同。
为你的应用选择关系型系统还是图系统不是一个非黑即白的选择;每个选项都有利有弊。选择关系型数据库还是图数据库通常都会触发关于存储需求、可扩展性、查询效率、易用性和可维护性的讨论。这个对话中的任何一个话题都值得讨论,我们旨在阐明那些更主观的标准:易用性和可维护性。
尽管关系型(relational)和关系(relationship)这两个词非常相似,但我们明确地使用它们来指代两种不同类型的技术。关系型(relational)指的是一种数据库,例如Oracle、MySQL、PostgreSQL或IBM Db2。这些系统是建立在特定的数学领域之上的,用于组织和推理数据,即关系代数。与其相反,我们只在图数据和图技术的上下文中使用关系(relationship)一词。这些系统建立在另一种数学理论之上,即图论。
在关系型技术和图技术之间做选择是很困难的,因为没办法在它们之间做功能对比。它们的差异可以追溯到奠定它们核心的数学理论的不同:关系型系统的关系代数,以及图系统的图论。也就是说,每种技术的适用性在很大程度上取决于这些理论及其相关思路对你的问题的适用性。
出于两个原因,我们会在接下来的章节里深入探讨关系型技术和图技术之间的差异。首先,大多数人对关系型思维已经很熟悉了,我们可以对比关系型思维介绍图思维。其次,我们希望能够回应那个无法回避的问题:“为什么不用关系型数据库?”在理解图技术的上下文中,探究这两个原因都很重要,因为关系型系统已经非常成熟并广泛应用了。
纵观全书,我们会使用数据来阐释概念、例子和新的术语。让我们从本章将要用的数据开始,来说明关系型概念和图概念之间的区别。你会在第3~5章中也看到这些数据。
可运行用例的数据
我们将会用表2-1中的数据来构建关系型数据模型和图数据模型。
表2-1:用以阐明概念、例子和术语的样本数据
对于第一个用例,数据描述了金融服务行业的几个客户的资产。这些客户可以共享账户和贷款,但是一张信用卡只能被一个客户使用。
让我们看几行数据。表2-1展示了5位客户的数据。在本章和第3~5章里,我们会建模这5位客户的数据,用以引入新的概念。
表2-1展示了五位不同客户的五条样本数据。其中一些客户共享了账户和贷款,用来展示在金融服务系统里常见的不同类型的客户。
例如,customer_0和customer_1,Michael和Maria代表了典型的亲子关系;Michael是家长,Maria是孩子。而customer_2 Rashika的数据,则代表了金融服务中的独立用户。在大型系统中,这类用户量最大,像Rashika这种用户的数据不和其他任何客户共享。最后,customer_3和customer_4(Jamie和Aaliyah)共享一个账户和贷款。这类数据通常代表这些用户是配偶关系,合并了他们的金融账户。
如果这就是你公司的样本数据,你会怎样和同事讨论这些数据的建模问题呢?在这个场景里,你可能在共享一个白板,或者其他绘图工具,并尝试绘制数据中的实体、属性和关系。无论用的是关系型系统还是图系统,你都可能会讨论出图2-1中的概念模型。
图2-1:观察表2-1中的数据之间的关系得到的概念性描述
我们可以从图2-1中找到四个主要实体:客户(customer)、账户(account)、贷款(loan)和信用卡(credit card)。这些实体都和客户有关系。客户可以有多个账户,这些账户也可以有不止一个客户。客户也可以有多个贷款,而贷款也可以有多个客户。最后,客户可以有多张信用卡,但是每张信用卡只能绑定一个客户。