数据库概论

数据库设计

2020-01-01 00:13 CST
2020-01-01 00:13 CST
CC BY-NC 4.0

数据库设计

9.1 数据库设计概述

  • 数据库设计的基本任务

  • 数据库的生命周期

    9.2 数据库设计的需求分析

  • 需求说明书

    9.3 数据库的概念设计

  • 数据库概念设计的过程

  • E-R模型与扩充E-R模型的设计

    9.4 数据库的逻辑设计

  • 从E-R模型和扩充E-R模型向关系模型的转换

  • 对转换得到的关系模式进行规范化设计

    • 根据给定的数据完整性约束发现函数依赖(最小函数依赖集)
    • 关键字的计算
    • 范式的判断及分解

    9.5 数据库的物理设计

  • 索引的作用及其设计策略

数据库设计概述

设计的基本任务:

  • 根据用户对象的信息需求(用户的数据、结构及其要求)、处理需求(用户对数据的处理过程和方式)和数据库的支持环境(包括硬件、操作系统、DBMS)设计出数据模式
  • 在一定平台制约下,根据信息需求和处理需求设计出性能良好的数据模式

数据库设计的生命周期法:需求分析、概念设计、逻辑设计、物理设计、编码、测试、运行、进一步修改

其中数据库设计的四个阶段:需求分析、概念设计、逻辑设计、物理设计

数据库设计的需求分析

确定需要在数据库中保存其信息的客观事物及其相互关系

可以从三个角度分析数据库的数据需求:

  • Things
  • Atrributes
  • Relationships

数据库的概念设计

数据库概念设计的过程:

  • 用户分解:首先将所有用户划分为功能相对独立的若干个用户组,然后针对每个用户组进行视图设计。
  • 视图设计:针对每个用户组设计其数据视图,以反映该组用户对于数据的需求。
  • 视图集成:将设计好的若干个局部数据视图集成为一个完整的全局数据视图。
    • 确定所采用的原理与策略
    • 规划视图的集成步骤
    • 发现并解决可能存在的冲突现象

视图集成的原理与策略:

  • 等同:指两个或多个数据对象具有相同的语义。包括:属性等同,实体等同,语义相关等同(属性-实体)。如同义同名,同义异名
  • 聚合:数据对象之间的一种组成关系。
    • 由属性聚合成实体
    • 由属性和实体聚合成新的实体
  • 抽取: 将不同实体中的相同属性提取成一个新的实体,并构造成具有继承关系的结构。
  • 常见的几种冲突现象(通过视图修改来解决)
    • 命名冲突:同义异名,同名异义。通过重命名来实现 “同名同义,异名异义”
    • 概念冲突:同一概念在一处为实体,而在另一处则为属性或联系。解决方式:统一为同一个概念(一般为“实体”)
    • 域冲突:例如类型冲突,度量单位的冲突。解决方式:统一 “数据类型” 和 “度量单位”
    • 约束冲突。解决方式:统一数据约束。如果无法统一数据约束,可以视情况来处理:1)如果不同数据约束的语义之间有包含关系,可以尝试构建具有‘父子’关系的继承层次结构,子类可以有比父类更严格的数据约束。2)构建不同的实体集

E-R模型:实体、属性、联系

扩充E-R模型的设计:属性、实体、联系、嵌套、继承

数据库的逻辑设计

任务:将前一阶段得到的概念数据模型转换成用户所选择的数据库管理系统支持的逻辑数据模型

从E-R模型和扩充E-R模型向关系模型的转换:

  • 每个实体集被转换成一个关系(模式)。关系及其属性的命名采用原实体集及其属性的名称。实体集的标识属性为关系中的关键字
  • 在一般情况下,每个联系也被转换成一个关系模式,联系名被用作转换得到的关系模式的关系名,该关系模式中的属性由两部分组成:联系自身所具有的属性与该联系相关的实体集的标识属性。来自于相关实体集的标识属性也是相关实体集转换得到的关系模式的主关键字,因此它们也是联系转换得到的关系模式中的外关键字

命名与属性域的处理

关系及属性的命名:

  • 尽量采用在EE-R模型中原有的名称
  • 可以重新命名,但要避免命名的冲突现象:在同一个数据库模式中,关系名具有唯一性;在同一个关系模式中,属性名具有唯一性

