国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫(kù)的三大范式

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)庫(kù)的三大范式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


文章是看尚硅谷的MySQL所寫的筆記

1.為什么需要數(shù)據(jù)庫(kù)設(shè)計(jì)

設(shè)計(jì)數(shù)據(jù)表的時(shí)候,要考慮很多的問(wèn)題:

  • 用戶需要哪些數(shù)據(jù),我們?cè)跀?shù)據(jù)表中要保存哪一些數(shù)據(jù)
  • 怎么保證數(shù)據(jù)表中的數(shù)據(jù)的正確性
  • 如何降低數(shù)據(jù)表的冗余度
  • 開(kāi)發(fā)人員怎么才能更方便的使用數(shù)據(jù)庫(kù)

如果數(shù)據(jù)庫(kù)設(shè)計(jì)得不合理的話,可能導(dǎo)致下面的幾種問(wèn)題:

  • 設(shè)計(jì)容易,信息重復(fù),存儲(chǔ)空間浪費(fèi)
  • 數(shù)據(jù)更新,插入,刪除的異常
  • 不能正確表示信息
  • 丟失有效信息
  • 程序性能差

我們可以看出設(shè)計(jì)良好的數(shù)據(jù)庫(kù)是很重要的,它有下面的優(yōu)點(diǎn):

  • 節(jié)省數(shù)據(jù)的存儲(chǔ)空間
  • 能夠保證數(shù)據(jù)的完整性
  • 方便進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)

設(shè)計(jì)數(shù)據(jù)庫(kù),我們得重視數(shù)據(jù)表的設(shè)計(jì),為了建立冗余度小,結(jié)構(gòu)合理的數(shù)據(jù)庫(kù),設(shè)計(jì)數(shù)據(jù)庫(kù)必須遵循一定的規(guī)則。

2.范式(Normal Formal)

2.1范式概述

關(guān)系型數(shù)據(jù)庫(kù)中,關(guān)于數(shù)據(jù)表設(shè)計(jì)的基本原則,規(guī)則就稱為范式,范式是我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)過(guò)程中需要遵循的規(guī)則和指導(dǎo)方法。
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
不過(guò),有的時(shí)候?yàn)榱颂岣吣骋恍┎樵冃阅?,我們還需要破壞范式規(guī)則,也就是反規(guī)范化。

2.2鍵和相關(guān)屬性的概念

范式的定義會(huì)用到主鍵和候選鍵,我們先來(lái)看看相關(guān)的概念,數(shù)據(jù)庫(kù)中的鍵是由一個(gè)或多個(gè)屬性組成的,我們來(lái)看一下數(shù)據(jù)表中常用的幾種鍵和屬性的定義。
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql

三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql

2.3第一范式(1NF)

  • 第一范式主要是保證數(shù)據(jù)表中的每一個(gè)字段的值必須具有原子性,也就是數(shù)據(jù)表中的每個(gè)字段的值是不可再拆分的最小數(shù)據(jù)單元
  • 三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
  • 三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
  • 屬性的原子性是主觀的,我們要根據(jù)實(shí)際項(xiàng)目的需求來(lái)設(shè)計(jì),比如說(shuō)地址,如果項(xiàng)目沒(méi)有說(shuō)要細(xì)分為省,市,縣,鎮(zhèn)這么具體的話,我們一般就可以不拆分。

2.4第二范式(2NF)

  • 第二范式要求在滿足第一范式的基礎(chǔ)上,還要滿足數(shù)據(jù)表里的每一條數(shù)據(jù)記錄,都是可唯一標(biāo)識(shí)的,而且所有的非主鍵字段,都必須完全依賴主鍵,不能只依賴主鍵的一部分。
  • 如果知道主鍵的所有屬性的值,我們就可以檢索任何元組(行)的任何屬性的任何值(要求中的主鍵可以拓展替換為候選鍵)
  • 三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql

