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