Java教程

4.3数据库建模设计:三个阶段

本文主要是介绍4.3数据库建模设计:三个阶段,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

4.3数据库建模设计

由4.1节可知,数据库设计分为概念设计、逻辑设计和物理设计3个阶段,

设计人员在各个阶段分别进行概念数据模型设计、逻辑数据模型设计和物理数据模型设计。

4.3.1概念数据模型设计(CDM)

采用E-R模型描述系统的数据对象组成结构

1.抽取与标识实体

【例】针对一个图书销售管理系统数据需求,我们可以抽取出“图书”“商店”“销售”“折扣”“作者”“出版社”实体

2.分析与标识实体联系

【例】分析各种实体之间的联系,给出该联系的名称

3.定义实体属性与标识符

给出属性名称、给出标识符、取值约束等说明;

【可选项:定义属性值域,以限定属性的取值范围、属性是否允许 空值、属性的默认值、属性值检查规则等。】

4.检查与完善概念数据模型

一个较大规模系统或复杂系统的概念数据模型设计不可能一步完成,需要不断完善

【例】对图书销售管理系统E-R模型,我们增加“库存”实体,并与“图书”“商店”实体建立联系。又增加“图书类别”实体,并将它与“图书”实体建立联系。

4.3.2逻辑数据模型设计(LDM)

是概念数据模型在系统设计角度的延伸,它使系统的E-R模型图体现数据库模型的针对性【规范化】

逻辑数据模型与概念数据模型的主要区别如下。

(1)逻辑数据模型比概念数据模型对信息系统数据结构的描述更具体,不但有业务实体,也有新增的、便于信息 化处理的数据实体。

(2)逻辑数据模型将概念数据模型的多对多实体联系转化为易于关系数据库实现的一对多实体联系。

(3)逻辑数据模型将概念数据模型中的标识符依赖实体进一步细化,并区分主键标识符和外键标识符,以便于数 据模型规范化处理。

1.CDM/LDM转换

【例】图书销售管理系统概念数据模型转换为逻辑数据模型

  • 属性定义加强,如在每个实体中分别标识主键标识符及外键标识符。
  • 将CDM中存在的实体间多对多联系,转换为通过关联实体与原实体之间的一对多联系
    • (如“编著”实体)在(“作者”“图书”)之间,直接转换为一对多

2.规范化与完善逻辑数据模型设计

使达到3NF范式,即实体中非键属性仅依赖于主键属性。

【例】通过分析图4-21所示的图书销售管理系统逻辑数据模型

  • 1、“作者”实体不符合关系数 据库设计规范的3NF范式,其中的“省”“城市”属性存在传递依赖。
  • 2、新引入的关联实体“编著”的名称不太确 切,其属性仅仅只有所依赖实体的标识符,缺少自身属性。

完善设计

  • 1、增加“地区表”实体,并将它与“作者”实体建立联系,同时删 除“作者”实体中的“省”“城市”属性,从而在“作者”关系表中可通过地区编码方式实现一致的地区名称输入。
  • 2、修订关联实体“编著”名称为“编著排名”,并增加“排位顺序”属性,从而使该实体数据具有实际意义。

4.3.3物理数据模型设计

不再使用E-R图来描述数据模型结构,而需要考虑将实体如何转换为数据库表

设计步骤

(1)将E-R模型图中每一个实体对应转换成一个关系表,实体属性转换为对应表的列,实体标识符转换为对应表 的主键。

(2)将实体联系转换为关系表之间的主、外键关系,并定义表之间的参照完整性约束。

(3)完善系统的关系模型图,并在模型中扩展定义视图、索引、存储过程及触发器等数据库对象。

1.实体到关系表的转换

首先为每个实体定义一个关系表,其表名与实体名相同;

  • 属性----表中的列
  • 标识符----表中的键
  • 主键标识符----主键
  • 外键----外键
  • 代理键设置【可选】
    • 当关系表中的候选键都不适合当主键时(例如,候选键的数据类型为复杂数据或者候选键 由多个属性组成),就可以使用代理键作为主键。
  • 列特性设置【可选】
    • 我们在将实体的属性转换为关系表的列时,必须为每个列定义特性,包括数据类型、空值状态、默认值及取值约 束。 【需要注意的是,只有设置了not null标注,才可以设置默认值】

【例】

