4.3.2 第一范式

4.3.2 第一范式

【定义4.8】 如果关系模式R中每个属性值都是一个不可分解的数据项,则称该关系模式满足第一范式,简称1NF,记为R∈1NF。

第一范式规定了一个关系中的属性值必须是“原子”的,它排斥了属性值为元组、数组或某种复合数据的可能性,使得关系数据库中所有关系的属性值都是“最简形式”,这样要求的意义在于可能做到起始结构简单,为以后复杂情形讨论带来方便。一般而言,每一个关系模式都必须满足第一范式,1NF是对关系模式的起码要求。

非规范化关系转化为1NF的方法很简单,当然也不是唯一的,对表4-5、表4-6分别进行横向和纵向展开,即可转化为表4-7、表4-8所符合1NF的关系。

表4-7 具有组合数据项的非规范化关系

表4-8 具有多值数据项的非规范化关系

但是满足第一范式的关系模式并不一定是一个好的关系模式,例如,关系模式SLC(SNO,DEPT,SLOC,CNO,GRADE),其中SNO为学号,DEPT为学生所在系,SLOC为学生住处,CNO为课程号,GRADE为学生成绩。假设每个系的学生住在同一地方,SLC的码为(SNO,CNO),函数依赖包括:

显然,SLC满足第一范式。这里(SNO,CNO)两个属性一起函数决定GRADE。(SNO,CNO)也函数决定DEPT和SLOC。但实际上仅SNO就函数决定DEPT和SLOC。因此非主属性DEPT和SLOC部分函数依赖于码(SNO,CNO)。

SLC关系存在以下3个问题:

(1)插入异常

假若要插入一个SNO=95102,DEPT=IS,SLOC=N,但还未选课的学生,即这个学生无CNO,这样的元组不能插入SLC中,因为插入时必须给定码值,而此时码值的一部分为空,因而该学生的信息无法插入。

(2)删除异常

假定某个学生只选修了一门课,如“99022”号学生只选修了3号课程,现在连3号课程他也选修不了,那么3号课程这个数据项就要删除。课程3是主属性,删除了课程号3,整个元组就不能存在了,也必须跟着删除,从而删除了“99022”号学生的其他信息,产生了删除异常,即不应删除的信息也删除了。

(3)数据冗余度大

如果一个学生选修了10门课程,那么他的DEPT和SLOC值就要重复存储10次。并且当某个学生从数学系转到信息系,这本来只是一件事,只需要修改此学生元组中的DEPT值。但因为关系模式SLC还含有系的住处SLOC属性,学生转系将同时改变住处,因而还必须修改元组中SLOC的值。另外如果这个学生选修了10门课,由于DEPT,SLOC重复存储了10次,当数据更新时必须无遗漏地修改10个元组中全部DEPT,SLOC信息,这就造成了修改的复杂化,存在破坏数据一致性的隐患。

因此,SLC不是一个好的关系模式。