数据库模型
在开发一个信息系统时,一个贯穿于整个开发过程的问题就是数据以及对数据的加工。数据通常存放在数据库中,因此,数据库设计是信息系统设计的主要工作。
数据库设计的核心是确定一个合适的数据模型,这个数据模型应当满足以下三个要求:
1)符合用户的要求。既能包含用户需要处理的所有数据,又能支持用户提出的所有处理功能的实现;
2)能被某个现有的数据库系统(DBMS)所接受,如SQL ServerORACLEINFORMIX等;
3)具有较高的质量,如易于理解、便于维护、没有数据冲突、完整性好、效率高等。
此外,在数据库设计中还要考虑数据库的安全问题,使各类用户合理操作数据库。
数据模型
数据模型是现实世界数据特征的抽象。建立数据模型的主要目的是要使数据库系统与它所描述的现实系统在整体上相符合。即在设计时使数据模型正确、有效地反映现实,在运行时保证数据库中的数据值真实地体现现实世界的状态。建立数据模型一般分两个阶段完成:
第一阶段是概念数据模型设计阶段。此阶段把现实世界中的信息抽象成信息世界中的实体和联系,结合有关数据库规范化的理论,用一个概念数据模型将用户的数据需求明确地表达出来,为建立物理数据模型和设计应用程序打下坚实的基础。
第二阶段是物理数据模型设计阶段。根据前一阶段建立起来的概念数据模型并结合特定的DBMS,按照一定的转换规则,把概念模型转换为依赖于DBMS的物理数据模型。然后,再根据软硬件运行环境,权衡各种利弊因素,确定一种高效的物理数据结构,使之既能节省存储空间,又能提高存取速度。有了这样一个物理数据模型,开发人员就可以在系统实现阶段,建立数据库并对数据库中的数据进行多种操作。
概念数据模型
概念数据模型是一种面向问题的数据模型,它按照用户的观点来对信息建模,主要用于数据
库设计。表示概念模型的方法很多,其中最常用的是实体联系方法。该方法用E_R图来描述现实世界的概念模型,因此,用E_R图表示的模型也称为实体联系模型。下面介绍实体联系方法中的一些基本概念。
1. 实体
实体是现实世界中具有相同性质的同一类事物,它可以是具体的对象,如客户、商品,也可以是抽象的概念和联系,如客户订购商品,商品出库等。一个实体可以用下图表示:
3-1 员工实体
实例是指客观存在并且相互区别的事物,它是实体的具体体现。例如:员工张三、员工李四都是实体员工中的具体实例。
定义一个实体应遵循以下两个基本规则:
1)实体中的每个实例都必须可以唯一标识;
2)每个实体之间都是互斥的。
2. 属性
属性是指实体所具有的性质,通常一个实体由若干个属性来刻画。例如:商品实体由商品编号、商品名称、规格、生产厂商、性能等属性组成。
实体中的每个实例都有用来唯一标识它的一个或多个属性,这些属性称为实体的标识符(Idendifier)。例如:由于每种商品都对应一个唯一的商品编号,所以,商品编号是商品的标识符。同样,由于每种商品都有唯一的一组商品名称、规格和生产厂商,因此,商品名称、规格、生产厂商也是商品的标识符。
数据库设计的意义当一个实体有若干个标识符时,可以选定一个标识符作实体的主标识符(pi表示),其它标识符作为次标识符(ai表示)
例:表3-1是一张客户订单,可以将它定义成如图3-2所示的实体。
3-1  客户订单
订单编号:                                    订单日期:
客户编号
客户名称
客户地址
客户订购产品
产品编号
产品名称
产品规格
订购数量
售价
订单备注
3-2  客户订单实体
3.
域是某个或某些属性的取值范围。一个域可以被多个实体的属性共享使用。例如:定义一个电话号码域的数据类型为Char(8),它可以在许多实体中的电话属性中使用,一旦修改电话号码域的定义为Char(9),则使用该域的所有电话属性的定义也会随之改变。
4. 联系
联系是实体间有意义的连接,通常用实体间的一条连线表示。联系有两种方式,一种联系是强制的,即对实体A的每一个实例,实体B中至少有一个实例与之关联;另一种联系是可选的,
即对于实体A中的每一个实例,实体B中可以有也可以没有实例与之关联。在E-R图中,用‘|’表示强制联系,用‘o’表示可选联系。
例:图3-3中有部门和员工两个实体,两个实体之间有一个联系,该联系的左端用‘|’表示强制,即每个员工必须属于一个部门;该联系的右端用‘o’表示可选,即每个部门可以有员工,也可以没有员工。
3-3  联系的强制与可选
按照实体中实例之间的数量对应关系,可以将联系分为一对一联系、一对多联系、多对多联系。
1)一对一联系:若对于实体A中的每一个实例,实体B中至多有一个实例与之联系,反之
亦然,则称实体AB之间是一对一的联系。图3-4所示是一个一对一联系的例子,它表示每个员工有一个或没有存款账户,而每个账户属于且仅属于一个员工。
3-4  一对一联系
2)一对多联系:对实体A中的每一个实例,实体Bn个(n0)实例与之联系。反之,对实体B中的每一个实例,实体A中至多有一个实例与之联系,则称实体AB之间是一对多的关系。在E-R图中,一般采用“乌鸦脚”表示多的一端。图3-5所示是一个一对多联系的例子,它表示一种商品类型至少包含一种商品,而每种商品属于且仅属于一种商品类型。
3-5  一对多联系
3)多对多关系:对实体A中的每一个实例,实体B中有n个(n0)实例与之联系。反之对实体B中的每一个实例,实体A中有m个(M0)实例与之联系,则称实体A与实体B之间存在多对多的关系。图3-6所示是一个多对多联系的例子,它表示一种商品可以由多家供应商提供,也可以没有供应商提供,而每家供应商可以提供多种商品,也可以不提供任何商品。
3-6  多对多联系
由于多对多的联系在数据库系统中难以实现,所以在实际设计时要把一个多对多联系分解成两个一对多联系。如图3-6所示的一个多对多联系可以转化成图3-7所示的两个一对多的联系。
3-7 多对多联系分解成两个一对多联系 
联系除了能反映实体之间的数量关系,也可以反映实体之间的相互依赖关系。如果一个实体B没有自己独立的标识符,它必须借助实体A的标识符作为自己的标识符(或标识符的一部分),则称实体B依赖于实体A,实体A和实体B之间的联系称为标识联系,通常在实体B的一端加上一个三角‘⊿’来表示这种依赖关系。