11、数据库设计三范式

11、数据库设计三范式

1、什么是设计范式?

设计表的依据,按照三范式设计的表不会出现数据冗余。

2、三范式

满足三范式的目的是,减少数据冗余。

第一范式:

任何一张表都应该有主键,并且每一个字段都不能再分。

学生编号学生姓名联系方式
1001张三zs@gmail.com,1359999999
1002李四ls@gmail.com,13699999999
1003王五ww@163.net,13488888888

上表违背了第一范式:

(1)没有主键

(2)联系方式字段可以再分

解决方式:

学生编号(pk)学生姓名e-mail联系电话
1001张三zs@gmail.com1359999999
1002李四ls@gmail.com13699999999
1003王五ww@163.net13488888888

第二范式:

建立在第一范式的基础之上,所有非主键字段必须完全依赖主键,不能产生部分依赖。

学生编号(pk)教师编号(pk)学生姓名教师姓名
11张三张老师
12张三李老师
22李四李老师
23李四王老师
31王五张老师
33王五王老师

上表为多对多关系,并且是学生编号和教师编号形成的联合主键,并且每一列都不可再分,因此满足第一范式。但是学生姓名只依赖于学生编号,并非依赖教师编号,因此形成了部分依赖,所以不满足第二范式。

解决方法:

多对多,三张表,关系表两个外键。

t_student学生表:

sno(pk)sname
1张三
2李四
3王五

t_teacher教师表:

tno(pk)tname
1张老师
2李老师
3王老师

t_student_t_teacher_relation 学生老师关系表:

id(pk)sno(fk)tno(fk)
113
211
321
422
533
632

第三范式:

建立在第二范式之上,所有非主键字段直接依赖主键,不能产生传递依赖。

学生信息表:

学生编号(pk)学生姓名班级编号班级名
1001张三01高三(1)班
1002李四01高三(1)班
1003王五02高三(2)班
1004麻六02高三(2)班

上述表:

  • 有主键,而且数据列不可再分,因此满足第一范式。
  • 非主键列对主键是完全依赖关系,满足第二范式。
  • 但是,班级名依赖于班级编号,而班级编号依赖于主键学生编号,产生了传递依赖关系,因此不满足第三范式。

解决方式:

一对多,两张表,多的表加外键。

班级表:t_class

班级编号(pk)班级名
01高三(1)班
02高三(2)班

学生信息表:t_student

学生编号(pk)学生姓名班级编号(fk)
1001张三01
1002李四01
1003王五02
1004麻六02

提醒:

在实际开发中,以满足客户的需求为主,有的时候会拿数据的冗余来换执行速度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值