再谈三范式


以前写过一篇关于数据库设计三范式的文章,当时只是从网上查了一些资料和例子根据 自己的理解写的。昨天晚上7期的师姐给我们具体地讲了数据库设计的三范式,感觉我的理解又加深的一步。


先谈一下数据库中的“键”

超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。

候选键:包含属性最少的超键

主键:任意一个候选键

外键: 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。外键其实表示的是表和表之间的一种依赖关系,通过外键约束可以保证数据的一致性



其实最终落实到数据库表可见的只有主键,其他的如超键和候选键都是为了确定一个主键

因为三范式和主键、外键是分不开的,所以以上先介绍一下“键”



下面重谈三范式

第一范式:保证表中的每项数据的原子性(即不可分割)

如下图所示

卡号

上机时间

下机时间

1234567890

2012-3-4  19:30

2012-3-4  20:00



上表中上机时间字段和下机时间字段,如果对于日期和时间都是单独存取的,那么就有必要把他们分开作为两个字段,

卡号

上机日期

上机时间

下机日期

下机时间

1234567890

2012-3-4

19:30

2012-3-4

20:00



假如日期和时间总是放在一起存储取,我觉得就没有把他们分开,其实原子性性是和具体的项目需求有关系的



第二范式:消除部分依赖,保证完全依赖(主要是针对复合主键而言)
如果数据表中的某个字段只依赖于复合主键的某一部分,而不是整个主键,那么这种依赖就称为部分依赖



第三范式:消除传递依赖(间接依赖)保证直接依赖

如果数据表中的主键推出了字段A,而且字段A又能推出字段B,那么这种依赖关系就属于传递依赖

数据库之所以要按照三范式去设计,目的就是要消除数据的冗余,数据的冗余会带来很多害处,如:数据的增删改不能保证数据的一致性


但是完全按照三范式设计的数据库不一定是好的数据库,有时候为了提高效率是需要适当的数据冗余的

总之一句话“权衡利弊看得失”,数据库具体怎样设计还要看具体的项目需求,既要考虑降低数据冗余带来的害处,又要考虑效率的问题。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值