前言
这章主要介绍了数据库设计的相关概念,整体目标和需要解决的问题。并按照新奥尔良设计方法对需求分析、概念设计、逻辑设计几个阶段的具体工作进行了详细说明
一、数据库设计概述
-
什么是数据库设计?
数据库设计是指对于一个给定的应用环境,构造优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求。 -
数据库设计的目标
设计目标:为用户和各类应用系统提供一个信息基础设施和高效的运行环境
高效的运行环境包括:
数据库数据的存取效率
数据库存储空间的利用率
数据库系统运行管理的效率
3.数据库设计方法
== 新奥尔良方法==的四个阶段
- 需求分析(分析用户需求)
- 概念设计(信息分析和定义)
- 逻辑设计(依据实体联系进行设计)
- 物理设计(物理结构设计)
二、需求分析
需求分析阶段主要是收集信息并进行分析和整理,为后续阶段提供充足信息。
需求分析阶段需要:
- 了解现有系统的运行概况。
- 确定新系统的功能要求。
- 收集能够实现目标的基础数据及相关的业务流程。
三、概念设计
概念设计的任务?
分析用户提出的需求,对用户需求进行综合、归纳和抽象,形成一个独立于具体数据库管理系统的概念层次抽象模型,即为概念数据模型。
- E-R方法
1976年P.P.S.Chen提出了实体-联系(Entitiy-Relationship)方法,即E-R方法。
简单、实用。
是构建概念模型常用的方法之一。
-
E-R方法使用的工具称为E-R图
-
E-R图在概念设计阶段使用的比较广泛。
-
用E-R模型表示的数据库概念非常直观,易于用户理解。
-
E-R图主要由实体、属性和联系三个要素构成。
实体:
具有公共性质并且可以相互区分的现实世界对象的集合,例如:老师,学生,课程都是实体。实体中每个具体的记录值,如学生实体中每个具体的学生,称之为实体的一个实例。
在E-R图中一般用矩形框表示具体的实体。属性:
描述实体性质或特征的数据项。
属于一个实体的所有实例都具有相同的性质。这些性质和特征就是属性,比如学生的学号、姓名和性别等。在概念模型中一般用圆角矩形框表示属性。
联系:
描述实体内部以及实体之间的联系。
联系使用菱形框表示。
实体之间的联系通常分为3类:- 一对一联系(1:1):例如一个班级有一个班主任。
- 一对多联系(1:n): 例如一个班级有n个学生组成。
- 多对多联系(m:n):例如学生选修课程。一个学生可以选修多门课程,一门课程也可以被多个学生选修。
四、逻辑设计
逻辑设计:
这个阶段是将概念模型转化为具体的数据模型的过程。
按照概念设计阶段建立的基本E-R图,按选定的目标数据模型(层次、网状、关系、面向对象),转换成相应的逻辑模型。
这个阶段主要的工作就是确定关系模型里面的属性和码(或者说主键)
比较常用的方式是使用E-R设计工具,IDEF1x方法来进行逻辑模型建设,常用的ER图表示法包括IDEF1x,IE模型的Crow’s foot ,UML类图方式等。
-
IDEF1X方法
IDEF1X(Integration DEFinition for Information Modeling):信息模型集成定义。
IDEF1X是IDEF系列方法中IDEF1的扩展版本,是在E-R(实体联系)方法的原则基础上,增加了一些规则,使语义更为丰富的一种方法。IDEF1X特点:
- 支持概念模型和逻辑模型开发所必需的寓意结构,具有良好的可扩展性。
- 在语义概念表达上具有简明的一致性结构。
- 便于理解,对于业务人员,IT技术人员,数据库管理员和设计者来说都可以基于相同的语言进行交流。
- 可以自动化生成,商业化的模型软件支持IDEF1X模型设计方法,可以快速在各层级模型中相互转换
-
逻辑模型中的实体
根据实体的特点,可以划分为两类- 独立型实体(Independent Entity)
- 直角矩形表示。
- 不依赖于其他实体,可以独立存在。
- 依赖型实体(Dependent Entity)
- 圆角矩形表示。
- 必须依赖于其它实体而存在。
- 依赖型实体中的主键必须是独立实体主键的一部分或者全部。
- 独立型实体(Independent Entity)
可以从图例中看出,独立性实体的主键会出现在依赖型实体的主键中,成为依赖型主键的一部分。这个实例中,我们可以看出章节依赖于书
所以章节实体依赖于书实体存在。
- 实体中的属性
属性是实体的特征,需要注意的类型有:-
主键(Primary Key)
识别实体实例唯一性的属性或属性组。 -
可选键
能识别实体实例唯一性的其他属性或者属性组。 -
外键
两个实体发生关联,一个实体的外键是另外一个实体的主键。
也可以把主键实体称为父实体,拥有外键的实体称为子实体。 -
非键属性
实体里面除主键和外键属性外的其他属性。 -
派生属性
一个字段可以被统计出来或者从其它字段推导出来的字段。
-
例如,学生里面姓名不能作为主键,因为重名的人会很多。那么学号或者身份证号就可以唯一的识别一个学生,可以作为主键。
- 主键、外键和索引之间的关系
| 主键 | 外键 | 唯一索引 | 非唯一索引 | |
|---|---|---|---|---|
| 特点 | 唯一标识一个实例,无重复值,非空。不应该被更新 | 另外一个实体的主键,可以重复,可以为空。 | 建立在表上的对象。无重复值,可以有一个空值 | 建立在表上的对象,可以为空,也可以重复值 |
| 作用 | 确定记录唯一性,保证数据完整性。 | 建立数据参考一致性。建立两个实体之间的关系。 | 提高查询效率 | 提高查询效率 |
| 数量 | 一个实体只能有一个 | 一个实体可以有多个外键 | 一个表可以有多个唯一索引 | 一个表可以有多个非唯一索引 |
-
主键用来识别唯一记录。
-
外键体现两个实体之间存在关系。
-
对外键可以重复的说明: 属性A在X表中是外键,在X表中是可以重复的。因为是外键,所以一定是另 - 外一个表的主键,假设为Y表,在Y表里面作为主键的情况下,就不允许重复了。
-
主键和外键是逻辑模型中的概念,
-
索引是物理层面,数据库中的具体对象。
-
实体间的关系
-
关系是描述实体间如何发生关联
一本书“包括”若干个“章节”。“包括”就是这两个实体之间的关系。
关系是有方向性的。
--------->关系的方向性意思是:包括这个关系,是书包括章节,而不是章节包括书。
--------->章节->书的关系是属于的关系 -
关系基数(Cardinality)
反映两个或多个实体间关系的业务规则
关系基数实际上就是在这里用特定的表示法来表达E-R方法里面的联系这个概念,一对一,一对多,多对多。
-
-
IDES1x中基数的图例
对于基数图例的说明也反映出一个重要的点就是基数反映了不同的关系,这种关系很可能反映出重要的业务规则或者约束。
| 基数 | 描述 |
|---|---|
| 0,1或多个 | 表示的是1对多关系,多的一方的基数是0,1或者n个; |
| 1或者多个 | 表示的是1对多关系,多的一方的基数是1或者n个; |
| 这两个关系的区别就在于是否会有0, 如果有0就是一个可选的关系,就是关系可能存在,英语表达的是may的意思;而取值不为0的基数,就是强制的关系,就是关系一定存在,英语表达的是must的意思。 | |
| n | 表示的有且只有n的强营收和关系。比如一个矩形,有且只有4个直角。那么矩形和直角就是1->4的关系。 |
| n-m | 表示的是一个范围区间关系。比如月份和天数的关系,一个月有多少天,随着大小月和闰年的不同, 月和天数的关系就是 1->(28-31) |
| {n} | 表示基数的关系不能用简单的数字说明,需要通过注释来说明这个n的取值范围。这种注释说明在实际项目中就体现了一些业务规则。举个不是十分恰当的例子,一个月与证券交易日的关系。那么一个月里面含有多少个有效的证券交易日,要看证券交易所规定每个月可以进行上市交易的日期,每年随着政策变化而变化,需要另外说明。 |
- 基数实例
0,n是可能may的表达形式,是可选的option的要求 1,n是一定must的强烈表达形式,是强制性的mandatory的要求
关系基数实际上就是在这里用特定的表示法来表达E-R方法里面的联系这个概念,一对一,一对多,多对多。
- 识别性关系
识别性关系(Identifying relationship)
- 发生在独立型实体和依赖型实体之间。
- 子实体的实例唯一性的识别与父实体相关联。
- 父实体的主键属性成为子实体的主键属性。
- 非识别性关系
-
子实体不需要与父实体的关系就可以确定实例唯一性。
- 外键的位置又决定了父子实体是否是识别性关系还是非识别性关系
- 外键出现在子实体的主键里面,就是识别性关系
- 外键出现在子实体的非键属性里面,就是非识别性关系
- 如果是识别性关系那么子实体就是依赖实体
- 如果是非识别性关系,就是这个表里面的章节号都不能重复,而识别性关系里面,书本id是作为主键属性的,所以不同的书是可以拥有相同章节号的。
这个图例中,章节实体不依赖于书实体,所以每个章节号只能有一个记录,这样的设计并不符合实际情况,也说明这种设计是有问题的,需要把非识别关系修改成识别关系。
- 嵌套关系
父实体和子实体为同一个实体,形成递归或者嵌套的关系。
实体的主键也成为自身的外键。
构成自身层级关系的实体就会出现嵌套关系
部门有上级部门和下级部门
一个部门可能拥有一个或多个下级部门
最底层的部门不再拥有下级部门
一级部门也没有上级部门
- 子类关系
子类实体和所属父实体的关系
-
完全子类关系。
所属父实体的每个实例都能够与子类群的一个实体实例相关联。 -
不完全子类关系。
所属父实体的每个实例不一定都与子类群相关联。
五、总结
总而言之,逻辑模型的基本概念就是:
- 实体就是描述业务的元数据。
- 主键是识别实体每一个实例唯一性的标识。
- 只有存在外键,实体之间才会存在关系,没有外键不能建立关系。
- 关系的基数反映了关系之间的业务规则。