mysql五大正規化 MySQL五大正規化

2021-10-18 02:16:39 字數 2054 閱讀 1457

第一正規化(1nf)

資料表的每一列都要保持它的原子特性,也就是列不能再被分割。

這張表就不符合第一正規化規定的原子性,不符合關係型資料庫的基本要求,在關係型資料庫中建立這個表的操作就不能成功。不得不將資料表設計為如下形式。

第二正規化(2nf)

概率:屬性必須完全依賴於主鍵。

下滿這張表不符合第二正規化的要求。

缺點表中的第一行資料都儲存了系名、系主任,資料的冗餘太大

如果有乙個新的系還沒有開始找到學生,那麼不能講該系的資訊新增到資料表中去,從資料表中看不到該系的存在

如果將某個系的學生資訊全部刪除,那麼這個繫在資料表裡也就不存在了,但這個系還存在。

如果某個人要轉系,那麼為了保證資料庫中資料的一致性,需要修改三條記錄中系與系主任的資料

依賴在資料表中,屬性(屬性組)x確定的情況下,能完全退出來屬性y完全依賴於x。

完全依賴

完全依賴是針對於屬性組來說,當一組屬性x能推出來y的時候就說y完全依賴於x。

部分依賴

一組屬性x中的其中乙個或幾個屬效能推出y就說y部分依賴於x。

結論:當乙個第一正規化的候選碼只有乙個屬性的時候,那它就是第二正規化(2nf)

候選碼當乙個屬性或者屬性組確定的情況下,這張表的其餘所有屬性就能確定下來,這個屬性或者屬性組就叫做或候選碼。

一張表可以有多個候選碼

一般只選乙個候選碼作為主鍵

從表中找到兩個屬性:學號和課程

學號可以推出姓名、系名、系主任。

課程可以推出成績。

將它們兩個設定為聯合主鍵

存在的部分依賴

姓名對學號存在部分依賴

系名對學號存在部分依賴

系主任對學號存在部分依賴

這顯然不符合第二正規化的要求,做出修改:

表一中分數完全依賴於學號和課程的屬性

表二中姓名、系名、系主任完全依賴於學號的屬性

第二正規化消除了第一正規化的部分依賴

第三正規化(3nf)

概念:所有的非主屬性不依賴於其他的非主屬性

傳遞函式依賴

設x,y,z是關係r中互不相同的屬性集合,存在x→y(y !→x),y→z,則稱z傳遞函式依賴於x。

在改進後的學生表中:

主屬性:學號

非主屬性:姓名、系名、系主任

知道系名可以推出系主任,所以非主屬性系主任對主屬性學號存在傳遞函式依賴,這不符合非主屬性不依賴於其它的非主屬性的設計要求。將該資料表改進如下:

第三正規化消除了第二正規化的傳遞函式依賴

bc 正規化

主屬性不能對候選碼存在部分函式依賴或者傳遞函式依賴

這張表不存在部分函式依賴於傳遞函式依賴,屬於第三正規化

表中的依賴關係

倉庫名—————>管理員

管理員—————>倉庫名

物品名—————>數量

主屬性:倉庫名、管理員、物品名

非主屬性:數量

存在的問題

先新新增乙個倉庫,但尚未存放任何物品,不可以為該倉庫指派管理員,因為物品名也是主屬性,根據實體完整性的要求,主屬性不能為空

某倉庫被清空後,該倉庫的資訊也被清空

當需要更新倉庫管理員,該倉庫存放了多少物品,就要修改多少條資訊。

在這個問題中就是存在了主屬性對於候選碼的部分依賴,也就是倉庫名對於管理員和物品名的部分依賴。

修改為倉庫(倉庫名,管理員)

庫存(倉庫名、物品數、數量)

第四正規化(4nf)

消除表中的多值依賴

設r是乙個關係模型,d是r上的多值依賴集合。如果d中存在凡多值依賴x->y時,x必是r的超鍵,那麼稱r是第四正規化的模式。

例如,職工表(職工編號,職工孩子姓名,職工選修課程),在這個表中,同乙個職工可能會有多個職工孩子姓名,同樣,同乙個職工也可能會有多個職工選修課程,即這裡存在著多值事實,不符合第四正規化。如果要符合第四正規化,只需要將上表分為兩個表,使它們只有乙個多值事實,例如職工表一(職工編號,職工孩子姓名),職工表二(職工編號,職工選修課程),兩個表都只有乙個多值事實,所以符合第四正規化。

優缺點:表的冗餘性,提高了多表的聯合查詢的效率。

正規化之間的關係

正規化的目的

減小資料的冗餘性

提高效率

mysql五大儲存引擎 mysql五大儲存引擎

mylsam mylsam表無法處理事務,這就意味著有事務處理需求的表,不能使用mylsam儲存引擎。innodb innodb是乙個健壯的事務型儲存引擎mysql5.6版本以後innodb就是作為預設的儲存引擎。innodb還引入了行級鎖定和鍵外約束。memory 使用mysql memory儲存...

mysql五大儲存引擎 mysql五大儲存引擎

mylsam mylsam表無法處理事務,這就意味著有事務處理需求的表,不能使用mylsam儲存引擎。innodb innodb是乙個健壯的事務型儲存引擎mysql5.6版本以後innodb就是作為預設的儲存引擎。innodb還引入了行級鎖定和鍵外約束。memory 使用mysql memory儲存...

mysql三大特性 三正規化 五大約束

1.資料庫的三大特性 實體 表 屬性 表中的資料 字段 關係 表與表之間的關係 2.資料庫設計三大正規化 a 確保每列保持原子性 即資料庫表中的所有字段值是不可分解的原子值 c 確保每列都和主鍵直接相關,而不是間接相關 在乙個資料庫表中儲存的資料只能與主鍵相關 消除傳遞依賴 間接 比如在設計乙個訂單...