购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 关系型数据建模

从关系型思考到图思考的转变开始于数据建模。在这两种系统中理解数据建模从为什么图技术可能更合适开始。

对于任何数据库从业者来说,你可能已经见识过关系型系统中的数据模型可视化的方式。创建数据模型最常见的选择是使用统一建模语言(UML),或者实体关系图(ERD)。

在本节中,我们会使用表2-1中的样例数据来用ERD进行关系型数据建模的简单示范。本节提供了恰到好处的信息以示范从关系型思维到图思维转变的第一步。这并不是对关系型数据建模世界的完整介绍。关于更多关系型数据建模的细节,建议你参考经验丰富的C.Batini等人编写的书 [1] 。对于那些对第三范式已经很熟悉的人来说,你可以跳过下面一部分,直接翻到2.5节。

2.3.1 实体和属性

通常来说,数据建模技术通过描述数据中的实体和它们的属性来描述现实世界。这两个概念都有特定含义:

实体

实体指的是需要在数据库里记录的一个对象,比如一个人、地点或者事物。

属性

属性(attribute)指的是一个实体拥有的属性,例如,名称、日期或其他描述性特征。

传统的关系型数据建模从识别数据中的实体(人物、地点和事物)和它们的属性(姓名、标识符和描述)开始。实体可以是客户、银行账户或产品。属性就是人的姓名或者银行账户账号这类的概念。

我们从建模图2-1中的两个实体(客户和账户)开始这个数据建模练习。在关系型系统中,我们通常把实体视为表结构,如图2-2所示。

图2-2:建模应用里的数据的传统方式:识别实体和属性

图2-2展示了两个主要概念:实体和它们对应的属性。这张图里有两个实体:客户和账户。对于每个实体,都有一些属性来描述这个实体。客户可用唯一标识符、姓名、生日等来描述。账户也有其相应的描述性属性:唯一账户标识以及账户的创建日期。

在关系型数据库中,每个实体都会变成一张表。表中的行包含实体的实例数据,每一列包含的是其描述性属性。

2.3.2 构建ERD

在现实世界中,客户拥有账户。设计关系型数据库的下一步是对这种连接进行概念建模。我们需要给模型加入一种描述一个人拥有银行账户的描述。图2-3展示了一种常用的连接客户和账户的建模方式。

可以看到图2-3在图2-2之上增加的视觉元素是中间的菱形,将客户和账户实体表连接起来。这个联系表明在数据库中客户和账户之间是有链接的,即客户拥有账户。

图2-3:客户和账户的实体关系图

图中的其他视觉细节包括代表人物的表和表示拥有关系之间的双线。这里我们看到一个“n”,而拥有关系另一侧则是一个“m”。这个标识意味着客户和账户之间是多对多的关系。具体来说,这表达了一个人可以拥有多个账户,一个账户可以被多个客户拥有的概念。

而接下来这个实现细节上的细微差别就很重要了:ERD上的链接会转化成数据表或外键。也就是说,客户和他们账户之间的联系在关系型系统中被存储为表结构。这意味着“拥有”表最终转变为数据库中的另一种实体。

使用表结构来呈现你数据中的关联关系,将其转化为实体,使得数据之间的关联更加晦涩。表结构检索和人类本能的思维方式之间的跳跃是一个需要克服的思维鸿沟。当你需要理解数据中的关联关系时,这个问题显得尤为突出。

虽然我们被迫用这种方式思考了数十年,但还有更好的方式。

让我们来回顾表2-1中的数据,然而这次是用来说明图数据中的概念,以及如何用图数据库建模数据。 BWq+y/FNmSX7/bU9OUwlCYpUUmAuNwIzyUQ2h0LSOIIpxadQ+ujViHSgGitLf5ka

点击中间区域
呼出菜单
上一章
目录
下一章
×