• 0

  • 14

数据库系统原理——数据库建模

猿人不正经

不想写代码

2星期前

一. 数据库设计过程的概述

1. 基本概念

(1). 数据库设计定义

数据库设计就是根据各种应用处理的要求、硬件环境及操作系统特性等,将现实世界中的数据进行合理组织,并利用已有的数据库管理系统(DBMS)来建立数据库系统的过程。

2. 设计流程

(1). 需求分析(设计的基础、最困难、最耗时)

1. 目的

了解和分析系统将要提供的功能及未来数据库用户的数据需求

2. 系统需求分析流程

(1). 需求概述和系统边界
(2). 主要业务处理流程
(3). 功能需求分析
(4). 数据需求分析
(5). 业务规则及完整性约束分析

3. 结果

这一阶段分析的结果是形成用户的需求规格说明

(2). 概念设计

1. 要求

根据需求分析中得到的信息,设计者次阶段需选择适当的工具将这些需求转化为数据库的概念模型

2. 流程

一般是建立各个子系统(即对应外模式的局部应用)的概念模型,再综合得到整个系统的概念模型。

3. 主要内容

我们主要基于E-R模型的数据库概念设计,通过实体、联系、属性等概念和工具精确的描述系统的数据模型,不受采用逻辑数据模型的限制影响,根据数据库系统的具体实现转换为特定的逻辑数据模型

4. 主要步骤

(1). 确定基本实体集及属性
(2). 主要业务局部概念建模
(3). 定义联系集及属性
(4). 画出完整的E-R图

(3). 逻辑设计

1. 步骤

将数据库的概念设计转化为所选择的数据库管理系统支持的逻辑数据模型,即数据库模式

(4). 模式求精

1. 目的

以关系数据理论作为指导,对已得到的关系数据库模式进行分析,找出潜在的问题并加以改进和优化,如减少数据冗余,消除更新、插入、删除异常

(5). 物理设计

1. 概念

考虑数据库要支持的负载和应用需求,为逻辑数据库选取一个最合适现实应用的物理结构

包括数据库文件组织格式、内部存储结构、建立索引、表的聚集

2. 目标

  1. 提高数据库性能,以满足应用的性能需求
  2. 有效利用存储空间
  3. 在性能和代价之间做出最优平衡

3. 数据库的物理结构依赖DBMS和运行环境,设计人员要考虑以下内容

  1. 数据库的物理组织
  2. 确定数据存储结构
  3. 确定数据存取路径
  4. 确定系统配置
  5. 物理结构评价
  6. 影响物理设计的主要因素

(6). 应用与安全设计

1. 数据库系统安全要求

数据库系统必须指出哪些用户可以访问数据库以及它们通过哪些存储过程访问数据库,还要描述每个用户在每个过程所扮演的角色,对每个角色必须明确指出它们能够存取数据库的哪些部分

二. 数据设计流程的详解

(1). 概念设计——E-R模型

1. E-R模型基本概念及表示

在现实世界中,事物内部以及事物之间存在着各种各样的联系
事物内部的联系表现为组成事物的各个特征之间的联系
事物之间的联系表现为不同事物之间的联系

E-R模型采用实体集、联系集、属性3个基本概念分别描述事物、联系、特征

(1). 实体与实体集

1. 什么是实体?
 客观世界中可区别于其他事物的“事物”或“对象”
	
实体既可以是有形的、实在的事物,也可以是抽象的,概念上存在的事物
2. 实体的特征
独立存在
可区别于其他事物
3. 什么是实体集
具有相同类型即相同性质的实体集合
4. 实体集的特征
实体集可以相交
5. 实体集的分类
  1. 弱实体集

     定义:实体集中属性不足以形成主码,它们必须依赖于其他实体集的存在而存在
    
  2. 强实体集

     定义:实体集中的属性可以自己形成主码
    

(2). 属性

1. 什么是属性?
实体是通过一组属性来描述的,属性是实体集中每个实体都具有的特征描述
2. 属性的特征
在一个实体集中,所有实体都具有相同的属性

对于一个属性来说,每个实体都拥有自己的属性值
3. 属性的域
一个属性所允许的取值范围或集合
4. 描述学生实体集的数据字典

在这里插入图片描述

5. 属性的分类

在这里插入图片描述

  • 简单属性

      定义:不能再分为更小部分的属性
    
  • 复合属性

      定义:可以进一步划分为更小部分的属性
      
      举例:
      		学生实体集的家庭住址,划分为省、市、街道
    
  • 单值属性

      定义:某属性对一个特定实体任何时候都只能有单独一个值
      
      举例:学生实体中的学号
    
  • 多值属性

      定义:某属性对一个特定实体任何时候可能有多个值
      
      举例:学生实体集的电话号码
    
  • 派生属性

      定义:属性的值可以从其他相关属性或实体派生出来
      
      举例:学生实体集的年龄、学生实体集已修学分	
    

