范式理论是为了解决以上提到四种异常。算法
高级别范式的依赖于低级别的范式,1NF 是最低级别的范式。数据库
属性不可分。数据结构
相似于成绩能够分为语文成绩,数学成绩,英语成绩等等,那么就说成绩这个属性是可分的,所以不能称之为第一范式1NF
。闭包
每一个非主属性彻底函数依赖于键码。数据库设计
能够经过分解来知足。函数
分解前工具
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} 为键码,有以下函数依赖:优化
Grade 彻底函数依赖于键码,它没有任何冗余数据,每一个学生的每门课都有特定的成绩。spa
Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门课时,这些数据就会出现屡次,形成大量冗余数据。设计
分解后
关系 - 1
Sno | Sname | Sdept | Mname |
---|---|---|---|
1 | 学生 - 1 | 学院 - 1 | 院长 - 1 |
2 | 学生 - 2 | 学院 - 2 | 院长 - 2 |
3 | 学生 - 3 | 学院 - 2 | 院长 - 2 |
有如下函数依赖:
关系 - 2
Sno | Cname | Grade |
---|---|---|
1 | 课程 - 1 | 90 |
2 | 课程 - 2 | 80 |
2 | 课程 - 1 | 100 |
3 | 课程 - 2 | 95 |
有如下函数依赖:
非主属性不传递函数依赖于键码。
上面的 关系 - 1 中存在如下传递函数依赖:
能够进行如下分解:
关系 - 11
Sno | Sname | Sdept |
---|---|---|
1 | 学生 - 1 | 学院 - 1 |
2 | 学生 - 2 | 学院 - 2 |
3 | 学生 - 3 | 学院 - 2 |
关系 - 12
Sdept | Mname |
---|---|
学院 - 1 | 院长 - 1 |
学院 - 2 | 院长 - 2 |
规范化理论是数据库逻辑设计的工具
使用范式设计数据库的目的是为了消除插入,删除异常,修改复杂以及数据冗余的问题。
如有\(R\in BCNF\)
关系R属于BCNF是R属于3NF的充分没必要要条件。
对于知足一组函数依赖 F 的关系模式 R<U,F> 其任何一个关系 r,若函数依赖 X→Y 都成立,(即r 中任意两元组 t,s,若 t[X]=s[X],则 t[Y]=s[Y]),则称 F 逻辑蕴含 X→Y.
对于关系模式 \(R<U,F>\)有以下规律
由上面三条规律能够拓展出更多的规律
在关系模式 \(R<U,F>\)中为$ F \(所蕴涵的函数依赖的全体叫作\)F$ 的闭包,记为 \(F^+\).
闭包中的每个函数依赖均可以从F根据Armstrong公理推导出来。但惋惜的是,其闭包是一个NP彻底问题。
属性集 X 关于函数依赖集 F 的闭包\(X_F^+\):
求属性集 X 关于 U 上的函数依赖集F的闭包$ X_F^+$
输入: \(X,F\);
输出:$ X_F^+ $
对于该算法, 令\(a_i=|X^i|,{a_i}\)造成一个步长大于1的严格递增的序列,序列的上界是 \(| U|\),所以该算法最多 \(| U | - |X|\) 次循环就会终止。
分解以后能够用天然链接恢复本来的模式。
例如上图中,学院决定院长这个函数关系是存在的,知足了定理中的一个条件,因此该分解就是无损链接的分解。
充分条件:若是F上的每个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的。
Entity-Relationship,有三个组成部分:实体、属性、联系。
用来进行关系型数据库系统的概念设计。
E-R有意思的一点在于其将实体之间的关系也实例化了,同时关系也能拥有属性。
这里的选修关系就存在成绩属性。但也能够当作关系连接的实体所定义的属性是成绩。
包含一对一,一对多,多对多三种。
下图的 Course 和 Student 是一对多的关系。
一个实体在联系出现几回,就要用几条线链接。
下图表示一个课程的先修关系,先修关系出现两个 Course 实体,第一个是先修课程,后一个是后修课程,所以须要用两条线来表示这种关系。
虽然老师能够开设多门课,而且能够教授多名学生,可是对于特定的学生和课程,只有一个老师教授,这就构成了一个三元联系。
用一个三角形和两条线来链接类和子类,与子类有关的属性和联系都连到子类上,而与父类和子类都有关的连到父类上。
实体与属性的划分原则:现实世界的事物能做为属性对待的尽可能做为属性对待。
在合并E-R图的时候会遇到三种冲突:
数据库设计分为六个阶段
准确了解和分析用户需求,包括数据处理,需求分析是整个设计过程的基础,是最困难和最耗费时间的一步。
数据字典是进行详细的数据收集和数据分析所得到的主要成果,它是关于数据库中数据的描述,即元数据,而不是数据自己。数据字典是在需求分析阶段创建,在数据库设计的过程当中不断的修改,充实,完善的。
数据字典多包括这么几个部分:
数据字典经过对数据项和数据结构的定义来描述数据流,数据存储的逻辑内容。
概念结构设计是整个数据库设计的关键,它经过对用户需求进行综合,概括和抽象,造成一个独立于具体数据库管理系统以外的概念模型。
包括[ER图](#ER 图)的设计。
将概念结构模型转换为某个数据库管理系统 DBMS 支持的数据模型,并对其进行优化。
是为逻辑数据模型选取一个最适合应用环境的物理结构,包括存储结构和存储方法。
在数据库实施阶段,设计人员运用数据库管理系统提供的数据库语言及其宿主语言,根据逻辑设计和物理结构设计的结果创建数据库,编写调试应用程序,组织数据入库,并进行试运行。
通过试运行以后便可投入正常使用。