数据库原理:范式

12/31/2023 数据库

目录


参考:


# 数据库原理:范式

  • 关系模式:关系的描述称为关系模式,可以表示为 R (U, D, Dom. F),R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,Dom为属性向域的映射集合,F为属性间数据的依赖关系集合。

  • 候选码(Candidate key):也称码键,表中的某一属性组的值能唯一标识一个元组,则称该属性组为候选码。

    • 主属性(Prime attribute):候选码属性称为主属性,非候选码属性称为非主属性。

# 一、数据依赖问题

数据依赖是一个关系内部属性与属性之间的一种约束关系。有多种类型的数据依赖,其中最重要的是函数依赖和多值依赖。

  • 函数依赖(Functional Dependency,FD):设R (U)是属性集U上的关系模式,X, Y是U的子集。若对于R (U)的任意一个可能的关系r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y“或“Y函数依赖于X“,记作X→Y
  • 多值依赖(Multivalued Dependency,MVD):设R (U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R (U)中多值依赖X→→Y成立,当且仅当对R (U)的任一关系r,给定的一对(x,z)值,有一组r的值,这组值仅仅决定于x值而与z值无关。

# 函数依赖

设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y” 或 “Y函数依赖于X”,记作X→Y

在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但Y不为X的子集?,则称X→Y是非平凡的函数依赖,若X→Y,但Y Í X, 则称X→Y是平凡的函数依赖

完全函数依赖img

部分函数依赖img

示例

See More

2019062919355019

上图中违背了Sno→Sname,应为函数依赖只有在不可能存在两个元组在Sno上的值相等,而在Sname上的值不等时才成立。(左边相等右边必相等)

20190629193609721

上图中20190629193615156是完全函数依赖,20190629193615144是部分函数依赖。

# 二、关系模式规范化

一个不好的关系模式会存在以下一些问题:

(1) 数据冗余太大:信息被重复存储,导致浪费大量存储空间

(2) 更新异常:当重复信息的一个副本被修改,所有副本都必须进行同样的修改。因此当更新数据时,系统要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。

(3) 插入异常:只有当一些信息事先已经存放在数据库中时,另外一些信息才能存入数据库中

(4) 删除异常:删除某些信息时可能丢失其它信息

规范化理论是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决数据冗余、插入异常、更新异常、删除异常这些问题。

# 关系模式规范化(normalzation)

20190629193641297

一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。

20190629193928110

1NF

如果一关系模式R(U)的每个属性对应的域值都是不可分的(即原子的),则称R(U)属于第一范式,记为R(U)Î1NF.

第一范式的目标是:将基本数据划分为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。

第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。

示例

See More

20190629193650963

2NF

若关系模式R(U)∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。

第二范式的目标:将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性移到其他表中。

2NF范式虽然消除了由于非主属性对候选码的部 分依赖所引起的冗余及各种异常,但并没有排除传递依赖。因此,还需要对其进一步规范化。

示例

See More

20190629193705542

S-L-C这个函数依赖图中:非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno),将其分为两个表后使得非主属性对其各自的码都是完全函数依赖。

20190629193713265

3NF

若R(U)∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。

第三范式的目标:去掉表中不直接依赖于候选码的非主属性。

示例

See More

20190629193726860

Sno→Sdept、Sdept→Sloc 可得: Sno→Sloc,即S-L中存在非主属性对码的传递函数依 赖,S-L ∉ 3NF。采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖。

20190629193735197

BCNF

通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

一个满足BCNF的关系模式有:

  • 所有非主属性都完全函数依赖于每个候选码。
  • 所有的主属性都完全函数依赖于每个不包含它的候选码。
  • 没有任何属性完全函数依赖于非码的任何一组属性。

BCNF范式排除了:

  • 任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖;
  • 主属性之间的传递依赖。

示例

See More

关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课,每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。

由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J

因为没有任何非主属性对码传递依赖或部分依赖,

STJ ∈ 3NF。

因为T是决定因素,而T不包含码,所以STJ 不属于 BCNF 关系。

候选码可以有多个,如上面(S,J)和(S,T)都是候选码,包含在任一一个候选码中的属性称为主属性,那么S,J,T都是主属性,以上不满足“所有的主属性都完全函数依赖于每个不包含它的候选码”,是否可以直接理解为决定因素必须为候选码中的一个?

上次更新时间: 9/25/2024, 1:17:45 AM