mysql三⼤范式⾯试题_数据库三⼤范式【⾯试+⼯作】
原标题:数据库三⼤范式【⾯试+⼯作】
数据库三⼤范式【⾯试+⼯作】reducer变径
设计良好结构的数据库,可以有效减⼩数据冗余,减少增删改中出现的问题。深⼊理解数据库设计的三范式,对于设计“健壮的数据库“⼗分有必要。数据库三范式是设计数据库 时参考的准则,接下来我们⼀⼀进⾏介绍:
⼀、数据库第⼀范式:
数据库表的每⼀列都是不可分割的基本数据项,同⼀列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。(保持数据的原⼦性)
数据原⼦性很好理解,就是表中的字段不可再分。符合数据库第⼀范式的表,每个字段表意明确,看个例⼦:
这是⼀张简单的员⼯信息表,其中有⼯号、姓名、电话三个字段。通过电话这个字段获得的信息有可能是家庭电话,或是⼯作地点的电话,或是⼿机,因此表达的信息并不明确,我们可以改成这样:
byvoid 博客那这样改完以后,表中所表达的信息就⾮常明确了。
⼆、数据库第⼆范式:
在满⾜第⼀范式的基础上,实体的每个⾮主键属性完全函数依赖于主键属性(消除部分依赖)
主键:凡是接触过数据库的⼈,肯定都会知道主键,主键明确标识了每条记录,⼀般是⼀个字段,也可以由两个或两个字段组成。
mysql面试题sql依赖:对于X的每个值,Y都有⼀个值与之对应,反过来则不⼀定不成⽴,这叫做X函数决定Y,Y函数依赖X(X往往是主键)。
还拿上⾯的那张表举来说,对于每个⼯号,都有⼀个姓名与之对应,即⼯号决定姓名,姓名依赖⼯号;但由于员⼯之间可能有重名,⼀个姓名可能对应多个⼯号,所以姓名不能决定⼯号。
面向对象三个特征部分依赖:当主键由两个或两个以上字段构成,⽽表中的某些信息通过主键的⼀个字段就能唯⼀确定,我们称这样的依赖关系为部分依赖,⽐如这个例⼦:
学⽣选课(学号,姓名,专业,课程号,课程名,成绩),该表中⼀个学⽣可以选多门课,⼀门课有多个学⽣。学号和课程号可以唯⼀确定⼀条记录,因此⽤学号和课程号做主键。
表中的姓名、专业通过主键中的学号就能唯⼀确定,⽽课程名通过课程号唯⼀确定,这就是部分依赖,这样的设计不符合第⼆范式。
不符合第⼆范式会带来哪些问题呢?
1、数据信息冗余,可见上表
2、增删改会出现问题,⽐如有⼀门《微机原理》没有⼈选,那么由于缺少学号(主键之⼀)那么这门课就不能出现在表⾥。
vps管理系统如何解决呢,我们可以⽤关系分解的⽅法消除部分依赖,将上表改成如下三张表:
三、数据库第三范式:
在满⾜第⼆范式的基础上,在实体中不存在⾮主键属性传递函数依赖于主键属性。(表中字段[⾮主键]不存在对主键的传递依赖)
传递依赖:A依赖于B,B依赖于C,就可以说A依赖C。看这样⼀张表:
这张表中有如下决定关系: 学号-->姓名,性别,系号-->决定系名,宿舍号-->决定宿舍电话,也有 学号-->系名,学号-->宿舍电话。
在这样⼀张表中则存在着传递依赖。也就是系名依赖系号,系号依赖学号,那么间接的系名依赖学号,宿舍号、宿舍电话和学号之间也有同样的关系。这样设计表的同样会带来数据冗余,操作异常等问题。那么我们同样可以⽤关系分解的分解的⽅法来消除传递依赖,将这张表分成三张表:
这就是数据可设计的三范式了,在设计数据表的过程中注意三范式的应⽤,多多实践,有助于对三范式有更深⼊的理解。返回搜狐,查看更多
责任编辑:
批处理大全
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论