主頁 > 資料庫 > 關系型資料庫設計三大范式

關系型資料庫設計三大范式

2022-12-20 07:26:21 資料庫

作者:鄭龍飛

范式定義

百度百科:設計關系資料庫時,遵從不同的規范要求,設計出合理的關系型資料庫,這些不同的規范要求被稱為不同的范式,各種范式呈遞次規范,越高的范式資料庫冗余越小,

人類語言: 范式可以理解為設計一張資料表的表結構,符合的標準級別、規范和要求,

而通常我們用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要講的“三大范式”,

范式的優點

采用范式可以降低資料的冗余性,

為什么要降低資料的冗余性?

  1. 十幾年前,磁盤很貴,為了減少磁盤存盤,
  2. 以前沒有分布式系統,都是單機,只能增加磁盤,磁盤個數也是有限的,
  3. 一次修改,需要修改多個表,很難保證資料一致性,

范式的缺點

范式的缺點是獲取資料時,需要通過Join拼接出最后的資料,

目前范式的分類

目前業界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF),

什么是函式依賴?

百度百科:函式依賴簡單點說就是:某個屬性集決定另一個屬性集時,稱另一屬性集依賴于該屬性集,

人類語言:以下面表格為例,通俗易懂的解釋,什么是函式依賴,

學號 姓名 系名 系主任 科名 分數
001 張三 計算機系 李雷 高等數學 87
001 張三 計算機系 李雷 大學英語 88
001 張三 計算機系 李雷 資料庫設計 89
002 李四 計算機系 李雷 高等數學 86
002 李四 計算機系 李雷 java程式設計 90
002 李四 計算機系 李雷 大學英語 98
003 王五 財務系 韓梅梅 高等數學 96
003 王五 財務系 韓梅梅 財務基礎 95

完全函式依賴

官方定義:設X,Y是關系R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每一個X’都有X’!→Y,則稱Y完全函式依賴于X,

人類語言:比如通過,(學號,課程) 推出分數 ,但是單獨用學號推斷不出來分數,那么就可以說:分數 完全依賴于(學號,課程) ,

總結:即:通過A B能得出C,但 是A B單獨得不出C,那么說C完全依賴于AB,

部分函式依賴

官方定義:假如 Y函式依賴于 X,但同時 Y 并不完全函式依賴于 X,那么我們就稱 Y 部分函式依賴于 X,

人類語言:比如通過,(學 號,課程) 推出姓名,因為其實直接可以通過,學號推出姓名,所以:姓名 部分依賴于 (學號,課程),

總結:通過AB能得出C,通過A也能得出C,或者通過B也能得出C,那么說C部分依賴于AB,

傳遞函式依賴

官方定義:傳遞函式依賴:設X,Y,Z是關系R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函式依賴于X,

人類語言:比如:學號 推出 系名 , 系名 推出 系主任, 但是,系主任推不出學號,系主任主要依賴于系名,這種情況可以說:系主任 傳遞依賴于 學號 ,

總結:即:通 過A得 到B,通 過B得 到C,但 是C得不到A,那 么說C傳遞依賴于A,

三范式的區別

第一范式

第一范式1NF核心原則:屬性不可切割,

舉例說明:

學號 姓名 系名 系主任 科名 分數 學籍資訊
001 張三 計算機系 李雷 高等數學 87 本科,大二
002 李四 計算機系 李雷 大學英語 88 研究生,研三

很明顯上面表格設計是不符合第一范式的,學籍資訊列中的資料不是原子資料項,是可以進行分割的,因此對表格進行修改,讓表格符合第一范式的要求,修改結果如下圖所示:

學號 姓名 系名 系主任 科名 分數 學歷 所在年級
001 張三 計算機系 李雷 高等數學 87 本科 大二
002 李四 計算機系 李雷 大學英語 88 研究生 研三

實際上 ,1NF是所有關系型資料庫的最基本要求 ,你在關系型資料庫管理系統(RDBMS),例如SQL Server,Oracle,MySQL中創建資料表的時候,如果資料表的設計不符合這個最基本的要求,那么操作一定是不能成功的,也就是說,只要在RDBMS中已經存在
的資料表,一定是符合1NF的,

第二范式

第二范式2NF核心原則:不能存在“部分函式依賴”,

舉例說明:

學號 姓名 系名 系主任 科名 分數
001 張三 計算機系 李雷 高等數學 87
001 張三 計算機系 李雷 大學英語 88
001 張三 計算機系 李雷 資料庫設計 89
002 李四 計算機系 李雷 高等數學 86
002 李四 計算機系 李雷 java程式設計 90
002 李四 計算機系 李雷 大學英語 98
003 王五 財務系 韓梅梅 高等數學 96
003 王五 財務系 韓梅梅 財務基礎 95

以上表格明顯存在,部分依賴,比 如,這張表的主鍵是 (學號,課名),分數確實完全依賴于(學號,課名),但是姓名并不完全依賴于(學號,課名),讓表格符合第二范式的要求,修改結果如下圖所示:

學號 科名 分數
001 高等數學 87
001 大學英語 88
001 資料庫設計 89
002 高等數學 86
002 java程式設計 90
002 大學英語 98
003 高等數學 96
003 財務基礎 95
學號 姓名 系名 系主任
001 張三 計算機系 李雷
002 李四 計算機系 李雷
003 王五 財務系 韓梅梅

以上符合第二范式,去掉部分函式依賴依賴,

第三范式

第三范式 3NF核心原則:不能存在傳遞函式依賴,

舉例說明:

學號 姓名 系名 系主任
001 張三 計算機系 李雷
002 李四 計算機系 李雷
003 王五 財務系 韓梅梅

在上面這張表中,存 在傳遞函式依賴:學號->系 名->系主任,但是系主任推不出學號,

上面表需要再次拆解:

學號 姓名 系名
001 張三 計算機系
002 李四 計算機系
003 王五 財務系
系名 系主任
計算機系 李雷
計算機系 李雷
財務系 韓梅梅

反三范式

沒有冗余的資料庫未必是最好的資料庫,有時為了提高運行效率,就必須降低范式標準,適當保留冗余資料,具體做法是: 在概念資料模型設計時遵守第三范式,降低范式標準的作業放到物理資料模型設計時考慮,降低范式就是增加欄位,減少了查詢時的關聯,提高查詢效率,因為在資料庫的操作中查詢的比例要遠遠大于DML的比例,但是反范式化一定要適度,并且在原本已滿足三范式的基礎上再做調整的,

總結

參考知乎大佬對范式的理解:

資料庫設計應該也是分為三個境界的:

第一個境界,剛入門資料庫設計,范式的重要性還未深刻理解,這時候出現的反范式設計,一般會出問題,

第二個境界,隨著遇到問題解決問題,漸漸了解到范式的真正好處,從而能快速設計出低冗余、高效率的資料庫,

第三個境界,再經過N年的鍛煉,是一定會發覺范式的局限性的,此時再去打破范式,設計更合理的反范式部分,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/540326.html

標籤:其它

上一篇:實踐丨GaussDB(DWS)資源管理排隊原理與問題定位

下一篇:MySQL中WHERE后跟著N多個OR條件會怎樣...

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more