目录
一、三范式
1、第一范式
要求有主键,并且要求每一个字段的原子性不能再分。保证每一行的数据是唯一,每个表必须有主键。必须有主键,这是数据库设计的基本要求,一般情况下我们采用数值型或定长字符串,列不能再分,比如:联系方式。
(1)不符合第一范式表结构
id name 联系方式 1001 aaa aaa@163.com , 13314569878 1002 bbb bbb@163.com , 13245678945 1003 ccc ccc@163.com , 15000456987
(2)符合第一范式表结构
id name 邮箱 手机号 1001 aaa aaa@163.com 12321321321 1002 bbb bbb@163.com 32132654654 1003 ccc ccc@163.com 45654654654 2、第二范式
建立在第一范式的基础上,要求所有非主键字段完全依赖于主键,不能产生部分依赖。
(1)不符合第二范式表结构
学号 性别 姓名 课程编号 课程名称 教室 成绩 1001 男 a 2001 java 301 89 1002 女 b 2002 mysql 302 90 1003 男 c 2003 html 303 91 1004 男 d 2004 python 304 52 1005 女 e 2005 c++ 305 67 1006 男 f 2006 c# 306 84 (2)符合第二范式表结构
将上面的表分成三张表
①学生表:学号是主键
学号 性别 姓名 1001 男 a 1002 女 b 1003 男 c 1004 男 d 1005 女 e 1006 男 f ②课程表:课程编号是主键
课程编号 课程名称 教室 2001 java 301 2002 mysql 302 2003 html 303 2004 python 304 2005 c++ 305 2006 c# 306 ③成绩表:学号和课程编号为联合主键
学号 课程编号 成绩 1001 2001 89 1002 2002 90 1003 2003 91 1004 2004 52 1005 2005 67 1006 2006 84 3、第三范式
建立在第二范式基础上,非主键字段不能传递依赖于主键字段, 所有非主键字段和主键字段之间不能产性传递依赖。
(1)不符合第三范式表结构
学号 姓名 课程编号 课程名称 1001 a 2001 java 1002 b 2002 mysql 1003 c 2003 html 1004 d 2004 python 1005 e 2005 c++ 1006 f 2006 c# (2)符合第三范式表结构
学生表:学号是主键
学号 姓名 课程编号 1001 a 2001 1002 b 2002 1003 c 2003 1004 d 2004 1005 e 2005 1006 f 2006 课程表:课程编号是主键
课程编号 课程名称 2001 java 2002 mysql 2003 html 2004 python 2005 c++ 2006 c#
二、常见的表关系
参考学写的文章:https://blog.csdn.net/YXXXYX/article/details/123270424
1、一对一(开发中少见)
学生信息表分为基本信息表和信息信息表。
●分为两张表,共享主键。
●分两张表,用外键连接。
2、一对多(常见)
两张表,外键在多的一方。
●分两张表存储,在多的一方加外键
●这个外键字段引用是一的一方的主键3、多对多
●分三张表存储,在学生表存储学生信息,在课程表存储课程信息。
●在成绩表中存储学生和课程的对应关系。