MySQL(3) 資料庫的三大設計正規化

2021-10-06 14:24:54 字數 1768 閱讀 1326

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

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

在滿足第一正規化的前提下,其他列都必須完全依賴於主鍵列。如果出現不完全依賴,只可能發生在聯合主鍵的情況下:

-- 訂單表

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表中的其他欄位又完全依賴於主鍵。滿足了第二正規化的設計!

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

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)

);

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

資料庫那點事 Mysql 3

語句賞析 create table group id int primary key auto increment,name varchar 10 not null,max size int default 10 type varchar 10 not null check type in 研發組 ...

MySQL學習筆記 十一 資料庫設計的三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。第一正規化是最基本的正規化。如果資料庫表中的所有字段值都是不可分解的原子值,就說明該資料庫表滿足了第一...

資料庫設計3範深入

根據三種關係完整性約束中實體完整性的要求,關係中的碼 注 所包含的任意乙個屬性都不能為空,所有屬性的組合也不能重複。為了滿足此要求,圖中的表,只能將學號與課名的組合作為碼,否則就無法唯一地區分每一條記錄。3范的分析的思維流程 一 第1步 找出資料表中所有的碼。定義 碼 關係中的某個屬性或者某幾個屬性...