数据库设计三范式
什么是设计范式
? 设计表的依据。按照这个三范式设计的表不会出现数据冗余。
三范式都是哪些?
第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
多对多?三张表,关系表两个外键。
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 班级
cn(pk) cname
--------------------------
1 班级1
2 班级2
t_student 学生
sno(pk) sname classno(fk)
-----------------------------------------
10001 王一 1
10002 王二 1
10003 王三 2
10004 王四 2
10005 王五 1
10006 王六 2
提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。
一对一如何设计
一对一设计的两种方案:
t_user_login 用户登录表
id(pk) username password
--------------------------------------
1 zs 123
2 ls 456
第一种:主键共享
t_user_detail 用户详细信息表
id(pk+fk) realname tel ...
----------------------------------------------
1 张三 12345678
2 李四 85274174
第二种方案:外键唯一
t_user_detail 用户详细信息表
id(pk) realname tel userid(fk+unique) ...
---------------------------------------------------------------------
1 张三 12345678 1
2 李四 85274174 2