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