1. 程式人生 > >Mysql資料庫——資料表的優化、外來鍵與三正規化

Mysql資料庫——資料表的優化、外來鍵與三正規化

資料表優化

將商品資訊表進行優化 這裡寫圖片描述

1.建立商品種類表: create table if not exists goods_cates( id int unsigned primary key auto_increment, name varchar(40) not null );

2.將商品種類寫入商品種類表中: 注意:插入另一個表的查詢結果不需要加values insert into goods_cates(name) (select cate_name from goods group by cate_name); 這裡寫圖片描述

3.將商品種類表更新到商品表中: 將商品表與種類表連線,用種類表id代替商品表種類內容 update (goods_cates inner join goods on goods_cates.name=goods.cate_name) set goods.cate_name=goods_cates.id;

4.修改表結構: 將商品表商品種類名欄位名cate_name重新命名為cate_id alter table goods change cate_name cate_id int unsigned not null; 這裡寫圖片描述

外來鍵

1.外來鍵的使用: 新增外來鍵約束,插入資料線判斷cate_id是否存在於goods_cates中的id,不存在,則插入資料失敗

alter table 表名1 add foreign key (欄位名1) references 表名2(欄位名2); (設定外來鍵後可以防止非法資料的錄入) 這裡寫圖片描述

foreign key(欄位名1) references 表名2(欄位名2); (也可在建立表時直接設定外來鍵,前提是要連線的表存在)

2.外來鍵的缺點: 雖然外來鍵可以有效防止非法資料的錄入,但是會極大降低表的更新效率,所以實際開發中,一般不適用外來鍵約束,可以再事務層面去判斷資料的合法性。

3.外來鍵的刪除: 顯示建立表的語句 show create table goods; 這裡寫圖片描述

獲取外來鍵名稱後刪除外來鍵: alter table goods drop foreign key goods_ibfk_1;

三正規化

1.第一正規化(1NF):強調列的原子性,即列不能再分成其他列。 2.第二正規化(2NF):基於1NF,表必須有一個主鍵,非主鍵欄位必須完全依賴與主鍵,而不是隻依賴於主鍵的一部分。 3.第三正規化(3NF):基於2NF,非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。 符合第三正規化的資料庫,是比較合理的資料庫。