第一正規化(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_id
,customer_name
只依賴於customer_id
。也就是說,product_name
和customer_id
是沒用關係的,customer_name
和product_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_id
和customer_id
完全依賴於order_id
主鍵,而product
和customer
表中的其他欄位又完全依賴於主鍵。滿足了第二正規化的設計!
第三正規化(3nf);
必須先滿足第二正規化;
在滿足第二正規化的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關係。
create table myorder (
order_id int primary key,
product_id int,
customer_id int,
customer_phone varchar(15)
);
表中的customer_phone
有可能依賴於order_id
、customer_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 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...