​ 数据库系统4——设计篇:概念数据库设计、逻辑数据库设计、物理数据库设计。

数据库设计概述与需求分析

概念:对于一个给定的应用领域,设计优化的数据库逻辑和物理结构,使之满足用户的信息管理要求数据操作要求,有效地支持各种应用系统的开发和运行。

  • 信息管理要求:在数据库中应该存储和管理哪些数据对象
  • 数据操作要求:对数据对象需要进行哪些操作
数据库设计目标

为用户和各种应用系统提供一个基础设施和高效的运行环境

  • 数据信息完整、冗余度低
  • 存取效率高
  • 运行管理效率高
数据库设计
中心:用户需求

数据库设计包括:

  • 设计数据库模式
  • 设计访问和更新数据的程序
  • 设计数据访问的安全模式

各级模式形成过程:

需求分析$\rightarrow$概念数据库设计$\rightarrow$逻辑数据库设计$\rightarrow$物理数据库设计

  • 需求分析:综合应用需求
  • 概念数据库设计:形成概念模式(E-R图)
  • 逻辑数据库设计:首先将E-R图转换成数据模型(如关系模型),形成逻辑模式,再根据安全性和用户需求形成外模式
  • 物理数据库设计:进行物理存储安排

概念数据库设计

概述

设计任务:

  • 概念数据库模式设计
  • 事务设计

概念数据库模式独立于任何数据库管理系统,不能直接用于数据库的实现。

用于概念数据库设计的高级数据模型——实体联系模型

实体联系(E-R)模型

三个主要元素:实体、属性、联系

实体

  • ER模型的基本对象
  • 每个实体都有一组特征或性质——属性
    • 实体属性的一组特定值确定了一个特定的实体
    • 实体的属性值是数据库中存储的主要数据
  • 实体集:相同类型的实体的集合
    • 实体集不必互不相交

属性

  • 单值属性、多值属性
    • 一些属性的取值可能是多个(eg:联系方式)
  • 简单属性、复合属性
    • 符合熟悉具有层次结构(eg:家庭住址可再分)
  • 派生属性
    • 可以由其他属性导出(eg:年龄可由生日导出)
  • 码的概念

联系

  • 不同实体集的实体之间存在的某种关联

  • 联系集:同类联系的集合

    • 称一个联系集所关联的实体集的数量为这个联系集的阶
    • 阶为n的联系集称为n元联系集
    • 联系集的属性
  • 约束

    • 映射基数
      • 一个实体通过一个联系能关联的实体的个数
        • 一对一、一对多、多对多
    • 参与约束
      • 全城关联约束
        • eg:每个教研室必须属于一个系,则教研室实体集与属于联系集有全程关联约束
      • 部分关联约束
        • eg:不是每个教师都是主任
  • 弱实体集

    • 必须有一个或多个属性,使得这些属性可以与主实体集的码相结合,形成相应弱实体的码

      • 上述属性称为弱实体集的部分码
      • eg:父亲实体集与孩子实体集(不同父亲的孩子名字可以相同,同一个父亲的孩子姓名一定不同)

实体联系图(ER图)

这部分略了先qvq…

事务设计

  • 事务:一个或多个数据操作构成的集合,这组操作满足原子性

  • 设计任务:定义事务功能、说明事务的输入输出。

本章重点:实体联系模型、实体联系图、账务概念数据库设计方法

逻辑数据库设计

设计任务:把概念数据库设计产生的概念数据库模式变换为逻辑数据库模式。

  • ER图$\rightarrow$关系表

逻辑数据库设计的步骤

  • 形成初始关系数据库模式
  • 关系模式规范化
  • 关系模式优化
  • 定义关系上的完整性和安全性约束
  • 子模式定义
  • 性能估计
形成初始关系模式
  • 普通实体集变换
  • 弱实体的变换
    • 主实体集的码和弱实体集的部分码构成关系的主码
  • 多值属性的变换
    • 为每个多值属性建立一个关系
  • 实体间联系的变换
    • 一对一:在其中一个关系中增加有关信息、或建立单独关系
    • 一对多:可以不建立新关系、也可以建立
    • 多对多:建立新关系
    • n元联系的变换:和多对多类似
关系模式规范化
为了避免由函数依赖引起的冗余问题、插入问题、更新问题和删除问题

函数依赖

  • 定义:设R是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R的任意实例r,r中任意两个元组t1和t2,如果t1[X]=t2[X],则t1[Y]=t2[Y],我们称X函数地确定Y,或Y函数依赖于X,记作X→Y。

    • 如果X→Y且Y不是X的子集,则称X→Y是非平凡函数依赖
    • 如果X→Y,称X为这个函数依赖的决定属性集
  • 完全函数依赖与部分函数依赖

    • X取任何真子集都不能使依赖成立——完全函数依赖
  • 传递地函数依赖

  • 各种码:

    • 超码:可以唯一地识别关系的元组
    • 候选码:超码且不能取真子集
    • 主码:被选中的孩子!(x候选码)
    • 键属性:包含在某个候选码中的属性
    • 非键属性:不包含在任何候选码中的属性
    • 全键:候选码包含所有属性
    • 外码:某个属性子集合是另一个关系模式的主码

函数依赖的公理系统

