三范式
第一范式:1NF 原子性? ?數(shù)據(jù)不可再分
例1.錯誤數(shù)據(jù)庫表的設(shè)計(jì)
錯誤:違背數(shù)據(jù)庫三范式的原子性
周行知? ? ? 湖南? ? ? ?php
周行知? ? ? ?湖南? ? ? html
第二范式:2NF 唯一性? 使得每一行 數(shù)據(jù)具有唯一性拷泽,并消除數(shù)據(jù)之間的部分依賴
例1? ?
create table tab1(
id int,
name varchar(10)
);
insert into tab1 values(1,'a');
insert into tab1 values(1,'a');
對比?
錯誤數(shù)據(jù)庫設(shè)計(jì)
create table tab2(
id int,
name varchar(10),
primary key(id)
);
insert into tab2 values(1,'a');
insert into tab2 values(1,'a');
錯誤原因:違反數(shù)據(jù)庫設(shè)計(jì)第二范式:唯一性
2.消除數(shù)據(jù)部分依賴
回到定義中去恩沽。
什么叫做依賴?
依賴,就是在一個表中荷逞,其中某個字段的值B可以由另一個字段值A(chǔ)來決定
字段B依賴字段A
或
字段Aj決定字段B
學(xué)生姓名? ? ? 性別? ? 課程名稱? ? 學(xué)分? ? ? 成績
周行知? ? ? ? 男? ? ? ? ? ?計(jì)算機(jī)? ? ? ? ? ? ?2? ? ? 100
選擇"周行知"醉旦,性別就確定藏古。除非周行知不陰不陽
你確定性別男吧碾,難道你認(rèn)為所有的男人都叫周行知嗎?
主鍵決定其他字段
其他字段依賴主鍵
什么叫部分依賴?
如果某個字段辣卒,只依賴部分主鍵字段掷贾,此時就稱為部分依賴
身份證號碼? ? ?學(xué)生姓名? ? ? 性別? ? 課程名稱? ? ? ? ? ? ? ? ? ? ? ? ?學(xué)分? ? ? ? 成績
4301111111? ? ? 周行知? ? ? ?男? ? ? ? ? ? ?計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)? ? ? ? ? 10? ? ? 78
建議:銷毀部分依賴
解決方案:
id int auto_increment primary key,
經(jīng)驗(yàn):每個表都要設(shè)計(jì)主鍵
第三范式? 獨(dú)立性,消除傳遞依賴荣茫。
使得每個字段都獨(dú)立依賴與主鍵字段(獨(dú)立性)想帅,而要消除其中部分主鍵字段的內(nèi)部依賴---這種