比如說(shuō),在成績(jī)表(學(xué)號(hào),課程號(hào),成績(jī))關(guān)系中,(學(xué)號(hào),課程號(hào))可以決定成績(jī),因?yàn)橐粋€(gè)學(xué)生可以選多門課,一門課也可以被多個(gè)學(xué)生選擇,所以學(xué)號(hào)或課程號(hào)都不能單獨(dú)決定成績(jī)。
所以(學(xué)號(hào),課程號(hào))——>成績(jī)就是完全依賴關(guān)系。

比賽表里面包含球員編號(hào),姓名,年齡,比賽編號(hào),比賽實(shí)際和比賽場(chǎng)地等屬性,候選鍵和主鍵都是(球員編號(hào),比賽編號(hào)),我們可以通過(guò)候選鍵(主鍵)來(lái)決定下面的關(guān)系。
(球員編號(hào),比賽編號(hào))——>(姓名,年齡,比賽時(shí)間,比賽場(chǎng)地,得分)
但是這個(gè)數(shù)據(jù)表不滿足第二范式,因?yàn)閿?shù)據(jù)表中的字段之間還存在下面的對(duì)應(yīng)關(guān)系:

(球員編號(hào))——>(姓名,年齡)
(比賽編號(hào))——>(比賽時(shí)間,比賽場(chǎng)地)
非主屬性并非完全依賴候選鍵,這樣會(huì)產(chǎn)生下面的問(wèn)題。

  • 數(shù)據(jù)冗余:如果一個(gè)球員參加m場(chǎng)比賽,那么球員的姓名和年齡就重復(fù)了m-1次,一個(gè)比賽可能有n個(gè)球員參加,比賽時(shí)間和地點(diǎn)就重復(fù)了n-1次
  • 插入異常:如果我們要添加一場(chǎng)新的比賽,但是這時(shí)還沒(méi)有確定參加的球員都有誰(shuí)2,那么就沒(méi)發(fā)插入
  • 刪除異常:我們想刪除某個(gè)球員編號(hào),但是如果沒(méi)有單獨(dú)保存比賽表的話,就會(huì)同時(shí)把比賽信息刪除掉
  • 更新異常:如果我們調(diào)整了某個(gè)比賽時(shí)間,那么數(shù)據(jù)表所有的這個(gè)比賽的時(shí)間都得進(jìn)行調(diào)整,不然就會(huì)出現(xiàn)同一場(chǎng)比賽但是時(shí)間不同的情況。

為了避免上述情況,我們可以把球員比賽表設(shè)計(jì)成下面的三張表。

表名
屬性(字段)
球員player表
球員編號(hào),姓名,年齡等屬性
比賽game表
比賽編號(hào),比賽時(shí)間,比賽場(chǎng)地等屬性
球員比賽關(guān)系player_game表
球員編號(hào),比賽編號(hào),得分等屬性

這樣的話,每張數(shù)據(jù)表都符合第二范式,就避免了異常情況的發(fā)生
第二范式要求實(shí)體的屬性完全依賴主關(guān)鍵字,如果存在不完全依賴,那么這個(gè)屬性和主關(guān)鍵字的這一部分就應(yīng)該分離處理形成一個(gè)新的實(shí)體,新實(shí)體和原來(lái)實(shí)體之間是一對(duì)多的關(guān)系

2.5第三范式(3NF)

  • 第三范式建立在已經(jīng)滿足第二范式的基礎(chǔ)上
  • 數(shù)據(jù)表中的每一個(gè)非主鍵字段都和主鍵字段直接相關(guān)
  • 也就是說(shuō)數(shù)據(jù)表中的所有非主鍵字段不能依賴于其他非主鍵字段
  • 這個(gè)規(guī)則的意思是所有非主屬性之間不能有依賴關(guān)系,它們是互相獨(dú)立的
  • 這里的主鍵可以拓展成為候選鍵
  • 三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql

三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql

