MySQL的三大范式:

目錄

鍵和相關屬性的概念:

第一范式:

第二范式:

第三范式:

總結:

反范式化:


在關系型數據庫中,關于數據表設計的基本原則,規則就稱為范式。

范式是關系數據庫理論的基礎,也就是在設計數據庫結構過程中所要遵循的規則和指導方法。

關系數據庫常見的六種范式,按照范式級別從低到高是:第一范式、第二范式、第三范式、巴斯-科德范式、第四范式和第五范式(完美范式)。

范式的設計越高階,冗余度越低,同時高級的范式一定符合低階的范式要求。

有時候為了提高某些查詢性能,可能會破壞范式規則,也就是反規范化。

鍵和相關屬性的概念:

數據庫中的鍵右一個或者多個屬性組成。數據庫中常用的幾種鍵和屬性的定義。

超鍵:

能唯一標識一條記錄的任意屬性組合。

候選鍵:

不含多于屬性的最小超鍵,一個表可由多個候選鍵。

主鍵:

從候選鍵中選定,唯一標識記錄且不允許為空值。

外鍵:

關聯另一表主鍵的屬性,也就是在一個表中為主鍵,而在另一個表中為非主鍵。

唯一鍵:

保證列值唯一但允許為空,一個表可有多個唯一鍵。

索引:

提高查詢速度的數據結構。

主屬性:

包含在任一候選鍵中的屬性。

非主屬性:

不包含在任何候選鍵中的屬性。

第一范式:

第一范式主要是確保表中每個字段必須具有原子性,也就是每個字段不可再次拆分的最小數據單元。每個屬性必須具有單個值。能否拆分是具有主觀性的,根據需求來進行判斷。

第二范式:

第二范式要求,在滿足第一范式的基礎上,還需要滿足數據表里的每一條數據記錄,都是可唯一標識的。而且所有非主鍵字段,都必須完全依賴主鍵的所有屬性,不能只依賴主鍵的一部分。通過主鍵就能知道所有的對應行的的所有字段的值。每張表只能描述一種數據實體。

如果存在不完全依賴的字段可以將這些字段和依賴主關鍵字重新形成一個表。新表與舊表之間是一對多的關系。

第三范式:

第三范式在第二范式的基礎上,確保數據表中的每一個非關鍵字段都和主鍵字段直接相關,也就是數據表中所有非主鍵字段不能依賴于其他非主鍵字段。非主鍵之間不能有依賴關系,必須相互獨立。

總結:

第一范式(1NF):確保每列的值都是不可分割的原子值。確保每個字段只存儲一個值。

第二范式(2NF):在滿足第一范式的基礎上,確保每個非主屬性完全依賴于主鍵。消除部份依賴,確保數據的完整性。

第三范式(3NF):在滿足第二范式的基礎上,確保每個非主屬性不傳遞依賴于主鍵。消除傳遞依賴,確保數據的獨立性。

范式有助于消除數據庫中的數據冗余,但是有可能會降低查詢的效率,設計出的數據表越多,冗余度越低,在進行查詢時需要進行關聯多張表,可能會導致索引無效。

反范式化:

如果數據庫中數據量比較大,完全按照范式設計數據表,讀取數據會產生大量的關聯查詢,在一定程度上會影響數據庫的讀性能。可能會為了性能和讀取效率違反范式原則,通過增加少量的冗余來提高數據庫的讀性能,減少關聯查詢,實現空間換取時間的目的。

比如說:如果經常通過表A和表B通過關聯查詢查詢某個字段,那么可以在表A中添加這個字段,就不用進行關聯查詢。

反范式雖然能通過空間換時間,提升效率查詢,但是也會造成:

存儲空間變大。一個表中進行修改,另一個表中的冗余字段也需要進行修改。采用存儲過程來支持數據的更新、刪除等操作,會非常消耗系統資源。數據量小的情況下,不能體現出性能的優勢,反而會讓數據庫的設計更加復雜。

只有當冗余信息有價值或者能大幅度提升查詢效率,可以采取反范式進行優化。

在增加冗余字段時,盡量添加不需要經常修改且查詢時不可獲取。

注意:

