浅析数据库设计三范式
? ?在學(xué)習(xí)數(shù)據(jù)設(shè)計的時候,N種專業(yè)術(shù)語,看的頭疼。但又不能不學(xué),所以只好把它們整理整理出來,好讓自己對它們有一個更深的理解。特別是對三范式(Normal Formal)的理解。
? ? 三范式指的是第一(1NF)、第二(2NF)和第三范式(3NF),其作用:解決數(shù)據(jù)冗余,為數(shù)據(jù)有效性檢查,提高存儲效率考慮。??
? ? ?在了解三范式之前,我們先來弄清楚這幾個概念(鍵、函數(shù)依賴以及其類型):?
一、關(guān)鍵碼(鍵):由一個或多個屬性組成,在實際使用中,有下列幾種:
- 超鍵:在關(guān)系中能唯一標識元組的屬性集稱為關(guān)系模式的超鍵。注意:(屬性集,說明可以是多個)
- 候選鍵:不含有多余屬性的超鍵
- 主鍵:用戶選作記錄標識的候選鍵
?這三個的關(guān)系,用數(shù)學(xué)關(guān)系可以做如下表示:
舉例:一張學(xué)生信息表
問:超鍵是?
? ?答曰:學(xué)號唯一,是超鍵;姓名唯一,是超鍵;(學(xué)號,年齡)唯一,是超鍵;(學(xué)號、姓名、年齡)唯一,也是超鍵。
——從這里我們就可以看出,超鍵的組合是唯一的,但不可能是最小唯一的。
問:候選鍵是?
? ??答曰:學(xué)號,唯一且沒有多余的屬性;姓名,唯一且沒有多余的屬性。
問:主鍵是?
? ? ?答曰:既可以選擇學(xué)號,也可以選擇姓名(前提是規(guī)定沒有重名的)作為主鍵,所以主鍵是選中的一個候選鍵。
?
? ? 數(shù)據(jù)庫設(shè)計的目的主要是為了解決數(shù)據(jù)冗余,對數(shù)據(jù)進行有效的管理。那么引起數(shù)據(jù)冗余的主要原因是什么呢?答曰:數(shù)據(jù)依賴。什么是數(shù)據(jù)依賴?數(shù)據(jù)依賴是指在一個關(guān)系模式之間的依賴關(guān)系。其最典型的例子就是函數(shù)依賴。
二、函數(shù)依賴:若對于R(U)的任意兩個可能的關(guān)系r1、r2,若r1[x]=r2[x],則r1[y]=r2[y],或者若r1[x]不等于r2[x],則r1[y]不等于r2[y],稱X決定Y,或者Y依賴X。
? ?通俗的說:就是我們知道一個之后可以推導(dǎo)出另外一個。
?
我們都知道,在數(shù)據(jù)庫中,屬性之間都是會發(fā)生聯(lián)系。例如,每個學(xué)生只有一個姓名,每門課程只有一個任課教師,每個學(xué)生學(xué)一門課程只能有一個總評成績。等等,這類聯(lián)系,我們都可以將其稱為函數(shù)依賴(FD),所以沒必要把這概念弄的那么玄乎。
函數(shù)依賴包括以下三種類型:
? ? ?1.平凡與非平凡依賴:?
a.平凡依賴
b.非平凡依賴
? ? ?2.局部依賴與完全依賴:?
a局部依賴
b.完全依賴
?
圖上中:對于W—>A ,如果在X存在與W中,有X—>A成立,那么稱W—>A是局部依賴,否則稱W—>A是完全依賴。
? ? ? 3.傳遞依賴:
如圖:?X—>Y,Y—>A,且Y/>X和A不屬于Y,那么稱X—>A是傳遞依賴。
最后、三范式的理解:?
?第一范式:要求每個關(guān)系的屬性為原子性,不可再分。(能分就分,分到不能再分為止!)
例如:R(學(xué)號,姓名,性別)
?第二范式:主要是消除局部依賴
? ? ? ? ? ??違反第二范式的局部依賴示意圖:
例如:有關(guān)系模式為:R(學(xué)號、課程編號、成績、教師號、教師職稱)等。
R上有兩個FD:(學(xué)號,課程號)—>(教師號,教師職稱)和?課程編號—>(教師工號,教師職稱)。由此,可得出前面一個是局部依賴。所以R關(guān)系模式不是第二范式模式。此時R的關(guān)系就會出現(xiàn)冗余和異常現(xiàn)象。例如,如果一門課程有10個學(xué)生選修,那么在關(guān)系中就存有10條記錄,教師工號和職稱也會重復(fù)10次。??
解決方案:將R分解成R1(課程編號,教師號,教師職稱)和R2(學(xué)號,課程號,成績)。此時,R1和R2都是第二范式模式。
?
?第三范式:主要是消除傳遞依賴??
?
(1)
(2)
(3)
違反3NF的三種傳遞依賴情示意圖
例如:R(課程編號,教師工號,教師職稱)關(guān)系模式中,如果課程編號—>教師工號,教師工號—>教師職稱,那么課程編號—>教師職稱就是一個傳遞依賴。所以不是第三范式。此時R就會出現(xiàn)冗余和異常操作。例如,一個教師開設(shè)五門課程,那么關(guān)系中就會出現(xiàn)五條記錄,教師職稱就會重復(fù)五次。
?
解決方案:把R分解為R1(教師工號,教師職稱)和R2(課程編號,教師工號)??
我們在學(xué)習(xí)的過程當(dāng)中,第一次可能只是懵懵懂懂,這很正常。所以不要覺得有什么?放寬心態(tài),踏實的往下學(xué)就可以了。隨著再往后的學(xué)習(xí)中,我們會對前面的學(xué)習(xí)進行一個不斷反復(fù)的過程,但那時候我們可以在前面的基礎(chǔ)上,對他們進行深入的研究。?
總結(jié)
以上是生活随笔為你收集整理的浅析数据库设计三范式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于hadoop架构的企业数字化转型,阿
- 下一篇: SQL Server2000 未公开的存