資料庫 正規化

2021-06-11 07:13:32 字數 1320 閱讀 2365

上個星期面試,經理突然要我描述一下第三正規化,腦袋居然一片空白,只好坦白說太久沒看忘記了。開發的時候都是憑著直覺來寫,什麼所謂依賴不依賴,正常人一看就看得出來要不要把錶拆開。但是真正開發的時候又發現如果拆得太細,冗餘問題雖然是解決了,按orm來做,卻增加了資料庫的訪問數量,從而降低了系統整體的執行效率...後來發現儲存過程這個好東西,應該可以解決這個問題,所以..要學的東西還有很多...

.為了加強正規化複習的效果,就用博文來複習吧。(以下純屬個人觀點,如果錯誤請指正,正規化標準解釋請參考維基百科:

資料庫設計正規化是符合某一種級別關係模式的集合,用自己的話來說就是用來規範關係型資料庫、預防關聯式資料庫增刪錯誤,減少關聯式資料庫資料冗餘等作用的標準。

1nf(第一正規化):

每一列都是乙個不可分割的資料項。這是關係表或者說關聯式資料庫的基礎,如果這個條件不滿足,那就不是乙個關聯式資料庫了。

2nf(第二正規化):

每個非主屬性完全依賴於主屬性。

說白了就是有主鍵,或者說是表的的唯一識別符號。但是這裡有乙個地方特別要注意的就是完全依賴這個詞,舉個例子,有乙個杯子的**表,杯子型號a和杯子顏色b作為主屬性,**c為非主屬性,如果不同顏色的杯子是不同**的,那麼這個表示符合第二正規化的,但是如果假設同乙個型號的杯子**都是雷打不動的一樣的,那麼就是說**c雖然是完全依賴於a但卻部分依賴於ab,這個時候這個杯子**表就不符合第二正規化了。(感覺這個例子舉得不是很好,因為史蒂夫用現實告訴我們白色的iphone和黑色的iphone是可以不一樣**的..)

3nf(第三正規化):

每個非主屬性即不部分依賴也不傳遞依賴於碼,另外一種說法是非主屬性不依賴於任何其他非主鍵屬性,當然都是在2nf前提下新增的條件。

簡單點說2nf基礎上取消了非主屬性的傳遞依賴。舉個web開發經常遇到的,實現乙個 同級分類不能重複的多級分類,為了符合第三正規化,每兩級分類之間的關係必須單獨定義乙個表,最後一級分類和分類內容作為乙個表。如果不分開,那麼分類內容id)就會成為主鍵,一級分類會函式依賴於二級分類,而二級分類必定函式依賴(直接或者間接)分類內容id,所以如果某一一級分類的某一二級分類如果有n個分類內容,那麼資料庫裡就會重複儲存n-1個一級分類的內容,於此同時,如果刪除分類的最後乙個內容被刪除,那麼這個分類就會被刪除。所以資料庫設計的時候最少是要到達第三正規化的。

bcnf(bc正規化):

對於每乙個函式依賴,被依賴的屬性必須是含有碼。

這個正規化是3nf的加強版,表述已經非常簡單明瞭,每個被依賴項都必須是主鍵,這樣就確保取消了非主屬性的傳遞依賴。其實我覺得一般的資料庫設計如果准許你了第三正規化,一般都會遵循bcnf正規化,書上那個例子...我想一般人怎麼設計都不會設計出這樣的表來...

4nf(第四正規化):

每個非平凡多值依賴的被依賴項都含有碼。

資料庫 資料庫正規化

關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...

資料庫正規化 三正規化

所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...

資料庫正規化

注 表在定義中被稱為關係,記作r 欄位在定義中被稱作屬性 模式 資料庫中有三種模式,外模式,內模式,模式 粗體是關鍵字的意思 斜體為外來鍵 以前寫下來的,但是用了多年的帳號已經忘了,唯有把文章轉到這裡來了 真暈哦 http blog.csdn.net fantasylu archive 2004 0...