三大範式
分析:
數據庫設計應遵循三大範式分別為:
第一範式:確保表中每列的原子性(不可拆分);
第二範式:確保表中每列與主鍵相關,而不能只與主鍵的某部分相關(主要針對聯合主鍵),主鍵列與非主鍵列遵循完全函數依賴關系(完全依賴);
第三範式:非主鍵列之間沒有傳遞函數依賴關系(消除傳遞依賴);
詳述:
第一範式
需求描述:數據庫系統中需要一個實體表,該表用來存儲用戶信息,其中“地址”這個屬性,要求查詢到省份、城市和詳細地址。
例子:信息如下:
姓名:張紅欣;性別:男; 年齡:26歲;年齡:26歲; 聯系電話:0378-23459876; 省份:河南省; 城市:開封; 詳細地址:朝陽區新華路23號;
姓名:王艷;性別:女;年齡:25;聯系電話:021-2348768;省份:貴州省;城市:貴陽市;詳細地址:南明區南明區獅峰路6號;
姓名:汪梅;性別:女;年齡:21;聯系電話:0571-3876450;省份:浙江省;城市:杭州市;詳細地址:濱江區濱康路352號;
針對以上需求,下面分別設計兩種類型表格:
第一種表設計:不滿足第一範式
tb_userInfo
分析:為什麽不滿足第一範式?因為region列不具有原子性,能拆分成省份、市和具體地址。
第二種表設計:滿足第一範式
tb_userInfo
第二範式
需求描述:設計一個訂單信息表,訂單有多種商品,將訂單編號和商品編號作為聯合主鍵。
第一種表設計:不滿足第二範式
分析:訂單編號和商品編號作為聯合主鍵,由於商品名稱,單位,價格這幾列只與商品編號有關,與訂單
編號無關,因此與主鍵(聯合主鍵)無關,違反範式第二原則。
第二種表設計:滿足第二範式
分析:把第一種設計表進行拆分,把商品信息分離到另一個表中,把訂單項目表也分離到另一個表中。
第三範式
分析:在表中,一個UserID能確定一個UserLevel。這樣,UserID依賴於StudentNo和CardNo,而UserLevel又依
賴於UserID,這就導致了傳遞依賴,3NF就是消除這種依賴。
將以上表格拆分成如下表格,以滿足第三範式:
三大範式