以前寫過一篇關於資料庫設計三正規化的文章,當時只是從網上查了一些資料和例子根據 自己的理解寫的。昨天晚上7期的師姐給我們具體地講了資料庫設計的三正規化,感覺我的理解又加深的一步。
先談一下資料庫中的「鍵」
超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。乙個屬性可以為作為乙個超鍵,多個屬性組合在一起也可以作為乙個超鍵。
候選鍵:
包含屬性最少的超鍵
主鍵:任意乙個候選鍵
外來鍵:如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。外來鍵其實表示的是表和表之間的一種依賴關係,通過外來鍵約束可以保證資料的一致性
其實最終落實到資料庫表可見的只有主鍵,其他的如超鍵和候選鍵都是為了確定乙個主鍵
因為三正規化和主鍵、外來鍵是分不開的,所以以上先介紹一下「鍵」
下面重談三正規化
第一正規化:
保證表中的每項資料的原子性(即不可分割)
如下圖所示
卡號上機時間
下機時間
上表中上機時間欄位和下機時間字段,如果對於日期和時間都是單獨訪問的,那麼就有必要把他們分開作為兩個字段,
卡號上機日期
上機時間
下機日期
下機時間
假如日期和時間總是放在一起儲存取,我覺得就沒有把他們分開,其實原子性性是和具體的專案需求有關係的
第二正規化:
消除部分依賴,保證完全依賴(主要是針對復合主鍵而言)
如果資料表中的某個欄位只依賴於復合主鍵的某一部分,而不是整個主鍵,那麼這種依賴就稱為部分依賴
第三正規化:
消除傳遞依賴(間接依賴)保證直接依賴
如果資料表中的主鍵推出了字段a,而且欄位a又能推出欄位b,那麼這種依賴關係就屬於傳遞依賴
資料庫之所以要按照三正規化去設計,目的就是要消除資料的冗餘,資料的冗餘會帶來很多害處,如:資料的增刪改不能保證資料的一致性
但是完全按照三正規化設計的資料庫不一定是好的資料庫,有時候為了提高效率是需要適當的資料冗餘的
總之一句話「權衡利弊看得失」,資料庫具體怎樣設計還要看具體的專案需求,既要考慮降低資料冗餘帶來的害處,又要考慮效率的問題。
一正規化 二正規化 三正規化
1 第一正規化 如果乙個關係模式r的所有屬性都是不可分的基本資料項,則r 1nf。簡單的說,第一正規化就是每乙個屬性都不可再分。不符合第一正規化則不能稱為關聯式資料庫。第一正規化 1nf 要求資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值。若某一列有多個值,可以將該列單獨拆分成乙個實...
MySQL三正規化與反三正規化
目錄反三正規化 對於三正規化和反三正規化的選擇 參考cs notes 資料庫 資料庫系統原理.html 正規化 屬性不可再分 即表中的字段不能再拆分 例 乙個name屬性可以分為firstname屬性和lastname屬性,則不符合第一正規化。表中有鍵碼,非主屬性完全依賴鍵碼 即表中的非主屬性完全依...
一正規化 二正規化 三正規化區別
正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...