数据库设计三范式

数据库设计三范式

什么是设计范式

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

三范式都是哪些?

第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
	多对多?三张表,关系表两个外键。
	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

数据库设计三范式

上一篇:跨平台的获取时间戳【win32和linux】


下一篇:.net C# FileUpload控件上传