范式是数据库设计中的一个重要概念,它描述了如何组织数据以确保数据的一致性和完整性。在关系数据库管理系统中,有几种主要的范式,分别是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和更高级的BCNF(贝尔-科德范式)和第四范式(4NF)。以下是这些范式的简要概述:
1. 第一范式 (1NF):
- 数据表中的每一列应包含原子值(不可再分割的基本单位),即每个字段只存储单一的信息。
- 没有重复的列子集。
2. 第二范式 (2NF):
- 1NF的基础上,消除部分依赖,即非主键属性必须完全依赖于主键,而不是仅仅部分依赖。
- 消除组合键,即主键中的每个字段都必须能单独决定行。
3. 第三范式 (3NF):
- 2NF的基础上,消除传递依赖,即非主键属性不依赖于其他非主键属性。
- 数据表中的每一个非主键字段都只与主键直接相关。
4. BCNF(贝尔-科德范式):
- 当关系模式存在3NF,且所有的非平凡依赖都是对码的直接依赖时,达到BCNF。这避免了部分函数依赖导致的数据冗余。
5. 第四范式 (4NF):
- BCNF的进一步扩展,要求消除多值依赖,即不存在非平凡的多值依赖于候选码的情况,这有助于提高数据库的查询效率和优化空间。
6. 针对范式在数据库关系中
(1)1NF:所有属性都是不可分割的数据项
如果某个属性,例如学校,还可以继续拆分为高中和大学,就不满足1NF了。1NF是关系数据库需要满足的最低要求
(2)2NF:在满足1NF的前提下,不包含非主属性对码的部分函数依赖(即每一个非主属性都完全函数依赖于码)
例如在关系R中,码是学号和班级,非主属性是姓名,因为通过学号就能直接推出姓名了,不需要班级,此处姓名就部分依赖于码了,不满足2NF
(3)3NF:在满足2NF的前提下,不包含非主属性对码的传递函数依赖(即码应该直接决定非主属性,不能间接决定)
传递函数依赖:若X→Y,Y→Z.有Z→Z,此时称Z对x有传递函数依赖。
例如在关系R中,码是客户姓名,非主属性是订单编号和订单负责人,通过客户姓名可以推出他的订单编号,再通过订单编号能推出订单负责人,这种情况下客户姓名和订单负责人是间接决定的,存在传递函数依赖,不满足3NF(4)BCNF:消除任何属性对候选码的传递依赖,即每一个决定因素都包含
码,表现为在函数依赖集当中,左边的都包含候选码(整个属性组!)
(5)4NF:不允许有非平凡且非函数依赖的多值依赖多值依赖(例如X,Y,2属于集合U,且2=u-x-Y.当给定一组(x,2)值的时候,可以确定一组Y的值,但这组Y的值仅仅取决于x,此时有x→→Y。其实这里就是存在了一对多的关系,即一个x和一组2有关,但并不能唯一确定一个2,通过x和2能找到一组y,但你只通过x也能确定y。
平凡的多值依赖:z是空集
非平凡的多值依赖:z不是空集
7. 范式级别判断
例题:U=ABCDE,F=(A-C,BC-D,CD-A,AB-E)
第一步(求关键字):求关键字的过程略去,结果为{(AB),(BC)}
第二步(判断1NF):只要有属性就是1NF
第三步(写出非主属性、关键字):这一步是为了方便后续判断。
非主属性是未出现在关键字中的属性,本题为DE。关键字为AB和BC.如下列出:
非主属性:DE;候选码:AB、BC
F=(A→C,BC->D,CD->A,AB-E)
第四步(判断2NF):2NF的定义为非主属性应完全函数依赖于任一候关键字即看非主属性的左侧的推断条件中是否出现了候关键字也就是题目中D和E的左侧是否出现了AB或BCC其中B或BC必须一起打包出现,不能只出现单个的A,B之类)。举例来说,假如题目中存在A-D,D是非主属性,而左侧只有A,没有和B一起出现,即D不是完全函数依赖于候选码AB的,它只部分依赖了AB中的A。观察当前题目,非主属性D和E的左侧均是候关键字一,并不存在这种情况,那么它是满足2NF的。
第五步(判断3NF):在满足2NF的前提下(3NF的定义为不存在非主属性对任一候关键字传递函数依赖。举个例子,如果有AB-D,又有D→E,即非主属性E通过非主属性D作为桥梁才能推出,这就是传递依赖。尽管候关键字B能推出D和E,但E是间接推出的,也不可以出现,达续观察题目,并没有这种情况,那么是满足3NF的。
第六步(判断BCNF):在满足3NF的前提下,BCNF的条件是每一个决定因素(即每一个依赖关系的左侧)都包含码关键字即决定因素必须包含候关键字的任意一个。即在本题中,每个决定因素要么有AB,要么有BC.要么A和B成对出现,要么B和C成对出现。该题中,第一个关系A->C就只出现了A,A没有和B一起出现,所以本题不满足BCNF。注意这里和2NF的区别,2NF只看针对非主属性的左侧,而BCNF要看所有依赖关系的左侧。
因此本题为3NF。
8. 第1,2,3范式都在消除数据冗余,但一般不可能彻底消除
标签:3NF,判断,范式,依赖,2NF,非主,级别,属性 From: https://blog.csdn.net/qq_73340809/article/details/139609647