注:

当实体在某个属性上没有值或值未知时可使用空值(NULL)
6. 多值属性的变换
  1. 方案一

    方法:将多值属性转换为多个单值属性进行表示
    在这里插入图片描述
    缺点:

    1. 缺少弹性,当需要增加电话时,需要修改模型
    2. 浪费存储空间,不是所有学生都有4个电话
  2. 方案二

    方法:将多值属性单独建模为一个弱实体集,他依赖于原实体集而存在
    在这里插入图片描述

(3). 联系与联系集

1. 什么是联系?
指多个实体间的相互关联
2. 什么是联系集
指同类联系的集合
3. 多联系
多个不同的联系集定义在一些相同的实体集上

在这里插入图片描述

4. 实体的角色
定义:实体在联系中的作用
	
特点:
	由于参与一个联系的实体集通常是不同的,因而角色是隐含的并且常常不需声明
	
	当参与联系集的实体来自相同的实体集时,就需要声明角色

在这里插入图片描述

5. 联系集的度
定义:参与联系集的实体集的数目
	
注:数据库系统大多数联系集都是二元的

(4). 使用E-R图来表示实体集、属性、联系

在这里插入图片描述
在这里插入图片描述

2. 约束

(1). 映射约束

1. 什么是联系集R的映射基数
实体集A中的一个实体通过某联系集R能与实体集B中的实体相联系的数目
2. 二元联系中,映射基数分类
(1). 一对一
  1. 定义

    A中的一个实体至多同B中的一个实体相联系,B中的一个实体至多同A中的一个实体相联系

  2. 举例:实体集销货单和发票参与的联系集开发票
    在这里插入图片描述

(2). 一对多
  1. 定义

    A中的一个实体至多同B中的任意数目的实体相联系,而B中的一个实体至多同A中的一个实体相联系

  2. 举例:实体集班级和学生参与的联系集包含
    在这里插入图片描述

(3). 多对多
  1. 定义

    A中的一个实体可以同B中任意数目的实体相联系,而B中的一个实体也可以和A中任意数目的实体相联系

  2. 举例:实体集学生和课程参与的联系集选课
    在这里插入图片描述

(4). 使用E-R图来反映联系集的映射基数

在这里插入图片描述

(5). 什么类型联系集可以有自己的联系属性
  1. 多对多的联系集
    在这里插入图片描述

  2. 一对多的联系集
    在这里插入图片描述

(2). 码约束

1. 实体集的码

超码
候选码
主码

详细见:数据模型章节
2. 联系集的码

在这里插入图片描述

3. 联系集的属性安置

联系集可以有属性,也可以没有属性,要根据应用语义而定,但多值联系必有属性

二元联系集的属性安置,要根据联系集的映射基数而定

  1. 一对一联系集的属性:可以安置在任一边的实体集上
  2. 一对多联系集的属性:可安置在联系集上,也可安置在多的那一边的实体集上
  3. 多对多联系集的属性:描述相关联实体集间的交互性语义,只能安置于联系集上

(3). 依赖约束

实体集间的联系含有各种不同的语义,各实体在联系集中的成员资格也不一样。有的实体集完全独立于其他实体集而存在,有的实体集依赖于另一实体集的存在而存在

1. 定义
指联系中一种实体的存在依赖于该联系集中联系或其他实体集中的实体的存在
2. 分类
实体集与联系集之间的依赖约束
指联系中一种实体的存在依赖于该联系集中联系的存在

依赖实体集:依赖于联系集而存在的实体集

在这里插入图片描述

实体集之间的依赖约束
指联系中一种实体的存在依赖于其他实体集中实体的存在

弱实体集:依赖于其他实体集而存在的实体集

(4). 参与约束

分类
  1. 实体集A全部参与联系集R

     定义:实体集A中的每个实体都参与到联系集R中至少一个联系集
     
     E-R图表示方法:使用双实线表示
    
  2. 实体集A部分参与联系集R

     定义:实体集A中只有部分实体集参与到联系集R的联系中
    

(5). 多值联系

1. 定义

指在同一个给定的联系集中,相关联的相同实体之间可能存在多个联系

2. 举例

在这里插入图片描述

