資料庫的三大正規化

2022-02-26 21:31:40 字數 2645 閱讀 4513

一.資料庫中的正規化:

正規化, 英文名稱是 normal form,它是英國人 e.f.codd(關聯式資料庫的老祖宗)在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法,以下就是對這三個正規化的基本介紹:

第一正規化(1nf):

資料表中的每一列(字段),必須是不可拆分的最小單元,也就是確保每一列的原子性。

例如: userinfo: '山東省煙台市 1318162008' 依照第一正規化必須拆分成

userinfo: '山東省煙台市'   usertel: '1318162008'兩個字段

第二正規化(2nf):

滿足1nf後要求表中的所有列,都必需依賴於主鍵,而不能有 任何一列與主鍵沒有關係(乙個表只描述一件事情)。

例如:訂單表只能描述訂單相關的資訊,所以所有的字段都必須與訂單id相關。

產品表只能描述產品相關的資訊,所以所有的字段都必須與產品id相關。

因此在同一張表中不能同時出現訂單資訊與產品資訊。

例如:訂單表中需要有客戶相關資訊,在分離出客戶表之後,訂單表中只需要有乙個使用者

id即可,而不能有其他的客戶資訊,因為其他的使用者資訊是直接關聯於使用者id,而不是關聯

於訂單id。

注意事項:

1.第二正規化與第三正規化的本質區別:在於有沒有分出兩張表。

第二正規化是說一張表中包含了多種不同實體的屬性,那麼必須要分成多張表,第三正規化是要求已經分好了多張表的話,一張表中只能有另一張標的id,而不能有其他任何資訊,(其他任何資訊,一律用主鍵在另一張表中查詢)。

2.必須先滿足第一正規化才能滿足第二正規化,必須同時滿足第一第二正規化才能滿足第三正規化。

二:資料庫中的五大約束:

資料庫中的五大約束包括:

1.主鍵約束(primay key coustraint) 唯一性,非空性;

2.唯一約束 (unique counstraint)唯一性,可以空,但只能有乙個;

3.預設約束 (default counstraint) 該資料的預設值;

4.外來鍵約束 (foreign key counstraint) 需要建立兩表間的關係;

5.非空約束(not null counstraint):設定非空約束,該欄位不能為空。

詳細介紹:

(1)[外來鍵約束 (foreign key counstraint) ]

1.設定外來鍵的注意事項:

①:只有innodb的資料庫引擎支援外來鍵,修改my.ini檔案設定default-storage-engine=innodb;

②:外來鍵與參照列的資料型別必須相同。(數值型要求長度和無符號都相同,字串要求型別相同,長度可以不同);

③:設定外來鍵的字段必須要有索引,如果沒有索引,設定外來鍵時會自動生成乙個索引;

2.設定外來鍵的語法:

[constraint 外鍵名] foreign key(外來鍵字段) references 參照表(參照字段);

[on delete set null on update cascade] -- 設定操作完整。

3、外來鍵約束的參照操作:

當對參照表的參照字段進行刪除或更新時,外來鍵表中的外來鍵如何應對。

參照操作可選值:

restrict: 拒絕對參照欄位的刪除或修改(預設);

no action:與restrict相同,但這個指令只在mysql生效;

cascade:  刪除或更新參照表的參照欄位時,外來鍵表的記錄同步刪除或更新;

set null: 刪除刪除或更新參照表的參照欄位時,外來鍵表的外來鍵設為null (此時外來鍵不能設定為not null)。

(2)[主鍵約束](primay key coustraint) 

1.主鍵的注意事項:主鍵預設非空,預設唯一性約束,只有主鍵可以設定自動增長(主鍵不一定自增,自增一定是主鍵)。

2.設定主鍵的方式:

①:在定義列時設定:id     int unsigned primary key。

②:在列定義完成後設定:primary key(id)。

總結:

第一正規化:確保每列的原子性.

例如:顧客表(姓名、編號、位址、……)其中"位址"列還可以細分為國家、省、市、區等。
第二正規化:在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.

例如:訂單表(訂單編號、產品編號、定購日期、**、……),"訂單編號"為主鍵,"產品編號"和主鍵列沒有直接的關係,即"產品編號"列不依賴於主鍵列,應刪除該列。
第三正規化:在第二正規化的基礎上更進一層,目標是確保每列都和主鍵列直接相關,而不是間接相關.

如果乙個關係滿足第二正規化,並且除了主鍵以外的其它列都不依賴於主鍵列,則滿足第三正規化.

為了理解第三正規化,需要根據armstrong公里之一定義傳遞依賴。假設a、b和c是關係r的三個屬性,如果a-〉b且b-〉c,則從這些函式依賴中,可以得出a-〉c,如上所述,依賴a-〉c是傳遞依賴。

例如:訂單表(訂單編號,定購日期,顧客編號,顧客姓名,……),初看該錶沒有問題,滿足第二正規化,每列都和主鍵列"訂單編號"相關,再細看你會發現"顧客姓名"和"顧客編號"相關,"顧客編號"和"訂單編號"又相關,最後經過傳遞依賴,"顧客姓名"也和"訂單編號"相關。為了滿足第三正規化,應去掉"顧客姓名"列,放入客戶表中。

資料庫設計三大正規化資料庫設計三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...

資料庫三大正規化

1 第一正規化 1nf 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現...

資料庫三大正規化

第一正規化 確保每列的原子性.如果每列 或者每個屬性 都是不可再分的最小資料單元 也稱為最小的原子單元 則滿足第一正規化.例如 顧客表 姓名 編號 位址 其中 位址 列還可以細分為國家 省 市 區等。第二正規化 在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.如果乙個關係滿足第一正規...