数据库三大范式学习笔记

1.范式的作用    在设计与操作维护数据库时,最关键的问题就是要确保数据能够正确地分布到数据库的表中。使用正确的数据结构,不仅有助于对数据库进行相应的存取操作,还可以极大地简化应用程序中的其他内容(查询、窗体、报表、代码等),按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。   &n...
摘要由CSDN通过智能技术生成

1.范式的作用

    在设计与操作维护数据库时,最关键的问题就是要确保数据能够正确地分布到数据库的表中。使用正确的数据结构,不仅有助于对数据库进行相应的存取操作,还可以极大地简化应用程序中的其他内容(查询、窗体、报表、代码等),按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性
    在实际的数据库表结构设计中,满足三范式就足够了。其中,三种范式是条件递增的联系(即后一个范式是在前一个条件满足的情况下引入新的条件)。

2.第一范式(1nf)

满足条件:
1. 原子性,即数据库表里的字段都是不可分割的。

    第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合或是由一组属性构成。
    例如,由“职工号”“姓名”“电话号码”组成的表(一个人可能有一部办公电话和一部移动电话),这时将其规范化为1NF可以将电话号码分为“办公电话”和“移动电话”两个属性,即职工(职工号,姓名,办公电话,移动电话)。

3.第二范式(2nf)

满足条件:
1. 原子性,即数据库表里的字段都是不可分割的;
2. 表中必须有主键
3. 其他非主属性必须完全依赖主键(不能依赖主键一部分,这是针对联合主键说的)。

    例如,在选课关系表(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),但由于非主属性学分仅依赖于课程号,对关键字(学号,课程号)只是部分依赖,而不是完全依赖,因此此种方式会导致数据冗余以及更新异常等问题,解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外关键字课程号联系,在需要时进行连接。

3.第三范式(3nf)

满足条件:

1. 原子性,即数据库表里的字段都是不可分割的;
2. 表中必须有主键;
3. 其他非主属性必须完全依赖主键(不能依赖主键一部分,这是针对联合主键说的);
4. 非表中主键字段完全直接依赖主键,不能是传递依赖。

    以学生表(学号,姓名,课程号,成绩)为例,其中学生姓名无重名,所以该表有两个候选码(学号,课程号)和(姓名,课程号),故存在函数依赖:学号—>姓名,(学号,课程号)—>成绩,唯一的非主属性成绩对码不存在部分依赖,也不存在传递依赖,所以属性属于第三范式。

4.总结

    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构,所以不能一味的去追求范式建立数据库。

相关可学习博客:
1.https://www.cnblogs.com/lca1826/p/6601395.html
2.https://blog.csdn.net/zhen921/article/details/82701159
3.https://www.cnblogs.com/knowledgesea/p/3667395.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值