在實際設計中需要權衡范式規范和查詢效率,所以根據數據量和查詢需求可以結合范式規范和反范式來設計表中的字段信息。

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

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

相關文章

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘imageio’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘imageio’問題 摘要 在Python開發過程中,尤其是使用PyCharm等IDE時,遇到pip install報錯是一個常見的問題,尤其是在執行安裝…

2025年高效能工程項目管理軟件推薦榜單:AI重構工程進度可視化與資源動態調度體系

在工程行業數字化深度變革的2025年,項目管理正面臨前所未有的挑戰與機遇。權威數據顯示,68%的工程項目因進度追蹤滯后導致交付延期,超半數企業因數據孤島陷入跨部門協同效率低下的困境,而資源錯配造成的隱性成本損失高達年度預算的15%。隨著AI決策引擎、BIM全流程融合、IoT物聯…

豆包 Java的23種設計模式

Java的23種設計模式是軟件開發中常用的設計思想總結,根據用途可分為三大類:創建型、結構型和行為型。 一、創建型模式(5種) 用于處理對象創建機制,隱藏創建邏輯,使程序更靈活。 單例模式:保證一…

Redis7學習--詳解哨兵,文件配置、主客觀下線

目錄 一、前言 二、哨兵 1、是什么? 2、哨兵的功能 3、案例演示 Redis Sentinel 架構 配置說明 哨兵配置文件 主從配置文件 主節點宕機后各節點狀態 主從切換后配置文件的自動調整 4、哨兵運行流程和選舉原理 SDOWN主觀下線 ODOWN客觀下線 選出新的主節…

Android 項目:畫圖白板APP開發(二)——歷史點、數學方式推導點

上一章我們講解了如何繪制順滑、優美的曲線,為本項目的繪圖功能打下了基礎。本章我們將深入探討兩個關鍵功能的實現:歷史點和數學方式推導點。這些功能將大幅提升我們白板應用的專業性和用戶體驗。一、History點之前在onTouchEvent中獲取的MotionEvent&a…

25. for 循環區別

1. 基本 for 循環 for (let i 0; i < 10; i) {console.log(i); }特點&#xff1a; 適用于已知循環次數的情況使用數字索引進行迭代可以精確控制循環過程性能最好&#xff0c;開銷最小 2. for…in 循環 // 數組示例 for (let i in [1, 2, 3]) {console.log(i, typeof i); //…

Trae 輔助下的 uni-app 跨端小程序工程化開發實踐分享

大家好&#xff0c;我是不如摸魚去&#xff0c;歡迎來到我的AI編程分享專欄。 這次來分享一下&#xff0c;我使用 Trae 作為主要AI編程工具&#xff0c;開發 uni-app 跨平臺小程序的完整實踐經驗。我在實際的開發過程中&#xff0c;探索了 Trae 輔助開發的具體應用場景和效果&…

Vue3 + Element Plus 人員列表搜索功能實現

設計思路使用Element Plus的el-table組件展示人員數據 在姓名表頭添加搜索圖標按鈕 點擊按鈕彈出搜索對話框 在對話框中輸入姓名進行搜索 實現搜索功能并高亮匹配項下面是完整的實現代碼&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><…

告別手動優化!React Compiler 自動記憶化技術深度解析

概述 React Compiler 是 React 團隊開發的一個全新編譯器&#xff0c;目前處于 RC&#xff08;Release Candidate&#xff09;階段。這是一個僅在構建時使用的工具&#xff0c;可以自動優化 React 應用程序&#xff0c;無需重寫任何代碼即可使用。 核心特性 自動記憶化優化 …

【從零開始學習Redis】項目實戰-黑馬點評D2

商戶查詢緩存 為什么用緩存&#xff1f;作用模型緩存流程按照流程編寫代碼如下 Service public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {Resourceprivate StringRedisTemplate stringRedisTemplate;Overridepublic Resul…

后端Web實戰-MySQL數據庫

目錄 1.MySQL概述 1.1 安裝 1.1.1 版本 1.1.2 安裝 1.1.3 連接 1.2 數據模型 1.3 SQL簡介 1.3.1 分類 1.3.2 SQL通用語法 2.DDL 2.1 數據庫操作 2.2 圖形化工具 2.2.1 使用 2.3 表操作 2.3.1 創建表 2.3.1.1約束 2.3.1.2 數據類型 2.3.1.3 案例 2.3.2 DDL&am…

