mysql資料庫的正規化 理解資料庫正規化

2021-10-18 22:31:48 字數 1217 閱讀 1045

第一正規化(1nf)

第一正規化的核心描述為:資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值。該正規化講的是列的原子性。有兩層意思:一層是說每一列只能存乙個屬性值(如果把2個屬性值存在1列中)。第二層說的是在一張表中屬性值不能重複。在現代關係行資料庫中,都是預設滿足第一正規化的,所以你想要寫出不滿足第一正規化的結構來還是不可能的事情,所以第一正規化就不再多說。如果想深入,可以研究下其他非關係型的資料庫的情況。

第二正規化(2nf)

第二正規化的核心描述為:行有唯一的主鍵,非主鍵僅對主鍵依賴。有2層意思,第一層,每一行都要有主鍵(單獨資訊或組合資訊),這個容易理解。第二層意思是非主鍵對主鍵依賴,如果是復合主鍵的情況,非主鍵屬性不能依賴於部分主鍵屬性。如 【產品,倉庫號,數量,倉庫位址,倉庫管理員】,這裡(產品+倉庫號)為復合主鍵,而倉庫位址和倉庫管理員依賴於倉庫號,這就是上面描述的「主鍵屬性不能依賴於部分主鍵屬性」,因此這是違背第二正規化的,符合正規化的設計應該為:【產品,倉庫號,數量】,【倉庫號,倉庫位址,倉庫管理員】。

第三正規化(3nf)

第三正規化的核心描述為:非主鍵屬性互不依賴。這個很容易理解,直接上例子:【學生編號,姓名,系編號,系辦公地點,系辦公**】,這裡學生編號是主鍵。然後這裡的非主鍵屬性系編號->系辦公室+系辦公**,這裡應該把該錶拆成2個表,然後外來鍵相連。符合正規化的設計應該為:【學生編號,姓名,系編號】和【系編號,系辦公地點,系辦公**】。

bc正規化(bcnf), 是兩個叫 raymond f. boyce 和 edgar f. codd 的總結出來的,取他們的姓拼成正規化名。bc 正規化是第三正規化的加強版。

第四正規化(4nf)

第四正規化的核心描述為:不允許冗餘的多對多關係。這個正規化的核心思想也是節省資料庫空間。舉例來說,【員工,技能,語言】,乙個員工能擁有多項技能和多種語言能力,而同一技能或語言可以有多個員工掌握。在這種情況下,依據第四正規化,我們應該把表單設計成【員工,技能】+【員工,語言】。在儲存時,我們能節省一些空間,但是在操作時,join 往往帶來更多的系統開支。

第五正規化(5nf)

第五正規化指在可能的前提下繼續打碎資料表。這個正規化和第四正規化的思想是相同的,希望消除冗餘,在可能的情況下,繼續打碎資訊。例如上面的例子,乙個三列的表,如果表的各列是兩兩之間多對多的關係,則按照第五正規化的思想,應該建立三張表,每張表有之前表的兩列資訊。

第六正規化(6nf)

第六正規化已經挺極端了,按文獻的說法,只有資料量大到資料倉儲級別,才有使用的必要。貌似是仔細設計表單的依賴關係和 join 關係的,就不仔細研究下去了。

理解資料庫之設計正規化

1.第一正規化 指原子性,不可分割 資料庫第一正規化是指資料庫中的每一列都是不可分割的原子值。例如設計位址欄位時,如有需求需要經常訪問位址中的城市,街道等資訊時,就要把該字段繼續分割。2.第二正規化 指非主屬性必須完全依賴於主屬性 資料庫第二正規化是指所有非主屬性列都應該完全依賴於主屬性,而不是只依...

理解資料庫設計正規化 轉

前言 為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。正規化是什麼 正規化是符合某一種級別的關係模式的集合。...

簡單的理解資料庫三正規化

正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...