2.6范式的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):

    • 數(shù)據(jù)的標(biāo)準(zhǔn)化有助于消除數(shù)據(jù)庫(kù)中的數(shù)據(jù)冗余
  • 第三范式通常被認(rèn)為在性能,擴(kuò)展性和數(shù)據(jù)完整性方面達(dá)到了最好的平衡

  • 缺點(diǎn):

    • 降低了查詢效率,因?yàn)榉妒降燃?jí)越高,設(shè)計(jì)出來(lái)的表就越多,進(jìn)行數(shù)據(jù)查詢的時(shí)候就可能需要關(guān)聯(lián)多張表,不僅代價(jià)昂貴,而且可能會(huì)使得一些索引失效

    • 范式只是提出設(shè)計(jì)的標(biāo)標(biāo)準(zhǔn),實(shí)際設(shè)計(jì)的時(shí)候,我們可能為了性能和讀取效率違反范式的原則,通過(guò)增加少量的冗余或重復(fù)的數(shù)據(jù)來(lái)提高數(shù)據(jù)庫(kù)的讀取性能,減少關(guān)聯(lián)查詢,實(shí)現(xiàn)空間換時(shí)間的目的

3.反范式化

3.1概述

  • 遵循業(yè)務(wù)優(yōu)先的原則
  • 首先滿足業(yè)務(wù)需求,再進(jìn)來(lái)減少冗余
  • 有時(shí)候我們想要對(duì)查詢效率進(jìn)行優(yōu)化,反范式化也是一種優(yōu)化思路,我們可以通過(guò)在數(shù)據(jù)表中增加冗余字段來(lái)提高數(shù)據(jù)庫(kù)的讀性能。
  • 三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
    三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql

3.2 反范式的新問(wèn)題

反范式雖然可以通過(guò)空間換實(shí)際,提升查詢的效率,但是反范式也會(huì)帶來(lái)一些新問(wèn)題

  • 存儲(chǔ)空間變大了
  • 一個(gè)表中字段做了修改,另外一個(gè)表中冗余字段也要同步進(jìn)行修改,不然會(huì)導(dǎo)致數(shù)據(jù)不一致
  • 如果用存儲(chǔ)過(guò)程了支持?jǐn)?shù)據(jù)的更新,刪除等操作,如果操作頻繁,就會(huì)消耗系統(tǒng)資源
  • 在數(shù)據(jù)量小的情況下,反范式不能體現(xiàn)性能的優(yōu)勢(shì),可能還會(huì)讓數(shù)據(jù)庫(kù)的設(shè)計(jì)更加復(fù)雜。

3.3反范式的適用場(chǎng)景

當(dāng)冗余信息能大幅度提高查詢效率的時(shí)候,我們才會(huì)采取反范式的優(yōu)化。

增加冗余字段的建議
增加冗余冗余字段一定要符合下面的兩個(gè)條件,滿足下面的兩個(gè)條件才可以考慮增加冗余字段
①這個(gè)冗余字段不需要經(jīng)常進(jìn)行修改
②這個(gè)冗余字段查詢的時(shí)候不可或缺
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql

4.BCNF(巴斯范式)

三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
這個(gè)表符合第三范式
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql
三范式,MySQL,數(shù)據(jù)庫(kù),設(shè)計(jì)規(guī)范,mysql文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-784970.html

