MySQL資料庫基礎 六 資料庫三正規化

2021-08-08 12:45:01 字數 2494 閱讀 3635

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。

所謂第一正規化(1nf)是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。**如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化(1nf)中表的每一行只包含乙個例項的資訊。簡而言之,第一正規化就是無重複的列。

資料庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。很顯然,,想在現有的dbms中設計出不符合第一正規化的資料庫都是不可能的。簡而言之,第一正規化(1nf)就是列值不能出現重複

第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。**第二正規化(2nf)要求資料庫表中的每個例項或行必須可以被惟一地區分。**為實現區分通常需要為表加上乙個列,以儲存各個例項的惟一標識。這個惟一屬性列被稱為主關鍵字或主鍵、主碼

例如員工資訊表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。

簡而言之,第二正規化(2nf)就是非主屬性完全依賴於主關鍵字。

所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性(設有函式依賴w→a,若存在xw,有x→a成立,那麼稱w→a是區域性依賴,否則就稱w→a是完全函式依賴)。**若在一張表中,在屬性(或屬性組)x的值確定的情況下,必定能確定屬性y的值,那麼就可以說y函式依賴於x,寫作 x → y。**如果不滿足,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。

假定選課關係表為selectcourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關係:

(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)
這個資料庫表不滿足第二正規化,因為存在如下決定關係:

(課程名稱) → (學分)

(學號) → (姓名, 年齡)

即存在組合關鍵字中的字段決定非關鍵字的情況。

由於不符合2nf,這個選課關係表會存在如下問題:

在這個表中存在幾種關係,完全依賴、部分依賴與碼,理解下這幾個概念

掌握了以上概念後我們來看一下如何判斷是否符合2nf。

我們需要判斷,表是否符合2nf的要求?根據2nf的定義,判斷的依據實際上就是看資料表中是否存在非主屬性對於碼的部分函式依賴。若存在,則資料表最高只符合1nf的要求,若不存在,則符合2nf的要求。判斷的方法是:

檢查內容如下:

所以表存在非主屬性對於碼的部分函式依賴,最高只符合1nf的要求,不符合2nf的要求。

為了讓表符合2nf的要求,我們必須消除這些部分函式依賴,只有乙個辦法,就是將大資料表拆分成兩個或者更多個更小的資料表,在拆分的過程中,要達到更高一級正規化的要求,這個過程叫做」模式分解「。模式分解的方法不是唯一的,以下是其中一種方法:

因為兩個表都滿足2nf,所以滿足第二正規化

進行同樣的操作,是否還存在著之前的那些問題?李小明轉系到法律系

所以說,僅僅符合2nf的要求,很多情況下還是不夠的,而出現問題的原因,在於仍然存在非主屬性系主任對於碼學號的傳遞函式依賴,為了能進一步解決這些問題,我們還需要將符合2nf要求的資料表改進為符合3nf的要求。

3nf在2nf的基礎之上,消除了非主屬性對於碼的傳遞函式依賴。也就是說, 如果存在非主屬性對於碼的傳遞函式依賴,則不符合3nf的要求。

那麼如何解決讓表滿足3nf呢?

為了讓資料表設計達到3nf,我們必須進一步進行模式分解為以下形式:

那麼通過如下方式拆解表即可滿足3nf:

現在我們來看一下,進行同樣的操作,是否還存在著之前的那些問題?

這樣,資料不會冗餘,不會丟,不互相影響

總結一下資料庫設計的三個正規化:

所以盡量做到第三正規化吧!也就是非主屬性完全依賴於主碼,並且非主屬性之間不能有依賴關係,也就是主鍵完全決定所有的其它屬性,其它屬性互相都沒關係。

mysql資料庫x MYSQL資料庫基礎

資料庫 database 是乙個按資料結構來儲存和管理資料的計算機軟體系統,其實資料庫就是一些檔案.資料庫管理系統 dbms 是專門用於管理資料庫的計算機系統軟體。資料庫管理系統能夠為資料庫提供資料的定義 建立 維護 查詢和統計等操作功能,並完成對資料完整性 安全性進行控制的功能 1,資料定義語言 ...

資料庫 資料庫基礎

什麼是sql 結構化查詢語言 structtured query language sql的作用 啟動mysql.exe,連線伺服器後,就可以使用sql來操作伺服器了。類似php中操作mysql的語句就是sql語句 sql標準 由國際標準化組織 iso 制定的,對dbms 資料庫管理系統 的統一操作...

資料庫基礎三

修改表名alter table 舊表名rename to 新錶名 新增欄位alter table 表名 add 欄位名 資料型別 屬性 修改欄位alter table 表名 change 原欄位名 新欄位名 資料型別 屬性 刪除欄位alter table 表名 drop 欄位名 新增主鍵alter ...