MySQL資料表設計,三大正規化

2021-10-03 09:15:52 字數 2194 閱讀 6947

個人筆記,僅供參考

三大正規化即三個建立資料表的準則,根據自己的實際需求決定是否遵守即可

資料表中的所有欄位都是不可分割的原子值

例如乙個位址資訊,如果全部存在乙個欄位中就不符合第一正規化,需要把國家,省份這些資訊盡可能拆分到不同欄位才滿足。這樣可以方便以後檢索。

舉例:

create

table student1(

id int

primary

key,

name varchar(20

) address varchar(20

));

如上建立的資料表位址中會含有很多可分割的資訊,例如中國四川省成都市武侯區***大道這個位址,其中的國家,省份,城市,路名都可以拆分。所以應設計成如下形式

create

table student2(

id int

primary

key,

name varchar(20

),country varchar(20

),province varchar(20

),city varchar(20

),details varchar(20

));

如上,位址被拆分成國家,省份,城市,詳細位址四個部分,方便以後查詢資料。(這裡的詳細位址其實還可以繼續拆分)

具體拆分到什麼程度,根據實際情況決定,不一定非要滿足正規化

必須是滿足第一正規化的前提下,第二正規化要求,除主鍵外的每一列必須完全依賴於主鍵,如果出現不完全依賴,只可能發生在聯合主鍵的情況下,此時就需要對錶進行拆分。

例如,現在設計乙個訂單表

create

table myorder(

product_id int

, customer_id int

, product_name varchar(20

), customer_namr varchar(20

),primary

key(product_id,customer_id)

);

這裡存在乙個問題,即產品id只與產品名稱有關,而與使用者id無關,同理,顧客id只與顧客名稱有關,這種情況即是:除主鍵外的其他列,值依賴於主鍵的部分字段,而沒有完全依賴主鍵。這樣會在資料結構上出現問題,即一行中產品的資料和顧客的資料完全沒有關係。為了應對這種情況,產品資訊和顧客資訊應該放在不同的表裡,即這張表應該拆成3張表。

create

table myorder(

order_id int

primary

key,

prodduct_id int

, customer_id int

);

create

table product(

id int

primary

key,

name varchar(20

));

create

table customer(

id int

primary

key,

name varchar(20

));

現在,每個表都滿足第二正規化,即除主鍵外的其他欄位都完全依賴於主鍵

第二正規化即表中每一列的資訊都必須與全部主鍵有聯絡,如果不滿足,就要拆成多個表。

前提,必須滿足第二正規化,除開主鍵列的其他列之間不能有傳遞依賴關係

用前面的例子來說明,如果我在訂單表中加一條customer_phone喲用來儲存**號碼,那麼在這張表中customer_phone可以與訂單id有關係,也可以與顧客id有關係,即除開主鍵列的其他列之間有了依賴關係,所以不滿足第三正規化

create

table myorder(

order_id int

primary

key,

prodduct_id int

, customer_id int

, customer_phone int

//這裡與主鍵外的其他欄位有聯絡,所以不應該放在這張表中,應該放在顧客表中

);

資料表三大設計正規化

第一正規化 inf資料表中所有欄位都是不可分割的原子值 create table student2 id int primary key,name varchar 20 address varchar 30 insert into student2 values 1,li 四川省成都市武侯大道100...

mysql筆記三 資料表三大設計正規化

1nf 資料表中的所有欄位都是不可分割的原子值 mysql create table student2 id int primary key,name varchar 20 address varchar 30 mysql insert into student2 values 1 張三 中國江蘇省...

(Mysql 八)資料表設計的三大正規化

目錄 基礎知識 一 第一正規化 每一列都是不可分割的原子資料項 存在問題 二 第二正規化 在第一正規化的基礎上,非碼屬性必須完全依賴於碼 三 第三正規化 在第二正規化的基礎上,消除傳遞依賴 四 表與表之間的對應關係 1.多對一 2.多對多 設計資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,...