企业在运作的过程中,无时无刻不在产生大量的信息。机器在转动,产品在加工,资金在出入,人员在活动,单据在填写,原料在运入,成品在运出……所有的这些运作过程,都会有大量的信息产生——即使企业休息停工,也会产生大量信息,如办公场所需要安排人值班,机器需要提取折旧,合同交期变得更临近——这些信息是企业进行规范管理不可或缺的资源,越是大型的企业,越是管理规范的企业,对信息的渴求越强烈,因为没有信息就没有管理。
信息是由数据构成的,为了给企业管理提供充足、准确、实时的信息,需要对企业数据的产生、存储进行规范化处理,规范的数据是信息得以保存、共享、运算的基石,数据建模的过程就是对企业数据进行规范化的过程。
大家都知道数据库(本书所说的数据库都是指关系型数据库),常见的数据库管理系统(DBMS)包括Oracle、DB2、MySQL、SQLServer、Access等,甚至Excel在某些时候也可以当成某种关系型数据库管理系统。数据库主要是由一个又一个的表构成的,每个表又包括若干字段,数据就存放在这些表的字段中。
所谓数据建模,就是为了企业信息化管理的需要,分析企业有哪些信息实体,实体之间有什么关系,每个实体包含哪些属性,从而设计出数据库——需要哪些表,每个表包括哪些字段,对存储的数据有什么要求,表跟表之间有什么关系等。数据建模工作的最终交付物是数据库的表结构——数据模型。对于企业信息化管理体系的建立而言,数据建模是一件异常重要的事情,因为做软件开发的都知道,一旦软件开发完成后,如果需要进行数据库表结构的变化,将是一件多么痛苦的事。好的表结构容易扩展,容易变更,容易进行功能开发,容易获得需要的数据,反之,不好的表结构,功能开发麻烦,数据提取麻烦,难以应对需求变更,难以应对扩展需求。
数据建模可以分成两个大的步骤,一是数据库逻辑设计,一是数据库物理设计。逻辑设计是从业务需求的角度设计数据库的逻辑结构,物理设计则具体到某个特定的数据库管理系统。本书所说的数据建模均属于数据库逻辑设计的范畴,跟具体的数据库管理系统没有任何关系。
根据信息系统的规模、复杂程度的不同,可以采用不同的方式进行数据建模。对于规模较小的系统(例如只有十几个表),逻辑关系简单的系统,由于需要管理的数据比较简单,数据之间的关联也不复杂,设计人员可以凭着自己的经验经过思考后立即进行数据库的物理设计。在这种情况下并不是不需要数据库的逻辑设计,或者说数据库的逻辑设计不重要,只是因为数据处理相对简单,将逻辑设计的过程改成了“心算”而已。
对于规模较大、逻辑关系复杂的系统,就可能需要使用建模工具了。数据建模工具一般包括表设计、表关系设计、字段设计、正向工程(根据设计的数据模型生成符合不同数据库管理系统的数据库)、反向工程(根据已经存在的数据库生成数据模型)等功能。常见的数据建模工具包括ERWin, PowerDesigner, MicrosoftVisio等。有了建模工具的正向工程功能后,可以由逻辑设计的结果直接生成符合某种数据库管理系统的数据库,这样就模糊了逻辑设计与物理设计的边界。
由于本书的数据模型图都是用MicrosoftVisio画的,这里介绍MicrosoftVisio的几个简单知识点——限于本书用到的。详细介绍建模工具的使用不在本书的范围之内,有兴趣的读者可以自己找资料学习。
先看一个简单的数据模型图,如图4-2所示。
图4-2 一个简单的数据模型示意图
只要看懂这个图就足以理解本书所有的数据模型了。
矩形:表示一个实体或者一个数据库表。
PK:Primary Key(主键),实体的主属性,或者数据库表的关键字。主键可以只由一个字段构成,也可以由多个字段构成,一个表只能有一个主键。例如,图中的EntityA,主键由一个字段“FA1”构成;EntityB,主键由两个字段“FB1”与“FB2”构成。
FK:Foreign Key(外键),实体的关联属性,或者数据库表的关联字段。一个表可以有多个外键。图中的EntityB,有两个外键,一是FK1,由字段“FC1”充当,用以跟EntityC关联;另一个是FK2,由字段“FA1”充当,用以跟EntityA关联。
箭头:表示实体或数据库表之间的依赖关系,箭头的方向表示依赖方向,图中的两个箭头,都是从EntityB出发,分别指向EntityA与EntityC,表示EntityB同时依赖于EntityA与EntityC。大部分情况下这种关系表示一对多的关系,箭头指向的一方为“一”的一方,箭头出发的一方为“多”的一方;也有可能表示一对一的关系,箭头指向的一方为被依赖方。
黑体字:字段是黑体字表示这个字段是必填项。
省略号:为了描述的方便,表示省略了其他的属性或字段。