《物理數(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)生
2、最小冗余的表。,,,然而,規(guī)范化的數(shù)據(jù)庫設計可能不提供最大的處理效率。,,我們可能愿意接受規(guī)范化設計方面的一些損失而實現(xiàn)更好的性能。,,3,,反規(guī)范化(,Denormalization,,),對基本表結構的修改,使得新表比原始表的范式低。,,,將兩個表合成一個新表,該新表與原表滿足相同范式但比原始表包含更多的空值,。,4,,反規(guī)范化需要考慮的因素,反規(guī)范化需要考慮下列因素,,使實現(xiàn)更加復雜,,會犧牲靈活性,,可能加快檢索速度,但會降低更新速度,,通常,如果性能達不到要求,并且表的更新率較低,查詢率較高,則反規(guī)范化就是可行的。,,5,,反規(guī)范化的一個例子,Branch(,branchNo,,st
3、reet,city,state,zipCode,mgrStaffNo,),,嚴格地說,該表并不滿足,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,復制
4、一對多(,1:*,)關系中的非鍵列以減少連接,,步驟,7.3,復制一對多(,1:*,)關系中的外鍵列以減少連接,,步驟,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.catalog
5、No,,AND,branchNo,= ‘B001’,SELECT,vfr,.*,,FROM,VideoForRent,,vfr,,WHERE,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,,,WH
6、ERE,vfr.branchNo,= ‘B001’,10,,步驟,7.4,復制,*:*,關系中的列來減少連接,SELECT,v.title,a,.*,r.*,,FROM Video,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í)行多表連接,
7、但是,報表所基于的數(shù)據(jù)可能是靜態(tài)的,或者有時不需要當前的數(shù)據(jù)而是歷史數(shù)據(jù)。,,創(chuàng)建一張基于報表所需要的表的反規(guī)范化的提取表,并且容許用戶直接訪問提取表代替訪問基本表。,,最常用的場合是在系統(tǒng)使用率較低時生成提取表,例如在前一天晚上生成當天的提取表。,13,,步驟,7.7,分區(qū)表,,除了將表合并在一起之外,另外一個方法就是將表分解成一些較小的并且更易于維護的片段。,,Horizontal partition,,水平分區(qū),:,將表中的記錄分布在幾個較小的表中。,,Vertical partition,垂直分區(qū),:,將表中的列分布在一些較小的表中,.,,分區(qū)在存儲和分析大數(shù)量數(shù)據(jù)的應用中非常有用。,
8、14,,步驟,7.7,,分區(qū)表,,15,,分區(qū)表舉例,,通過水平分區(qū),使每個分公司占用一個分區(qū),以提高查詢性能。,CREATE TABLE,VideoForRent_Partition,(,,,videoNo,CHAR(6) 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,
9、REFRENCES,branchNo,)),,PARTITION BY,HASH(branchNo,),,(PARTITION b1 TABLESPACE TB01,,,PARTITION b2 TABLESPACE TB02,,,PARTITION b3 TABLESPACE TB03);,16,,分區(qū)表的優(yōu)缺點,,優(yōu)點,:,,改善負載平衡:分解后的表可以放置在二級存儲的不同地方,允許并發(fā)訪問。,,改善性能:并行機制。,,增強可用性:不同存儲區(qū)域,提高了可用性。,,改善可恢復性:分區(qū)越小,恢復起來越快。,,安全性:不同分區(qū)的數(shù)據(jù)可以有不同的訪問機制。,,缺點,:,,復雜:多個分區(qū)的查詢比較復
10、雜。,,降低性能:當查詢用到多個分區(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,,