首页 > 编程知识 正文

数据库如何判断范式(数据库第一二三范式)

时间:2023-05-03 14:53:28 阅读:100533 作者:165

00-1010关系数据库中的关系满足一定的需求,满足不同需求的是不同的范式。满足称为第一范式的最低要求,称为1NF;在第一范式基础上满足进一步要求的称为第二范式,简称2NF,其他范式等等。各种范例之间存在以下关系:

如下图所示:

1.第一范式1NF

定义:属于第一范式关系的所有属性都是不可分的,即数据项是不可分的。

理解:第一范式强调数据表的原子性,这是其他范式的基础。如下图所示,数据库不符合第一范式:

上表将商品项目分为名称和数量两项,不符合第一范式关系。修正后,如下图所示:

上表符合第一范式的关系。

然而,在日常生活中用第一范式来规范表格是远远不够的。还会出现数据冗余过多、删除异常、插入异常、修改异常等问题。这时候就需要引入标准化的概念,将其转化为更加标准化的表格,减少数据依赖。

规范化:一个低级的关系模式可以通过模式分解转换成一组几个高级的关系模式。这个过程叫做规范化。

2.第二个范例2NF

定义:cxdzfj关系r属于第一范式,非主属性的每一个完备函数都依赖于任意候选码,那么关系r属于第二范式。

这里我们需要理解非主属性、候选代码和完全函数依赖的概念。

候选代码:如果关系中属性组的值可以唯一标识元组,但其子集不能,则称为候选代码。如果关系中有多个候选代码,则选择其中一个作为主代码。

在以下所有内容中,主代码或候选代码简称为代码。

比如下图所示的学生表,学生证和姓名都可以唯一标识一个元组,所以表的候选码就是学生证和姓名,我们可以随机选择其中一个主码,然后选择学生证作为主码。

学生证姓名年龄性别101男19女102女21男103活泼羊20男104陈丽19女105整洁饼干20女

主属性:所有候选代码的属性称为主属性。不包含在任何候选代码中的属性称为非主要属性或非代码属性。

在上面的学生表中,学号和姓名是关系的主要属性,而年龄和性别是非主要属性。

依赖:设R(U)是属性集U上的关系模式,x和y是U的子集,对于R(U)的任何可能的关系R,R中的两个元组在x上不可能有相等的属性值,在y上不可能有不相等的属性值,那么就说y函数依赖x或x函数来确定y。

完全函数依赖:设R(U)为属性集U的关系模式,X和y为U的子集,若y函数依赖X,且对于X的任意适当子集X’,则有一个y非函数依赖X’,则称y完全依赖X。注:如果y函数依赖x,但y不完全函数依赖x,则称y依赖x部分函数。

理解:第二范式是指每个表必须有一个(一个且只有一个)数据项作为键或主键,其他数据项与键或主键一一对应,即其他数据项完全依赖于键或主键。由此可见,单一主属性的关系属于第二范式。

判断一段关系是否属于第二范式:

查找数据表中的所有代码;找出所有主要属性和非主要属性;确定所有非主要属性对代码的部分功能依赖性。以上面的学生表为例,表中的代码是学生证(代码可以是学生证也可以是姓名,这里假设代码是学生证),非主要属性是性别和年龄(其余为主要属性)。当学生证确定后,性别和年龄也被唯一确定为,所以学生表的设计符合第二范式(学生表是单主的关系

这是一种不符合第二范式的关系。有一个关系模型S-L-C(Sno、Sdept、Sloc、Cno、Grade),其中Sno、Sdept、Sloc、Cno、Grade依次代表学生的学号、院系、居住地、课程号、班级,各个院系的学生住在同一个地方。可以知道S-L-C的代码是(Sno,Cno),那么就有以下函数依赖关系:

/origin/pgc-image/ab1b7cbda3374e499e83ec49b71cec5a?from=pc">

可以看到,非主属性Sloc、Sdept并不完全函数依赖于码,因此关系模式S-L-C(Sno, Sdept, Sloc, Cno, Grade)不符合第二范式。

3. 第三范式 3NF

定义: 非主属性既不传递依赖于码,也不部分依赖于码。

首先我们要理解传递函数依赖的概念。

理解: 第三范式要求在满足第二范式的基础上,任何非主属性不依赖于其他非主属性,即在第二范式的基础上,消除了传递依赖。

在下图S-L关系中,Sloc对Sno传递函数依赖,故该关系不属于第三范式。

4. BC范式 BCFN

定义: 关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>属于BCFN。

理解: 根据定义我们可以得到结论,一个满足BC范式的关系模式有:

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

例如有关系模式C(Cno, Cname, Pcno),Cno, Cname, Pcno依次表示课程号、课程名、先修课。可知关系C只有一个码Cno,且没有任何属性对Cno部分函数依赖或传递函数依赖,所以关系C属于第三范式,同时Cno是C中的唯一决定因素,所以C也属于BC范式。

5. 第四范式 4NF

定义: 限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。

理解: 显然一个关系模式是4NF,则必为BCNF。也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值,若有多值就违反了4NF。

6. 第五范式 5NF

第五范式有以下要求:(1)必须满足第四范式;(2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。

第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。