Pwner's Blog

能全力以赴不尽力而为

0%

MySQL 基础 (3)- 数据库设计

关系理论

模式

关系模式

一个关系模式 R(U, D, DOM, F)

关系名 R:符号化的元组语义;

U:一组属性;

D:属性组 U 钟的属性所来自的域;

DOM:属性到域的映射;

F:属性组 U 上的一组数据依赖。

数据依赖里,最重要的是函数依赖多值依赖,其中,函数依赖可以类比数学中 y=f (x) 这样一对一的关系。

D,DOM 与模式设计的关系不大,可以把关系模式看作三元组:R<U, F>

当且仅当 U 上的一个关系 r 满足 F 时,r 成为关系模式 R<U, F> 的一个关系。

模式的好坏

不好的关系模式范例

如图的模式:

U = { Sno, Sdept, Mname, Cno , Grade }

F = { Sno → Sdept, Sdept→Mname, (Sno→Cno)→Grade) }

不好的关系模式可能存在以下问题:

  • 数据冗余:某一个相同的字段值多次重复出现
  • 更新异常:更新某个字段值后需要更新与该字段相关的每一个元组,如:更换系主任后需要修改与该系学生有关的每一个元组
  • 插入异常:如:一个系刚成立,尚无学生,则无法存入系主任的信息到数据库中。
  • 删除异常:删除所有学生的信息,会导致系主任的信息也丢失。

将以上的模式改造如下:
S (Sno , Sdept, Sno→Sdept);

SC (Sno, Cno, Grade, (Sno, Cno)→Grade );

DEPT(Sdept, Mname, Sdept→Mname)

如此三个模式都不会产生以上几种异常。

范式

目的

规范属性间依赖情况。

函数依赖

X➡Y

X 函数确定 Y 或者 Y 函数依赖于 X

  • 非平凡的函数依赖:X→Y, 但 Y 不包含于 X
  • 平凡的函数依赖:X→Y, 但 Y 包含于 X(对于任一关系,平凡函数依赖必然成立,不反映新的语义。一般指讨论非平凡的函数依赖)
  • 函数依赖的决定属性组(决定因素):X
  • 若 X→Y,且 Y→X,则记作 X←→Y
  • 若 Y 不依赖于 X,则记作 X→(划去)Y
完全函数依赖

传递函数依赖

数据库设计的步骤

一般认为数据库设计分为六个步骤:

需求分析

⛳任务

在需求分析阶段,调查了解用户需求,进一步分析和表达用户的需求。

🔧方法

结构化分析(Structured Analysis, SA)是一种常用方法。SA 方法从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。

本阶段生成需求分析报告(提交用户)和用户需求规格说明书(提交开发人员)

📚数据字典

通常包括数据项数据结构数据流数据存储处理过程几部分。

  1. 数据项

    不可再分的数据单位。

    数据项描述 = {数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}

  2. 数据结构

    数据结构描述 = {数据结构名,含义说明,组成:{数据项或数据结构} }

  3. 数据流

    数据流描述 = {数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}

  4. 数据存储

    ** 数据存储描述 **= {数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式}

  5. 处理过程

    处理过程描述 = {处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明} }

概念结构设计

⛳任务

需求分析得到的用户需求抽象成的信息结构就是概念模型。这个抽象的过程就是概念结构设计

🔧方法

通常使用 E-R 图来完成概念结构设计。

E-R 图集成

消除冲突,生成初步 E-R 图

各子系统的 E-R 图之间的冲突主要有三类:属性冲突命名冲突结构冲突

消除冗余,设计基本 E-R 图

消除数据冗余和实体间的冗余联系。

实体属性划分原则

(1)作为属性,不能再具有需要描述的性质,即属性必须是不可分的数据项,不能包含其他属性。
(2)属性不能与其他实体具有联系,即 E-R 图中所表示的联系是实体之间的联系。

凡满足上述两条准则的事物,一般均可作为属性对待。

例如,如果职称可再分为职称代码工资等,则职称不适合作为属性,而适合作为实体。(原则 1)

E-R 模型

Entity Relationship

作用

描述现实世界的概念模型

* 扩展的 E-R 模型
  • ISA 联系:子类继承父类的属性(P218)
  • 基数约束:min..maxmin..* 表示最小到无穷大)
  • Part-of 联系:部分联系,某个实体型是另一个实体型的一部分
    • 非独占联系
    • 独占联系

E-R 图

Entity Relationship Diagram

建模步骤举例

*UML

表示 E-R 图的方法有很多,使用统一建模语言 UML 是其中一种。

逻辑结构设计

⛳任务

将 E-R 图转换为选用的 DBMS 支持的数据模型相符合的逻辑结构。

🔧方法

将实体转换成关系名,将联系转换成属性。

🍪实例

E-R 图

E-R 图对应的关系模型

这个过程也就是将概念模型转化成全局逻辑模型的过程。

🧠数据模型优化

关系数据模型的优化通常以规范化理论为指导:

  1. 确定数据依赖
  2. 极小化处理关系模式之间的数据依赖,消除冗余的联系。
  3. 分析是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几依赖
  4. 分析模式是否合适于处理要求、是否合适于应用环境,确定是否要对模式进行合并或分解
  5. 进行必要的模式分解,提高数据操作效率和存储空间的利用率(常用的分解方法:水平分解垂直分解

详见模式分解算法

🙍‍♂️设计用户子模式

⛳任务

依靠主流 DBMS 提供的视图,在全局模式(主要考虑系统的时间效率,空间效率,易维护度等角度)的基础上,设计用户外模式,使得更符合用户的习惯。

🔧方法

  1. 使用更符合用户习惯的别名
  2. 根据哦用户级别定义不用的视图以控制权限
  3. 简化用户对系统的使用

物理结构设计

⛳任务

可以认为是选 DBMS 的过程

为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程。

具体表现:关系模式选择存取方法设计关系索引等数据库文件的物理存储结构,尽可能使数据库性能最佳。

🔧方法

  1. 分析事务

    查询事务:

    • 查询的关系
    • 查询条件所涉及的属性
    • 连接条件所涉及的属性
    • 查询的投影属性

    更新事务:

    • 被更新的关系
    • 每个关系上的更新操作条件所涉及的属性
    • 修改操作要改变的属性值
  2. 了解选用的 DBMS 的内部特征,尤其是 DBMS 提供的存取方法存储结构

  3. 了解每个事务在各关系上运行的频率和性能要求(例如事务 T 必须在 10s 内结束),因为这对于存取方法的选择具有重大影响。

  4. 选择存取方法(避免全表扫描等耗时操作)

    常用的存取方法:

    • 索引:B + 索引,哈希索引
    • 聚簇
  5. 确定数据库的存储结构

    • 确定数据存放位置(磁盘阵列)
    • 确定系统配置(同时使用数据库的用户数,同时打开数据库对象书,内存分配参数,缓冲区分配参数,存储分配参数,物理块大小,物理块装填因子,时间片大小,数据库大小,锁的数目等)
如果文章对你有用,可以请我喝杯咖啡~
  • 本文作者: Pwner
  • 本文链接: https://pwner.cn/posts/bb17f267.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!