那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關系型數據庫設計三大范式

京東云 ? 來源:京東科技 鄭龍飛 ? 作者:京東科技 鄭龍飛 ? 2024-12-16 10:18 ? 次閱讀

作者:京東科技 鄭龍飛

范式定義

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

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

而通常我們用的最多的就是第一范式(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年的鍛煉,是一定會發覺范式的局限性的。此時再去打破范式,設計更合理的反范式部分。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3846

    瀏覽量

    64683
收藏 人收藏

    評論

    相關推薦

    HarmonyOS開發案例:【關系數據庫

    使用關系數據庫的相關接口實現了對賬單的增、刪、改、查操作。
    的頭像 發表于 04-22 14:58 ?691次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>關系</b><b class='flag-5'>型</b><b class='flag-5'>數據庫</b>】

    HarmonyOS開發案例:【搭建關系數據庫】(4)

    本節將介紹如何調用關系數據庫接口在本地搭建數據庫,并讀寫相應的用戶數據
    的頭像 發表于 05-11 10:27 ?992次閱讀
    HarmonyOS開發案例:【搭建<b class='flag-5'>關系</b><b class='flag-5'>型</b><b class='flag-5'>數據庫</b>】(4)

    關系數據庫與非關系數據庫的區別淺析

    關系數據庫的一個劣勢就是 阻抗失諧(impedance mismatch):關系模型和內存中的數據結構之間存在差異
    發表于 06-03 06:03

    HarmonyOS關系數據庫和對象關系數據庫的使用方法

    容易就上手的知識。本篇速成教程直接使用最精準和簡短的文字,再配上講解代碼,讓我們能在10分鐘左右就能掌握最基本的數據庫使用方法。數據庫大要素:數據庫、表、字段,接下來為大家介紹
    發表于 03-29 14:10

    什么是關系數據庫

    什么是關系數據庫 關系數據庫簡介   關系
    發表于 06-17 07:38 ?9125次閱讀

    什么是非關系數據庫

    什么是非關系數據庫 談到非關系數據庫設計的難點,朱海峰說:“我們可以從一些場景來看這個問題
    發表于 06-17 15:49 ?3150次閱讀

    hbase和關系數據庫的區別

    hbase和關系數據庫的區別就是對于傳統數據庫,增加列對于一個項目來講,改變是非常大的。但是對于nosql,插入列和刪除列,跟傳統數據庫
    發表于 12-27 15:51 ?1.1w次閱讀
    hbase和<b class='flag-5'>關系</b><b class='flag-5'>型</b><b class='flag-5'>數據庫</b>的區別

    范式是什么?它對數據庫設計有什么作用?

      范式及其對數據庫設計的指導意義 1 問題的引出 2 范式理論概述 3 1NF及對實踐的指導意義 4 函數依賴 5 2NF及對實踐的指導意義 6 3NF及對實踐的指導意義 7 BCNF-擴充的第
    發表于 09-29 11:10 ?6次下載
    <b class='flag-5'>范式</b>是什么?它對<b class='flag-5'>數據庫</b>設計有什么作用?

    關系數據庫表結構的設計有什么技巧?兩個設計技巧詳細說明

    關系數據庫表結構的設計,有下面兩個設計技巧: 物理主鍵作為關聯的外鍵 關系數據庫,由多個
    發表于 10-16 10:33 ?13次下載

    數據庫設計范式應用實例剖析

    數據庫的設計范式數據庫設計所需要滿足的規范,滿足這些規范的數據庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是
    發表于 01-22 17:16 ?3次下載
    <b class='flag-5'>數據庫</b>設計<b class='flag-5'>三</b>大<b class='flag-5'>范式</b>應用實例剖析

    基于SQLite的鴻蒙的關系數據庫使用

    HarmonyOS關系數據庫基于SQLite組件提供了一套完整的對本地數據庫進行管理的機制,對外提供了一系列的增、刪、改、查接口,也可以直接運行用戶輸入的SQL語句來滿足復雜的場景需
    的頭像 發表于 01-20 11:48 ?4284次閱讀
    基于SQLite的鴻蒙的<b class='flag-5'>關系</b><b class='flag-5'>型</b><b class='flag-5'>數據庫</b>使用

    輕松設計關系數據庫教程

    本文討論關系數據庫設計相關的一些內容,涉及關系模型,表結構設計等內容,以學生選修課程講述設計過程,在盡量講清楚設計要領的前提下,簡化設計內容。 本文基于MySQL數據庫為基礎,適合有一定關系
    的頭像 發表于 07-13 09:13 ?1804次閱讀

    OpenHarmony關系數據庫概述

    關系數據庫(Relational Database, 以下簡稱RDB)是一種基于關系模型來管理數據
    的頭像 發表于 03-28 18:08 ?1119次閱讀
    OpenHarmony<b class='flag-5'>關系</b><b class='flag-5'>型</b><b class='flag-5'>數據庫</b>概述

    關系數據庫的基本原理(什么是關系數據庫

    什么是關系數據庫關系數據庫,簡稱 RDBMS是由許多
    的頭像 發表于 07-10 09:06 ?1490次閱讀

    關系數據庫和非關系區別

    關系數據庫和非關系數據庫在多個方面存在顯著差異,主機推薦小編為您整理發布
    的頭像 發表于 01-10 09:58 ?120次閱讀
    百家乐官网网址皇冠现金网| 百家乐流水打法| 全讯网334466| 单张百家乐官网论坛| 百家乐官网街机| 威尼斯人娱乐城赌场| 百家乐官网越长的路| 闲和庄百家乐娱乐城| 百家乐官网现金网平台排名 | 百家乐官网经典路单| 百家乐现金网平台排行| 大发888金皇冠娱乐城| 百家乐官网是赌博吗| 网络百家乐游赌博| 百家乐官网庄闲几率| 百家乐博牌规例| 去澳门百家乐官网娱乐城| 百家乐群shozo| 安桌百家乐官网游戏百家乐官网 | 棋牌类游戏| 24山向吉凶水法| 伽师县| 沙龙百家乐娱乐网| 克东县| 百家乐有诈吗| 首席百家乐的玩法技巧和规则| 百家乐官网赌博是否违法| 百家乐分析网| 百家乐官网21点游戏| 大发888官方注册| 在线百家乐大家赢| 百家乐官网有没有稳赢| 克拉克百家乐的玩法技巧和规则| 百家乐官网投注外挂| 大发888充值平台| 做生意佩戴什么纳财| 百家乐官网赢的方法| 百家乐桌布动物| 大众百家乐官网娱乐城| 德州扑克概率计算器| 百家乐2号技术|