1.一些術語:
正規化(normal form)是指資料庫設計的正規化,是抽象型的。
關係模式(relational scheme)由乙個關係名以及它所有的屬性名構成。它對應二維表的表頭,是二維表的構成框架(邏輯結構)。其格式為:
關係名(屬性名1 ,屬性名2 ,…,屬性名n)
關係(relation):表示多個實體之間的相互關聯,每一張表稱為該關係模式的乙個具體關係。它包括:關係名,表的結構和表的資料(元組)。
2.正規化:
在建立乙個資料庫的過程中,範化是將其轉化為一些表的過程,這種方法可以使從資料庫得到的結果更加明確。這樣可能使資料庫產生重複資料,從而導致建立多餘的表。範化是在識別資料庫中的資料元素、關係,以及定義所需的表和各表中的專案這些初始工作之後的乙個細化的過程。
3.第一正規化:
在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫。
所謂第一正規化(1nf)是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如 果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化(1nf)中表的每一行只包含一 個例項的資訊。簡而言之,第一正規化就是無重複的列。
4.第二正規化:
在1nf的基礎上,非碼屬性必須完全依賴於碼[在1nf基礎上消除非主屬性對主碼的部分函式依賴]
函式依賴:設x,y是關係r的兩個屬性集合,當任何時刻r中的任意兩個元組中的x屬性值相同時,則它們的y屬性值也相同,則稱x函式決定y,或y函式依賴於x。
部分函式依賴:設x,y是關係r的兩個屬性集合,存在x→y,若x』是x的真子集,存在x』→y,則稱y部分函式依賴於x。
傳遞函式依賴:設x,y,z是關係r中互不相同的屬性集合,存在x→y(y !→x),y→z,則稱z傳遞函式依賴於x。
第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化 (1nf)。第二正規化(2nf)要求資料庫表中的每個例項或記錄必須可以被唯一地區分。選取乙個能區分每個實體的屬性或屬性組,作為實體的唯一標識。例如 在員工表中的身份證號碼即可實現每個一員工的區分,該身份證號碼即為候選鍵,任何乙個候選鍵都可以被選作主鍵。在找不到候選鍵時,可額外增加屬性以實現區 分,如果在員工關係中,沒有對其身份證號進行儲存,而姓名可能會在資料庫執行的某個時間重複,無法區分出實體時,設計闢如id等不重複的編號以實現區分, 被新增的編號或id選作主鍵。(該主鍵的新增是在er設計時新增,不是建庫時隨意新增)
2nf要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上乙個列,以儲存各個例項的唯一標識。簡而言之,第二正規化就是在第一正規化的基礎上屬性完全依賴於主鍵。
5.第三正規化:
在1nf基礎上,任何非主屬性不依賴於其它非主屬性[在2nf基礎上消除傳遞依賴]
第三正規化(3nf)是第二正規化(2nf)的乙個子集,即滿足第三正規化(3nf)必須滿足第二正規化(2nf)。簡而言 之,第三正規化(3nf)要求乙個關係中不包含已在其它關係已包含的非主關鍵字資訊。例如,存在乙個部門資訊表,其中每個部門有部門編號 (dept_id)、部門名稱、部門簡介等資訊。那麼在員工資訊表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。 如果不存在部門資訊表,則根據第三正規化(3nf)也應該構建它,否則就會有大量的資料冗餘。簡而言之,第三正規化就是屬性不依賴於其它非主屬性,也就是在滿 足2nf的基礎上,任何非主屬性不得傳遞依賴於主屬性。
6 bcnf(巴斯-科德正規化)
在1nf基礎上,任何非主屬性不能對主鍵子集依賴[在3nf基礎上消除對主碼子集(候選關鍵字段)的依賴]
巴斯-科德正規化(bcnf)是第三正規化(3nf)的乙個子集,即滿足巴斯-科德正規化(bcnf)必須滿足第三正規化 (3nf)。通常情況下,巴斯-科德正規化被認為沒有新的設計規範加入,只是對第二正規化與第三正規化中設計規範要求更強,因而被認為是修正第三正規化,也就是 說,它事實上是對第三正規化的修正,使資料庫冗餘度更小。這也是bcnf不被稱為第四正規化的原因。某些書上,根據正規化要求的遞增性將其稱之為第四正規化是不規 範,也是更讓人不容易理解的地方。而真正的第四正規化,則是在設計規範中新增了對多值及依賴的要求。
對於bcnf,在主碼的任何乙個真子集都不能決定於主屬性。關係中u主碼,若u中的任何乙個真子集x都不能決定於主屬性y,則該設計規範屬性bcnf。例如:在關係r中,u為主碼,a屬性是主碼中的乙個屬性,若存在a->y,y為主屬性,則該關係不屬性bcnf。
一般關係型資料庫設計中,達到bcnf就可以了!
什麼是正規化,1NF,2NF,3NF?
關聯式資料庫設計正規化介紹 正規化是符合某一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的正規化。目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 1 第一正規化 1n...
資料庫三正規化1NF2NF3NF
設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小 第一正規化 1nf 資料庫表中的所有字段值都是不可分解的原子值。即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項...
SQL 中的 1NF 2NF 3NF三大正規化
第一正規化 1nf 必須有主鍵,列不可分 資料庫表中的任何欄位都是單一屬性的,不可再分 create table aa id int,nameage varchar 100 insert aa values 1,無限 女 沒有達到第一正規化 create table aa id int,name v...