到了這里,關(guān)于數(shù)據(jù)庫(kù)的三大范式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)庫(kù)—設(shè)計(jì)規(guī)范(依賴、范式、分解)

    如果在一個(gè)二維表中:Students(Sno , name, age),Sno 是這個(gè)表中的主鍵,所以對(duì)于其他屬性來(lái)說(shuō),Sno決定name,Sno決定age,反過(guò)來(lái)則叫做name函數(shù)依賴于Sno… 定義:主碼決定其他屬性,其他屬性函數(shù)依賴于主碼 非平凡函數(shù)依賴 SC(Sno,Cno,Grade)這么一個(gè)表中解釋,首先主碼是Sno和Cno聯(lián)合

    2024年02月12日
    瀏覽(15)
  • [MySQL]數(shù)據(jù)庫(kù)原理1,三大范式,E-R圖,DataBase,數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),Relationship,實(shí)體、屬性、聯(lián)系 映射基數(shù),關(guān)系型數(shù)據(jù)庫(kù),聯(lián)系的度數(shù)等——喵喵期末不掛科

    [MySQL]數(shù)據(jù)庫(kù)原理1,三大范式,E-R圖,DataBase,數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),Relationship,實(shí)體、屬性、聯(lián)系 映射基數(shù),關(guān)系型數(shù)據(jù)庫(kù),聯(lián)系的度數(shù)等——喵喵期末不掛科

    希望你開(kāi)心,希望你健康,希望你幸福,希望你點(diǎn)贊! 最后的最后,關(guān)注喵,關(guān)注喵,關(guān)注喵,佬佬會(huì)看到更多有趣的博客哦?。?! 喵喵喵,你對(duì)我真的很重要! 目錄 前言 認(rèn)識(shí)數(shù)據(jù)庫(kù) 常見(jiàn)的數(shù)據(jù)庫(kù)管理系統(tǒng)應(yīng)用案例。 ? ? ? 1.?dāng)?shù)據(jù)(Data) ? ? ? 2.?dāng)?shù)據(jù)庫(kù)(DataBase ,簡(jiǎn)

    2024年02月04日
    瀏覽(35)
  • MySQL高級(jí)特性篇(6)-數(shù)據(jù)庫(kù)設(shè)計(jì)模式與范式

    數(shù)據(jù)庫(kù)是現(xiàn)代軟件開(kāi)發(fā)中非常重要的一環(huán),而MySQL作為一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在數(shù)據(jù)庫(kù)設(shè)計(jì)方面也有一些常見(jiàn)的模式和范式。本博客將介紹MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)模式與范式,讓讀者對(duì)MySQL數(shù)據(jù)庫(kù)的設(shè)計(jì)有一個(gè)全面的了解。 一、數(shù)據(jù)庫(kù)設(shè)計(jì)模式 數(shù)據(jù)庫(kù)設(shè)計(jì)模式是數(shù)據(jù)庫(kù)

    2024年02月22日
    瀏覽(23)
  • 數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)范:第一范式、第二范式、第三范式、巴斯范式

    數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)范:第一范式、第二范式、第三范式、巴斯范式

    目前關(guān)系型數(shù)據(jù)庫(kù)有六種常見(jiàn)范式,按照范式級(jí)別,從低到高分別是: 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式) 。 數(shù)據(jù)庫(kù)的 范式設(shè)計(jì)越高階,冗余度就越低 ,同時(shí)高階的范式 一定符合

    2024年02月05日
    瀏覽(25)
  • MySQL筆記(一):設(shè)計(jì)范式、基礎(chǔ)概念、數(shù)據(jù)庫(kù)定義語(yǔ)言DDL

    MySQL筆記(一):設(shè)計(jì)范式、基礎(chǔ)概念、數(shù)據(jù)庫(kù)定義語(yǔ)言DDL

    MySQL是一種數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS),是基于客戶機(jī)-服務(wù)器的數(shù)據(jù)庫(kù); 分為兩個(gè)不同的部分, 服務(wù)器軟件(MySQL DBMS)是負(fù)責(zé)所有數(shù)據(jù)訪問(wèn)和處理的一個(gè)文件,這個(gè)軟件運(yùn)行在稱為數(shù)據(jù)庫(kù)服務(wù)器的計(jì)算機(jī)上,與數(shù)據(jù)文件打交道; 客戶機(jī)則是與用戶打交道的軟件,對(duì)于用戶提出的

    2024年02月03日
    瀏覽(22)
  • 從0開(kāi)始學(xué)習(xí)mysql 第十四課:數(shù)據(jù)庫(kù)設(shè)計(jì)與三范式

    第十四課:數(shù)據(jù)庫(kù)設(shè)計(jì)與三范式 學(xué)習(xí)目標(biāo) 在本課中,你將學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的三個(gè)基本范式,它們是用來(lái)規(guī)范數(shù)據(jù)庫(kù)結(jié)構(gòu),減少數(shù)據(jù)冗余和改善數(shù)據(jù)完整性的準(zhǔn)則。你將學(xué)習(xí): 第一范式(1NF)的概念和實(shí)現(xiàn) 第二范式(2NF)的概念和實(shí)現(xiàn) 第三范式(3NF)的概念和實(shí)現(xiàn) 范式

    2024年01月23日
    瀏覽(21)
  • 【MySQL高級(jí)篇筆記-數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)范(中) 】

    【MySQL高級(jí)篇筆記-數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)范(中) 】

    此筆記為尚硅谷MySQL高級(jí)篇部分內(nèi)容 目錄 一、為什么要數(shù)據(jù)庫(kù)設(shè)計(jì)? 二、范式 1、范式簡(jiǎn)介 2、范式都包括哪些? 3、鍵和相關(guān)屬性的概念 4、第一范式(1st NF) 5、第二范式(2nd NF) 6、第三范式(3rd NF) 7、小結(jié) 三、反范式化 1、概述 2、?應(yīng)用舉例 3、反范式的新問(wèn)題 4、反范式的適用

    2024年02月08日
    瀏覽(20)
  • 【MySQL索引與優(yōu)化篇】數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)范

    【MySQL索引與優(yōu)化篇】數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)范

    在關(guān)系型數(shù)據(jù)庫(kù)中,關(guān)于數(shù)據(jù)表設(shè)計(jì)的基本原則、規(guī)則就稱為范式 。范式的英文名稱是 Normal Form ,簡(jiǎn)稱 NF 。它是英國(guó)人 E.F.Codd 在上個(gè)世紀(jì)70年代提出關(guān)系數(shù)據(jù)庫(kù)模型后總結(jié)出來(lái)的。范式是關(guān)系數(shù)據(jù)庫(kù)理論的基礎(chǔ),也是我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)過(guò)程中所要遵循的 規(guī)則 和 指導(dǎo)方

    2024年02月05日
    瀏覽(34)
  • 數(shù)據(jù)庫(kù)三大范式、BC范式、第四范式

    數(shù)據(jù)庫(kù)三大范式、BC范式、第四范式

    為了建立冗余較小、結(jié)構(gòu)合理的數(shù)據(jù)庫(kù),設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)必須遵循一定的規(guī)則。在關(guān)系型數(shù)據(jù)庫(kù)中這種規(guī)則就稱為范式。范式是符合某一種設(shè)計(jì)要求的總結(jié)。要想設(shè)計(jì)一個(gè)結(jié)構(gòu)合理的關(guān)系型數(shù)據(jù)庫(kù),必須滿足一定的范式。 第一范式是最基本的范式。 如果數(shù)據(jù)庫(kù)表中的所有字段

    2024年01月18日
    瀏覽(25)
  • MySQL數(shù)據(jù)庫(kù)之鎖、范式

    鎖是計(jì)算機(jī)協(xié)調(diào)多個(gè)進(jìn)程或線程并發(fā)訪問(wèn)某一資源的機(jī)制。分為 全局鎖、表級(jí)鎖、行級(jí)鎖。 1、定義 全局鎖就是對(duì)整個(gè)數(shù)據(jù)庫(kù)實(shí)例加鎖,加鎖后后續(xù)的DML的寫語(yǔ)句, DDL語(yǔ)句,已經(jīng)更新操作的事務(wù)提交語(yǔ)句都將被阻塞,整個(gè)實(shí)例就處于只讀狀態(tài),即可以執(zhí)行DQL語(yǔ)句,數(shù)據(jù)備份

    2024年02月11日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包