開源數據發現平臺:Amundsen 本地環境安裝

Amundsen 是一個數據發現和元數據引擎&#xff0c;旨在提高數據分析師、數據科學家和工程師與數據交互時的生產力。目前&#xff0c;它通過索引數據資源&#xff08;表格、儀表板、數據流等&#xff09;并基于使用模式&#xff08;例如&#xff0c;查詢頻率高的表格會優先于查詢…

ubuntu18.04部署cephfs

比起君子訥于言而敏于行&#xff0c;我更喜歡君子善于言且敏于行。 目錄 一. 準備工作&#xff08;所有節點&#xff09; 1. /etc/hosts 2. 安裝python2 3. 配置普戶免密sudo 4. 準備好四塊盤&#xff0c;一塊hddsdd為一組&#xff0c;一臺設備上有一組 5. 添加源 二. 安…

VMD+皮爾遜+降噪+重構(送報告+PPT)Matlab程序

1.程序介紹:以含白噪聲信號為例&#xff1a;1.對信號進行VMD分解2.通過皮爾遜進行相關性計算3.通過設定閾值將噪聲分量和非噪聲分量分別提取出4.對非噪聲信號進行重構達到降噪效果包含評價指標&#xff1a;% SNR&#xff1a;信噪比% MSE&#xff1a;均方誤差% NCC&#xff1a;波…

UE5多人MOBA+GAS 45、制作沖刺技能

文章目錄添加技能需要的東西添加本地播放GC添加沖刺tag添加一個新的TA用于檢測敵方單位添加沖刺GA到角色中監聽加速移動速度的回調創建蒙太奇添加GE添加到數據表中添加到角色中糾錯添加技能需要的東西 添加本地播放GC 在UCAbilitySystemStatics中添加 /*** 在本地觸發指定的游…

分庫分表和sql的進階用法總結

說下你對分庫分表的理解分庫分表是?種常?的數據庫?平擴展&#xff08;Scale Out&#xff09;技術&#xff0c;?于解決單?數據庫性能瓶頸和存儲容量限制的問題。在分庫分表中&#xff0c;數據庫會根據某種規則將數據分散存儲在多個數據庫實例和表中&#xff0c;從?提?數據…

紫金橋RealSCADA:國產工業大腦,智造安全基石

在工業4.0時代&#xff0c;數字化轉型已成為企業提升競爭力的核心路徑。作為工業信息化的基石&#xff0c;監控組態軟件在智能制造、物聯網、大數據等領域發揮著關鍵作用。紫金橋軟件積極響應國家“兩化融合”戰略&#xff0c;依托多年技術積淀與行業經驗&#xff0c;重磅推出跨…

朗空量子與 Anolis OS 完成適配,龍蜥獲得抗量子安全能力

近日&#xff0c;蘇州朗空后量子科技有限公司&#xff08;以下簡稱“朗空量子”&#xff09;簽署了 CLA&#xff08;Contributor License Agreement&#xff0c;貢獻者許可協議&#xff09;&#xff0c;加入龍蜥社區&#xff08;OpenAnolis&#xff09;。 朗空量子是一家后量子…

C#WPF實戰出真汁08--【消費開單】--餐桌面板展示

1、功能介紹在這節里&#xff0c;需要實現餐桌類型展示&#xff0c;類型點擊切換事件&#xff0c;餐桌面板展示功能&#xff0c;細節很多&#xff0c;流程是UI設計布局-》后臺業務邏輯-》視圖模型綁定-》運行測試2、UI設計布局TabControl&#xff0c;StackPanel&#xff0c;Gri…

2025年機械制造、機器人與計算機工程國際會議(MMRCE 2025)

&#x1f916;&#x1f3ed;&#x1f4bb; 探索未來&#xff1a;機械制造、機器人與計算機工程的交匯點——2025年機械制造、機器人與計算機工程國際會議&#x1f31f;MMRCE 2025將匯聚全球頂尖專家、學者及行業領袖&#xff0c;聚焦機械制造、機器人和計算機工程領域的前沿議題…