sqlserver 三大范式


SqlServer之數據庫三大范式

   

分析:

          數據庫設計應遵循三大范式分別為:

          第一范式:確保表中每列的原子性(不可拆分);

          第二范式:確保表中每列與主鍵相關,而不能只與主鍵的某部分相關(主要針對聯合主鍵),主鍵列與非主鍵列遵循完全函數依賴關系(完全依賴);

          第三范式:非主鍵列之間沒有傳遞函數依賴關系(消除傳遞依賴);

   詳述:

         第一范式

       需求描述:數據庫系統中需要一個實體表,該表用來存儲用戶信息,其中“地址”這個屬性,要求查詢到省份、城市和詳細地址。

       例子:信息如下:

               姓名:張紅欣;性別:男;  年齡: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就是消除這種依賴。

       將以上表格拆分成如下表格,以滿足第三范式:

      

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM