MySql数据库设计三范式

第一范式

任何一张表都应该有主键,并且每一个字段原子性不可再分。
在这里插入图片描述

第二范式

建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。如果一个表是单一主键,那么它就复合第二范式,部分依赖和主键有关系
在这里插入图片描述

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

一个学生有多个老师,一个老师也有多个学生。
t_student学生表

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

t_teacher 讲师表

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

t_student_teacher_relation 学生讲师关系表

id(pk)		sno(fk)		tno(fk)
----------------------------------
1				1				3
2				1				1
3				2				2
4				2				3
5				3				1
6				3				3

第三范式

建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。
在这里插入图片描述

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

一个班级对应多个学生,一个学生只有一个班级。

班级t_class

cno(pk)			cname
--------------------------
1					班级1
2					班级2

学生t_student

sno(pk)			sname				classno(fk)
---------------------------------------------
101				张1				1
102				张2				1
103				张3				2
104				张4				2
105				张5				2

以上设计是一种典型的一对多的设计,一存储在一张表中,多存储在一张表中,在多的那张表中添加外键指向一的一方的主键

总结

  • 第一范式:数据表中每个字段都必须是不可拆分的最小单元,也就是确保每一列的原子性;
  • 第二范式:满足一范式后,表中每一列必须有唯一性,都必须依赖于主键;
  • 第三范式:满足二范式后,表中的每一列只与主键直接相关而不是间接相关(外键也是直接相关),字段没有冗余。

一对一怎么设计?

一对一设计有两种方案:主键共享
t_user_login 用户登录表

id(pk)		username			password
--------------------------------------
1				zs					123
2				ls					456

t_user_detail 用户详细信息表

id(pk+fk)	realname			                            tel			....
--------------------------------------------------------------------
1				张三				1111111111
2				李四				1111415621

一对一设计有两种方案:外键唯一。

t_user_login 用户登录表

id(pk)		username			password
--------------------------------------
1				zs					123
2				ls					456

t_user_detail 用户详细信息表

id(pk)	   realname			tel				userid(fk+unique)....
-----------------------------------------------------------
1				张三				1111111111		2
2				李四				1111415621		1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值