关系型数据库是现在广泛应用的数据库类型,对关系型数据库的设计就是对数据进行组织化和结构化的过程。对于小规模的数据库我们处理起来还是比较轻松,但是随着数据库规模的扩大我们将发现用户操控数据库的SQL语句将变得笨拙、复杂。更糟糕的是很有可能导致数据不完整,不准确。所以我们有必要将数据设计的更加符合规范。怎样使我们的数据库更加规范呢,在数据库的世界里一共总结了五个范式,常用的有三个,今天小编就简单的总结一下三范式,三范式的内容也是软考中必考内容,希望对小伙伴们有帮助,小编会首先简单的介绍一个各个范式的概念,接着举一个小例子对各个范式进行讲解说明。
第一范式
首先,我们来看第一范式的定义:(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。我们来看一个例题:
例题:职工 、姓名、电话 码组成一个表(一个人可能有一个办公室电话和一个家里电话 码),如何将其规范为1NF。我们来分析一下这个例题,职工 、姓名、电话 码组成一个表,一个人可能有一个办公室电话和家里电话 码,我们要把这个表规范为第一范式,有三种方法,首先我们需要提出的是,这个表是不符合第一范式的,为什么nie,他的电话 码还分了子项,电话 码分了办公室电话和家里电话 码,这样电话 码这个项他就不是一个不可分割的项,要把这个表规范为第一范式,我们有三种方法,第一种是重复存储职工 和姓名,即每个人的一个电话 码占用 一条记录,这样,关键字只能是电话 码。第二种方法,以职工 为关键字,电话 码分为单位 码和住宅电话。第三种是以职工 为关键字,但强制每条记录只能有一个电话 码,三种方法,可以将其规范为第一范式,第一种方法最不可取,按实际情况可选取后两种情况。我们再来看一个关于规范第一范式的例题,如下图所示:
第二范式
我们来看第二范式的概念:2NF,当且仅当实体E是第一范式,且每一个非主属性完全依赖主键(没有不完全依赖时),则称实体E是第二范式。我们来看一个例子:
选课关系SC1(SNO,CNO,GRADE,CREDIT)中SNO为学 ,CNO为课程 ,GRADEGE为成绩,CREDIT为学分,由以上条件的关键字为组合关键字(SNO,CNO),我们来分析一下上面的这个问题,有一个选课关系sc1,里面有四个字段,这个关系的主键是sno和cno的组合,也就意味着这个组合可以确定成绩和学分,我们写出所有函数依赖SNO CNO —GRADE/CREDIT,除此之外,是不是还有其他的呢,我们可以发现GREDIT是学分,然而一门课程的学分只要课程 确定了学分肯定能确定,因为课程的学分是固定的,所以还有一个函数依赖,cno可以确定credit,所以这里存在部分函数依赖,因为主键的一部分就可以确定credit这个属性,这样就产生了部分函数依赖,在实际应用中,这样一个关系存在问题,如下所示:
分析一下数据的内部结构,这个表中包含四个属性,仓库 和设备 有可能是这个表中的主键,我们发现仓库 有重复的元素,所以她不能够是主键,设备 也存在这种情况,所以只能将二者拼合作为主键,我们发现其中没有重复的数据项了,并且每一个项能够确定数量和地点,所以我们选定这两个组合作为数据表的主键,我们在看其他的对应关系,这样才能判断是否满足第二方式,仓库 和地点之间是否有关联,发现比如wh1所对应的地点都是北京,我们可以得到一个函数依赖,仓库 对应着地点,产生了部分函数依赖,我们刚才已经确定了仓库 和设备 的拼和是主键,这个时候有出现了仓库 可以确定地点 ,所以不满足第二范式,so
我们来分析一下,有四个字段,这一个仓库表中,有哪些函数依赖关系呢,我们来看,一个所在省,一个所在城市,他们之间是有关联的,如果我知道了所在城市就能够确定所在省,这是唯一确定的,然而我们知道仓库 的话,要能够知道仓库所在的城市,这样子也产生了一个,但是你知道仓库所在的城市,你不一定知道仓库 ,因为所在城市所在城市武汉就有三条记录,但是武汉这个城市就有三个仓库,这样的话,所在城市是不够确定仓库 的,综合这些条件,产生了一个传递函数依赖,就是所在省传递依赖函数仓库 ,我们要将其规范为第三范式就要打破这种局面,我们要怎么做nie,如下所示:
小编寄语:该博文小编主要简单的介绍了一下三范式的相关内容,对于三范式的内容,小编早早的在自考数据库系统原理中已经相遇过了,但是对于三范式一直是稀里糊涂的,这次在软考中,再次遇见了数据库的三范式的相关内容,小编把相关的知识总结成博文,希望对有需要的小伙伴有帮助,然考之路,未完待续……
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树数据库组成表31859 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!