数据库概论 (五)范式、数据库设计

范式

范式理论是为了解决以上提到四种异常。算法

高级别范式的依赖于低级别的范式,1NF 是最低级别的范式。数据库

1. 第一范式 (1NF)

属性不可分。数据结构

相似于成绩能够分为语文成绩,数学成绩,英语成绩等等,那么就说成绩这个属性是可分的,所以不能称之为第一范式1NF闭包

2. 第二范式 (2NF)

每一个非主属性彻底函数依赖于键码。数据库设计

能够经过分解来知足。函数

分解前工具

Sno Sname Sdept Mname Cname Grade
1 学生 - 1 学院 - 1 院长 - 1 课程 - 1 90
2 学生 - 2 学院 - 2 院长 - 2 课程 - 2 80
2 学生 - 2 学院 - 2 院长 - 2 课程 - 1 100
3 学生 - 3 学院 - 2 院长 - 2 课程 - 2 95

以上学生课程关系中,{Sno, Cname} 为键码,有以下函数依赖:优化

  • Sno -> Sname, Sdept
  • Sdept -> Mname
  • Sno, Cname-> Grade

Grade 彻底函数依赖于键码,它没有任何冗余数据,每一个学生的每门课都有特定的成绩。spa

Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门课时,这些数据就会出现屡次,形成大量冗余数据。设计

分解后

关系 - 1

Sno Sname Sdept Mname
1 学生 - 1 学院 - 1 院长 - 1
2 学生 - 2 学院 - 2 院长 - 2
3 学生 - 3 学院 - 2 院长 - 2

有如下函数依赖:

  • Sno -> Sname, Sdept
  • Sdept -> Mname

关系 - 2

Sno Cname Grade
1 课程 - 1 90
2 课程 - 2 80
2 课程 - 1 100
3 课程 - 2 95

有如下函数依赖:

  • Sno, Cname -> Grade

3. 第三范式 (3NF)

非主属性不传递函数依赖于键码。

上面的 关系 - 1 中存在如下传递函数依赖:

  • Sno -> Sdept -> Mname

能够进行如下分解:

关系 - 11

Sno Sname Sdept
1 学生 - 1 学院 - 1
2 学生 - 2 学院 - 2
3 学生 - 3 学院 - 2

关系 - 12

Sdept Mname
学院 - 1 院长 - 1
学院 - 2 院长 - 2

规范化理论是数据库逻辑设计的工具

image-20210102163504729

使用范式设计数据库的目的是为了消除插入,删除异常,修改复杂以及数据冗余的问题。

4. BC范式 (BCNF)

如有\(R\in BCNF\)

  • 全部非主属性对每个码都是彻底函数依赖
  • 全部的主属性对每个不包含它的码,也是彻底函数依赖
  • 没有任何属性彻底函数依赖于非码的任何一组属性 -> 除了码以外没有其余的决定因素

关系R属于BCNF是R属于3NF的充分没必要要条件。

image-20210102163922487

逻辑蕴含

对于知足一组函数依赖 F 的关系模式 R<U,F> 其任何一个关系 r,若函数依赖 X→Y 都成立,(即r 中任意两元组 t,s,若 t[X]=s[X],则 t[Y]=s[Y]),则称 F 逻辑蕴含 X→Y.

关系模式的推理规则

对于关系模式 \(R<U,F>\)有以下规律

  • 自反律:若\(Y⊆X⊆U\),则 \(X→Y\)\(F\)所蕴含;
  • 增光律:若\(X→Y\) 为$ F\(所蕴含,且\) Z⊆U\(,则\) X∪Z→Y∪Z$ 为 \(F\) 所蕴含.
  • 传递律:若\(X→Y\) 及$ Y→Z$ 为 \(F\) 所蕴含,则\(X→Z\)\(F\) 所蕴含.

由上面三条规律能够拓展出更多的规律

  • 合并规则:由 \(X→Y\)\(X→Z\),有\(X →Y U Z\)
  • 伪传递规则:由\(X →Y\)\(W ∪ Y→Z\),有\(X ∪ W →Z\)
  • 分解规则:由\(X→Y\) 及$ Z \subseteq Y\(,有\)X →Z$

函数闭包

在关系模式 \(R<U,F>\)中为$ F \(所蕴涵的函数依赖的全体叫作\)F$ 的闭包,记为 \(F^+\).

闭包中的每个函数依赖均可以从F根据Armstrong公理推导出来。但惋惜的是,其闭包是一个NP彻底问题。

属性集 X 关于函数依赖集 F 的闭包\(X_F^+\)

\[X_F^+=\{A|X\rightarrow能由F根据Armstrong公理推导出的\} \]

求闭包的方法

求属性集 X 关于 U 上的函数依赖集F的闭包$ X_F^+$

输入: \(X,F\)

输出:$ X_F^+ $

  1. \(X^i=X,i=0\)
  2. 求 B,这里 $B={A|(∃V,∃W,V→W∈F∧V⊆X^i∧A∈W)} $;
  3. $X{i+1}=B⋃Xi $;
  4. 判断是否 $ X{i+1}=Xi $
  5. 若相等或 $ X^i=U\(,则\) X^i \(就是\) X_F^+$, 算法终止;
  6. 若否,则$ i=i+1$,返回第(2)步。

对于该算法, 令\(a_i=|X^i|,{a_i}\)造成一个步长大于1的严格递增的序列,序列的上界是 \(| U|\),所以该算法最多 \(| U | - |X|\) 次循环就会终止。

极小函数依赖集

定义

image-20210102170358956

