關係模式r的所有屬性都不能再分,叫屬性不可分,也叫列不可分。
比如不能設計「張三是男」,應該分為兩個屬性姓名和性別/
滿足第一正規化,並r的所有非『『主鍵屬性都完全依賴於主鍵。(其他列必須完全依賴於主鍵列,如果出現不完全依賴,只可能傳送再聯合主鍵的情況)
-- 訂單表
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
表中的其他欄位又完全依賴於主鍵。滿足了第二正規化的設計!
除了主鍵列之外,其他列之間不能有傳遞依賴關係。
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 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...