Armstrong公理系统——模式分解算法的理论基础
  • 设R是一个具有属性集合U的关系模式,F是R上的函数依赖集合。如果对于R的任何一个使F称的关系实例r,函数依赖X→Y都成立,则称F逻辑蕴含X→Y。

  • Armstrong公理系统

    • 自反率:$Y \subseteq X \subseteq U,$则 X→Y 为F所蕴含。
    • 增广率:若 X→Y 为F所蕴含,且$Z \subseteq U$,则XZ→YZ为F所蕴含。
    • 传递率:若 X→Y 及 Y→Z 为F所蕴含,则 X→Z为F所蕴含。
    • 导出规则:
      • 合并规则(左部相同右部可合并)
      • 伪传递规则(X→Y,WY→Z,则XW→Z)
      • 分解规则(Z $\subseteq$ Y,X→Y,则X→Z)
  • 闭包:大概就是给的能推出来的都加进去

  • 对于给定关系模式和函数依赖集,可将属性分为四类

    • L类:仅出现在函数依赖左部
      • 必为任一候选码的成员
    • R类:仅出现在右部
      • 不在任何候选码中
    • N类:在两边都未出现
      • 必包含在任一候选码中
    • LR类:两边都出现
    • 推论:如果X是N、L两类属性组成的属性集且X的闭包包含了R的全部属性,则X是R的候选码
  • 极小函数依赖集:

    • F中任一函数依赖右部仅含有一个属性
    • 不存在X→Y使得F与F-{X→Y}等价
    • 不存在X→Y,X有真子集Z使得F-{X→Y}∪{Z→Y}与F等价
    • 极小函数依赖集不唯一
  • 计算极小函数依赖集的方法:

    • 拆分右部
    • 逐一去掉某函数依赖(X→Y)判断剩余是否仍满足X→Y(计算闭包)
    • 逐一判断能否去掉右部某一部分使其仍成立

关系模式的规范形式

$1NF \supset 2NF \supset 3NF \supset BCNF \supset 4NF$
  • 第一范式(1NF)

    • 每个属性的值域是不可分的简单数据项的集合
    • 问题
      • 插入异常、删除异常、数据冗余度大、修改复杂
    • 存在部分函数依赖
  • 第二范式(2NF)

    • 每一个非键属性都完全函数依赖于候选码
    • 可以由1NF模式分解得到多个2NF,减轻了问题。
    • 存在非键属性对候选码的传递函数依赖
  • 第三范式(3NF)

    • 任何一个非键属性都不传递依赖与任何候选码
    • 仍不能完全消除问题
    • 键属性部分依赖于候选码
  • BC范式(BCNF)

    • 1NF且对于每个函数依赖,左部必为候选码
    • 性质:
      • 所有非键属性都完全依赖于每个候选码
      • 所有键属性都完全依赖于不包含它的候选码
      • 没有任何属性依赖于非键的一组属性
    • 满足BCNF一定满足3NF
    • 效处理插入和删除异常

关系模式的分类

  • 静态关系:一旦数据已经加载,只能查询不能插入删除更新
    • 需满足1NF
  • 动态关系:经常插入删除更新
    • 需满足3NF
不能说规范化程度越高的关系模式就越好(考虑实际情况和用户需求)

分解时的要求:既可以通过自然连接恢复为原来的关系(无损连接性),也不丢失函数依赖

判断无损连接性:分解后的函数依赖的并集是否完全包含原本的函数依赖集

分解为具有无损连接和保持函数依赖的3NF

  • 根据绩效函数依赖及合并左部相同部分
  • 分解后判断是否包含候选码,不包含加入
  • 合并包含关系
关系模式优化
提高数据的操作效率和存储空间利用率

常用分解方法

  • 水平分解:把元组分成若干个子集,定义每个子集为一个子关系
  • 垂直分解:需要注意保持无损连接性和函数依赖
定义关系上的完整性和安全性约束
  • 完整性约束
    • 属性上的完整性约束
    • 多个属性键的完整性约束
    • 不同关系模式的完整性约束
  • 安全性约束
    • 属性上的安全性约束
    • 关系模式上的安全性约束
子模式定义

利用视图定义外模式

  • 属性重命名
  • 不同级别不同视图
  • 简化用户使用
性能估计
对时间复杂性和空间复杂性进行估算

三个测度:逻辑记录存取数、信息传输量、存储空间占用量

本章小结:熟练掌握实体联系模型向关系模式的转换;掌握函数依赖,Armstrong公理系统,各种NF;掌握无损连接性、函数依赖保持性,关系模式分解算法。

物理数据库设计

设计任务:选择合适的存储结构和存取方法,是数据库上的事务可以高效率允许

设计步骤

  • 分析影响物理数据库设计因素
  • 为关系模式选择存取方法
  • 设计关系、索引等数据库文件的物理存储结构

常用存取方法

  • 聚集方法
    • 把经常进行连接操作的多个关系的记录以链接属性为中心分类存储
    • 一个物理数据库可以由多个聚集存储,但是一个关系只能加入一个聚集存储
    • 选择方法
      • 确定聚集关系组:
        • 经常连接操作的关系
        • 一个关系的某组属性经常出现在相等比较条件中
        • 某一(组)属性实例重复率很高
        • 取消不必要关系:经常全关系扫面的,更细删除操作远大于连接操作的。
      • 确定优化的聚集方案
  • 索引方法
    • 确定候选索引方法:
      • 经常出现在查询操作条件
      • 经常作为聚集函数参数
      • 经常在连接操作的连接条件中
      • 经常作为投影属性使用
    • 索引存取方法的选择
  • HASH方法
    • 选择规则:经常出现在相等连接操作条件中或相等比较选择条件中,且满足:
      • 如果关系大小可预知且不变
      • 如果关系大小动态改变且数据库管理系统提供了动态HSAH存取方法

物理存储结构设计

确定如何在磁盘存储器上存储关系、索引和聚集,使得空间利用率最大化,数据操作引起的系统开销最小化。

本章重点:掌握数据库物理存储结构和存取方法的设计


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!