# 数据建模和设计
数据建模是发现、分析和确定数据需求的过程,用一种称为数据模型的精准形式表示和传递这些需求。数据建模是数据管理的一个重要组成部分,数据模型有助于理解其数据资产。数据模型包含数据使用者所必须的元数据。数据模型对于有效的数据管理至关重要,如:
- 提供有关数据的通用词汇表。
- 获取、记录组织内数据和系统的详细信息。
- 在项目中作为主要的交流沟通工具。
- 提供了应用定制、整合,甚至替换的起点。
# 目标和原则
数据建模的目标是确认和记录不同视角对数据需求的理解,从而使应用程序与当前和未来的业务需求能够更加紧密的结合在一起,并为完成广泛的数据应用和管理活动奠定基础,如主数据管理和数据治理计划。良好的数据建模会降低支持成本,增加未来需求重复利用的可能性,从而降低构建新应用的成本。数据模型是元数据的一种重要形式。
数据建模需要遵循如下几点原则:
- 格式化。数据模型是对于数据结构和数据关系的简洁定义。需要能够评估当前或者理想情况下业务规则对数据的影响情况。格式化的定义赋予数据规范的结构,减少在访问和保存数据时发生异常的概率。通过展现数据中的结构和关系,数据模型使数据更容易被使用。
- 范围定义。数据模型可以帮助解释数据上下文的边界,以及购买的应用程序包、项目、方案或实施的现有系统。
- 知识保留记录。数据模型通过以书面的形式获取知识来保存系统或项目的数据信息。它要能给未来项目提供原始记录。数据模型要有助于更好地理解一个组织、一个业务方向、一个已存在的应用。同时,数据模型需要能贵被重复利用,数据模型要能够帮助业务专业人员、项目经理、分析师、建模师和开发人员了解环境中的数据结构。
# 数据建模和数据模型
数据建模常用在系统开发与系统维护的工作环境中,也称为系统开发生命周期(SDLC)。当然,数据建模也可以用在更广泛的领域,如业务和数据架构、主数据管理和数据治理计划,其直接的结果不是在数据库,而是对组织数据的理解。
模型是现实中事物的一种表征或者想要创造事物的一种模式。一个模型可以包含一个或多个图表。模型图可以使人们通过标准化的符号快速了解其内容。地图、组织架构图和建筑蓝图都是日常模型的例子。
数据模型描述了组织已经理解或者未来需要的数据。数据模型包含一组带有文本标签的符号,这些符号以可视化的方式展现数据需求并将其传递给数据建模人员。也可以把模型理解成一种文档形式,用于记录数据需求和建模过程产生的数据定义。数据模型是用来将数据需求从业务传递到IT沟通的主要媒介。
# 数据模型组件
大多数数据模型都包含基本的相同组件:实体、关系、属性和域。
# 实体
在数据建模的概念里,实体是一个组织收集信息的载体。一个实体可以被认为是一些基本问题的答案,如who、what、when、where、why、how或这些问题的综合。下图为常用的实体类别:
分类 | 定义 | 实例 |
---|---|---|
who | 相关的人或组织。也就是谁对业务很重要?who通常是泛指一个参与方或角色。 | 员工、病人、玩家、客户、供应商、学生、乘客、作者 |
what | 为相关企业通过的产品和服务。它通常指的是组织的产出或提供的服务。 | 产品、服务、原料、成品、课程、照片、歌曲、影片 |
when | 和企业相关的历程或时间间隔,即业务什么时候经营 | 日期、月、季度、年、学期、财政周期、分钟、起止时间 |
where | 可以指实际的地址或电子地址,主要体现在业务在哪里进行 | 邮寄地址、分发点、网址、IP地址 |
why | 企业相关的事件,这些事件使业务得以维持,即某业务为什么要运行 | 下订单、退货、投诉、取款、存款、查询、交易、理赔 |
how | 业务相关的事件记录。这些记录提供事件发生的证据 | 发货单、合同、协议、账户、购买单、交易确认单 |
measurement | 关于时间、地点和对象的计数、总和等 | 销售数量、项目数量、付款金额、当期余额 |
在数据模型中,通常采用矩形代表实体,矩形的中间是实体的名称,如下图所示有三个实体:学生(student)、课程(course)和讲师(instructor)。
实体属于元数据,高质量的实体定义澄清了业务词汇表的含义,并有助于管理各业务之间关系所描述的规则。高质量的数据定义需要具备一下三个基本特征:
- 清晰:定义应该易于阅读和理解,采用简单清晰的语言描述,没有难以解释的歧义术语表达。
- 准确:定义是对实体的精准和正确的描述,应由相关业务领域的专家进行审查以确保其准确性。
- 完整:定义要尽量全面,业务所包括的内容都要体现。例如,在定义代码时,要包括代码值的示例。在定义标识符时,标识符的唯一性范围应包括在定义中说明。
# 关系
关系是实体之间的关联,关系在数据建模图上通常显示为线条,如下图所示:
在这个示例中,学生(student)和课程(course)之间的关系描述了学生可以参加课程的规则。讲师(instructor)和课程(course)之间的关系描述了讲师可以教授的课程规则。线上的符号称为基数,用来说明关系规则,关系通过外键来表示,在非关系型数据库中通过边界或链接来表示。
# 属性
属性是一种定义、描述或度量实体某方面的标识。实体中属性的物理展现为表、视图、文档、图形或文件中的列、字段、标记或节点等。
在数据模型中,属性通常在实体矩形内的列表中描述,其中实体学生(student)的属性可能就包含学号(student number)、姓(student first name)、名(student last name)、出生日期(student birth date)。
# 域
在数据建模中,域(domain)代表某一属性可被赋予的全部可能取值。域可以用不同的方式来表达,域提供了一种将属性特征标准化的方法,例如,日期域包含了所有可能的日期,可以适用于任何逻辑数据模型或是物理数据模型中日期属性,如:
- 聘用员工的日期。
- 收到订单的日期。
- 提交声明的日期。
- 课程开始的日期。
域中所有值都为有效的值,不在域中的值被称为无效值。属性中不应当含有其指定域以外的值。例如,聘用员工的日期域,可被简单地定义为所有有效日期,在此规则下,聘用员工日期的域不应该包含每年的2月30日。
可以用附加的规则对域进行限制,这些限制规则被称为约束。规则可以设计格式、逻辑或两者皆有。例如,通过将聘用员工日期域限定为早于今天的日期,可以从有效值域中排出2050年3月10日,即便它是一个有效日期,但往往这种类型的数据不符合业务逻辑。域可以用多种不同的方式定义:
- 数据类型:域中的某一属性中的数据有特定的标准类型要求。例如,整数、字符(30字节)和日期都属于数据类型域。
- 数据格式:使用包括模板和掩码等格式的域,如邮政编码和电话号码以及字符的限制(仅用字母数字代码,字母数字代码和某些特殊符号等),用这些格式来定义有效值。
- 列表:含有有限个值的域。例如,订单状态的值可以限制在订单生成、发货、订单结束、退货等状态。
- 范围:允许相同数据类型的所有值在一个或多个最小值和最大值之间的域。有些范围可以是开放式的,例如,订单送货日期必须在订单下达日期之后的三个月内完成。
- 基于规则:域内的值必须符合一定的规则才能够成为有效值。规则包括将关系或组合中的值与计算值或其他属性值进行对比,例如,物品价格必须要高于物品成本。
# 数据建模方法
常见的6钟数据建模方法是:关系建模、维度建模、面向对象建模、基于事实建模、基于时间建模和非关系型建模。每种建模方法都采用一些特定的表示法来进行表达:
建模方法 | 表示法 |
---|---|
关系(Relational) | 信息工程、信息建模集成定义、巴克符号 |
维度(Dimension) | 维度 |
面向对象 | 统一建模语言(UML) |
基于事实 | 对象角色建模(ORM2)、完全面向交流的信息建模(FCO-IM) |
基于时间 | 数据拱顶模型(Data Vault)、锚建模 |
非关系型 | 文档、列、图、键值 |
# 规划数据建模
在数据模型设计工作开始前,首先要制订一个合理的工作计划。数据建模工作计划主要包括评估组织需求,确定建模标准,明确数据模型存储管理等任务。
数据建模工作交付成果包括以下4个方面的内容:
- 图表:一个数据模型包含若干个图表,图表是一种以精确的方式描述需求的形式。需求可以描述不同详细程度的层级(如概念、逻辑或物理模型)、采用的数据模型,以及实例中采用的表示方法。
- 定义:实体、属性和关系的定义对于维护数据模型精度至关重要。
- 未解决的问题:数据建模过程经常出现可能无法解决的一些争议和问题。此外,负责解决这些争议或回答这些问题的人员通常位于数据团队之外,所以要将未解决的问题以清单的形式记录下来。
- 血缘关系:对于物理模型来说,了解数据血缘关系是非常重要的。血缘关系是指数据从哪里来,经过什么样的加工,变成了什么样的结果和脉络关系,一般来说,血缘关系会以来源/目标映射的形式呈现,这样就可以了解到源系统的属性以及它们如何被迁移至目标系统。血缘关系有助于建模人员深入理解数据需求,准确定位属性来源,还可以确定属性在源系统中的情况,是验证模型和映射关系准确性的有效工具。
# 建立数据模型
数据建模是一个不断迭代的过程,在建模过程中,首先要研究现有的数据模型和数据库,参考发布的建模标准和数据标准,搜集和考虑随时提出的新的数据要求,在此基础上建模人员设计数据模型初稿,然后收集反馈不断优化迭代。
# 概念数据模型建模
创建概念数据模型涉及到以下步骤:
- 选择模型类型。
- 选择表示方法。
- 完成初始概念模型。
- 收集组织中业务相关的概念。
- 收集这些概念相关的活动。
- 合并企业术语。
- 获取签署认定。
逻辑数据模型补充了概念模型的需求细节:
- 分析信息需求。
- 分析现有文档。
- 添加关联实体。
- 添加属性。
- 指定域。
- 指定键。
逻辑数据模型最终需要进行修改和调整以形成物理模型,并使得最终的设计在存储应用程序中运行良好,物理建模需要完成如下步骤:
- 解决逻辑抽象。
- 添加属性细节。
- 添加参考数据对象。
- 指定代理键。
- 逆规范化。
- 建立索引。
- 分区。
- 创建视图。