第一到第三范式与查询 思考

    为什么要使用范式呢,我认为如果一个表只有一个元组时,倒也可以,但是若表中有很多元组时,这些元组都有相同的属性,就会有问题了,
①因为一个表中的属性之间会存在关系,
②不同元组相同属性有相同的属性值,与这个属性有依赖关系的属性就也会重复,造成冗余。


进行范式分成小表后,在使用select查询的时候有时select的 字段和where中的字段并不在一个表中,这就需要把查询语句中用到的表连接起来成为一个大表再进行操作,或者使用子查询


范式就是符合某一种级别的关系模式的集合。通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合。这一过程称为规范化。  
查询是使用select语句from一个或多个表中通过where后的限定条件来select所需字段。    


我认为使用范式就是尽可能的把重复的东西去掉,消除冗余,这样在插入,更新等操作的时候就只需改动很少的地方就可以了,
但在使用select查询的时候有时select的 字段和where中的字段并不在一个表中,这就需要把查询语句中用到的表连接起来成为一个大表再进行操作,或者使用子查询


为什么要使用范式呢,我认为如果一个表只有一个元组时,倒也可以,但是若表中有很多元组时,这些元组都有相同的属性,就会有问题了,因为一个表中的属性之间会存在关系
,元组有相同的属性,只是元组之间的属性值可能不同,这样就会出现问题,




关于范式有几个概念需要理解
表中的函数依赖:若一张表中,在属性或属性组(属性就是但主键,属性组即表的码有多个主属性)X的值确定的情况下,必定能确定表中另一属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。不存在任意两条记录,它们在X属性(或属性组)上的值相同,而在Y属性上的值不同。(这里的属性组就是码的多个主属性),这也就是“函数依赖”名字的由来,类似于函数关系 y = f(x),在x的值确定的情况下,y的值一定是确定的
完全函数依赖
在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X ' → Y 不成立,那么我们称 Y 对于 X 完全函数依赖.


部分函数依赖
假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,也就是y可以依赖于X的真子集,那么我们就称 Y 部分函数依赖于 X


传递函数依赖
假如Y 不包含于 X,且 X 不函数依赖于 Y, Z 函数依赖于 Y,且 Y 函数依赖于 X ,那么我们就称 Z 传递函数依赖于 X ,


码:
设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中我们通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的值也就随之确定,那么 K 就是码。一张表中可以有超过一个码。




第一范式(1NF):一个关系模式R的所有属性都是不可分的基本数据项。不存在隐藏字段,属性保持原子性 ,属性的属性值是不可分的,
第二范式(2NF):关系模式R属于第一范式,且每个非主属性都完全函数依赖于键码, 非主属性不能依赖于码中的某个主属性,
第三范式(3NF):关系模式R属于第一范式,且每个非主属性都不传递依赖于键码,表中不存在在其它表中已存在的非主键。


第一范式变成第二范式
是把码中的某个主键和它能确定的非主键拿出去,拿出去的表中的主键在原表中是码中的主属性
第二范式变成第三范式
是把非主键和它所确定的另一个非主键拿出去,拿出去的表中的主键在原表中是非主键。




属性之间的关系可能是函数依赖关系,就是某个元组的这个属性就能唯一确定决定另一个属性,就是说你知道一个属性值,就肯定知道它确定的那个属性的值,所以如果多个记录写了同样的属性,那他所确定的属性在这些元组中就会重复,,
唯一确定,就是如果一个属性值确定,那么函数依赖于它的属性就肯定是唯一的,唯一确定的。


                不满足第二,第三范式有如下缺点,
(1) 数据冗余。码中一个主属性在多个元组中重复,那对它存在部分函数依赖的那个字段便也会重复这么多次,
(2) 插入异常。
(3) 删除异常。
(4) 修改异常。


                满足范式的缺点
如果满足了范式,那一个大表会分成很多个小表,表里边的属性之间的重复度和关联度较低,所以在更新的时候快,
但也正因为大表中有传递依赖和部分函数依赖的列在范式时就分离出去了,所以在查询的时候需要进行表之间的关联,才能找到,这样就会因表之间不断进行关联的原因而影响性能,
这也说明,在选择一方面的时候也就放弃了它的另一方面。鱼与熊掌不可兼得。




范式越高,数据的冗余度越低,但是相对的处理速度越慢,








参考文章:
作者:知乎用户       链接:https://www.zhihu.com/question/24696366/answer/29189700


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值