《物理數(shù)據(jù)庫設(shè)計 –引入受控冗余的考慮》由會員分享,可在線閱讀,更多相關(guān)《物理數(shù)據(jù)庫設(shè)計 –引入受控冗余的考慮(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,Chapter 15,物理數(shù)據(jù)庫設(shè)計,步驟,7,引入受控冗余的考慮,1,Chapter 15,目的,反規(guī)范化的含義,何時利用反規(guī)范化來改善系統(tǒng)性能,2,步驟,7,引入受控冗余的考慮,確定是否放松規(guī)范化規(guī)則引入受控冗余數(shù)據(jù)來改善系統(tǒng)性能。,規(guī)范化是確定哪些列屬于同一張表的技術(shù)。,實現(xiàn)規(guī)范化的結(jié)果就是產(chǎn)生最小冗余的表。,然而,規(guī)范化的數(shù)據(jù)庫設(shè)計可能不提供最
2、大的處理效率。,我們可能愿意接受規(guī)范化設(shè)計方面的一些損失而實現(xiàn)更好的性能。,3,反規(guī)范化(,Denormalization,),對基本表結(jié)構(gòu)的修改,使得新表比原始表的范式低。,將兩個表合成一個新表,該新表與原表滿足相同范式但比原始表包含更多的空值,。,4,反規(guī)范化需要考慮的因素,反規(guī)范化需要考慮下列因素,使實現(xiàn)更加復(fù)雜,會犧牲靈活性,可能加快檢索速度,但會降低更新速度,通常,如果性能達(dá)不到要求,并且表的更新率較低,查詢率較高,則反規(guī)范化就是可行的。,5,反規(guī)范化的一個例子,Branch(,branchNo,street,city,state,zipCode,mgrStaffNo,),嚴(yán)格地說,
3、該表并不滿足,3NF,。因為,zipCode,屬性決定了,city,和,state,。要規(guī)范化該表,則將其一分為二。,Branch(,branchNo,street,zipCode,mgrStaffNo,),zipCode(,zipCode,city,state,),但是很少這樣使用不完整的地址,因此我們通常使用原始的,Branch,表,盡管它只是滿足,2NF,。,6,反規(guī)范化步驟,反規(guī)范化的通常情況,以便加速進(jìn)行常用或關(guān)鍵的事務(wù),步驟,7.1,合并一對一(,1:1,)關(guān)系,步驟,7.2,復(fù)制一對多(,1:*,)關(guān)系中的非鍵列以減少連接,步驟,7.3,復(fù)制一對多(,1:*,)關(guān)系中的外鍵列以減
4、少連接,步驟,7.4,復(fù)制多對多(*,:*,)關(guān)系中的列以減少連接,步驟,7.5,引入重復(fù)組,步驟,7.6,創(chuàng)建提取表,步驟,7.7,分區(qū)表,7,步驟,7.1,合并,1:1,關(guān)系,空間的浪費(fèi)就不得不與合并表所帶來的性能的提高進(jìn)行權(quán)衡了。,8,步驟,7.2,復(fù)制,1:*,關(guān)系中的非鍵列以減少連接,SELECT,vfr,.*,v.dailyRental,FROM,VideoForRent,vfr,Video,v,WHERE,vfr.catalogNo,=,v.catalogNo,AND,branchNo,= B001,SELECT,vfr,.*,FROM,VideoForRent,vfr,WHER
5、E,branchNo,= B001,如果修改了父表中的復(fù)制數(shù)據(jù),則必須在子表中也更新它。,9,步驟,7.3,復(fù)制,1:*,關(guān)系中的外鍵列以減少連接,SELECT,ra,.*,FROM,RentalAgreement,ra,VideoForRent,vfr,WHERE,ra.videoNo,=,vfr.videoNo,AND,vfr.branchNo,= B001,SELECT *,FROM,RentalAgreement,WHERE,vfr.branchNo,= B001,10,步驟,7.4,復(fù)制,*:*,關(guān)系中的列來減少連接,SELECT,v.title,a,.*,r.*,FROM Vide
6、o,v,Role,r,Actor,a,WHERE,v.catalogNo,=,r.catalogNo,AND,r.actorNo,=,a.actorNo,SELECT a.*,r.*,FROM Role,r,Actor,a,WHERE,r.actorNo,=,a.actorNo,11,Step 7.5,引入重復(fù)組,12,步驟,7.6,創(chuàng)建提取表,報表要訪問派生數(shù)據(jù)并且基于相同的一組基本表執(zhí)行多表連接,但是,報表所基于的數(shù)據(jù)可能是靜態(tài)的,或者有時不需要當(dāng)前的數(shù)據(jù)而是歷史數(shù)據(jù)。,創(chuàng)建一張基于報表所需要的表的反規(guī)范化的提取表,并且容許用戶直接訪問提取表代替訪問基本表。,最常用的場合是在系統(tǒng)使用率較低
7、時生成提取表,例如在前一天晚上生成當(dāng)天的提取表。,13,步驟,7.7,分區(qū)表,除了將表合并在一起之外,另外一個方法就是將表分解成一些較小的并且更易于維護(hù)的片段。,Horizontal partition,水平分區(qū),:,將表中的記錄分布在幾個較小的表中。,Vertical partition,垂直分區(qū),:,將表中的列分布在一些較小的表中,.,分區(qū)在存儲和分析大數(shù)量數(shù)據(jù)的應(yīng)用中非常有用。,14,步驟,7.7,分區(qū)表,15,分區(qū)表舉例,通過水平分區(qū),使每個分公司占用一個分區(qū),以提高查詢性能。,CREATE TABLE,VideoForRent_Partition,(,videoNo,CHAR(6)
8、NOT NULL,available CHAR NOT NULL,catalogNo,CHAR(6) NOT NULL,branchNo,CHAR(4) NOT NULL,PRIMARY KEY,videoNo,FOREIGN KEY,catalogNo,REFRENCES,Video(videoNo,),FOREIGN KEY,branchNo,REFRENCES,branchNo,),PARTITION BY,HASH(branchNo,),(PARTITION b1 TABLESPACE TB01,PARTITION b2 TABLESPACE TB02,PARTITION b3 TAB
9、LESPACE TB03);,16,分區(qū)表的優(yōu)缺點(diǎn),優(yōu)點(diǎn),:,改善負(fù)載平衡:分解后的表可以放置在二級存儲的不同地方,允許并發(fā)訪問。,改善性能:并行機(jī)制。,增強(qiáng)可用性:不同存儲區(qū)域,提高了可用性。,改善可恢復(fù)性:分區(qū)越小,恢復(fù)起來越快。,安全性:不同分區(qū)的數(shù)據(jù)可以有不同的訪問機(jī)制。,缺點(diǎn),:,復(fù)雜:多個分區(qū)的查詢比較復(fù)雜。,降低性能:當(dāng)查詢用到多個分區(qū)中的數(shù)據(jù)時,降低了性能。,重復(fù):垂直分解涉及主鍵的復(fù)制。,17,如何維護(hù)數(shù)據(jù)完整性,觸發(fā)器:用于自動更新派生或復(fù)制的數(shù)據(jù)。,事務(wù):在每個應(yīng)用中構(gòu)建事務(wù)使數(shù)據(jù)在一個事務(wù)中完成。,批程序:在合適的時間運(yùn)行批程序保持反規(guī)范化數(shù)據(jù)的一致。,18,小結(jié),在步驟,7,中,考慮引入受控冗余,以改善性能。,如果性能達(dá)不到要求而且表的更新率比較低而查詢率非常高,則非規(guī)范化可能是個可行的選擇。,在如下情況下考慮反規(guī)范化,特別是對于加速常用或關(guān)鍵事務(wù):合并,1:1,關(guān)系;復(fù)制,1:*,關(guān)系中的非鍵列來減少連接;復(fù)制,1:*,關(guān)系的外鍵來減少連接,復(fù)制*,:*,關(guān)系中的列來減少連接;引入重復(fù)組;創(chuàng)建提取表;劃分非常大的表。,19,