1. 程式人生 > 實用技巧 >資料庫設計三正規化

資料庫設計三正規化

資料庫設計三正規化

什麼是設計正規化

​ 設計表的依據。按照這個三正規化設計的表不會出現資料冗餘。

三正規化都是哪些?

第一正規化:任何一張表都應該有主鍵,並且每一個欄位原子性不可再分。
第二正規化:建立在第一正規化的基礎之上,所有非主鍵欄位完全依賴主鍵,不能產生部分依賴。
	多對多?三張表,關係表兩個外來鍵。
	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