【DAMA】建立数据模型

正向工程

正向工程是指从需求开始构建新应用程序的过程。首先需要通过建立概念模型来理解需求的范围和核心的术语;然后建立逻辑模型来详细描述业务过程;最后是通过具体的建表语句来实现物理模型。
 
 

(1)概念数据模型建模创建概念数据模型涉及以下步骤:

1)选择模型类型

从关系、维度、基于事实或者NoSQL的建模方法中选择一种来进行建模。参见前面关于模式类型的讨论以及选择每个方案的时间。

2)选择表示方法

一旦选定了建模的模式类型,接下来就该考虑采用何种建模表示方法。例如,信息工程法(IE)或对象角色建模(ORM)。选择语言通常取决于组织内的标准情况和人员的习惯等。

3)完成初始概念模型

初始概念模型主要目的是获取用户的观点。不要试图将该组用户的观点与其他部门去匹配而使这个流程复杂化。

4)收集组织中最高级的概念(名称)

这些概念主要包括时间、地点、用户/会员、商品/服务和交易。

5)收集与这些概念相关的活动(动词)

关系可以是双向的,也可以涉及多个概念。例如,顾客有多个地址(家庭、工作等)、同一空间地址有多个客户,交易涉及的客户、销售的产品、发生的时间点及位置等。

6)合并企业术语

一旦数据建模人员获取了某些用户的观点,接下来需要确保这些观点与企业的术语和定义相一致。例如,如果概念数据模型有一个名为“客户”的实体,并且企业术语中也存在相同概念的名词如“顾客”,这时就需要合并企业术语。

7)获取签署

初始模型完成后,确保对模型进行最佳实践及需求满足程度的评审。通常采用电子邮件方式发送给大家,如果看起来是准确的就足够了。
 
 

(2)逻辑数据模型建模逻辑数据模型补充了概念模型的需求细节:

1)分析信息需求

为确认信息需求,需要在若干业务流程中确认业务信息需求。业务流程所要消费的信息可定义为输入,而其他业务流程的输出可定义为信息产品。这些信息产品的名称往往可以确定一个必需的业务词汇,而且数据建模以此为依据。不管流程还是数据都是以顺序或并发的方式进行设计。有效的分析和设计能够在流程和数据建模并重的前提下确保数据(名词)和流程(动词)的相对平衡。
需求分析包括业务需求的引导、组织、记录、评审、完善、批准和变更控制。某些需求可以用于确定数据和信息的业务需求,可同时使用文字和图形来表述需求说明。
逻辑数据建模是表达业务数据需求的重要手段。对于很多人来说,喜欢图形表达方式,正如老话所说:“图片胜于千言万语”。但是,也有一些人不喜欢图形表达,而更喜欢数据建模工具所创建的表格和报表。
很多组织都有规范的管理要求,以用于指导需求说明书的起草和完善,如“系统应该……”。书面的数据需求说明书使用需求管理工具来维护。任何此类文档的内容收集规范都应该与数据模型捕获的需求同步,以便于进行影响分析。这样,就可以回答“我的数据模型的哪些部分代表或实现了哪个需求”或者“为什么这个实体在这里”。

2)分析现有文档

通常,分析现有与建模有关的档案(包括已设计的数据模型和数据库)对建模工作是一个很好的开始。即使现有的数据模型文件已过时,或与实际生产系统存在较大差异,有价值的部分也会对新模型的设计提供很大帮助。但需要注意的是,在参考已有模型文件中的内容进行新模型设计时,务必向相关专家确认其每个细节的准确性和时效性,以确保新模型设计的准确性。企业经常使用的套装软件,如企业资源规划(ERP)系统,它们拥有自己的数据模型。在设计逻辑数据模型时,应考虑这些已有的数据模型,并在合适的情况下使用或将其映射到新的企业数据模型中。此外,还有一些有用的数据建模模式(Patterns),如一种标准的角色概念建模方法。许多行业捕获了该行业的通用模型(如零售业或制造业)可以使用,基于这些通用模型进行定制开发,以适用于特定的项目。

3)添加关联实体

关联实体(Associative Entities)用于描述多对多关系。关联实体从关系中涉及的实体获取标识属性,并将它们放入一个新的实体中。该实体只描述实体之间的关系,并允许添加属性来描述这种关系,如有效日期和到期日期。关联实体可以有两个以上的父实体。关联实体可能成为图形数据库中的节点。在维度建模中,关联实体通常被称为事实表。

4)添加属性

将属性添加到概念实体中。逻辑数据模型中的属性具有原子性,它应该包含一个且只有一个数据(事实),不能被再次拆分。例如,一个名为“电话号码”的概念分为几个逻辑属性,分别是电话类型代码(家庭、办公室、传真、手机等)、国家代码(美国和加拿大为1)、区号、前缀、基本电话号码和分机等。

5)指定域

域(Domains)的作用是保证模型属性中格式和数值集的一致性。例如,学生学费金额(Student Tuition Amount)和教师薪水金额(Instructor Salary Amount)都可以为其分配金额域(AmountDomain),这是一个标准的货币域。

