个人浅谈之范式设计

范式理解
因为关系数据库中的关系要满足一定的要求,满足不同要求的为不同的范式,满足最低要求的为第一范式,即1NF。在第一范式中进一步要求为第二范式(2NF),以此类推……
第一范式(1NF):
第一范式具有原子性,即一般的不可再分割性,,也就是一个数据库表中的每一列都是不可再分割的值,不存在重复的列。比如:说到一种商品的价格时,可能会细分为几种不同的价格,像进价,销售价,批发价等等,这就存在了重复的列,说明这个商品价格不能作为字段存在于一张表中,而是应该去重新定义一个新的实体,这个新的实体由上表中重复的属性商品价格构成;当然一些特殊情况除外。
第二范式(2NF):
第二范式要求的是非主键必须完全依赖于主键,比如:一个简单信息表中的部分,有学号,姓名,年龄,课号,成绩,,班级这几个属性;
有以下依赖关系:
(学号)-->(姓名,年龄)
(学号,课号)-->(成绩)
此时不满足第二范式(2NF),会出现很多问题如一个学生选很多门课,则这个学生的姓名和年龄也会重复多次,造成数据的冗余,因为这个表中,学号作为主键,但是成绩这个非主属性并不完全依赖于学号这个主属性,要解决这个问题,应该把上面那个表改为如下两个表:
Student:(学号,姓名,年龄)
Class:(学号,课号,成绩)
Class表中的学号作为外键,就满足了第二范式的要求

第三范式(3NF):
第三范式是要消除间接依赖,就是在一个表中,不允许存在一个非主属性A依赖于另外一个非主属性B,而B依赖于主属性,但A不依赖于主属性即主键,这是一种传递依赖,而第三范式则是要消除这种传递依赖。
总结了一点对范式的理解,可能有些地方理解的不透彻,还有一些地方理解还存在错误,希望大家能够指正我的错误,再就是,在实际生活中,我觉得并不需要完全按照第三范式来进行数据库设计,因为数据库的冗余永远都是存在的,满足的范式越多,就越复杂,虽然数据冗余度减少了,但是,数据的利用效率可能会下降,这种以时间花去空间的做法并不可取,所以实际中设计数据库时一定要考虑周全,不要仅仅去追求满足范式要求,还要依据现实情况,这样才能更好的去设计数据库。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值