SqlServer 數(shù)據(jù)庫 三大 范式
1 概述
一般地,在進行數(shù)據(jù)庫設(shè)計時,應(yīng)遵循三大原則,也就是我們通常說的三大范式,即第一范式要求確保表中每列的原子性,也就是不可拆分;第二范式要求確保表中每列與主鍵相關(guān),而不能只與主鍵的某部分相關(guān)(主要針對聯(lián)合主鍵),主鍵列與非主鍵列遵循完全函數(shù)依賴關(guān)系,也就是完全依賴;第三范式確保主鍵列之間沒有傳遞函數(shù)依賴關(guān)系,也就是消除傳遞依賴。
本文將基于三大范式原則,結(jié)合具體的實例做簡要分析,難度系數(shù):基礎(chǔ)。
2 第一范式
2.1 例子引入
根據(jù)如下場景設(shè)計出兩種數(shù)據(jù)表,請分析兩種數(shù)據(jù)表的合理性。
問題:需求描述:數(shù)據(jù)庫系統(tǒng)中需要一個實體表,該表用來存儲用戶信息,其中“地址”這個屬性,要求查詢到省份、城市和詳細地址。
2
3 具體例子:
4 姓名:張紅欣; 性別:男; 年齡:26歲; 聯(lián)系電話:0378-23459876;省份:河南省;城市:開封; 詳細地址:朝陽區(qū)新華路23號;
5 姓名:王艷; 性別:女; 年齡:25歲; 聯(lián)系電話:021-2348768; 省份:貴州省;城市:貴陽市;詳細地址:南明區(qū)南明區(qū)獅峰路6號;
6 姓名:汪梅; 性別:女; 年齡:21歲; 聯(lián)系電話:0571-3876450; 省份:浙江省;城市:杭州市;詳細地址:濱江區(qū)濱康路352號;
第一種表設(shè)計

第二種表設(shè)計

2.2 分析
第一種表設(shè)計不滿足第一范式,為什么不滿足第一范式?因為region列不具有原子性,能拆分成省份、市和具體地址;
3 第二范式
3.1 例子引入
根據(jù)如下場景設(shè)計出兩種數(shù)據(jù)表,請分析兩種數(shù)據(jù)表的合理性。
需求描述:設(shè)計一個訂單信息表,訂單有多種商品,將訂單編號和商品編號作為聯(lián)合主鍵。
第一種表設(shè)計

第二種表設(shè)計

3.2 分析
第一種表設(shè)計不滿足第二范式,訂單編號和商品編號作為聯(lián)合主鍵,由于商品名稱,單位,價格這幾列只與商品編號有關(guān),與訂單編號無關(guān),因此與主鍵(聯(lián)合主鍵)無關(guān),違反范式第二原則;
第二種表設(shè)計滿足第二范式,把第一種設(shè)計表進行拆分,把商品信息分離到另一個表中,把訂單項目表也分離到另一個表中。
4 第三范式
4.1 例子引入
根據(jù)如下場景設(shè)計出兩種數(shù)據(jù)表,請分析兩種數(shù)據(jù)表的合理性。
需要在數(shù)據(jù)庫中存儲如下信息:
學(xué)生編號;學(xué)生卡號;用戶ID號;操作員級別;操作日期;操作時間;
第一種表設(shè)計

第二種表設(shè)計


4.2 分析
第一種表設(shè)計不滿足第三范式,在表中,一個UserID能確定一個UserLevel。這樣,UserID依賴于StudentNo和CardNo,而UserLevel又依賴于UserID,這就導(dǎo)致了傳遞依賴,3NF就是消除這種依賴。
第二種表設(shè)計滿足第三范式,將第一種表格拆分成成兩個表格。
5 參考文獻
【01】http://www.cnblogs.com/springside-example/archive/2011/10/06/2530207.html
【02】http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html#undefined
6 版權(quán)
感謝您的閱讀,若有不足之處,歡迎指教,共同學(xué)習(xí)、共同進步。博主網(wǎng)址:http://www.cnblogs.com/wangjiming/。極少部分文章利用讀書、參考、引用、抄襲、復(fù)制和粘貼等多種方式整合而成的,大部分為原創(chuàng)。如您喜歡,麻煩推薦一下;如您有新想法,歡迎提出,郵箱:2016177728@qq.com。可以轉(zhuǎn)載該博客,但必須著名博客來源。
相關(guān)文章
使用 sql-research-assistant進行 SQL 數(shù)據(jù)庫研究的實戰(zhàn)指南(代碼
本文介紹了sql-research-assistant工具,該工具基于LangChain框架,集成了多種AI模型,用于簡化SQL數(shù)據(jù)庫的研究和分析,通過集成和使用該工具,用戶可以高效地執(zhí)行數(shù)據(jù)查詢和分析任務(wù),提高數(shù)據(jù)研究的效率,感興趣的朋友一起看看吧2025-02-02
SQL Server使用PIVOT與unPIVOT實現(xiàn)行列轉(zhuǎn)換
這篇文章介紹了SQL Server使用PIVOT與unPIVOT實現(xiàn)行列轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
SqlServer數(shù)據(jù)庫創(chuàng)建用戶只賦予某個視圖權(quán)限
這篇文章主要給大家介紹了關(guān)于SqlServer數(shù)據(jù)庫創(chuàng)建用戶只賦予某個視圖權(quán)限的相關(guān)資料,在SQL Server中,要創(chuàng)建用戶并為其授權(quán)表可以通過以下步驟完成,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-03-03
遠程連接局域網(wǎng)內(nèi)的SQL Server 的方法
下面我們依次介紹如何來解決這三個最常見的連接錯誤。2009-08-08
SQL語句實現(xiàn)刪除ACCESS重復(fù)記錄的兩種方法
有兩個意義上的重復(fù)記錄,一是完全重復(fù)的記錄,也即所有字段均重復(fù)的記錄,二是部分關(guān)鍵字段重復(fù)的記錄,比如Name字段重復(fù),而其他字段不一定重復(fù)或都重復(fù)可以忽略。2010-04-04

