博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql数据库设计三范式
阅读量:3964 次
发布时间:2019-05-24

本文共 1585 字,大约阅读时间需要 5 分钟。

第一范式

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

在这里插入图片描述

第二范式

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

在这里插入图片描述

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

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

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				32				1				13				2				24				2				35				3				16				3				3

第三范式

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

在这里插入图片描述

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

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

班级t_class

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

学生t_student

sno(pk)			sname				classno(fk)---------------------------------------------101				张1				1102				张2				1103				张3				2104				张4				2105				张5				2

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

总结

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

一对一怎么设计?

一对一设计有两种方案:主键共享

t_user_login 用户登录表

id(pk)		username			password--------------------------------------1				zs					1232				ls					456

t_user_detail 用户详细信息表

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

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

t_user_login 用户登录表

id(pk)		username			password--------------------------------------1				zs					1232				ls					456

t_user_detail 用户详细信息表

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

转载地址:http://txuki.baihongyu.com/

你可能感兴趣的文章
Struts2+Spring3+Mybatis3开发环境搭建
查看>>
mongoDB入门必读(概念与实战并重)
查看>>
通俗易懂解剖jbpm4
查看>>
rsync
查看>>
makefile
查看>>
linux 文件权限
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>
inode
查看>>
Shell: sh,bash,csh,tcsh等shell的区别
查看>>
golang ubuntu 配置 笔记
查看>>
vim 常用命令
查看>>
golang 开源项目
查看>>
ubntu 开发服务进程
查看>>