• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      淺談數(shù)據(jù)庫設(shè)計中范式的應(yīng)用

      2011-10-31 07:51:36鄒瓊
      關(guān)鍵詞:主鍵字段姓名

      鄒瓊

      (湖北經(jīng)濟學院 信息管理學院,湖北 武漢 430205)

      淺談數(shù)據(jù)庫設(shè)計中范式的應(yīng)用

      鄒瓊

      (湖北經(jīng)濟學院 信息管理學院,湖北 武漢 430205)

      非計算機專業(yè)的數(shù)據(jù)庫理論的教學是個難點,文章針對“范式”概念的理解結(jié)合筆者在教學實踐中的實驗案例,對數(shù)據(jù)庫設(shè)計中的數(shù)據(jù)模式的規(guī)范化進行了詳細闡述。并對常用的三大范式和反范式的一些應(yīng)用進行了探討。

      數(shù)據(jù)庫設(shè)計;范式;關(guān)系規(guī)范化

      隨著信息化時代的到來,數(shù)據(jù)庫技術(shù)被廣泛地應(yīng)用于經(jīng)濟建設(shè)、科學研究、組織管理的各個領(lǐng)域和我們生活的各個方面,學習和掌握一定的數(shù)據(jù)庫知識變得尤為重要,為此許多高等院校都為非計算機專業(yè)的學生開設(shè)了《數(shù)據(jù)庫原理》公共課程。但是許多學生對數(shù)據(jù)庫的基本理論知識的掌握存在困難,特別是數(shù)據(jù)庫設(shè)計中的范式的定義與作用,普遍覺得難以理解。下面就針對這個知識點結(jié)合筆者多年的教學實踐中的一些教學案例來進行說明。

      一、范式概述

      在整個數(shù)據(jù)庫的開發(fā)過程中,數(shù)據(jù)庫的設(shè)計的好壞是一個數(shù)據(jù)庫成敗與否的關(guān)鍵;而對于占主流地位的關(guān)系數(shù)據(jù)庫的設(shè)計而言,如何構(gòu)造一個適合該系統(tǒng)的數(shù)據(jù)模式,如何確定每個關(guān)系模式或者直接說確定每張表的屬性字段等就直接影響到未來該系統(tǒng)的運行效率。這里我們就需要一個數(shù)據(jù)庫設(shè)計的有力工具——規(guī)范化理論。關(guān)系數(shù)據(jù)庫規(guī)范化理論是E. F.Godd在1971年提出的,它按照屬性間的不同依賴程度分為第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式、第四范式(4NF)和第五范式(5NF)等。這些范式其實就是一些確定關(guān)系模式的規(guī)則,而且這些規(guī)則是按層次遞進分等級的,每一級都是在下一級的基礎(chǔ)上制定的更嚴格的規(guī)則,即滿足最低要求的范式是第一范式(1NF),在第一范式的基礎(chǔ)上進一步滿足更多要求的是第二范式(2NF),以此類推。實際上在一般的系統(tǒng)設(shè)計中,通常只需要規(guī)范到3NF的層次就足夠了。滿足3NF規(guī)則的數(shù)據(jù)庫結(jié)構(gòu)明晰的,可以避免發(fā)生插入、刪除和更新操作異常,最大限度降低數(shù)據(jù)庫的冗余度,提高了數(shù)據(jù)庫的通用性和安全性。

      二、范式的理解與應(yīng)用

      (一)第一范式(1NF)

      第一范式是關(guān)系數(shù)據(jù)庫中的關(guān)系要滿足的最低要求,它要求每一個關(guān)系或表中的每一個字段分量都是不可再分的數(shù)據(jù)項,簡而言之,第一范式就是無重復的列。我們以常見的教學管理系統(tǒng)數(shù)據(jù)庫中的信息為例,以下表1是一張記錄學生基本信息以及選課情況的表。這是我們手工制表中經(jīng)常出現(xiàn)的形式,但是很明顯表中的選修課程字段存在大量重復的字段信息,它不滿足第一范式的要求,列中出現(xiàn)子列的形式根本不屬于關(guān)系模型,是不可能導入到任意一個關(guān)系型的數(shù)據(jù)庫管理系統(tǒng)DBMS中的。所以我們應(yīng)該對它進行規(guī)范和細分。

      我們可以通過把重復的字段放到一個獨立的表中,把這些表通過一對多關(guān)聯(lián)聯(lián)系起來的這種方式來消除表中的重復字段。這里我們可以將選修課程字段從學生表中拿出,單獨放置到選課表中,而選課表包含學號,課程編號和課程名稱字段。這樣每一條記錄就能表達一個學生所選的一門課程,同一個學生所選的不同課程就會產(chǎn)生另一條學號相同,課程名稱不同的記錄。而且這張表通過學號字段就能與原來的學生表關(guān)聯(lián)起來。這樣消除了重復的選修課程字段后表就屬于1NF。

      ?

      (二)第二范式(2NF)

      第一范式是關(guān)系數(shù)據(jù)庫中的表要滿足的最低要求,而僅僅滿足這個最低要求的表極有可能出現(xiàn)一些異常,我們還是來看這樣一張記錄選修課程情況的表,表中包含字段有:學號、姓名、課程編號、課程名稱、學分、成績??雌饋磉@張表中的數(shù)據(jù)十分完備,而且表中沒有重復字段,已經(jīng)是1NF了??墒沁M一步分析我們卻能發(fā)現(xiàn)其中問題多多:每當有一位同學選修了一門新的課程時,該同學的姓名就不得不隨著新記錄的插入而被重復存儲一次,學生們選修的課程越多意味著姓名重復越多。同時課程名稱和學分字段也是如此,一門課程被選修的次數(shù)越多,意味著該課程的課程名稱與學分字段也必須得重復存儲越多,這就是典型的數(shù)據(jù)冗余。重復的冗余數(shù)據(jù)進而會引發(fā)數(shù)據(jù)的更新異常。因為一旦需要修改某個姓名或課程名稱、學分等所涉及到的修改就不止一條記錄,重復的越多意味著出錯的可能性越大。而且由于課程名稱和學分字段僅存于這張表中,若有新開的課程要記錄就會因為還沒有選修該課程的學生而無法存入該表,這就帶來了插入異常。同樣的道理,如果出于某些原因如轉(zhuǎn)學等將某個學生的選課記錄刪除,那么如果只有該生選修了某門課程的話,這門課程的信息也將隨著該記錄的刪除而徹底丟失,這也就是發(fā)生了刪除異常的情況。

      這些異常情況的發(fā)生實際上都是因為表中的字段存在部分依賴的情況。所謂部分依賴就是指表中的非主鍵字段,并不是完全依賴于主鍵而確定,而僅僅是由主鍵的一部分來確定。我們知道主鍵是能夠確定每一條記錄的標識字段,也就是一個主鍵值對應(yīng)一條記錄。對于單一字段的主鍵,是不可能出現(xiàn)部分依賴的情況的,而對于多字段構(gòu)成的聯(lián)合主鍵則不然。如果表中某個字段僅由聯(lián)合主鍵中的某一個字段就能確定的話,我們就稱之為發(fā)生了部分依賴。在這張選修課程記錄表中,很明顯主鍵是由學號和課程編號兩個字段聯(lián)合擔當,也就是說每一條記錄的學號與課程編號的組合都是互不相同的唯一的。但是其中姓名字段僅只依賴于學號就可以確定;課程名稱和學分字段也是非主鍵字段,但它們也僅僅只依賴于主鍵的一部分——課程編號字段就能確定。

      正是由于這些部分依賴的存在引發(fā)了各種異常情況,所以我們必須通過進一步規(guī)范化的手段消除這些部分依賴。我們可以通過分解原表,使得每一張表都成為2NF。將姓名字段歸并到一張學生表中,與原表靠學號字段關(guān)聯(lián);將課程名稱和學分字段也單獨成立一張課程表依靠課程編號字段關(guān)聯(lián),分解后的3張表中的字段如下:學生表(學號、姓名、性別、出生日期等);課程表(課程編號、課程名稱、學分);選課表(學號、課程編號、成績)。當我們消除了表中的部分依賴后,我們就可以說我們的表已經(jīng)是2NF了。因此所謂第二范式就是要消除表中的部分依賴,同時我們也就清楚了如果表中的主鍵是單一字段的話那么就一定是2NF,因為只有聯(lián)合主鍵才可能出現(xiàn)違反2NF的部分依賴。

      (三)第三范式(3NF)

      第三范式是在第二范式的基礎(chǔ)上加上了更嚴格的限制條件:表中非主鍵字段不能傳遞依賴與主鍵。我們來看這樣一張記錄學生基本信息的表,表中字段有:學號,姓名,性別,出生日期、專業(yè)、所屬院系。我們可以很直觀的判斷出這是一個2NF,因為表的主鍵是單一字段學號,表中其他的非主鍵字段如姓名、出生日期、專業(yè)、院系都完全依賴于學號,不可能出現(xiàn)部分依賴??墒窃摫砣杂忻黠@的問題,那就是學號能夠唯一確定專業(yè),可是專業(yè)也能夠唯一確定院系,也就是說出現(xiàn)了傳遞依賴的情況。當存儲學生信息時,同一個專業(yè)的學生所屬院系將會被重復存儲,這便帶來了數(shù)據(jù)冗余。所以表7沒有達第三范式的要求,不是3NF。

      為了使該表成為3NF,我們同樣要對表進行規(guī)范化的重新設(shè)計,我們將專業(yè)與院系的字段從學生表中移除,使其單獨成為一張院系表,并且通過專業(yè)編號進行關(guān)聯(lián),這樣的兩張表消除了傳遞依賴關(guān)系,就都是第三范式了。

      經(jīng)過3個范式的層層規(guī)范,現(xiàn)在的數(shù)據(jù)模式已經(jīng)得到了極大程度的優(yōu)化,通過這幾張表之間適當?shù)倪B接查詢,我們既可以得到所需的數(shù)據(jù),同時又避免了數(shù)據(jù)冗余和各種異常。

      三、反范式的應(yīng)用

      規(guī)范化的優(yōu)點是明顯的,它避免了大量的數(shù)據(jù)冗余,節(jié)省了存儲空間,保持了數(shù)據(jù)的一致性。當一個庫里的數(shù)據(jù)經(jīng)常發(fā)生變化時,達到3NF的庫可以使用戶不必在超過兩個以上的地方更改同一個值。那么是不是只要把所有的表都規(guī)范為3NF后,數(shù)據(jù)庫的設(shè)計就是最優(yōu)的呢?這可不一定。范式越高意味著表的劃分更細,一個數(shù)據(jù)庫中需要的表也就越多,用戶不得不將原本相關(guān)聯(lián)的數(shù)據(jù)分攤到多個表中。當用戶同時需要這些數(shù)據(jù)時只能采用連接表的形式將數(shù)據(jù)重新合并在一起。同時把多個表聯(lián)接在一起的花費是巨大的,尤其是當需要連接的兩張或者多張表數(shù)據(jù)非常龐大的時候,表連接操作幾乎是一個噩夢,這嚴重地降低了系統(tǒng)運行性能。

      所以有時為了提高數(shù)據(jù)庫的性能,需要適當犧牲規(guī)范化的要求,采取所謂反范式的設(shè)計,即不完全按照范式的理論來設(shè)計數(shù)據(jù)表結(jié)構(gòu)。比如在上面的數(shù)據(jù)庫中學生的姓名是很少變化的,而選課表中由于保存的數(shù)據(jù)非常多,而且最終提取學生成績時常常是需要姓名信息的,那么為了避免數(shù)據(jù)庫系統(tǒng)實際運行時為獲取姓名頻繁地聯(lián)接學生表,我們就干脆違反2NF將姓名字段重復的存儲在選課表中。還有一種情況就是當表中數(shù)據(jù)量很大,而數(shù)據(jù)的緊要程度又不完全相同的時候,我們也可以違反范式的無重復原則,把一張完整的表分成多張子表來分表存儲。比如我們可以用水平分割表的方法將表中的歷史陳舊數(shù)據(jù)分割到另一張表中進行靜態(tài)存儲,這樣可以加快表的查找速度。但同時反范式也會引入相應(yīng)的更新刪除等額外操作和程序設(shè)計的復雜性,因此在實際應(yīng)用中應(yīng)按實際需求適當使用。

      四、結(jié)語

      由此可見范式是改善關(guān)系模式的一種方法,可衡量一個數(shù)據(jù)庫中表設(shè)計的合理與否并不僅僅只依賴于范式,在實際應(yīng)用中,我們應(yīng)該靈活運用三大范式而不拘泥于三大范式,在一定制約條件下,尋求能較好地滿足用戶需求的關(guān)系模式且性能最優(yōu)的數(shù)據(jù)庫。

      [1]薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論(第3版)[M].北京:高等教育出版社,2000,(2).

      [2]佘學兵,饒?zhí)K敏.關(guān)系數(shù)據(jù)庫中關(guān)系模式的規(guī)范化[J].科技廣場,2008,(10).

      [3]徐興雷,汪嬋嬋.反范式在海量數(shù)據(jù)庫設(shè)計中的應(yīng)用[J].科技傳播,2011,(5).

      [4]褚洪波.關(guān)系數(shù)據(jù)庫設(shè)計范式應(yīng)用實例剖析[J].雞西大學學報,2008,(1).

      [5]朱海峰.關(guān)系規(guī)范化理論在數(shù)據(jù)庫設(shè)計中的應(yīng)用[J].中國科技信息,2006,(13).

      猜你喜歡
      主鍵字段姓名
      基于Go 實現(xiàn)的分布式主鍵系統(tǒng)研究
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      梁潮印箋·姓名章戢孴
      基于外鍵的E-R圖繪制方法研究
      姓名的『姓』字為什么是『女』旁?
      CNMARC304字段和314字段責任附注方式解析
      無正題名文獻著錄方法評述
      關(guān)于CNMARC的3--字段改革的必要性與可行性研究
      找朋友
      海外英語(2013年1期)2013-08-27 09:36:04
      數(shù)據(jù)庫主鍵的設(shè)計方法探討
      和政县| 福州市| 永春县| 资兴市| 旬阳县| 东光县| 贵溪市| 改则县| 蛟河市| 醴陵市| 光泽县| 达日县| 阜新市| 永吉县| 泰宁县| 石棉县| 西华县| 调兵山市| 获嘉县| 隆德县| 承德市| 河北区| 上饶市| 瑞金市| 循化| 蒙自县| 九龙县| 德阳市| 正阳县| 汤原县| 澄迈县| 海晏县| 修武县| 隆昌县| 吕梁市| 江安县| 石屏县| 乌拉特中旗| 文安县| 寻甸| 朔州市|