資料庫設計三正規化

2021-10-09 03:26:35 字數 1635 閱讀 1529

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

複習一下資料依賴 :

完全依賴: 通過可以得到,而通過單獨的或者單獨的都無法得到該成績,則說明完全依賴於

部分函式依賴: 通過可以得到,而通過單獨的已經能夠得到,則說明部分依賴於; 又比如, 通過可以得到,而通過單獨的已經能夠得到,則說明部分依賴於。(部分依賴會造成資料冗餘及各種異常。)

傳遞函式依賴: 在關係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 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...

資料庫設計 三正規化

建立冗餘小,結構合理的資料庫,設計資料庫時必須准許你一定的規則,在關聯式資料庫中的這種規則就成為正規化.是要符合某一種設計要求的總結 要想設計乙個合理的關係資料型資料庫庫,就必須滿足一定的正規化 也是最基本的正規化.如果資料庫表中的所有字段值是都不可分解的原子值.例如 使用者資訊表中.但是這個並不是...