Mysql数据库设计三范式

Posted 枸杞仙人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql数据库设计三范式相关的知识,希望对你有一定的参考价值。

三范式

什么是设计范式

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

第一范式

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

  • 不符合第一范式的示例:
学生编号学生姓名联系方式
1001张三zs@gmail.com,1359999999
1002李四ls@gmail.com,13699999999
1001王五ww@163.net,13488888888
  • 存在问题:

    • 最后一条记录和第一条重复(不唯一,没有主键)
    • 联系方式字段可以再分,不是原子性的
  • 正确格式:

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

第二范式

第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖(多出现于复合主键)。

  • 示例
学生编号学生姓名教师编号教师姓名
1001张三001王老师
1002李四002赵老师
1003王五001王老师
1001张三002赵老师

这张表不符合第一范式,因为没有确定主键。修改后符合第一范式:

学生编号(PK)教师编号(PK)学生姓名教师姓名
1001001张三王老师
1002002李四赵老师
1003001王五王老师
1001002张三赵老师

以上虽然确定了主键,但此表会出现大量的冗余,主要涉及到的冗余字段为“学生姓名”和“教师姓名”,出现冗余的原因在于,学生姓名部分依赖了主键的一个字段学生编号,而没有依赖教师编号,而教师姓名部门依赖了主键的一个字段教师编号,这就是第二范式部分依赖。

  • 解决方案:第二范式
    多对多的情况下使用三张表,其中关系表使用两个外键
    学生信息表:
学生编号(PK)学生姓名
1001张三
1002李四
1003王五

教室信息表:

教师编号(PK)教师姓名
001王老师
002赵老师

关系表:

id pk学生编号 fk教师编号 fk
11001001
21002002
31003001
41001002

第三范式

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

  • 示例
学生编号(PK)学生姓名班级编号班级名称
1001张三01一年一班
1002李四02一年二班
1003王五03一年三班
100403一年三班

从上表可以看出,班级名称字段存在冗余,因为班级名称字段没有直接依赖于主键,班级名称字段依赖于班级编号,班级编号依赖于学生编号,这就是传递依赖。

  • 解决方案:第三范式
    一对多的情况两张表,表示多的那张表加外键
    学生信息表:
学生编号(PK)学生姓名班级编号(FK)
1001张三01
1002李四02
1003王五03
100403

班级信息表

班级编号(PK)班级名称
01一年一班
02一年二班
03一年三班

三范式总结

一对多

两张表,多的表加外键。

多对多

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

一对一

主键共享

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		1
2				李四				1111415621		2

第二张表创造一个唯一外键并连接到主表的主键

以上是关于Mysql数据库设计三范式的主要内容,如果未能解决你的问题,请参考以下文章

数据库模型设计,第一范式第二范式第三范式简单例子理解

数据库设计三大范式

MySQL(二十一)—— 数据库设计三范式

Mysql数据库设计三范式

Mysql的三范式设计

MySQL设计之三范式