第5章 数据建模和设计
5.1 引言
1.数据建模概要:
1)本章将描述数据模型的用途、数据建模中的基本概念和常用词汇以及数据建模的目标和原则。本章将使用一组与教育相关的数据作为案例来说明用各种数据建模的方法,并介绍它们之间的差异。
2)数据建模是发现、分析和确定数据需求的过程,用一种称为数据模型的精确形式表示和传递这些数据需求。
3)数据建模是数据管理的一个重要组成部分。
4)建模过程中要求组织发现并记录数据组合的方式。
5)在建模过程本身,设计了数据组合的方式(Simsion,2013)。
6)数据模型有助于组织能够理解其数据资产。数据可以采用多种不同的模式来表示。
7)其中最为常见的6种模式分别是:关系模式、多维模式、面向对象模式、事实模式、时间序列模式和NoSQL模式。
8)按照描述详细程度的不同,每种模式又可以分为3层模型:概念模型、逻辑模型和物理模型。
9)每种模型都包含一系列组件,如实体、关系、事实、键和属性。
10)一旦建立了模型,就需要对其进行质量审查;一旦得到批准,后续还需要对其进行维护。
11)数据模型包含数据使用者所必需的元数据。
12)在数据建模过程中发现的大部分元数据对于其他数据管理功能是必不可少的,如数据治理的定义、数据仓库与数据血缘分析等。
2.数据建模和设计的语境关系图如下图所示。
5.1.1 业务驱动因素
3.数据模型的作用:
数据模型对于有效的数据管理至关重要,如:
1)提供有关数据的通用词汇表。
2)获取、记录组织内数据和系统的详细信息。
3)在项目中作为主要的交流沟通工具。
4)提供了应用定制、整合,甚至替换的起点。
5.1.2 目标和原则
4.数据建模的目标是确认和记录不同视角对数据需求的理解,从而使应用程序与当前和未来的业务需求更加紧密地结合在一起,并为成功地完成广泛的数据应用和管理活动奠定基础,如主数据管理和数据治理计划。
良好的数据建模会降低支持成本,增加未来需求重复利用的可能性,从而降低构建新应用的成本。
数据模型是元数据的一种重要形式。
确认和记录不同视角的理解有助于:
1)格式化。数据模型是对数据结构和数据关系的简洁定义。能够评估当前或者理想情况下业务规则对数据的影响情况。格式化的定义赋予数据规范的结构,减少在访问和保存数据时发生异常的概率。通过展现数据中的结构和关系,数据模型使数据更容易被使用。
2)范围定义。数据模型可以帮助解释数据上下文的边界,以及购买的应用程序包、项目、方案或实施的现有系统。
3)知识保留记录。数据模型通过以书面的形式获取知识来保存系统或项目的企业信息。它能给未来项目提供原始记录。数据模型有助于更好地理解一个组织、一个业务方向、一个已存在的应用,也有助于理解修改现有数据结构所带来的影响。数据模型可被重复利用,可以帮助业务专业人员、项目经理、分析师、建模师和开发人员了解环境中的数据结构。正如地图绘制者学习并记录地理环境来帮助他人寻找方向,同理,建模师帮助他人理解信息蓝图(Hoberman,2009)。
5.1.3 基本概念
5.本节将介绍几类可建模的不同数据类型、数据模型的组成部分、适合于开发的数据模型类型以及在不同情况下选择不同类型的原因。这组定义非常广泛,部分原因是因为数据建模本身就是关于定义的过程。理解支持实践的词汇是很重要的。
1.数据建模和数据模型
5.数据建模和数据模型
1)数据建模最常用在系统开发与系统维护的工作环境中,也称为系统开发生命周期(SDLC)。
2)数据建模可以用于更广泛的领域(如业务和数据架构、主数据管理和数据治理计划),其直接的结果不是在数据库,而是对组织数据的理解。
3)模型是现实中事物的一种表征或者想要创造事物的一种模式。一个模型可以包含一个或多个图表。模型图可以使人们通过标准化的符号快速领会其内容。地图、组织架构图和建筑蓝图都是日常模型的例子。
4)数据模型描述了组织已经理解或者未来需要的数据。
5)数据模型包含一组带有文本标签的符号,这些符号试图以可视化方式展现数据需求并将其传递给数据建模人员,以获得一组特别的数据。这些数据大小不一,小到仅可以用于一个项目,大到可以用于整个组织。
6)模型是一种文档形式,用于记录数据需求和建模过程产生的数据定义。数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介。
2.建模的数据类型
6.在任何既定组织中适合于建模的数据类型反映了组织或项目需要数据模型的优先级。可以对下列4种主要类型的数据进行建模(Edvinsson,2013):
1)类别信息(Category Information)。用于对事物进行分类和分配事物类型的数据。例如,按市场类别或业务部门分类的客户;按颜色、型号、大小等分类的产品;按开放或关闭分类的订单。
2)资源信息(Resource Information)。实施操作流程所需资源的基本数据。例如,产品、客户、供应商、设施、组织和账户等。在IT专业人员定义中,资源实体有时被称为参考数据。
3)业务事件信息(Business Event Information)。在操作过程中创建的数据。例如,客户订单、供应商发票、现金提取和业务会议等。在IT专业人员定义中,事件实体有时被称为交易性业务数据。
4)详细交易信息(Detail Transaction Information)。详细的交易信息通常通过销售系统(商店或在线应用)生成。它还可以通过社交媒体系统、其他互联网交互(单〈双〉击流等)和机器上的传感器产生。这些传感器可以是船只和车辆的部件、工业组件或个人设备(全球定位系统、射频识别、无线等)。这种类型的详细信息可以被聚合,用于派生其他数据,并用以分析趋势,类似于业务时间信息的使用方式。这种类型的数据(大容量或快速变化)通常被称为大数据。
这四类都属于“静态数据”。部分“动态数据”也可以建模。例如,系统的方案,包括用于消息传递和基于事件的系统的协议和方案等。
3.数据模型组件
正如将在本章后面讨论的一样,不同类型的数据模型采用不同的约定符号来表示数据。然而,大多数数据模型都包含基本相同的组件:实体、关系、属性和域。
(1)实体
7.对实体的认识
在数据建模之外的概念中,实体(Entity)的定义是有别于其他事物的一个事物。在数据建模概念里,实体是一个组织收集信息的载体。实体有时被称为组织的一组名词。一个实体可以被认为是一些基本问题的答案——谁、什么、何时、何地、为什么、怎么办或这些问题的综合(参见第4章)。
8.下表定义并给出了常用实体类别的例子(Hoberman,2009)。
1)实体的别名。
9.通用术语“实体”可以使用其他名称表示。最常见的是使用“实体类型”代表一类事物。例如,Jane是Employee类型。因此,Jane是实体,Employee是实体类型。然而,目前普遍的用法是用术语“实体”表示Employee,用“实体实例”(Entity Instance)表示Jane(表5-2)。
10. 实体实例是特定实体的具体化或取值。实体学生可能有多个学生实例,比如名字是鲍勃·琼斯、乔·杰克逊、简·史密斯等实例。实体课程可以有《数据建模基础》《高级地质学》和《17世纪英国文学》等实例。
11. 实体别名会根据模型类型(Scheme)而变化(参见后面的“数据建模的方法”)。
在关系模型中经常用到“实体”这个术语,在维度模型中经常使用“维度”和“事实表”等术语,在面向对象模型中经常使用“类”或“对象”等术语,在基于时间模型中经常使用“中心”“卫星”“链接”等术语,在非关系型数据库模型中经常使用“文件”或“节点”等术语。
12.实体别名(Entity Aliases)也会根据模型抽象程度不同而有所不同。概念模型中的实体一般被称为概念(Concept)或术语(Term),逻辑模型中的实体被称为实体(Entity)(其他称呼取决于不同模型类型)。而在物理模型中,实体的称呼根据数据库技术的不同也不一样,最常见的称呼是表(Table)。(三级层次模型的细节将在后面的“数据模型级别”中讨论。)
2)实体的图形表示。
12.实体的图形表示
在数据模型中,通常采用矩形(或带有圆边的矩形)代表实体,矩形的中间是实体的名称,如图5-2所示。图中有三个实体:学生(Student)、课程(Course)和讲师(Instructor)。
3)实体的定义。
13.实体的定义对于任何数据模型所描述的业务价值都有巨大贡献。它们属于核心元数据。高质量的定义澄清了业务词汇表的含义,并有助于精确管理实体之间关系所描述的业务规则。它们帮助业务和IT专业人员针对业务和应用程序设计做出明确的决策。
14.高质量的数据定义具备以下3个基本特征:
①清晰(Clarity)。定义应该易于阅读和理解,采用简单清晰的语言表述,没有晦涩的首字母缩写词或难于解释的歧义术语表达,如“有时”或“正常”。
②准确(Accuracy)。定义是对实体的精准和正确的描述,应由相关业务领域的专家进行审查,以确保其准确性。
③完整(Completeness)。定义要尽量全面,所包括的内容都要体现。例如,在定义代码时,要包括代码值的示例。在定义标识符时,标识符的唯一性范围应包括在定义中说明。
(2)关系
15.关系(Relationship)是实体之间的关联(Chen,1976)。关系捕获概念实体之间的高级别交互、逻辑实体之间的详细交互以及物理实体之间的约束。
1)关系的别名。
16.关系的别名:
通用术语“关系”也可以用其他名称来表示。关系的别名(Relationship Aliases)根据模型不同而变化。在关系模型中经常使用术语“关系”,在维度模型中经常使用术语“导航路径”,在NoSQL非关系型数据库模型中经常使用诸如“边界”或“链接”等术语。关系别名也可以根据模型抽象程度而有所不同。在概念和逻辑级别上的关系就被称为“关系”,但是在物理级别上的关系可能会采用其他名称表示,如“约束”或“引用”等,这主要取决于具体的数据库技术。
2)关系的图形表示。
17.关系在数据建模图上通常显示为线条。图5-3是一个用信息工程法表示关系的示例。
在这个示例中,学生(Student)和课程(Course)之间的关系描述了学生可以参加课程的规则。讲师(Instructor)和课程(Course)之间的关系描述了讲师可以教授课程的规则。线上的符号(称为基数)以精确的语法说明了规则。关系通过关系数据库中的外键来表示,在非关系型数据库中通过边界或链接来表示。
3)关系的基数。
18.关系的基数:
在两个实体之间的关系中,基数(Cardinality)说明了一个实体(实体实例)和其他实体参与建立关系的数量。基数由出现在关系线两端的符号表示。数据规则是通过基数指定来强制执行的。对于关系,如果没有基数,那么人们最多只能说两个实体以某种方式相连。
对于基数而言,只能选择0、1或多(“多”的意思是超过“1”个)。关系的每一方都可以有0、1或多的任意组合。指定0或1表示关系中是否需要实体实例。1个或多个表示给定关系中参与的实例数量。
下面以下学生(Student)和课程(Course)的例子来解释这些基数符号的含义(见图5-4)。
业务规则是:
1)每一名学生可以选择一门或多门课程。
2)每一门课程可以被一名或多名学生选择。
3)关系的元数。
19.关系中涉及实体的数目被称为关系的元数(Arity),最常见的有一元关系、二元关系以及三元关系。
①一元关系。一元关系(Unary Relationship)也被称为递归关系(Recursive Relationship)或自我引用关系(Self-referencin Relationship)。它只包含一个实体。一对多的递归关系描述了一种层级关系,而多对多的关系描述的是一种网络或图表。在层级关系中,一个实体最多拥有一个父实体(或称上级实体)。在关系模型中,子实体处于关系中的“多”的一边,而父实体处于关系中的“一”的一边。在关系网络中,一个实体可以拥有多个父实体。
例如,一门课程(Course)需要有先导课程。如果想要参加生物学研讨会,学生必须首先听完生物学讲座,生物学讲座是生物学研讨会的先决条件。在以下关系型数据模型中,使用信息工程表示法可以将这种递归关系建模为层级关系或网络关系(图5-5、图5-6)。
第一个示例(图5-5)为层级关系,第二个示例(图5-6)为网络关系。在第一个示例中,参加生物学研讨会需要首先参加生物学讲座。一旦生物学讲座被设定为生物学研讨会的先导课程,则生物学讲座不可再作为其他课程的先决条件。第二个示例则允许生物学讲座作为其他课程的先导课程。
②二元关系。涉及两个实体的关系被称为二元关系(Binary Relationship)。在二元关系的传统数据模型中,最常见的二元关系包含两个实体。图5-7是一个UML课程的图解,学生(Student)和课程(Course)构成二元关系的两个实体。
③三元关系。涉及三个实体的关系被称为三元关系(Ternary Relationship)。图5-8展示了一个基于事实(对象角色表示法)建模的例子。此例中,学生(Student)可以在特定的学期(Semester)中选择一门特定的课程(Course)。
在图5-9示例中,注册(Registration)包含两个外部键:来自学生(Student)的学号(Student Numb