在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    阿里面試篇:數(shù)據(jù)庫(kù)的三大范式

    阿里面試篇:數(shù)據(jù)庫(kù)的三大范式

    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)方法。

    不過(guò),有的時(shí)候?yàn)榱颂岣吣骋恍┎樵冃阅?,我們還需要破壞范式規(guī)則,也就是反規(guī)范化。

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

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

    2.3第一范式(1NF)

    • 第一范式主要是保證數(shù)據(jù)表中的每一個(gè)字段的值必須具有原子性,也就是數(shù)據(jù)表中的每個(gè)字段的值是不可再拆分的最小數(shù)據(jù)單元

    • 屬性的原子性是主觀的,我們要根據(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í)的,而且所有的非主鍵字段,都必須完全依賴主鍵,不能只依賴主鍵的一部分。
    • 如果知道主鍵的所有屬性的值,我們就可以檢索任何元組(行)的任何屬性的任何值(要求中的主鍵可以拓展替換為候選鍵)

    比如說(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ì)成下面的三張表。

    這樣的話,每張數(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ú)立的
    • 這里的主鍵可以拓展成為候選鍵

    、

    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ù)的讀性能。

    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í)候不可或缺

    4.BCNF(巴斯范式)

    這個(gè)表符合第三范式

    碼出八股文_斬出offer線八股文導(dǎo)航(持續(xù)更新)

    字節(jié)面試:如何設(shè)計(jì)一個(gè)秒殺系統(tǒng)

    IDEA 官宣全新默認(rèn) UI,太震撼了?。?/p>

    實(shí)習(xí)轉(zhuǎn)正上岸,我經(jīng)歷了什么?

    SQL查找是否”存在”,別再count了!

    如果本文對(duì)你有幫助,別忘記給我個(gè)3連 ,點(diǎn)贊,轉(zhuǎn)發(fā),評(píng)論,

    咱們下期見(jiàn)!答案獲取方式:已贊 已評(píng) 已關(guān)~

    學(xué)習(xí)更多知識(shí)與技巧,關(guān)注與私信博主(03)

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月3日 22:03
    下一篇 2022年7月3日 22:03

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息