數(shù)據(jù)庫設(shè)計規(guī)范化反規(guī)范化.doc_第1頁
數(shù)據(jù)庫設(shè)計規(guī)范化反規(guī)范化.doc_第2頁
數(shù)據(jù)庫設(shè)計規(guī)范化反規(guī)范化.doc_第3頁
數(shù)據(jù)庫設(shè)計規(guī)范化反規(guī)范化.doc_第4頁
數(shù)據(jù)庫設(shè)計規(guī)范化反規(guī)范化.doc_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)庫設(shè)計規(guī)范化反規(guī)范化=*作者:bingghost(只是學(xué)習(xí)筆記 部分內(nèi)容來源于網(wǎng)絡(luò))*郵箱:443530836*貼吧:Radasm吧(按Ctrl+鼠標(biāo)點擊進(jìn)入)=一.實體關(guān)系模型1.實體關(guān)系圖(Entity-relation diagram)(1).實體實質(zhì)客觀存在的事物,具有一些屬性.如人,汽車,學(xué)校等.(2).實體關(guān)系圖是表示實體及實體間關(guān)系的圖解形式,是數(shù)據(jù)庫設(shè)計的初步.常簡稱E-R圖(3).實體關(guān)系圖的表現(xiàn)形式:實體:矩形框?qū)傩?橢圓關(guān)系:菱形框2.實體圖示例3.實體-關(guān)系圖(E-R)示例4.同類實體間可能存在關(guān)系5.二個實體之間可存在多種關(guān)系二.實體之間的關(guān)系模型1.一對一的關(guān)系 大學(xué)與校長的關(guān)系2.一對多的關(guān)系 員工與部門的關(guān)系3.多對多的關(guān)系 顧客與商品的關(guān)系三.關(guān)系的實現(xiàn)關(guān)系的實現(xiàn)是用轉(zhuǎn)換規(guī)則把E-R圖轉(zhuǎn)換成表.(1)對于實體,把實體名轉(zhuǎn)換成表名,把實體中的屬性轉(zhuǎn)換成表中的字段(2)對于實體間的關(guān)系,把實體關(guān)系名轉(zhuǎn)換為關(guān)系表名,把相關(guān)實體的主鍵和關(guān)系屬性轉(zhuǎn)換成表中的字段(3)把具有相同主鍵的表合并四.轉(zhuǎn)換規(guī)則1、一對一的關(guān)系可把任一實體的主鍵放入另一實體中,成為外鍵。2. 一對多的關(guān)系 把一實體中的主鍵放入到多實體中,成為其外鍵。3、多對多的關(guān)系 把相關(guān)實體中的主鍵放入到一個新實體中,成為新實體的組合主鍵。學(xué)生信息表:學(xué)生表SnoSnameSsex001李明男002王華男003陳潔女課程表:課程表CnoCname001語文002數(shù)學(xué)003英語成績表:成績表SnoCnoScore0010028000200175001003620020026800100599003005100五.數(shù)據(jù)庫設(shè)計三大范式為了建立冗余較小、結(jié)構(gòu)合理的數(shù)據(jù)庫,設(shè)計數(shù)據(jù)庫時必須遵循一定的規(guī)則。在關(guān)系型數(shù)據(jù)庫中這種規(guī)則就稱為范式。范式是符合某一種設(shè)計要求的總結(jié)。要想設(shè)計一個結(jié)構(gòu)合理的關(guān)系型數(shù)據(jù)庫,必須滿足一定的范式。在實際開發(fā)中最為常見的設(shè)計范式有三個:1第一范式(確保每列保持原子性)第一范式是最基本的范式。數(shù)據(jù)庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構(gòu)成,包括整型、實數(shù)、字符型、邏輯型、日期型等。上表所示的用戶信息遵循了第一范式的要求,這樣在對用戶使用城市進(jìn)行分類的時候就非常方便,也提高了數(shù)據(jù)庫的性能。2第二范式(確保表中的每列都和主鍵相關(guān))在滿足第一范式的基礎(chǔ)上.第二范式需要確保數(shù)據(jù)庫表中的每一個屬性都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對聯(lián)合主鍵而言)。(表中的屬性必須是由于2個主鍵(復(fù)合,聯(lián)合)確定的)這樣就產(chǎn)生一個問題:這個表中是以訂單編號和商品編號作為聯(lián)合主鍵。這樣在該表中商品名稱、單位、商品價格等信息不與該表的主鍵相關(guān),而僅僅是與商品編號相關(guān)。所以在這里違反了第二范式的設(shè)計原則。而如果把這個訂單信息表進(jìn)行拆分,把商品信息分離到另一個表中,把訂單項目表也分離到另一個表中,就非常完美了。如下所示。這樣設(shè)計,在很大程度上減小了數(shù)據(jù)庫的冗余。如果要獲取訂單的商品信息,使用商品編號到商品信息表中查詢即可。3第三范式(確保每列都和主鍵列直接相關(guān),而不是間接相關(guān))第三范式需要確保數(shù)據(jù)表中的字段和主鍵直接對應(yīng)不依靠其他的中間字段。這樣在查詢訂單信息的時候,就可以使用客戶編號來引用客戶信息表中的記錄,也不必在訂單信息表中多次輸入客戶信息的內(nèi)容,減小了數(shù)據(jù)冗余。舉一個反例:學(xué)生表:學(xué)號(PK) 姓名 學(xué)院 學(xué)院地點(符合2NF,不符合3NF)修改:學(xué)生表:學(xué)號(PK) 姓名 學(xué)院ID(FK)學(xué)院表學(xué)院ID(PK) 學(xué)院地點六. 反規(guī)范設(shè)計是否規(guī)范化的程度越高越好?這要根據(jù)需要來決定,因為“分離”越深,產(chǎn)生的關(guān)系越多,關(guān)系過多,連接操作越頻繁,而連接操作是最費時間的,特別對以查詢?yōu)橹鞯臄?shù)據(jù)庫應(yīng)用來說,頻繁的連接會影響查詢速度。所以,關(guān)系有時故意保留成非規(guī)范化的,或者規(guī)范化以后又反規(guī)范了,這樣做通常是為了改進(jìn)性能。反規(guī)范的好處是降低連接操作的需求、降低外碼和索引的數(shù)目,還可能減少表的數(shù)目,相應(yīng)帶來的問題是可能出現(xiàn)數(shù)據(jù)的完整性問題。加快查詢速度,但會降低修改速度。因此決定做反規(guī)范時,一定要權(quán)衡利弊,仔細(xì)分析應(yīng)用的數(shù)據(jù)存取需求和實際的性能特點,好的索引和其它方法經(jīng)常能夠解決性能問題,而不必采用反規(guī)范這種方法。1.常用的反規(guī)范技術(shù)在進(jìn)行反規(guī)范操作之前,要充分考慮數(shù)據(jù)的存取需求、常用表的大小、一些特殊的計算(例如合計)、數(shù)據(jù)的物理存儲位置等。常用的反規(guī)范技術(shù)有增加冗余列、增加派生列、重新組表和分割表。(1)增加冗余列增加冗余列是指在多個表中具有相同的列,它常用來在查詢時避免連接操作。但它需要更多的磁盤空間,同時增加表維護的工作量。(2).增加派生列增加派生列指增加的列來自其它表中的數(shù)據(jù),由它們計算生成。它的作用是在查詢時減少連接操作,避免使用集函數(shù)。(3).重新組表重新組表指如果許多用戶需要查看兩個表連接出來的結(jié)果數(shù)據(jù),則把這兩個表重新組成一個表來減少連接而提高性能。例如,用戶經(jīng)常需要同時查看課程號,課程名稱,任課教師號,任課教師姓名,則可把表class(classno,classname,teacherno)和表teacher(teacherno,teachername)合并成一個表class(classno,classname,teacherno,teachername)。這樣可提高性能,但需要更多的磁盤空間,同時也損失了數(shù)據(jù)在概念上的獨立性。(4).分割表有時對表做分割可以提高性能。表分割有兩種方式:1、水平分割:根據(jù)一列或多列數(shù)據(jù)的值把數(shù)據(jù)行放到兩個獨立的表中。水平分割通常在下面的情況下使用:A 表很大,分割后可以降低在查詢時需要讀的數(shù)據(jù)和索引的頁數(shù),同時也降低了索引的層數(shù),提高查詢速度。B 表中的數(shù)據(jù)本來就有獨立性,例如表中分別記錄各個地區(qū)的數(shù)據(jù)或不同時期的數(shù)據(jù),特別是有些數(shù)據(jù)常用,而另外一些數(shù)據(jù)不常用。C 需要把數(shù)據(jù)存放到多個介質(zhì)上。 例如法規(guī)表law就可以分成兩個表activelaw和inactivelaw。activeaauthors表中的內(nèi)容是正生效的法規(guī),是經(jīng)常使用的,而inactivelaw表則使已經(jīng)作廢的法規(guī),不常被查詢。水平分割會給應(yīng)用增加復(fù)雜度,它通常在查詢時需要多個表名,查詢所有數(shù)據(jù)需要union操作。在許多數(shù)據(jù)庫應(yīng)用中,這種復(fù)雜性會超過它帶來的優(yōu)點,因為只要索引關(guān)鍵字不大,則在索引用于查詢時,表中增加兩到三倍數(shù)據(jù)量,查詢時也就增加讀一個索引層的磁盤次數(shù)。2、垂直分割:把主碼和一些列放到一個表,然后把主碼和另外的列放到另一個表中。如果一個表中某些列常用,而另外一些列不常用,則可以采用垂直分割,另外垂直分割可以使得數(shù)據(jù)行變小,一個數(shù)據(jù)頁就能存放更多的數(shù)據(jù),在查詢時就會減少I/O次數(shù)。其缺點是需要管理冗余列,查詢所有數(shù)據(jù)需要join操作。3.反規(guī)范技術(shù)需要維護數(shù)據(jù)的完整性無論使用何種反規(guī)范技術(shù),都需要一定的管理來維護數(shù)據(jù)的完整性,常用的方法是批處理維護、應(yīng)用邏輯和觸發(fā)器。批處理維護是指對復(fù)制列或派生列的修改積累一定的時間后,運行一批處理作業(yè)或存儲過程對復(fù)制或派生列進(jìn)行修改,這只能在對實時性要求不高的情況下使用。數(shù)據(jù)的完整性也可由應(yīng)用邏輯來實現(xiàn),這就要求必須在同一事務(wù)中對所有涉及的表進(jìn)行增、刪、改操作。用應(yīng)用邏輯來實現(xiàn)數(shù)據(jù)的完整性風(fēng)險較大,因為同一邏輯必須在所有的應(yīng)用中使用和維護,容易遺漏,特別是在需求變化時,不易于維護。另一種方式就是使用觸發(fā)器,對數(shù)據(jù)的任何修改立即觸發(fā)對復(fù)制列或派生列的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論