99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

關(guān)系型數(shù)據(jù)庫設(shè)計三大范式

京東云 ? 來源:京東科技 鄭龍飛 ? 作者:京東科技 鄭龍飛 ? 2024-12-16 10:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:京東科技 鄭龍飛

范式定義

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

人類語言: 范式可以理解為設(shè)計一張數(shù)據(jù)表的表結(jié)構(gòu),符合的標(biāo)準(zhǔn)級別、規(guī)范和要求。

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

范式的優(yōu)點

采用范式可以降低數(shù)據(jù)的冗余性。

為什么要降低數(shù)據(jù)的冗余性?

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

范式的缺點

范式的缺點是獲取數(shù)據(jù)時,需要通過Join拼接出最后的數(shù)據(jù)。

目前范式的分類

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

什么是函數(shù)依賴?

百度百科:函數(shù)依賴簡單點說就是:某個屬性集決定另一個屬性集時,稱另一屬性集依賴于該屬性集。

人類語言:以下面表格為例,通俗易懂的解釋,什么是函數(shù)依賴。

學(xué)號 姓名 系名 系主任 科名 分數(shù)
001 張三 計算機系 李雷 高等數(shù)學(xué) 87
001 張三 計算機系 李雷 大學(xué)英語 88
001 張三 計算機系 李雷 數(shù)據(jù)庫設(shè)計 89
002 李四 計算機系 李雷 高等數(shù)學(xué) 86
002 李四 計算機系 李雷 java程序設(shè)計 90
002 李四 計算機系 李雷 大學(xué)英語 98
003 王五 財務(wù)系 韓梅梅 高等數(shù)學(xué) 96
003 王五 財務(wù)系 韓梅梅 財務(wù)基礎(chǔ) 95

完全函數(shù)依賴

官方定義:設(shè)X,Y是關(guān)系R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每一個X’都有X’!→Y,則稱Y完全函數(shù)依賴于X。

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

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

部分函數(shù)依賴

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

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

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

傳遞函數(shù)依賴

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

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

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

三范式的區(qū)別

第一范式

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

舉例說明:

學(xué)號 姓名 系名 系主任 科名 分數(shù) 學(xué)籍信息
001 張三 計算機系 李雷 高等數(shù)學(xué) 87 本科,大二
002 李四 計算機系 李雷 大學(xué)英語 88 研究生,研三

很明顯上面表格設(shè)計是不符合第一范式的,學(xué)籍信息列中的數(shù)據(jù)不是原子數(shù)據(jù)項,是可以進行分割的,因此對表格進行修改,讓表格符合第一范式的要求,修改結(jié)果如下圖所示:

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

實際上 ,1NF是所有關(guān)系型數(shù)據(jù)庫的最基本要求 ,你在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),例如SQL Server,Oracle,MySQL中創(chuàng)建數(shù)據(jù)表的時候,如果數(shù)據(jù)表的設(shè)計不符合這個最基本的要求,那么操作一定是不能成功的。也就是說,只要在RDBMS中已經(jīng)存在
的數(shù)據(jù)表,一定是符合1NF的。

第二范式

第二范式2NF核心原則:不能存在“部分函數(shù)依賴”。

舉例說明:

學(xué)號 姓名 系名 系主任 科名 分數(shù)
001 張三 計算機系 李雷 高等數(shù)學(xué) 87
001 張三 計算機系 李雷 大學(xué)英語 88
001 張三 計算機系 李雷 數(shù)據(jù)庫設(shè)計 89
002 李四 計算機系 李雷 高等數(shù)學(xué) 86
002 李四 計算機系 李雷 java程序設(shè)計 90
002 李四 計算機系 李雷 大學(xué)英語 98
003 王五 財務(wù)系 韓梅梅 高等數(shù)學(xué) 96
003 王五 財務(wù)系 韓梅梅 財務(wù)基礎(chǔ) 95

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

學(xué)號 科名 分數(shù)
001 高等數(shù)學(xué) 87
001 大學(xué)英語 88
001 數(shù)據(jù)庫設(shè)計 89
002 高等數(shù)學(xué) 86
002 java程序設(shè)計 90
002 大學(xué)英語 98
003 高等數(shù)學(xué) 96
003 財務(wù)基礎(chǔ) 95
學(xué)號 姓名 系名 系主任
001 張三 計算機系 李雷
002 李四 計算機系 李雷
003 王五 財務(wù)系 韓梅梅

以上符合第二范式,去掉部分函數(shù)依賴依賴。

第三范式

第三范式 3NF核心原則:不能存在傳遞函數(shù)依賴。

舉例說明:

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

在上面這張表中,存 在傳遞函數(shù)依賴:學(xué)號->系 名->系主任,但是系主任推不出學(xué)號。

上面表需要再次拆解

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

反三范式

沒有冗余的數(shù)據(jù)庫未必是最好的數(shù)據(jù)庫,有時為了提高運行效率,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。具體做法是: 在概念數(shù)據(jù)模型設(shè)計時遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計時考慮。降低范式就是增加字段,減少了查詢時的關(guān)聯(lián),提高查詢效率,因為在數(shù)據(jù)庫的操作中查詢的比例要遠遠大于DML的比例。但是反范式化一定要適度,并且在原本已滿足三范式的基礎(chǔ)上再做調(diào)整的。

