一、正規化介紹
,主要有六種正規化:第一正規化、第二正規化、第三正規化、bc正規化、第四正規化和第五正規化。滿足最低要求的叫第一正規化,簡稱1nf。在第一正規化基礎上進一步滿足一些要求的為第二正規化,簡稱2nf。其餘依此類推
事物往往具有多面性,設計正規化也會帶來一定的麻煩:操作困難,因為需要聯絡多個表才能得到所需要資料,而且正規化越高效能就會越差。所以使用多高的正規化需要權衡利弊,一般在專案中,使用到第三正規化也就足夠了,效能好而且方便管理資料。
二、下面我們來舉例介紹一下資料庫設計三正規化
說明:例項採用《學校機房收費系統》的「學生資訊表」,「學生上下機記錄表」的部分字段
1、第一正規化1nf
定義:資料庫表中的字段都是單一屬性的,不可再分。
簡單的說,每乙個屬性都是原子項,不可分割。
1nf是關係模式應具備的最起碼的條件,如果資料庫設計不能滿足第一正規化,就不稱為關係型資料庫。也就是說,只要是關係型資料庫,就一定滿足第一正規化。
我們先來看一張不符合1nf的表1-1
cardno
studentno
studentname
***department
cardcash
userid
userlevel
time小明男
教育學院,心理系,1班
operator
操作員2011/10/03,09:00
之所以說這張表不符合1nf,是因為department和time欄位可以再分,所以應該更改為表1-2:
cardno
studentno
studentname
***academy
major
class
cardcash
userid
userlevel
date
time小明男
教育學院
心理系operator
操作員2011/10/03
09:00
2、第二正規化2nf
定義:資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴,即符合第二正規化。
如果乙個表中某乙個欄位a的值是由另外乙個欄位或一組欄位b的值來確定的,就稱為a函式依賴於b。》
2nf可以減少插入異常,刪除異常和修改異常。
簡單的說,一方面,第二正規化肯定要滿足第一正規化,否則就沒有必要談第二正規化。
另一方面,當某張表中的非主鍵資訊不是由整個主鍵函式來決定時,即存在依賴於該表中不是主鍵的部分或者依賴於主鍵一部分的部分時,通常會違反2nf。
我們再來看上面的滿足1nf的表1-2
cardno
studentno
studentname
***academy
major
class
cardcash
userid
userlevel
date
time小明男
教育學院
心理系operator
操作員2011/10/03
09:00
我們看到,在這張表中,通過cardno和studentno就可以確定studentname,***,academy,major,class,cardcash,userid,date,time。所以可以把cardno和studentno的組合作為主鍵。
但是,我們發現cardcash並不完全依賴於cardno和studentno,僅僅通過cardno就可以確定cardcash,因為一張卡,一定會有卡內金額。這就造成了部分依賴。出現這種情況,就不滿足第二範式。
我們再來看另乙個例子,學生上下機記錄表,會更明顯些。表2-1
cardno
studentno
studentname
***department
major
class
ondate
ontime
offdate
offtime
consumetime
consumemoney小明男
教育學院
心理系2011/10/14
09:00
2011/10/14
10:00
我們看到,在這張表中,studentname,***,department,major,class都是直接依賴於studentno,而不依賴與表中的其他字段,這樣的設計也不符合2nf非主鍵資訊不是由整個主鍵函式來決定時。
我們可以把1-2和2-1優化為:
3-1studentno
cardno
userid
userlevel
date
time
operator
操作員2011/10/03
09:00
3-2cardno
cardcash
3-3cardno
ondate
ontime
offdate
offtime
consumetime
consumemoney
2011/10/14
09:00
2011/10/14
10:00
3-4studentno
studentname
***academy
major
class小明男
教育學院
心理系3、第三正規化3nf
定義:在第二正規化的基礎上,資料表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函式依賴則符合3nf。
我們來看上例中優化後的表3-1
studentno
cardno
userid
userlevel
date
time
operator
操作員2011/10/03
09:00
在表中,乙個userid能確定乙個userlevel。這樣,userid依賴於studentno和cardno,而userlevel又依賴於userid,這就導致了傳遞依賴,3nf就是消除這種依賴。
我們把3-1進行優化得到:
4-1studentno
cardno
userid
date
time
operator
2011/10/03
09:00
4-2userid
userlevel
operator
操作員我們看到,第三正規化規則查詢以消除沒有直接依賴於第一正規化和第二正規化形成的表的主鍵的屬性。我們為沒有與表的主鍵關聯的所有資訊建立了一張新錶。每張新錶儲存了來自源表的資訊和它們所依賴的主鍵。
三、總結
資料庫設計規範化能讓我們更好地適應變化,使你能夠改變業務規則、需求和資料而不需要重新構造整個系統。
資料庫一 二 三正規化
第一正規化 不存在重複的列,即資料庫表的每一列都是不可分割的原子資料項。eg 不符合第一正規化如下表 學號姓名 班級01 張三高三1班 應該轉換成如下 高三1班可以拆分成高三年級和1班 學號 姓名 年級 班級 01張三 高三1班 第二正規化 屬性完全依賴於主鍵 滿足第一正規化的前提下 即任意乙個欄位...
資料庫第一 二 三正規化
第一正規化 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,...
資料庫 第一 二 三正規化
1nf 字段不可分 2nf 有主鍵,非主鍵字段依賴主鍵 3nf 非主鍵字段不能相互依賴 解釋 1nf 原子性 字段不可再分,否則就不是關聯式資料庫 2nf 唯一性 乙個表只說明乙個事物 3nf 每列都與主鍵有直接關係,不存在傳遞依賴 第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統...