MySql:三范式

目录

1. 第一范式(1NF:每一列保持原子特征)

2、第二范式(2NF):

解决方案:只要不存在复合主键

3、第三范式(3NF):

解决方案:实体单独建表

范式总结:1NF:确保每列保持原子性2NF:确保表中的每列都和主键相关3NF:确保每列都和主键列直接相关,而不是间接相关


1. 第一范式(1NF:每一列保持原子特征)

列是基本数据项,不能在进行拆分,否则设计成一对多的关系,不满足第一范式,不能称之为 关系型数据库。

学生表(学号、姓名、性别、年龄,地址)

例:陕西省西安市西安邮电大学

例:陕西省西安市长安区子午大道西安邮电大学

地址信息包括:省市区,可以拆分

拆分改造后:

学生表(学号、姓名、性别、年龄、地址ID)

地址表(地址ID、省、市、区)

2、第二范式(2NF):

属性完全依赖于主键(针对联合主键 → 消除部分依赖),

1NF基础上,非主属性完全依赖于主键,如果不是完全依赖主键,应该拆分成新的主体,拆分成一对多的关系

这里的(学生,课程)是一个码

一个课程,一定指定了某个教材,一年级语文肯定用的是《小学语文1》,那么就有课程->教材

(学生,课程)->教材,(学生,课程)是个码,课程可以决定教材,是部分依赖

出现这样的情况,就不满足第二范式。解决:将一个表分解成两个或若干个表。

解决方案:只要不存在复合主键

3、第三范式(3NF):

2NF基础上、属性(某一列)不依赖于其他非主属性(消除依赖传递);

解决方案实体单独建表

将存在传递依赖的字段,以及依赖的字段本身单独取出,形成一个单独的表,然后在需要对应的信息的时候,将对应的实体表的主键加进来。

 

范式总结
1NF:确保每列保持原子性
2NF:确保表中的每列都和主键相关
3NF:确保每列都和主键列直接相关,而不是间接相关
 

数据库范式的作用:
进行数据库设计时字段、库表划分的依据
数据库范式的优点:
减少数据冗余(最主要的好处、其他好处因此而附带)
消除异常(插入异常、更新异常、删除异常)
让数据组织的更加和谐

数据库范式的缺点:

应用范式越高、表越多、表越多带来的问题:

查询时需要连接多个表,增加了查询的复杂性
查询时需要连接多个表,降低了数据库查询的性能

范式不是越高越好,一般满足3NF即可。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值