總結(jié)

引用知乎大佬對范式的理解:

數(shù)據(jù)庫設(shè)計應(yīng)該也是分為三個境界的:

第一個境界,剛?cè)腴T數(shù)據(jù)庫設(shè)計,范式的重要性還未深刻理解。這時候出現(xiàn)的反范式設(shè)計,一般會出問題。

第二個境界,隨著遇到問題解決問題,漸漸了解到范式的真正好處,從而能快速設(shè)計出低冗余、高效率的數(shù)據(jù)庫。

第三個境界,再經(jīng)過N年的鍛煉,是一定會發(fā)覺范式的局限性的。此時再去打破范式,設(shè)計更合理的反范式部分。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3926

    瀏覽量

    66185
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    HarmonyOS開發(fā)案例:【關(guān)系數(shù)據(jù)庫

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

    HarmonyOS開發(fā)案例:【搭建關(guān)系數(shù)據(jù)庫】(4)

    本節(jié)將介紹如何調(diào)用關(guān)系數(shù)據(jù)庫接口在本地搭建數(shù)據(jù)庫,并讀寫相應(yīng)的用戶數(shù)據(jù)。
    的頭像 發(fā)表于 05-11 10:27 ?1462次閱讀
    HarmonyOS開發(fā)案例:【搭建<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>】(4)

    關(guān)系數(shù)據(jù)庫與非關(guān)系數(shù)據(jù)庫的區(qū)別淺析

    關(guān)系數(shù)據(jù)庫的一個劣勢就是 阻抗失諧(impedance mismatch):關(guān)系模型和內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)之間存在差異
    發(fā)表于 06-03 06:03

    HarmonyOS關(guān)系數(shù)據(jù)庫和對象關(guān)系數(shù)據(jù)庫的使用方法

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

    什么是關(guān)系數(shù)據(jù)庫

    什么是關(guān)系數(shù)據(jù)庫 關(guān)系數(shù)據(jù)庫簡介   關(guān)系
    發(fā)表于 06-17 07:38 ?9200次閱讀

    什么是非關(guān)系數(shù)據(jù)庫

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

    hbase和關(guān)系數(shù)據(jù)庫的區(qū)別

    hbase和關(guān)系數(shù)據(jù)庫的區(qū)別就是對于傳統(tǒng)數(shù)據(jù)庫,增加列對于一個項目來講,改變是非常大的。但是對于nosql,插入列和刪除列,跟傳統(tǒng)數(shù)據(jù)庫
    發(fā)表于 12-27 15:51 ?1.2w次閱讀
    hbase和<b class='flag-5'>關(guān)系</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)庫</b>的區(qū)別

    關(guān)系數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計有什么技巧?兩個設(shè)計技巧詳細說明

    關(guān)系數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計,有下面兩個設(shè)計技巧: 物理主鍵作為關(guān)聯(lián)的外鍵 關(guān)系數(shù)據(jù)庫,由多個
    發(fā)表于 10-16 10:33 ?13次下載

    數(shù)據(jù)庫設(shè)計范式應(yīng)用實例剖析

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

    基于SQLite的鴻蒙的關(guān)系數(shù)據(jù)庫使用

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

    輕松設(shè)計關(guān)系數(shù)據(jù)庫教程

    本文討論關(guān)系數(shù)據(jù)庫設(shè)計相關(guān)的一些內(nèi)容,涉及關(guān)系模型,表結(jié)構(gòu)設(shè)計等內(nèi)容,以學(xué)生選修課程講述設(shè)計過程,在盡量講清楚設(shè)計要領(lǐng)的前提下,簡化設(shè)計內(nèi)容。 本文基于MySQL數(shù)據(jù)庫為基礎(chǔ),適合有一定關(guān)系
    的頭像 發(fā)表于 07-13 09:13 ?2040次閱讀

    OpenHarmony關(guān)系數(shù)據(jù)庫概述

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

    關(guān)系數(shù)據(jù)庫的基本原理(什么是關(guān)系數(shù)據(jù)庫

    什么是關(guān)系數(shù)據(jù)庫?關(guān)系數(shù)據(jù)庫,簡稱 RDBMS是由許多數(shù)
    的頭像 發(fā)表于 07-10 09:06 ?1733次閱讀

    數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?

    數(shù)據(jù)庫是一種部署在虛擬計算環(huán)境中的數(shù)據(jù)庫,它融合了云計算的彈性和可擴展性,為用戶提供高效、靈活的數(shù)據(jù)庫服務(wù)。云數(shù)據(jù)庫主要分為兩大類:關(guān)系
    的頭像 發(fā)表于 01-07 10:22 ?507次閱讀

    關(guān)系數(shù)據(jù)庫和非關(guān)系區(qū)別

    關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫在多個方面存在顯著差異,主機推薦小編為您整理發(fā)布
    的頭像 發(fā)表于 01-10 09:58 ?677次閱讀