《物理數(shù)據(jù)庫設計 –引入受控冗余的考慮》由會員分享,可在線閱讀,更多相關《物理數(shù)據(jù)庫設計 –引入受控冗余的考慮(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ù)庫設計,步驟,7,引入受控冗余的考慮,1,Chapter 15,目的,反規(guī)范化的含義,何時利用反規(guī)范化來改善系統(tǒng)性能,2,步驟,7,引入受控冗余的考慮,確定是否放松規(guī)范化規(guī)則引入受控冗余數(shù)據(jù)來改善系統(tǒng)性能。,規(guī)范化是確定哪些列屬于同一張表的技術。,實現(xiàn)規(guī)范化的結果就是產(chǎn)生最小冗余的表。,然而,規(guī)范化的數(shù)據(jù)庫設計可能不提供最
2、大的處理效率。,我們可能愿意接受規(guī)范化設計方面的一些損失而實現(xiàn)更好的性能。,3,反規(guī)范化(,Denormalization,),對基本表結構的修改,使得新表比原始表的范式低。,將兩個表合成一個新表,該新表與原表滿足相同范式但比原始表包含更多的空值,。,4,反規(guī)范化需要考慮的因素,反規(guī)范化需要考慮下列因素,使實現(xiàn)更加復雜,會犧牲靈活性,可能加快檢索速度,但會降低更新速度,通常,如果性能達不到要求,并且表的更新率較低,查詢率較高,則反規(guī)范化就是可行的。,5,反規(guī)范化的一個例子,Branch(,branchNo,street,city,state,zipCode,mgrStaffNo,),嚴格地說,
3、該表并不滿足,3NF,。因為,zipCode,屬性決定了,city,和,state,。要規(guī)范化該表,則將其一分為二。,Branch(,branchNo,street,zipCode,mgrStaffNo,),zipCode(,zipCode,city,state,),但是很少這樣使用不完整的地址,因此我們通常使用原始的,Branch,表,盡管它只是滿足,2NF,。,6,反規(guī)范化步驟,反規(guī)范化的通常情況,以便加速進行常用或關鍵的事務,步驟,7.1,合并一對一(,1:1,)關系,步驟,7.2,復制一對多(,1:*,)關系中的非鍵列以減少連接,步驟,7.3,復制一對多(,1:*,)關系中的外鍵列以減
4、少連接,步驟,7.4,復制多對多(*,:*,)關系中的列以減少連接,步驟,7.5,引入重復組,步驟,7.6,創(chuàng)建提取表,步驟,7.7,分區(qū)表,7,步驟,7.1,合并,1:1,關系,空間的浪費就不得不與合并表所帶來的性能的提高進行權衡了。,8,步驟,7.2,復制,1:*,關系中的非鍵列以減少連接,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,如果修改了父表中的復制數(shù)據(jù),則必須在子表中也更新它。,9,步驟,7.3,復制,1:*,關系中的外鍵列以減少連接,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,復制,*:*,關系中的列來減少連接,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,引入重復組,12,步驟,7.6,創(chuàng)建提取表,報表要訪問派生數(shù)據(jù)并且基于相同的一組基本表執(zhí)行多表連接,但是,報表所基于的數(shù)據(jù)可能是靜態(tài)的,或者有時不需要當前的數(shù)據(jù)而是歷史數(shù)據(jù)。,創(chuàng)建一張基于報表所需要的表的反規(guī)范化的提取表,并且容許用戶直接訪問提取表代替訪問基本表。,最常用的場合是在系統(tǒng)使用率較低
7、時生成提取表,例如在前一天晚上生成當天的提取表。,13,步驟,7.7,分區(qū)表,除了將表合并在一起之外,另外一個方法就是將表分解成一些較小的并且更易于維護的片段。,Horizontal partition,水平分區(qū),:,將表中的記錄分布在幾個較小的表中。,Vertical partition,垂直分區(qū),:,將表中的列分布在一些較小的表中,.,分區(qū)在存儲和分析大數(shù)量數(shù)據(jù)的應用中非常有用。,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)缺點,優(yōu)點,:,改善負載平衡:分解后的表可以放置在二級存儲的不同地方,允許并發(fā)訪問。,改善性能:并行機制。,增強可用性:不同存儲區(qū)域,提高了可用性。,改善可恢復性:分區(qū)越小,恢復起來越快。,安全性:不同分區(qū)的數(shù)據(jù)可以有不同的訪問機制。,缺點,:,復雜:多個分區(qū)的查詢比較復雜。,降低性能:當查詢用到多個分區(qū)中的數(shù)據(jù)時,降低了性能。,重復:垂直分解涉及主鍵的復制。,17,如何維護數(shù)據(jù)完整性,觸發(fā)器:用于自動更新派生或復制的數(shù)據(jù)。,事務:在每個應用中構建事務使數(shù)據(jù)在一個事務中完成。,批程序:在合適的時間運行批程序保持反規(guī)范化數(shù)據(jù)的一致。,18,小結,在步驟,7,中,考慮引入受控冗余,以改善性能。,如果性能達不到要求而且表的更新率比較低而查詢率非常高,則非規(guī)范化可能是個可行的選擇。,在如下情況下考慮反規(guī)范化,特別是對于加速常用或關鍵事務:合并,1:1,關系;復制,1:*,關系中的非鍵列來減少連接;復制,1:*,關系的外鍵來減少連接,復制*,:*,關系中的列來減少連接;引入重復組;創(chuàng)建提取表;劃分非常大的表。,19,