2.弱实体到关系表的转换

前面描述的实体转换为关系表的方式适用于E-R模型的所有实体类型,但弱实体转换关系表还需要特别的处理。

  • 当弱实体为非标识符依赖于一个强实体时,我们应在弱实体转换的关系表中加入强实体标识符作为外键列
  • 而当实体为标识符依赖于一个强实体时,我们不但应在弱实体转换的关系表中加入强实体标识符作为外键列,同时也作为该表的主键列

例:非标识符依赖的转换】图中的“销售订单”实体在逻辑上依赖于“销售员”实体。它们之间的实体联系为一对多。

“销售订单”实体是非标识符依赖弱实体,因为它有自己独立的标识符“订单编号”。

例:标识符依赖的转换】标识符依赖的强实体标识符不但在“订单明细”关系表中作为主键,同时也作为外键,并与订单明细实体的标识符“订单明细编号”共同构成复合主键

3.实体联系的转换

(1)1:1实体联系的转换

实体分别转换为关系表,将其中一个表的主键放入另一个表中作为外键。

【例4-11】在图4-28所示的E-R模型中,“学生”实体与“助研金发放账号”实体存在1:1实体联系。

  • 这里有两种方法,如图a、图b所示

(2)1:N实体联系的转换 【最常见】

实体分别转换为关系表,并将1端关系表的主键放入N端关系表中作为外键。

【例】在图4-30所示的E-R模型中,“班级”实体与“学生”实体存在1:N实体联系。

  • 转换后,将一个“班级”关系表的主键放入“学生”关系表中作为外键,如图4-31所示。

(3)M:N实体联系的转换
  • M:N实体联系不能像表示1:1和1:N实体联系那样直接转换关系表。

  • 除了关联的实体均转换为对应的关系表外,我们还增加一个关系表,作为关联表与实体的关系表建立参照约束。

  • 将任意一个实体关系表的主键放置到另一个实体 关系表中作为外键,均是不正确的。

【例4-13】“课程”实体与“学生”实体存在M:N联系。

  • 增加一个关联表,并命名为联系名

  • 新增的关联表共有两个列分别来自“学生”表的主键和“课程”表的主键。这两个列构成关联表的复合主键, 同时它们也是外键。

  • 在使用关联表时,我们还必须对该表的属性列进行完善,不能只有已知的两个主键对吧,如增加“成绩”列。

(4)实体继承联系的转换

实体继承联系用来描述实体之间的相似性关系。

当E-R模型转换到关系模型时,父表属性应放到子表中作为外键。

【例】在图4-34所示的E-R模型中,“本科生”“研究生”实体与“学生”实体存在分类继承联系。

方法1:

  • 只把父表的主键加入子表中作主键、外键。“研究生”“本科生”它们公共的属性放置在“学生”关系表内。
  • 这种转换方案可以减少表之间的冗余数据,但进行学生信息查询时,需关联父表和子表才能完成

方法2:

  • 父表的主键放入子表中既作为主键又作为外键并把父表中所有能容添加到子表中。
  • 这种方案存在表间数据冗余,但针对本科生或研究生的信息查询只需要在子表中完成,效率较高

(5)实体递归联系的转换
  • 递归联系是同一类实体之间所发生的联系。

  • 在表中加入另一个外键属性参照本表主键属性。

  • 当将M:N的实体递归联系转换为关系模型时,我们需要增加关联表来参照约束原实体关系表。

情况1:N

【例】在图4-37所示的E-R模型中,“顾客”实体为递归实体,该递归实体之间为1:N实体联系。

  • 该E-R模型描述了“顾客”实体之间存在的1:N递归联系,即每个顾客都可以推荐N个新客户,每个客户只能被一个人推荐
  • 对仅有的这个实体转换为关系表,并在该关系表中增加一个外键其值参照约束于主键

情况M:N

【例】在图4-39所示的E-R模型中,“医生”实体为递归实体,该递归实体之间为M:N实体联系

  • 医生相互治疗
  • 对医生实体转化为关系表,并由联系派生出“治疗”表
  • 递归关系两端是同一张表,因此我们将医生表的主键加入派生表两次,以构成复合主键【列名要唯一】

一个E-R模型转换到关系模型的整体系统物理数据模型设计。

这篇关于4.3数据库建模设计:三个阶段的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!