属性域的定义:根据DBMS的选型进行必要的数据类型转换

非原子属性处理

集合属性:关系模式不变,但原有关系的一个元组将被纵向展开成多个元组。在上述转换过程中,虽然实体集(或关系模式)中的属性没有增加,但转换得到的关系模式的主关键字由原实体集的标识属性和该集合属性联合构成(红色的属性名集合)。如一个学生对应多门课程,展开后,学号和课程名的组合构成了新的关键字

元组属性:将一个元组属性横向展开成多个属性.如一个圆对应了半径和圆心(圆心包括x轴,y轴),就将其展开为半径、x轴、y轴

联系的特殊转换

在一般情况下,一个联系可以被转换成一个关系。但是在有些情况下,联系也可被归并到相关联的实体所对应的关系模式中去,即将联系与某个(或几个)相关联的实体集共同转换成一个关系模式。(考虑是否全参与)

考虑以下的关系:E1(有属性k1,a),E2(有属性k2,b),(其中k1,k2为两者的关键词)两者之间的联系R(有属性r),考虑参与基数(下面前者为E1,后者为E2):

  • (0,1)(0,1):即都是非全参与,且关系为1:1,此时分解为三个关系模式:E1(k1,a),E2(k2,b),R(k1,k2,r)
  • (1,1)(0,1):一个全参与一个非全参与,关系1:1,此时分解成两个模式:E1(k1,a,k2,r),E2(K2,b)
  • (1,1)(1,1):即都是全参与,且关系为1:1,此时分解为一个关系模式:E(k1,a,k2,b,r)
  • (?,n)(1,1):关系为一对多,一的这一方全参与,此时分解为两个:E2(K2,b,k1,r),E1(k1,a)
  • (?,n)(0,1):关系为一对多,一的这一方非全参与,此时分解为三个关系模式:E1(k1,a),E2(k2,b),R(k1,k2,r)
  • (?,m)(?,n):关系为多对多,此时分解为三个关系模式:E1(k1,a),E2(k2,b),R(k1,k2,r)

继承的转换

可以有三种转换方式:

  • 每一个实体集都将被转换为一个关系
  • 只有最底层的叶子结点才会被转换为关系,并从其所有超实体集中继承属性。
  • 被转换为单个关系,其中含有所有实体集中的属性。

规范化

通过关系数据库的规范化过程,使设计得到的结果关系模式至少需满足第三范式(3NF)

RDBMS性能调整

为满足RDBMS在性能、存储空间等方面的要求及其它限制条件所做的调整与修改。包括:

  • 逆规范化:减少关系的连接运算次数,提高系统性能
  • 关系的分割:调整每个关系的大小,提高存取效率
    • 水平分割:将一个关系的元组集合划分为若干个不相交的子集,每个子集对应一个子关系模式
    • 垂直分割:将一个关系模式纵向分解成若干个子关系模式(不同于规范化设计中的模式分解)
  • 尽量使用快照
    • 快照(snapshot):用数据查询命令定义,在创建快照时就执行对应的子查询,并将查询结果以‘实’关系的形式保留在数据库中。
    • 快照的维护:周期性地刷新 / 由用户手工刷新

约束条件设置

  • 完整性约束
  • 安全性约束
  • 数据类型约束
  • 数据量的约束
  • 重新设置每个表的候选键、主键及外键

关系视图的设计

在关系模式基础上所设计的直接面向操作用户的视图即用户的’外模式’,它可以根据用户的需求随时构作,一般 RDBMS 均提供关系视图的功能。

关系视图的作用

  • 提供数据的逻辑独立性
  • 能适应用户对数据的不同需求
  • 有一定数据保密功能

数据库的物理设计

对数据库内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度及有效利用存储空间

在关系数据库设计中,用户参与物理设计的内容有:存取方法的设计 与 存储结构的设计

索引

考虑设计的因素:

  • 在主关键字及外关键字上建立索引:提高关系联接查询的速度,有利于实体完整性及引用完整性的检查
  • 以读为主的关系应尽可能多地建立索引
  • 如果根据某属性的等值查询所得到的结果元组数量较少,则可以考虑对该属性建立索引
  • 对经常用于统计查询的属性建立索引:可以根据索引数据直接获取统计结果,不必再去访问对应关系的数据块。