規(guī)范化過(guò)程主要為克服數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)中的插入異常、刪除異常以及冗余度大的缺陷。數(shù)據(jù)庫(kù)規(guī)范化能夠讓數(shù)據(jù)庫(kù)設(shè)計(jì)者更好地了解組織內(nèi)部當(dāng)前的數(shù)據(jù)結(jié)構(gòu),最終得到一系列的數(shù)據(jù)實(shí)體。數(shù)據(jù)庫(kù)規(guī)范化通過(guò)對(duì)數(shù)據(jù)庫(kù)表的設(shè)計(jì),可以有效降低數(shù)據(jù)庫(kù)冗余程度。
松陽(yáng)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),松陽(yáng)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為松陽(yáng)上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的松陽(yáng)做網(wǎng)站的公司定做!
數(shù)據(jù)庫(kù)規(guī)范化過(guò)程
關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化說(shuō)的通俗一些就是對(duì)表的規(guī)范化。
規(guī)范化的必要性:
根據(jù)項(xiàng)目的需求,我們會(huì)創(chuàng)建相應(yīng)的數(shù)據(jù)庫(kù)表格來(lái)完成項(xiàng)目中的數(shù)據(jù)的存儲(chǔ)。這已經(jīng)成為做項(xiàng)目的固定流程了,但是在真正的開(kāi)始處理業(yè)務(wù)需求的時(shí)候,就會(huì)意識(shí)到自己的表格設(shè)置的不合理,導(dǎo)致數(shù)據(jù)的重復(fù)存儲(chǔ),插入異常,刪除異常,更新異常等問(wèn)題,這時(shí)就需要來(lái)重新的規(guī)劃表格,既浪費(fèi)時(shí)間,又消耗人力財(cái)力,十分不劃算,因此規(guī)范化是十分有必要的,所以今天就在這里教給大家規(guī)范表的方法。
在教規(guī)范化數(shù)據(jù)庫(kù)方法之前,先給大家介紹知識(shí):
關(guān)鍵知識(shí)點(diǎn)函數(shù)依賴
定義可能有些難以理解,我在這里簡(jiǎn)單的解釋一下:函數(shù)依賴描述的是兩個(gè)集合之間的一種映射關(guān)系,這種映射關(guān)系與函數(shù)是一樣的,例如 y = x^2,在這里對(duì)于x來(lái)說(shuō),一個(gè)x就對(duì)應(yīng)一個(gè)y值,但是不存在,一個(gè)x對(duì)應(yīng)多種y值的情況,所以就可以說(shuō)y函數(shù)依賴于x,然而對(duì)于y來(lái)說(shuō),存在一個(gè)y值對(duì)應(yīng)多個(gè)x值的情況,所以說(shuō)x并不函數(shù)依賴于y。這就是函數(shù)依賴。
接下來(lái)我們介紹幾種特殊的函數(shù)依賴:
完全函數(shù)依賴
定義:
如果X->Y,并且對(duì)于任意一個(gè)X的真子集X’都不存在,X’->Y,那么我們就說(shuō) X->Y這種函數(shù)依賴屬于完全函數(shù)依賴。
簡(jiǎn)單的解釋一下: 函數(shù)z = x + y,對(duì)于z來(lái)說(shuō):z函數(shù)依賴于x和y,但是z并不單獨(dú)依賴于x或單獨(dú)依賴于y,這就說(shuō)明z函數(shù)依賴于x和y的這種依賴就是完全函數(shù)依賴。
部分函數(shù)依賴:
定義:
如果X->Y,但是Y不完全依賴于X,則稱這種依賴為部分完全依賴。 也就是說(shuō):函數(shù)z = x + 0y 是可以看成 ,也就是說(shuō)z函數(shù)依賴于x和y,但是z又單獨(dú)依賴于x,那么這就是部分函數(shù)依賴。
傳遞函數(shù)依賴:
定義:
如果X->Y, Y -> Z ,并且不成立,Y->X也不成立。則稱Z傳遞函數(shù)依賴于X。
這個(gè)比較簡(jiǎn)單,函數(shù)組z = x^2, x = 2y可以化簡(jiǎn)為z = 4y ^2,很容易看出:z是函數(shù)依賴于x,x依賴于y,并且z->x不成立,這就是傳遞函數(shù)依賴。
關(guān)鍵知識(shí)點(diǎn)之二-----鍵
候選鍵:一個(gè)屬性(字段)或一個(gè)屬性組(多個(gè)字段)能夠完全決定于關(guān)系模式(表)中的其他屬性(字段)。也就是說(shuō)其他屬性(字段)完全依賴于該屬性(字段)或?qū)傩越M(多個(gè)字段)。
主鍵:如果候選鍵多于一個(gè),則選擇其中一個(gè)作為主鍵。被選做主鍵的屬性或?qū)傩越M在該關(guān)系模式(表)中的每一個(gè)元祖(行)中的值是不允許重復(fù)和取值為null的。
主屬性:報(bào)完在任何一個(gè)候選鍵中的屬性,稱為主屬性。如果候選鍵是由多個(gè)屬性共同組成的,那么這些屬性組中每一個(gè)屬性都是主屬性。
非主屬性:不包含在任何鍵中的屬性稱為非主屬性。
外鍵:某屬性或?qū)傩越M在當(dāng)前關(guān)系模式(表)中不是主鍵,但是另一個(gè)關(guān)系模式(表)中充當(dāng)主鍵的身份,則稱該屬性或?qū)傩越M為外鍵。
在介紹完了上述的基本知識(shí)點(diǎn)之后,我們來(lái)開(kāi)始學(xué)習(xí)數(shù)據(jù)庫(kù)表的規(guī)范過(guò)程:
想要規(guī)范表,就首先需要一個(gè)標(biāo)準(zhǔn),來(lái)衡量表是否已經(jīng)規(guī)范。這個(gè)標(biāo)準(zhǔn)就是----范式。
范式一共有六種:第一范式(1NF),第二范式(2NF),第三范式(3NF),BC范式(BCNF),第四范式(4NF),第五范式(5NF)。
在上面六中范式中,在一般的情況下我們需要將表規(guī)范到BCNF就已經(jīng)十分完美了,在真正的項(xiàng)目中其實(shí)只需要達(dá)到3NF就足夠了。
接下來(lái)重點(diǎn)介紹前4中范式:
第一范式:關(guān)系模式R中的所有屬性都是不可分的數(shù)據(jù)項(xiàng)。
簡(jiǎn)單來(lái)說(shuō)就是只要你能把表建出來(lái),這個(gè)表就已經(jīng)滿足了第一范式了。例如student表(student_id, course_id, student_name, age, sex, grade, sdept, sdept_director),在這個(gè)表中很明顯grade這一項(xiàng)是受student_id, course_id,共同決定的,所以應(yīng)該讓這兩項(xiàng)聯(lián)合做為主鍵。
第二范式:在滿足第一范式的基礎(chǔ)上,滿足非主屬性都完全依賴于R的主鍵。
這就需要用到前面講的內(nèi)容了,要判斷非主屬性是否完全依賴于主鍵。如果不滿足就重 更改表的結(jié)構(gòu)。例如student表(student_id, course_id, student_name, age, sex, grade, sdept_id, sdept_director)因?yàn)閟tudent_id, course_id兩項(xiàng)聯(lián)合做為主鍵,但是對(duì)于其他的字段name, age, sex這些 屬性來(lái)說(shuō),它們是完全依 賴于student_id這一屬性的,所以它們對(duì)于student_id, course_id共同作為主鍵是部分 依賴的。這就不滿足第二范式的定義了,所以應(yīng)該把 grade拿出來(lái),將這一個(gè)大表拆成 兩份小表:student(student_id, name, age, sex, sdept_id, sdept_director), student_score(student_id, course_id, grade);
第三范式:在滿足第二范式的情況下去除傳遞依賴。
例如:student表(student_id, student_name, age, sex, sdept, sdept_director),很明顯每一個(gè)專業(yè)決定一個(gè)專業(yè)主任,所以sdept_director傳遞依賴于student_id,所以應(yīng)該再拆分一個(gè)表student(student_id, student_name, age, sex)和sdept(sdept_id, sdept_name, sdept_director),這樣就滿足了第三范式。
BC范式:在滿足第三范式的情況下,再滿足一下三點(diǎn):
1、所有的主屬性完全依賴于其他不包含自己的候選鍵;
2、所有的非主屬性完全依賴于每一個(gè)候選鍵;
3、沒(méi)有任何屬性完全函數(shù)依賴于任何一組非主屬性。
之前的三個(gè)范式都是對(duì)非主屬性進(jìn)行各種約束,BC范式是在他們基礎(chǔ)上,再對(duì)主屬性進(jìn)行約束,解決了主屬性之間的部分依賴的問(wèn)題,以及不存在主屬性完全依賴于非主屬性的問(wèn)題。 我們的student表 student(student_id, student_name, age, sex),主鍵是student_id,所以主屬性是student_id,很顯然前兩條都已經(jīng)滿足,因?yàn)閷W(xué)生的姓名可能重復(fù),所以student_id與student_name之間沒(méi)有函數(shù)依賴關(guān)系,所以student表滿足BC范式。
分享題目:規(guī)范化過(guò)程主要為克服數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)中的什么?
當(dāng)前路徑:http://chinadenli.net/article38/cpcisp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、網(wǎng)站導(dǎo)航、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)