設計表的依據,按照這三正規化設計設計的表不會出現資料冗餘.
複習一下資料依賴 :
完全依賴: 通過可以得到,而通過單獨的或者單獨的都無法得到該成績,則說明完全依賴於
部分函式依賴: 通過可以得到,而通過單獨的已經能夠得到,則說明部分依賴於; 又比如, 通過可以得到,而通過單獨的已經能夠得到,則說明部分依賴於。(部分依賴會造成資料冗餘及各種異常。)
傳遞函式依賴: 在關係r(學號,宿舍,費用)中,通過可以得到,通過可以得到,而反之都不成立,則存在傳遞依賴->。(傳遞依賴也會造成資料冗餘及各種異常。)
第一正規化:任何一張表都要有主鍵,並且每乙個字段原子性不可再分
第二正規化:在第一正規化基礎上,所有非主鍵字段完全依賴主鍵,不能產生部分依賴
(注意這裡要減少復合主鍵的使用)
會出現資料冗餘,空間浪費;怎麼解決?
記住口訣: 多對多,三張表,關係表,兩個外來鍵
t_student學生表
sno(pk)
sname1張三
2李四3王五
t_teacher講師表
tno(pk)
tname
1王老師
2張老師
3***
t_student_teacher_relation
id(pk)
sno(fk)
tno(fk)11
3212
3234
2153
2631
第三正規化:建立在第二正規化的基礎之上,所有的非主鍵字段直接依賴主鍵,不能產生傳遞依賴
滿足第三正規化(3nf)必須先滿足第二正規化(2nf)。在滿足第二正規化的基礎上,切不存在傳遞函式依賴,那麼就是第三正規化。簡而言之,第三正規化就是屬性不依賴於其它非主屬性。
記住口訣: 多對多,三張表,關係表,兩個外來鍵
記住口訣: 一對多,兩張表,多的表,加外來鍵
班級表t_class
cno(pk)
cname
1班級1
2班級2
學生表t_student
sno(pk)
sname
classno(fk)
101張一
1102張二1
103張三
2104張四2
105張五
2這裡所解決的就是消除傳遞函式依賴
提醒一下:實際開發中,以滿足客戶的需求為主,有時候會拿冗餘換執行速度
簡單使用者設計方案:
設計使用者登入表t_user_login
id(pk)
username
password1zs
1232
ls456
使用者詳細表設計t_user_detail
id(pk)
realname
tel張三
11111100
李四11111122
兩種設計方案:
主鍵共享方案:
id(pk+fk)
realname
tel張三
11111100
李四11111122
外來鍵唯一:
id(pk)
realname
teluserid(fk+unique)
張三11111100
李四11111122
資料庫正規化 三正規化設計
資料庫第一正規化 原子性 表中每一列都不可以再分割成更小的列 資料庫第二正規化 不產生區域性依賴 每張表只描述一件事情 資料庫第三正規化 表中每列都直接依賴於主鍵,而不是通過其它列間接依賴於主鍵 什麼是資料庫正規化 學習第一正規化的應用 什麼是正規化 一種規則,指導程式設計師建立表的規則 程式設計師...
資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫設計 三正規化
建立冗餘小,結構合理的資料庫,設計資料庫時必須准許你一定的規則,在關聯式資料庫中的這種規則就成為正規化.是要符合某一種設計要求的總結 要想設計乙個合理的關係資料型資料庫庫,就必須滿足一定的正規化 也是最基本的正規化.如果資料庫表中的所有字段值是都不可分解的原子值.例如 使用者資訊表中.但是這個並不是...