极小化过程

  • 逐一检查 \(F\) 中各函数依赖\(FD_i\)\(X→Y\),若\(Y =A_1 A_2 … A_k,k >2\), 则用$ {X→A_j |j=1,2,…,k} $来取代 \(X →Y\)
  • 逐一检查\(F\) 中各函数依赖\(FD_i\)\(X→A\),令 \(G =F -\{ X→A \}\),若\(A\in X_{G^+}\), 则从F 中去掉此函数依赖。(由于 \(F\)与$G \(等价的充分必要 条件是\)A\in X_G^+$ )
  • 逐一取出F 中各函数依赖\(FD_i\)\(X→A\),设\(X = B_1B_2…B_m\) ,逐一考查\(B_i (i=l,2,…,m)\),若\(A \in(X - B_i )_{F^+}\) ,则以$ X-B_i$ 取 代$ X\(,(由于 F与\)F-{X-A}⋃{Z-A}\(等价的充要条件是\)A\in Z _F^+$ ,其中$Z = X- B_i $)

模式的分解

无损链接性

分解以后能够用天然链接恢复本来的模式。

image-20210102171529634

无损链接的断定

image-20210102171604298

例如上图中,学院决定院长这个函数关系是存在的,知足了定理中的一个条件,因此该分解就是无损链接的分解。

保持函数依赖的分解

image-20210102171955005

须要知足的条件

  • \(U=U_1\cup U_2\)
  • \(F^+=(F_1\cup F_2)^+\)

充分条件:若是F上的每个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的。

例子

image-20210102172144128

关于模式分解的几个重要事实

  • 若分解要求保持函数依赖,总能够达到3NF,不必定能到BCNF;
  • 若分解既保持函数依赖,又具备无损链接,能够到3NF,不必定到BCNF;
  • 若分解只要求具备无损链接,必定能够达到4NF.

image-20210102172332148

ER 图

Entity-Relationship,有三个组成部分:实体、属性、联系。

用来进行关系型数据库系统的概念设计。

E-R有意思的一点在于其将实体之间的关系也实例化了,同时关系也能拥有属性。

image-20210102103917705

这里的选修关系就存在成绩属性。但也能够当作关系连接的实体所定义的属性是成绩。

实体的三种联系

包含一对一,一对多,多对多三种。

  • 若是 A 到 B 是一对多关系,那么画个带箭头的线段指向 B;
  • 若是是一对一,画两个带箭头的线段;
  • 若是是多对多,画两个不带箭头的线段。

下图的 Course 和 Student 是一对多的关系。

表示出现屡次的关系

一个实体在联系出现几回,就要用几条线链接。

下图表示一个课程的先修关系,先修关系出现两个 Course 实体,第一个是先修课程,后一个是后修课程,所以须要用两条线来表示这种关系。

联系的多向性

虽然老师能够开设多门课,而且能够教授多名学生,可是对于特定的学生和课程,只有一个老师教授,这就构成了一个三元联系。

表示子类

用一个三角形和两条线来链接类和子类,与子类有关的属性和联系都连到子类上,而与父类和子类都有关的连到父类上。

实体与属性的划分原则:现实世界的事物能做为属性对待的尽可能做为属性对待。

  • 做为属性,不能再具备须要描述的性质
  • 属性不能与其余实体有联系

ER图的集成

  • 合并,解决各个分ER图之间的冲突,将分E-R图合并起来生成初步E-R图
  • 修改和重构。消除没必要要的冗余,生成基本E-R图

在合并E-R图的时候会遇到三种冲突:

  • 属性冲突
  • 命名冲突
  • 结构冲突

数据库设计

数据库设计分为六个阶段

  1. 需求分析阶段
  2. 概念设计阶段
  3. 逻辑结构设计阶段
  4. 物理结构设计
  5. 数据库实施
  6. 数据库运行和维护

需求分析

准确了解和分析用户需求,包括数据处理,需求分析是整个设计过程的基础,是最困难和最耗费时间的一步。

数据字典

数据字典是进行详细的数据收集和数据分析所得到的主要成果,它是关于数据库中数据的描述,即元数据,而不是数据自己。数据字典是在需求分析阶段创建,在数据库设计的过程当中不断的修改,充实,完善的。

数据字典多包括这么几个部分:

  • 数据项:是数据的最小组成单位,若干个数据项能够组成一个数据结构。
  • 数据结构:反映了数据之间的组合关系,一个数据结构能够由若干个数据项组成,也能够由若干个数据结构组成。
  • 数据流:是数据结构在系统内的传输路径。
  • 数据存储:是数据结构停留和保存的地方,也是数据的来源和去向。
  • 处理过程:通常用断定表或者断定树来描述。

数据字典经过对数据项和数据结构的定义来描述数据流,数据存储的逻辑内容。

概念结构设计阶段

概念结构设计是整个数据库设计的关键,它经过对用户需求进行综合,概括和抽象,造成一个独立于具体数据库管理系统以外的概念模型。

包括[ER图](#ER 图)的设计。

逻辑结构设计阶段

将概念结构模型转换为某个数据库管理系统 DBMS 支持的数据模型,并对其进行优化。

物理结构设计阶段

是为逻辑数据模型选取一个最适合应用环境的物理结构,包括存储结构和存储方法。

数据库实施阶段

在数据库实施阶段,设计人员运用数据库管理系统提供的数据库语言及其宿主语言,根据逻辑设计和物理结构设计的结果创建数据库,编写调试应用程序,组织数据入库,并进行试运行。

数据库运行和维护阶段

通过试运行以后便可投入正常使用。

相关文章
相关标签/搜索