6)指定键

分配给实体的属性可以是键属性,也可以是非键属性。键属性有助于从所有实体实例中识别出唯一的实体实例,可以是单独一个属性成为键,也可以是与其他键元素组合的部分键。非键属性描述实体实例,但无法唯一标识该实例。另外,还需要识别主键和备用键。
 
 

(3)物理数据建模

逻辑数据模型需要进行修改和调整以形成物理数据模型,并使得最终的设计在存储应用程序中运行良好。例如,适应微软Access所需的更改将和适应Teradata所需的更改完全不同。接下来的介绍中,术语“表”(Table)用于表示引用表、文件和模式等含义;术语“列”(Column)用于表示引用列、字段和元素等含义;术语“行”(Row)用于表示引用行、记录或实例等含义。

1)解决逻辑抽象

逻辑抽象实体(超类型和子类型)通过使用以下任意一种方法,在物理数据库设计中成为独立对象。
①子类型吸收(Subtype Absorption)。子类型实体属性作为可空列,包含在表示超类型实体的表中。
②超类型分区(Supertype Partition)。超类型实体的属性包含在为每个子类型创建的单独表中。

2)添加属性细节

向物理模型添加详细信息,如每个表和列(关系数据库)、文档和字段(非关系数据库)、模式和元素(XML数据库)的技术名称。
定义每个列或字段的物理域、物理数据类型和长度。为列或字段添加适当的约束(如允许为空和默认值),尤其是对于“NOT NULL”的约束。

3)添加参考数据对象

逻辑数据模型中参考数据的集合可以通过以下3种常见方式在物理模型中实现:
①创建匹配的单独代码表。根据模型的不同,这些代码表数量也不一样。
②创建主共享代码表。对于拥有大量代码表的模型,可以将所有的代码表合并到一张表中。但是,这意味着更改一个引用列表将对整个表产生影响。同时,应该避免代码值的冲突。
③将规则或有效代码嵌入到相应对象的定义中。为对象嵌入的规则或列表代码创建约束,对于仅用作其他对象引用的代码列表,这可能是一个很好的解决方案。

4)指定代理键

给业务分配不可见的唯一键值,与它们匹配的数据没有任何意义或关系。这是一个可选步骤,主要取决于自然键是否够大或是复合值,以及其属性是否分配了可能随时间变化的值。
如果将代理键指定为表的主键,请确保原始主键上有备用键。例如,如果在逻辑数据模型上,学生表(Student)的主键是学生姓名(Student First Name)、学生姓氏(Student Last Name)和学生出生日期(Student Birth Date)组成的复合主键,则在物理数据模型上,学生的主键可以是代理键学生编号(Student ID)。在这种情况下,应该在学生名字、学生姓氏和学生出生日期的原始主键上定义备用键。

5)逆规范化

在某些情况下,逆规范化或添加冗余可以极大地提高性能,远超过了重复存储和复制处理的成本。维度模型主要采用逆规范化的手段。

6)建立索引

索引是用于访问数据库数据的过程中优化查询(数据检索)性能的另一个选择。在许多情况下,索引可以提高查询性能。数据库管理员或数据库开发人员必须为数据库表选择和定义适当的索引。主要的RDBMS产品支持多种类型的索引。索引可以是唯一的或非唯一的、集群的或非集群的、分区的或非分区的、单列或多列、b树、位图或散列等多种类型。如果没有适当的索引,DBMS将读取表中的每一行(表扫描)以检索所有数据。对于大表来说,这将会耗费很多成本。要尝试在大表上构建索引,使用最频繁引用的列(特别是键,包括主键、备用键和外键)来实现最常运行的查询。

7)分区

必须充分考虑整个数据模型(维度)的分区策略,尤其是当事实包含许多可选维度键(稀疏)时。在理想情况下,建议在日期键上进行分区;如果无法做到这一点,则需要根据分析结果和工作负载进行研究,以提出并改进后续分区模型。

8)创建视图

视图可用于控制对某些数据元素的访问,也可用于嵌入公共连接条件或过滤器,以实现常见对象或查询的标准化。视图本身应该是需求驱动的。在许多情况下,需要对照逻辑数据模型和物理数据模型的开发流程来创建视图。
 
 
 

逆向工程

逆向工程是记录现有数据库的过程。物理数据建模通常是第一步,以了解现有系统的技术设计;逻辑数据建模是第二步,以记录现有系统满足业务的解决方案;概念数据建模是第三步,用于记录现有系统中的范围和关键术语。大多数数据建模工具支持各种数据库的逆向工程。但是,将模型元素进行可读性的布局展示仍需要建模人员来完成。可以选择几种常见的布局(如正交、维度和层次结构)来启动流程,但语境的组织(即按主题区域或功能对实体分组)在很大程度上仍是一个手动流程。
 
 
 
——摘自《DAMA国际数据管理知识体系指南(第二版)》第五章 数据建模和设计