資料庫設計三大正規化

2021-09-28 14:31:31 字數 2064 閱讀 5642

第一正規化(1nf)

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

只要字段值還可以繼續拆分,就不滿足第一正規化。

正規化設計得越詳細,對某些實際操作可能會更好,但並非都有好處,需要對專案的實際情況進行設定,不一定要滿足某乙個正規化,但是要了解。

例:

陝西省西安市高新區高新三路9號;

####這樣的字段值就不符合第一正規化,因為還可以繼續拆分;

第二正規化(2nf)

必須是滿足第一正規化的前提下,第二正規化要求除主鍵外的每一列都必須完全依賴於主鍵.

如果出現不完全依賴,只可能發生在聯合主鍵的情況下.

-- 訂單表

create table myorder (

product_id int,

customer_id int,

product_name varchar(20),

customer_name varchar(20),

primary key (product_id, customer_id)

);

實際上,在這張訂單表中,product_name只依賴於product_idcustomer_name只依賴於customer_id。也就是說,product_namecustomer_id是沒用關係的,customer_nameproduct_id也是沒有關係的。

這就不滿足第二正規化:其他列都必須完全依賴於主鍵列!

create table myorder (

order_id int primary key,

product_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)

);

拆分之後,myorder表中的product_idcustomer_id完全依賴於order_id主鍵,而productcustomer表中的其他欄位又完全依賴於主鍵。滿足了第二正規化的設計!

第三正規化(3nf);

必須先滿足第二正規化;

在滿足第二正規化的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關係。

create table myorder (

order_id int primary key,

product_id int,

customer_id int,

customer_phone varchar(15)

);

表中的customer_phone有可能依賴於order_idcustomer_id兩列,也就不滿足了第三正規化的設計:其他列之間不能有傳遞依賴關係。

create table myorder (

order_id int primary key,

product_id int,

customer_id int

);create table customer (

id int primary key,

name varchar(20),

phone varchar(15)

);

修改後就不存在其他列之間的傳遞依賴關係,其他列都只依賴於主鍵列,滿足了第三正規化的設計!

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

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

資料庫設計三大正規化

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

資料庫設計三大正規化

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