游戏开发工具

数据库逻辑结构设计阶段(非常重要)

我们在概要设计阶段解决了客户的需求,并绘制了 E-R图。逻辑结构设计的任务,就是把在概要结构设计阶段建立的基本 E-R 图,按选定的关系数据模型的原则转换成相应的数据库模型图。

本节将介绍如何将 E-R图转化为关系模型和数据库模型图,下一节我们介绍如何判断数据表结构设计是否规范。

关系数据库模式

用二维表的形式表示实体与实体间关系的数据模型称为关系模型。关系数据库模式是对关系数据库结构的描述,或者说是对关系数据库框架的描述。一个关系通常对应一张表。

一般情况下,我们把关系模式表示为R(U) 或 R(A,B)。其中,R 表示关系名,U 表示属性集合,A、B 代表 U 中的属性。

将 E-R 图转换为关系模式的步骤如下。

1)把每个实体都转化为关系模式 R(A,B) 形式

以酒店管理系统为例,实体“客人”和“客房”分别可以使用关系模式表示如下。

1、客房(客房号,客房描述,客房类型,客房状态,床位数,入住人数,价格)。

2、客人(客人编号,客人姓名,身份证号,入住日期,结账日期,押金,总金额)。

2)建立实体间关系的转换

实体间的关系分成一对一、一对多、多对多三种,当两个实体各自转化为关系模式后,实体间关系的转换如下。

1、一对一的转换:把任意实体的主键放到另一个实体的关系模式中。

2、一对多的转换:把关系数量为 1 的实体的主键放到关系数量为 N 的实体关系模式中。

3、多对多的转换:把两个实体中的主键和关系的属性放到另一个关系模式中,会多生成一个关系模式。


酒店管理系统中客房与客人的关系为一对多关系,转换后的结果如下。

1、客房(客房号,客房描述,客房类型,客房状态,床位数,入住人数,价格)。

2、客人(客人编号,客人姓名,身份证号,入住日期,结账日期,押金,总金额,客房号)。


上述关系模式中含有下划线的属性代表主属性,在表中作为主键,加粗属性为外键。

数据库模型图

数据库模型图主要用来说明数据库有哪些表,表中有哪些属性以及表与表之间的关联关系。

将 E-R 图转化为数据库模型图主要执行以下 4 步:

1、在 Visio 中新建数据库模型图

2、添加实体,将 E-R图中各实体转化为对应的表

3、将各属性转化为各表对应的列,定义字段名称、数据类型等

4、添加实体之间的映射关系


添加实体之间的映射关系,具体步骤如下:

1、添加 GuestRecord(客人)实体和 Room(客房)实体。

2、为 GuestRecord 表添加外键约束列 RoomID(客房号),对应 Room 表中的 RoomID 列。


为了数据编码的兼容性,建议使用英文字段。为了直观可见,我们在英文括号内注明了对应的中文含义。下面将 E-R 图中的“客房”和“客人”两个实体转换为数据库模型图,如下图所示:

1.png

图中的 PK 表示表的主键列,FK 表示外键列。需要注意的是,表中的 ID 编号列只能用作主键或外键,否则该列没有实际含义。如客人表中的 GuestID 列,客房表中添加的 RoomID 列。

在数据库模型图中也可以很好的体现实体之间的映射关系。比如,客房和客人之间是一对多关系,对于一对多关系的两个实体,一般会各自转换为一张表,并且后者对应的表引用前者对应的表,即客人(GuestRecord)表中的客房号来自客房(Room)表中的客房号,它们之间应建立主键、外键关系,如上图所示。

一般来说,一对多关系是一个表中的主键对应另一个表中可重复字段,主键的值是不能重复的,而关联的字段是可以重复的,这样就会存在一个值对应一个值或者一个值对应多个值。在一对一关系中,一般是一个主键对应一个不可重复的字段,显然只能一个值对应一个值。

多对多映射关系也是比较常见的。要表示多对多关系,除了将多对多关系中的两个实体各自转换为表外,一般还会创建第三个表,称为连接表。它将多对多关系划分为两个一对多关系,并且将这两个表的主键都插入到第三个表中。

例如,订单表和产品表有多对多关系,这种关系通常通过与“订单明细”表建立两个一对多关系来定义。一个订单可以有多个产品,每个产品可以出现在多个订单中。关于这一点可以在以后的数据库设计实例中慢慢理解。

关注公众号