3. 上述E-R模型存在的问题
  1. 问题一:

    当一个客户向同一银行申请多笔贷款时,则联系集中无法唯一标识一个联系
    (即贷款不仅是一个多对多联系,还是一个多值联系)

  2. 问题二

    如果有多个银行联合发放一笔贷款,或由多个用户共同借一笔贷款,则会出现数据冗余问题
    (在联系集中反映该笔贷款的贷款编号、贷款日期、等重复多遍)

4. 解决办法

将多值联系建模为依赖实体集弱实体集

3. 弱实体集

1. 什么是弱实体集

实体集中属性不足以形成主码,它们必须依赖于其他实体集的存在而存在

2. 标识实体集

弱实体集所依赖的强实体集称为标识实体集

3. 标识联系集

弱实体集与一个标识实体集的联系

4. 部分码

对于给定的标识实体集,一个弱实体集中用来标识弱实体集的属性(集)称为该弱实体集中的部分码

弱实体集中的实体由其标识实体集中的主码与其部分码共同标识

5. E-R图实例

在这里插入图片描述

6. E-R表示弱实体集

  1. 双矩形表示弱实体集
  2. 双菱形表示标识联系集
  3. 虚下划线表示弱实体集部分码

注:

标识联系集可以不需要联系属性,因为任何所需的联系属性都可直接定义为弱实体集的属性

7. 弱实体集的适用范围

(1). 多值联系建模为弱实体集
(2). 多值属性转换为弱实体集

4. 扩展E-R模型

(1). 类层次

  1. 什么是ISA

    表示高层实体和低层实体之间的“父类-子类”联系,称为类层次或属性继承(子类继承父类所有属性)

  2. E-R模型实例

    E-R模型使用实体集的继承和ISA联系来描述这种概念上的层次关系
    在这里插入图片描述

(2). 聚合

1. 什么是聚合?
聚合是一种抽象,它将一个联系集及其相关联的实体集抽象为一个联系实体集对待,
然后建立该联系实体集与其他实体集之间的联系集

适用于:建立联系集间的联系
2. 聚合的E-R建模
  1. 方式一
    在这里插入图片描述
  2. 方式二
    在这里插入图片描述

5. E-R模型建模问题

(1). E-R建模的基本原则

  1. 忠实性

     设计应忠于应用需求,即实体集、联系集、属性都应当反映现实世界
    
  2. 简单性

  3. 避免冗余

     一个原则是:一个对象只存放在一个地方
    
  4. 选择实体集还是属性

    满足以下规则可作为属性对待
    在这里插入图片描述

  5. 选择实体集还是联系集
    在这里插入图片描述

  6. 多元联系转化为二元联系

举例一:
在这里插入图片描述
举例二:
在这里插入图片描述

(2). 依赖约束的建模

(3). 多值联系的建模

1. 将多值联系建模为弱实体集
2. 将多值联系建模为依赖实体集

6. 数据库概念设计实例

大学选课系统

(2). 逻辑设计——E-R模型转换为关系模型

1. E-R模型转化方法

(1). 强实体集转化方法

(2). 弱实体集转化方法

(3). 复合属性及多值属性转化方法

(4). 类层次转化方法

(5). 聚合转化方法

2. E-R模型转化实例

大学选课系统

(3). 数据库模式求精

1. 设计数据库出现的问题

(1). 数据冗余导致的问题

  1. 什么是数据冗余

     指同一信息在数据库中存储了多个副本
    
  2. 数据冗余会导致什么问题
    在这里插入图片描述

  3. 解决方法
    在这里插入图片描述

(2). 模式分解导致的问题

  1. 模式分解引出的问题
    在这里插入图片描述
  2. 如何解决呢?

问题一的解决办法
在这里插入图片描述
问题二的回答

一些基本概念:
	有损分解:模式分解后再通过连接后所得到的信息变少了
	无损分解:通过连接分解后所得到的较小关系完全还原被分解关系的所有实例
	
	保持依赖:被分解关系模式上的所有依赖关系都在分解得到关系模式上保留
	没有保持依赖:模式分解之后部分属性之间的依赖关系丢失

所以:不是所有的模式分解都是有益的

2. 模式求精的要求和解决办法

(1). 模式求精的要求

减少冗余进行模式分解,分解后的模式是具有无损连接、保持依赖的特性

(2). 模式求精的解决办法

通过以下方法解决数据冗余和模式分解带来的问题:

  1. 函数依赖
  2. 范式
  3. 函数依赖理论
  4. 模式分解算法

3. 函数依赖定义

4. 范式

5. 函数依赖理论

6. 模式分解算法

三. 数据库的设计实例

免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

14

相关文章推荐

未登录头像

暂无评论