第一學(xué)期數(shù)據(jù)庫(kù)筆記_第1頁(yè)
第一學(xué)期數(shù)據(jù)庫(kù)筆記_第2頁(yè)
第一學(xué)期數(shù)據(jù)庫(kù)筆記_第3頁(yè)
第一學(xué)期數(shù)據(jù)庫(kù)筆記_第4頁(yè)
第一學(xué)期數(shù)據(jù)庫(kù)筆記_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、(第一課)數(shù)據(jù)庫(kù)的存放格式是堆文件從層次型數(shù)據(jù)庫(kù)轉(zhuǎn)變?yōu)殛P(guān)系型數(shù)據(jù)庫(kù),基于資源管理器的樹(shù)狀結(jié)構(gòu)的組織沒(méi)辦法科學(xué)化。基于層次結(jié)構(gòu)的組織方式不能抽象成科學(xué)化的方法,而關(guān)系型可以使得數(shù)據(jù)庫(kù)的組織簡(jiǎn) 明而合理。將樹(shù)狀結(jié)構(gòu)放入關(guān)系型數(shù)據(jù)庫(kù)中在大數(shù)據(jù)量的情況下如何提高性能:表設(shè)計(jì)、模式設(shè)計(jì),SQL 優(yōu)化等方法。環(huán)境為基于硬盤(pán)上的關(guān)系數(shù)據(jù)庫(kù)(SIP 是將數(shù)據(jù)庫(kù)放入內(nèi)存中,提高數(shù)據(jù)庫(kù)數(shù)據(jù)分析的效率。在之后十年中,大數(shù)據(jù)量的分析都會(huì)放入 memory 中進(jìn)行)1.2.3.數(shù)據(jù)庫(kù)之間的比較,比如 Oracle/SQL Server/DB2,數(shù)據(jù)庫(kù)的連接、組織形式是4.完全不同的。要提高數(shù)據(jù)庫(kù)的性能最本質(zhì)的是在某一個(gè)

2、數(shù)據(jù)庫(kù)上提高性能在基于 web 的應(yīng)用中大量地使用非關(guān)系型數(shù)據(jù)庫(kù),放寬對(duì)一致性的要求而提高吞吐量。因?yàn)橄到y(tǒng)有并發(fā)的限制,所以單一請(qǐng)求的性能作為系統(tǒng)的性能指標(biāo)是不可行的,因此引5.入吞吐量的概念。計(jì)算機(jī)系統(tǒng)中,最大的瓶頸是總線級(jí)的傳輸效率,但是在中瓶頸可能會(huì)在任何位置。一致性的要求會(huì)產(chǎn)生大量的回滾操作,從而降低吞吐量。NoSQL 認(rèn)為臟寫(xiě)、不一致性都是可以接受的,只要在一段時(shí)間內(nèi)保證數(shù)據(jù)庫(kù)的一致性即可(關(guān)系型數(shù)據(jù)庫(kù)要求實(shí)時(shí)保證數(shù)據(jù)庫(kù)的一致性)。見(jiàn)PDF、等都是使用 NoSQL 實(shí)現(xiàn)的6.7.關(guān)系代數(shù):同樣的代數(shù)表達(dá)式,所有的操作都是關(guān)系和操作符之間的操作,改變代數(shù)的形式而不改變最終的結(jié)果。每一個(gè)

3、表達(dá)式都是一個(gè) SQL 想要得到的結(jié)果集的表達(dá)式, where 是選擇操作,select 是投影操作。表達(dá)式可以轉(zhuǎn)換成多種具有相同結(jié)果的不同表達(dá)式,每一個(gè)表達(dá)式都被稱為完成某一個(gè)結(jié)果的某一條路徑,從中選出一條最省的路徑(運(yùn)算的時(shí)間、中間結(jié)果的空間),由查詢優(yōu)化器根據(jù)關(guān)系代數(shù)來(lái)尋找最快路徑計(jì)算機(jī)對(duì)于表達(dá)式的變換是有約束的,所以可以找到一個(gè)有限的變換集,尋找一個(gè)性能最好的表達(dá)式從而形成一個(gè)查詢。但是計(jì)算查詢優(yōu)化的耗時(shí)不能過(guò)長(zhǎng)8.完整性約束:組件約束,約束9.10.視圖:是一個(gè) SQL 語(yǔ)句,當(dāng)使用到 SQL 語(yǔ)句進(jìn)行查詢的時(shí)候才生成這個(gè)視圖,在用的時(shí)候才會(huì)被執(zhí)行。視圖用在:a)權(quán)限:當(dāng)希望基本表不

4、給別人,所以使用視圖來(lái)給別人,此時(shí)視圖可能引用到多而形成一個(gè)可以被其他應(yīng)用所看到和使用的視圖,從而保護(hù)基本表不被別人看到。與接口類似b)重構(gòu):用在數(shù)據(jù)庫(kù)重構(gòu)中。完成了數(shù)據(jù)庫(kù)重構(gòu)中,而將原來(lái)的表做成完全一樣的視圖,此時(shí)的所有重構(gòu)都不會(huì)影響到外部的使用(外部應(yīng)用使用視圖)。如果視圖到大于 4,此時(shí)應(yīng)當(dāng)考慮到性能,但是應(yīng)用不會(huì)看到視圖的情況,所以使用視圖可能會(huì)掩蓋一些現(xiàn)象事務(wù)處理:需要有時(shí)間戳的概念(為了避免臟讀),出現(xiàn)臟讀需要回滾,但是 Oracle 不回滾而 DB2 和 SQL Server 都會(huì)回滾。Oracle 稱其為一致性讀。NULL 值就是不知道它是什么值的一個(gè)值,但是 SQL Serv

5、er 認(rèn)為空值是一個(gè)值。這些問(wèn)題會(huì)導(dǎo)致數(shù)據(jù)庫(kù)移植變得十分復(fù)雜事情:數(shù)據(jù)庫(kù)遷移;數(shù)據(jù)庫(kù)重構(gòu)11.12.13.SQL:SQL 的復(fù)雜度取決于 from 后面包含的表數(shù)量(積的基數(shù))。沒(méi)有任何廠商支持完整的 SQL99 標(biāo)準(zhǔn),而是只支持最基本的部分(query table/ query view/ select/insert/ update/ delete)。每一個(gè)數(shù)據(jù)庫(kù)的過(guò)程和觸發(fā)器都不一樣范式(使用范式來(lái)降低數(shù)據(jù)庫(kù)設(shè)計(jì)產(chǎn)生的冗余,有冗余則導(dǎo)致數(shù)據(jù)庫(kù)會(huì)帶來(lái)的14.操作。有時(shí)可能會(huì)打破范式形成一定的冗余,為了提高數(shù)據(jù)庫(kù)的性能,逆范式和反范式只有幾種方式)a)1 范式(字段都是原子型單值,只被當(dāng)成一個(gè)

6、值來(lái)使用,這個(gè)值不做拆分進(jìn)行驗(yàn)證)b)3 范式(沒(méi)有函數(shù)依賴,、生日三個(gè)字段都存在的話,則不滿足第三范式,因?yàn)檫@些字段之間有函數(shù)依賴)(第二課)任何 DBMS 都可以支持三千個(gè)并發(fā)連接,超過(guò)三千個(gè)連接則需要使用其他方式來(lái)改善并發(fā)的性能。而理論上應(yīng)用的并發(fā)數(shù)量無(wú)窮大并發(fā)修改針對(duì)的是數(shù)據(jù)庫(kù)上的某一個(gè)獨(dú)立資源。三千個(gè)并發(fā)連接可以并行使用同一個(gè)數(shù)據(jù)庫(kù),但是不能同時(shí)修改其中的一個(gè)資源,即對(duì)資源的修改是串行的(為了保證數(shù)據(jù)庫(kù)1.2.的一致性)。這個(gè)資源稱為原子資源,page/block 是數(shù)據(jù)的最小。DBMS 從硬盤(pán)中數(shù)據(jù)不是按的,而是按塊(完整的、固定大小的數(shù)據(jù)塊,當(dāng)中包含多條),而后修改其中一條Ora

7、cle 允許臟讀,而 NoSQL 則不考慮數(shù)據(jù)的一致性性能在數(shù)據(jù)庫(kù)中非常重要。性能可度量,它的可度量的性能指標(biāo)是吞吐量。性能在設(shè)計(jì)3.4.之前需要被測(cè)試(SQL 的寫(xiě)法、索引、文件方式、表結(jié)構(gòu)的設(shè)計(jì)都可以影響數(shù)據(jù)庫(kù)的性能,其中表結(jié)構(gòu)的設(shè)計(jì)涉及到范式、反范式、逆范式)。數(shù)據(jù)庫(kù)的設(shè)計(jì)結(jié)果中,邏輯設(shè)計(jì)是表結(jié)構(gòu),物理設(shè)計(jì)是索引和物理組織形式缺省的索引結(jié)構(gòu)為 B 樹(shù)索引,而 oracle 中的索引結(jié)構(gòu)為位圖索引。位圖索引對(duì)于低頻字段(可取值的范圍?。┛梢源蠓岣叽嫒⌒剩?dāng)位圖索引的索引鍵進(jìn)行切換修改的時(shí)候(N-Y),切換過(guò)程中與 N 相關(guān)的字段都會(huì)被鎖住每一個(gè) SQL 的查詢都有很多查詢路徑,但是不能

8、遍歷所有的路徑,所以必須要設(shè)置一個(gè) timeout 時(shí)間段5.6.DBA 的職責(zé):系統(tǒng)數(shù)據(jù)備份,系統(tǒng)數(shù)據(jù)恢復(fù)(恢復(fù)備份的數(shù)據(jù))。開(kāi)發(fā)則需要做配7.置工作,比如表設(shè)計(jì)、觸發(fā)器、視圖、索引設(shè)計(jì)、緩沖區(qū)大小設(shè)計(jì)等。普遍認(rèn)為,索引以下的更底層的任務(wù)由 DBA 完成對(duì)于樹(shù)結(jié)構(gòu),oracle 中使用 with 關(guān)鍵字實(shí)現(xiàn)遞歸,或者使用 connect by start with 來(lái)實(shí)現(xiàn)自頂向下或者自底向上的查詢二維表就是關(guān)系,關(guān)系操作是表和表之間的操作。關(guān)系不包含重復(fù)的數(shù)據(jù),但是 DBMS8.9.中并未這樣實(shí)現(xiàn);關(guān)系的之間沒(méi)有順序,如果數(shù)據(jù)之間有次序要求,則不能被稱為一張關(guān)系表,而的順序往往會(huì)影響查詢的效

9、率數(shù)據(jù)庫(kù)中不存在 Yes/No 或者True/False 這樣的字段業(yè)務(wù)的約束可以放在程序中檢查,也可以放在數(shù)據(jù)庫(kù)中a)比如:使用check 關(guān)鍵字定義數(shù)據(jù)的取值范圍,對(duì)字段的有效性進(jìn)行檢查;而操作可能包含多條數(shù)據(jù)庫(kù)操作,比如庫(kù)存減一、配送單加一,可以把它們作為一個(gè)10.11.業(yè)務(wù)邏輯“”,也可以放在程序中操作。b)如果數(shù)據(jù)庫(kù)是一個(gè)中心級(jí)數(shù)據(jù)庫(kù),有多個(gè)應(yīng)用對(duì)數(shù)據(jù)庫(kù),將業(yè)務(wù)邏輯放在數(shù)據(jù)庫(kù)中可以使得該業(yè)務(wù)邏輯被多個(gè)應(yīng)用共享,業(yè)務(wù)邏輯發(fā)生變化時(shí)只需要修改一個(gè)業(yè)務(wù)邏輯;而某一個(gè)字段的取值范圍也應(yīng)當(dāng)放入數(shù)據(jù)庫(kù)中限制12.當(dāng)有多值字段時(shí)(比如一個(gè)產(chǎn)品有多個(gè)歷史價(jià)格),則滿足范式的做法是再使用一個(gè)新的數(shù)據(jù)表

10、,當(dāng)中產(chǎn)品 ID 和產(chǎn)品價(jià)格。這樣做的話會(huì)導(dǎo)致需要查詢多個(gè)數(shù)據(jù)表13.在架構(gòu)層面上解決數(shù)據(jù)庫(kù)性能問(wèn)題:將耗時(shí)間的數(shù)據(jù)庫(kù)操作放在不密集的環(huán)境當(dāng)中。比如所有的跨行都是批處理模式,而這種都是在深夜進(jìn)行a) 同步操作:存取金額都是同步操作,必須要實(shí)時(shí)處理的業(yè)務(wù)b) 異步操作屬于異步操作。異步處理方式處理很多不必要實(shí)時(shí)處理的業(yè)務(wù),從而提高數(shù)據(jù)庫(kù)性能處理數(shù)據(jù)庫(kù)的方式同步和異步集中和分布式14.(第四課)1.避免在 select 后使用*和 distinct,因?yàn)榧词褂兄貜?fù)行,也可以在程序中進(jìn)行處理,但是如果直接用 distinct 處理可能會(huì)導(dǎo)致產(chǎn)生錯(cuò)誤的結(jié)果普通查詢的過(guò)程:先做 from,再做 sele

11、ct,再做 where distinct - existsa) 如果通過(guò)不同的 SQL 寫(xiě)法來(lái)完成必須去掉重復(fù)行這一約束?使用 exists 關(guān)鍵字解2.3.決 distinct,需要用到嵌套查詢。b) exists 嵌套被稱為關(guān)聯(lián)嵌套,在子查詢中需要用到外層插敘的表,所以子查詢不能單獨(dú)運(yùn)行。一般而言是檢查外部查詢的每一行數(shù)據(jù)(針對(duì)外層查詢的每一個(gè)),代入到子查詢中作為子查詢的條件。exists 后的查詢只要不為空,則條件值為 true。 exists 查詢應(yīng)用于某一條件在結(jié)果集中所占比例較小的情況,在這種情況下使用exists 查詢能大幅度提高查詢效率,因?yàn)閳?zhí)行次數(shù)少(子查詢找到第一個(gè)結(jié)果就

12、可以4.返回)。如果某一條件所占較大,則可以使用關(guān)鍵字 in 的嵌套查詢a)外層查詢所用到的字段的條件所對(duì)應(yīng)的內(nèi)層查詢的字段一定要在表中加上索引,這樣才能提高查詢的執(zhí)行效率b)查詢并不需要計(jì)算查詢結(jié)果集,只判斷是不是有滿足查詢的結(jié)果,換句話說(shuō),查詢并不一定將查詢執(zhí)行完畢,可能在找到第一條滿足條件的數(shù)據(jù)后就完成執(zhí)行。故而,子查詢的計(jì)算時(shí)間難以估算使用 exists 暗示查詢優(yōu)化器,這個(gè)查詢的查詢計(jì)劃是:c)查詢的查詢優(yōu)化,內(nèi)部查詢的優(yōu)化是隨機(jī)方式,exists 查詢的好處進(jìn)行獨(dú)立的優(yōu)化;查詢是單表查詢,難以優(yōu)化5.a)b)查詢優(yōu)化完畢之后不會(huì)被完整執(zhí)行查詢中的 join 關(guān)系與外部查詢的表沒(méi)有直

13、接的叉乘關(guān)系,而是代入外部查詢的結(jié)果值到入多次查詢中。這樣做減少了一次叉乘的過(guò)程,但是導(dǎo)致查詢要被代c)避免了 distinct 所帶來(lái)的結(jié)果集錯(cuò)誤,因?yàn)樗钪饕墓ぷ魇菍?duì)外部查詢中的表格做選擇,而不是對(duì) join 后的表格做選擇exists 和 in 的區(qū)別6.a) exists 被優(yōu)化一次后執(zhí)行多次,但是每一次都不一定要執(zhí)行完。由于在查詢優(yōu)化器中,優(yōu)化的時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)執(zhí)行的時(shí)間,所以 exists 雖然需要執(zhí)行多次,但是它的效率可能反而較高。執(zhí)行 exists 要求外部條件所占的外部查詢結(jié)果,故而子查詢的執(zhí)行次數(shù)少小,這樣能刪掉大部分b) in 被優(yōu)化一次后只需要執(zhí)行一次,但是必須是完整的執(zhí)

14、行,然后再與外部查詢的結(jié)果比較找到交集。如果外層查詢的條件所占比例較大的話,則 in 的查詢效率都會(huì)遠(yuǎn)遠(yuǎn)超過(guò) exists使用查詢計(jì)劃告訴 DBMS 的查詢工作一個(gè)訂單有多個(gè)狀態(tài)的話,根據(jù)三范式的要求,必須將訂單狀態(tài)放在另一個(gè)表中,將訂單號(hào)作為該表的外鍵,與狀態(tài)一起作為該表的主鍵7.8.9.在訂單和客戶的例子中(PDF27 頁(yè)),ordersus 被使用多次,通過(guò)查詢的寫(xiě)法減少它的遍歷次數(shù)可以優(yōu)化查詢的過(guò)程。可以將兩個(gè)子查詢結(jié)合在一起,找到最后的狀態(tài)并判斷它是不是完成狀態(tài)。a) 解決的方法是,將查詢每一個(gè)訂單的最后結(jié)果的子查詢的結(jié)果關(guān)系表作為外部查詢的 from 中所要到的表,則這樣該查詢只需

15、要執(zhí)行一次。b) 這種優(yōu)化方法主要用于處理一被使用多次的情況(降低一的使用次數(shù)主要是在 from 后加入子查詢,該子查詢針對(duì)該使用多次的表,而且往往需要用到 group by 以及相應(yīng)的 aggregation 操作)查詢優(yōu)化的兩種方式a) 當(dāng)需要使用多次 join 的情況下,考慮使用 exists 和 in 來(lái)進(jìn)行查詢優(yōu)化10.b) 降低連接表的個(gè)數(shù)(降維),當(dāng)有一被多次時(shí),要考慮合并其中的查詢(第六課)1. 外鍵和索引a)b)如果沒(méi)有外鍵和的話,一次修改會(huì)導(dǎo)致多次修改大系統(tǒng)普遍取消外鍵的關(guān)聯(lián),取消參照完整性(降低在更新主表時(shí)候的過(guò)多)是提高數(shù)據(jù)庫(kù)性能的一個(gè)措施。如果有大量的外鍵關(guān)聯(lián),則做一

16、次主表查詢可能會(huì)導(dǎo)致連接多個(gè)代碼表如果有外鍵的話,則需要對(duì)外鍵加上索引c)2. 每個(gè)數(shù)據(jù)庫(kù)都會(huì)有一個(gè)自動(dòng)生成(遞增)的序列號(hào)a)自己解決:在一行數(shù)據(jù)的時(shí)候,需要先找到當(dāng)前的最大值,然后對(duì)當(dāng)前值遞增作為新數(shù)據(jù)的值??梢允褂靡粋€(gè)表,其他表的當(dāng)前序列號(hào)的最大值,每次更新后修改最大值。它帶來(lái)是串行化的,因?yàn)檫@個(gè)表需要被串行化的,所以每一次對(duì)該數(shù)據(jù)庫(kù)的任意一為了解決上述的串行化新數(shù)據(jù)的動(dòng)作都必須是串行的,必須采用系統(tǒng)所提供的自動(dòng)遞增序列號(hào)的方式b)c)但是即便系統(tǒng)自動(dòng)生成的序列號(hào)可以并發(fā)進(jìn)行(導(dǎo)致數(shù)據(jù)可以并發(fā)進(jìn)行),但是索引不能并發(fā)(如果索引是連續(xù)的,則一般會(huì)在一個(gè)塊中),即便操作可以并發(fā),但是索引仍舊

17、需要串行化操作數(shù)據(jù)表的d)解決上述問(wèn)題的方式:反向鍵索引/逆向索引。當(dāng) 42、43、44 三個(gè)同時(shí)時(shí),可以到不同塊中實(shí)現(xiàn)并發(fā),但是索引還是串行化的(索引鍵連續(xù),可能在同一塊中)??梢詫㈡I逆向變成 24、34、44,此時(shí)它們不再連續(xù),就可能不在同一個(gè)塊中,可能可以實(shí)現(xiàn)并發(fā)e)使用上述方法,不僅在堆文件中可以實(shí)現(xiàn)并發(fā)(),同時(shí)也可以在基本文件中實(shí)現(xiàn)并發(fā)(索引)f)質(zhì)疑:毫無(wú)意義的系統(tǒng)自動(dòng)生成鍵作為主鍵,是否有意義?(毫無(wú)意義的字段放到表中是否有意義?)i.如果不使用自動(dòng)生成鍵,可能不能保證主鍵的取值一定是唯一的(比如都可能會(huì)重復(fù))ii.iii.不使用非數(shù)值型的字段做表的主鍵從索引結(jié)構(gòu)的角度來(lái)看和對(duì)

18、數(shù)值型索引的處理方式來(lái)看,字符串索引的處理速度遠(yuǎn)遠(yuǎn)小于對(duì)數(shù)值索引的處理速度3.沒(méi)有使用索引的情況a)b)謂詞中沒(méi)有使用索引的最前列,所有的 B+樹(shù)都是在索引的第一個(gè)鍵值上構(gòu)建索引count(*)在全表中算行數(shù),不使用到索引。如果鍵有控制,count()操作仍舊算這些,但是索引中不空值(B 樹(shù)索引不對(duì)空值構(gòu)建索節(jié)點(diǎn)中都有值)c)對(duì)于一個(gè)有索引的列做函數(shù)查詢或者函數(shù)查詢)函數(shù)查詢(主要是時(shí)間和類型變化這兩種d)使用索引是否會(huì)帶來(lái)效率的提高(查詢優(yōu)化器根據(jù)統(tǒng)計(jì)信息進(jìn)行判斷)i.如果使用到索引反而會(huì)更慢。查詢優(yōu)化器未必會(huì)使用索引,使用前會(huì)先判斷使用索引有沒(méi)有價(jià)值,根據(jù)查詢的統(tǒng)計(jì)信息判斷是使用索引的評(píng)分

19、高還是不使用索引的評(píng)分高如果查詢優(yōu)化器發(fā)現(xiàn)當(dāng)前的查詢不該使用索引,所以它所制定的查詢計(jì)劃不包括所提供鍵的索引查詢。查詢優(yōu)化器根據(jù)統(tǒng)計(jì)信息進(jìn)行判斷,如果統(tǒng)計(jì)信息是錯(cuò)誤的,則查詢優(yōu)化器的判斷也是錯(cuò)誤的ii.e) 使用索引的基本要求是索引可用,且索引對(duì)查詢有幫助f)索引的方式是點(diǎn)狀,得出的結(jié)果是滿足條件的所以快的。索引所做的工作是:通過(guò)索引找到所需要的數(shù)據(jù)庫(kù)的物理實(shí)現(xiàn);這個(gè)(通過(guò)堆文件來(lái))4.a)數(shù)據(jù)庫(kù)的數(shù)據(jù)存在數(shù)據(jù)庫(kù)所設(shè)計(jì)的文件中,數(shù)據(jù)文件在絕大多數(shù)情況下是堆文件??吹降氖窃撐募倪壿嬤^(guò)程(二維表的),而不能看到它的物理過(guò)程(記錄的存放、數(shù)據(jù)庫(kù)表是 的兩點(diǎn)是如何)方式的抽象過(guò)程,它b)了所有的過(guò)程

20、的物理細(xì)節(jié)。比較關(guān)鍵數(shù)據(jù)以及數(shù)據(jù)的組織過(guò)程c)盡管物理結(jié)構(gòu)與 SQL 沒(méi)有直接關(guān)系,但是使用 SQL 的好壞卻受物理結(jié)構(gòu)的影響5.數(shù)據(jù)庫(kù)存在大量的a) 并發(fā)用戶數(shù)量大的系統(tǒng)i.緊湊:數(shù)據(jù)的緊湊程度和查詢效率有正向相關(guān)關(guān)系。緊湊意味著一個(gè)塊中能夠存取的數(shù)據(jù),如果有一定的順序的話,數(shù)據(jù)的緊湊度直接影響查詢效率。如果塊中能存的,則一次查詢所需要的塊的數(shù)量會(huì)降低(全表遍歷的效率會(huì)提高)分散:從并發(fā)的角度來(lái)看,數(shù)據(jù)越緊湊則并發(fā)數(shù)越低。數(shù)據(jù)緊湊則塊數(shù)少,則能夠支持的并發(fā)數(shù)量少。(3000 個(gè)并發(fā)是一個(gè)很大的并發(fā)概念)。為了提高并ii.發(fā)數(shù)量,需要將數(shù)據(jù)的更加分散。所以需要在查詢效率和并發(fā)數(shù)量中間取一個(gè)平衡

21、點(diǎn)任何提高查詢效率iii.段,都會(huì)帶來(lái)某些性能的下降。整體提高數(shù)據(jù)庫(kù)應(yīng)用效率的措施,應(yīng)當(dāng)是提高了大部分事務(wù)效率而降低了小部分事務(wù)的效率。頻繁事務(wù)效率提高的同時(shí),非頻繁事務(wù)的效率會(huì)下降。可能會(huì)使用批處理的方式來(lái)處理頻繁事務(wù),而使用實(shí)時(shí)處理的方式來(lái)處理非頻繁事務(wù)6.IOT 索引組織表(根據(jù)索引結(jié)構(gòu)基本文件數(shù)據(jù),只有 Oracle 提供這種方式)a)數(shù)據(jù)的組織不再是隨機(jī)地向某一個(gè)塊中,而是使用一個(gè) B+樹(shù)索引結(jié)構(gòu),在主鍵索引中表中的所有數(shù)據(jù)(按照主鍵的順序在索引中所有的數(shù)據(jù))b)優(yōu)點(diǎn):它是一個(gè)有順序的圍)查詢是非常高效的方式,而不是隨機(jī)的。針對(duì)一定范圍的(有層次的范c)d)缺點(diǎn):更改文件的順序會(huì)造成

22、極大的更新代價(jià),這種代價(jià)在隨機(jī)文件中就不存在本質(zhì):把一個(gè)數(shù)據(jù)庫(kù)文件存成 index 的方式7.聚簇索引a) 比兩個(gè)表 staff 和 department,分別有 10 個(gè)塊和 3 個(gè)塊用于數(shù)據(jù)。clustered index 的方式將這兩個(gè)表中融合在一起,比如在一個(gè)塊中department 表中 ID=1 的有順序,以及 staff 表中外鍵=1 的所有。塊中的沒(méi)b) 優(yōu)點(diǎn):在查詢中需要 join 的情況(select name from staff where dID = ),這樣的數(shù)據(jù)庫(kù)分組方式會(huì)提高查詢的效率8.a)原因:數(shù)據(jù)庫(kù)出錯(cuò)需要備份,數(shù)據(jù)庫(kù)使用 redu、undo 日志來(lái)進(jìn)行備

23、份和回復(fù)(rollback),備份過(guò)程只能祈禱不要出錯(cuò),如果出錯(cuò),則整個(gè)備份活動(dòng)失敗。為了防止備份出錯(cuò),則可以將只是一個(gè)分組的備份出錯(cuò)分組,存在不同的物理設(shè)備上,這樣即使出錯(cuò),也b)sybase 最早提出 partition,希望能從管理數(shù)據(jù)庫(kù)的角度降低 DBA 的心理壓力。partition 提供了一種數(shù)據(jù)管理的方法分組可以提高并發(fā)性舉例:當(dāng)物理并發(fā)滿足并發(fā)性要求后,會(huì)考慮提高數(shù)據(jù)密集度來(lái)提高查詢效率,所采用的方式是滑動(dòng)窗口c)d)i.如將分成 13 個(gè)區(qū),前 12 個(gè)區(qū)存當(dāng)前 12 個(gè)月的數(shù)據(jù),最后一個(gè)區(qū)存歷史數(shù)據(jù);當(dāng)時(shí)間進(jìn)入到下一個(gè)月后,則為新的月新開(kāi)一個(gè)區(qū),而將倒數(shù)第二個(gè)區(qū)并入歷史數(shù)據(jù)

24、中使用這種方式,當(dāng)月的數(shù)據(jù)存入獨(dú)立的空間中,必定會(huì)提高查詢效率,但是降低了并發(fā)大小的可能性,所以可以將當(dāng)月數(shù)據(jù)放入并發(fā)性較高的區(qū),而將歷史數(shù)據(jù)方式并發(fā)性較低的區(qū)并發(fā)時(shí),當(dāng)前月所在的區(qū)的并發(fā)率最高,資源競(jìng)爭(zhēng)最激烈。數(shù)據(jù)集中提高查詢效率,必然導(dǎo)致并發(fā)性下降,所以應(yīng)當(dāng)從區(qū)的 提高并發(fā)性(比如提供很多塊)ii.iii.iv.以上均為物理,表面來(lái)講仍然是一個(gè)邏輯表e)分區(qū)方式i.ii. iii.根據(jù)的值,將原來(lái)邏輯表中的數(shù)據(jù)按照行分到不同的分區(qū)中根據(jù)字段分區(qū),將不同的列存入不同的分區(qū)中,重點(diǎn)照顧頻繁到的列范圍分區(qū)、列表分區(qū),希望在查詢過(guò)程中讓數(shù)據(jù)更加具體,而哈希分區(qū)希望在更大程度上提高并發(fā)性(第七課)1

25、.分區(qū)a)范圍分區(qū):根據(jù)字段的值把為了方便管理滑動(dòng)窗口:按照時(shí)間分區(qū)分散在不同的物理空間。分區(qū)最的目標(biāo)是b)i.可以使得最常使用到的數(shù)據(jù)被系統(tǒng)都是針對(duì)最近的數(shù)據(jù)加以在一起,這樣可以提高檢索效率。絕大部分ii.可以把最需要的數(shù)據(jù)(當(dāng)月、當(dāng)前的數(shù)據(jù))放到最快的物理設(shè)備當(dāng)中,通過(guò)物理的部署狀況來(lái)提高查詢效率c)哈希分區(qū):把數(shù)據(jù)按照某種不同的比例平均分在不同的物理區(qū)域,將數(shù)據(jù)分布的話出現(xiàn)錯(cuò)誤后回滾的壓力較小分區(qū)缺點(diǎn):從本質(zhì)上來(lái)說(shuō)降低了并發(fā)的個(gè)數(shù),但是在數(shù)據(jù)量非常龐大的情況下,降低并發(fā)所帶來(lái)的缺陷遠(yuǎn)遠(yuǎn)小于分區(qū)所提高的性能d)i.并發(fā)和數(shù)據(jù)密集的決的是一對(duì)不能被解決的,或者讀和寫(xiě)是一對(duì)不能被解ii.iii

26、.應(yīng)當(dāng)找到頻繁發(fā)生的事情,提高該事情的性能,并降低該事情所消耗的資源由于強(qiáng)制的數(shù)據(jù)聚合可能會(huì)導(dǎo)致其他數(shù)據(jù)的分散,所以不同的查詢請(qǐng)求也可能會(huì)形能上的e)分區(qū)注意:希望分區(qū)能夠平均分布,均衡;避免更新操作頻繁地移動(dòng)分區(qū),因?yàn)榉謪^(qū)的移動(dòng)會(huì)消耗大量的資源(以時(shí)間做 partition key 的話,數(shù)據(jù)不會(huì)輕易移動(dòng))2.事務(wù)的三種狀態(tài):等待 W;正在被處理 P;結(jié)束 Da)如果某一個(gè)事務(wù)正在被處理,則它所涉及的數(shù)據(jù)表(分區(qū))需要被鎖起來(lái),如果大量的事務(wù)同時(shí)涉及同一個(gè)分區(qū),則會(huì)導(dǎo)致并發(fā)數(shù)量的下降通過(guò)服務(wù)類型進(jìn)行分區(qū):應(yīng)當(dāng)把數(shù)據(jù)均衡地分布到不同的分區(qū)中,比如 T1 處理第一個(gè)分區(qū),T2 處理第二個(gè)分區(qū),則

27、這兩個(gè)事務(wù)可以完全地并發(fā),不會(huì)導(dǎo)致并發(fā)數(shù)量下降b)c)通過(guò)狀態(tài)進(jìn)行分區(qū):分成三個(gè)區(qū)域,W 區(qū)域等待的數(shù)據(jù),P 區(qū)域正在被處理的數(shù)據(jù),D 區(qū)域已經(jīng)結(jié)束的數(shù)據(jù)。將所有等待的數(shù)據(jù)放在同一個(gè)區(qū)域中,則減少了輪詢所消耗的時(shí)間(不這樣做的話,則需要輪詢尋找第一個(gè)需要被處理的數(shù)據(jù))。每一個(gè)在移動(dòng)分區(qū)的時(shí)候(狀態(tài)變化),不存在并發(fā)的(不需要將分區(qū)鎖起來(lái))。這種方案的最大特征:通過(guò)在分區(qū)之間的不斷移動(dòng),可以降低某一個(gè)分區(qū)對(duì)同一個(gè)資源/的競(jìng)爭(zhēng)壓力3.除了堆文件,所有的物理環(huán)境都能帶來(lái)復(fù)雜性;決這些問(wèn)題的方法只有測(cè)試層次機(jī)構(gòu)方式的變化會(huì)導(dǎo)致性能的下降。解4.關(guān)系型數(shù)據(jù)庫(kù)無(wú)法直觀地解決層次式問(wèn)題,所以需要一種變換。關(guān)

28、系型數(shù)據(jù)表中的字段之間是平級(jí)且等價(jià)的,沒(méi)有層次關(guān)系層次式結(jié)構(gòu)(樹(shù)狀結(jié)構(gòu))不能直接放在關(guān)系型數(shù)據(jù)庫(kù)中,需要變換一種形式。樹(shù)狀結(jié)構(gòu)點(diǎn)之間有父子關(guān)系,存在兄弟節(jié)點(diǎn),有根節(jié)點(diǎn)也有子節(jié)點(diǎn)c) 簡(jiǎn)單樹(shù)狀結(jié)構(gòu)要求:一個(gè)節(jié)點(diǎn)只有一個(gè)父節(jié)點(diǎn);所有的節(jié)點(diǎn)類型都是一樣的。如果存在多個(gè)父節(jié)點(diǎn),則為物料單 BOMd) 簡(jiǎn)單樹(shù)狀結(jié)構(gòu)的例子:位置(樓-層-房間-櫥-柜),找到是一個(gè)自頂向下的遍歷過(guò)程;風(fēng)險(xiǎn)分析(解決的風(fēng)險(xiǎn)問(wèn)題,一個(gè)基金可能包含多種基金、,甚至有可能包含平級(jí)的基金。計(jì)算一個(gè)基金的風(fēng)險(xiǎn),要計(jì)算這個(gè)基金的組成部分的將簡(jiǎn)單樹(shù)狀結(jié)構(gòu)風(fēng)險(xiǎn))到數(shù)據(jù)庫(kù)中(建模)5.a)鄰接模型,使用 ID 來(lái)每一個(gè)節(jié)點(diǎn),使用(父節(jié)點(diǎn) ID

29、)來(lái)樹(shù)狀結(jié)構(gòu)。這種方式假設(shè)兄弟節(jié)點(diǎn)無(wú)序。這種方式不支持多父節(jié)點(diǎn),即物料單結(jié)構(gòu)。在單父節(jié)點(diǎn)的情況下,鄰接模型是最重要的方式b)物化路徑模型,PathID(1,1.1,1.2,1.1.1,1.2.1,),使用層次式的路徑明確地標(biāo)識(shí)出來(lái)。它允許節(jié)點(diǎn)之間有順序(因?yàn)槁窂降臉?biāo)識(shí)有順序),比如族譜c)嵌套集合模型,每一個(gè)節(jié)點(diǎn)都有一個(gè)左和右i.ii.某一節(jié)點(diǎn)(A 節(jié)點(diǎn))的所有節(jié)點(diǎn),它的左右都在A 節(jié)點(diǎn)的左右之間按照深度遍歷進(jìn)行左續(xù)深度遍歷進(jìn)行左,遍歷到葉節(jié)點(diǎn)后再原路返回進(jìn)行右,而后再繼iii.按照此遍歷方式,根節(jié)點(diǎn)的左是1,右是最后一個(gè)N,而它是N-1的第一個(gè)直接子節(jié)點(diǎn)的左當(dāng)發(fā)生更新之后,整個(gè)結(jié)構(gòu)的是 2,

30、它的最后一個(gè)直接子節(jié)點(diǎn)的右iv.都要發(fā)生變化,所以增加節(jié)點(diǎn)和刪除節(jié)點(diǎn)會(huì)帶來(lái)很多開(kāi)銷(xiāo),所以較少使用使用這個(gè)方法,找到某一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)很方便,所有左v.和右在這個(gè)節(jié)點(diǎn)的左右之間的節(jié)點(diǎn),都是它的子節(jié)點(diǎn)(第八課)1. 作業(yè) 2a)A - B 有一個(gè)班次 G7001,中間途徑 C、D?,F(xiàn)在可能A-C 的車(chē)票,C-B 的車(chē)票,這種情況下怎么在數(shù)據(jù)庫(kù)表結(jié)構(gòu)中間解決這個(gè)問(wèn)題。即實(shí)現(xiàn)區(qū)間以及對(duì)剩余票的檢索票的,b)抽象和實(shí)際。G7001 是一個(gè)抽象的概念,真正跑的車(chē)次是今天早晨 8:00 出發(fā)的 G7001。對(duì)于這樣的火車(chē)來(lái)說(shuō),它一天最多只開(kāi)一班,但是有可能隔天發(fā)車(chē),比如每周 2、4、6、1 發(fā)車(chē)(或者每隔

31、1/2 天發(fā)車(chē);或者每隔兩天,同時(shí)逢 10號(hào)開(kāi)),需要判斷這班火車(chē)今天是否開(kāi)車(chē)。探討如何將這個(gè)內(nèi)容在數(shù)據(jù)庫(kù)中(可以規(guī)則,也可以當(dāng)前時(shí)刻表。不好使用、比對(duì)字符串的方式)c)火車(chē)上有一組對(duì)應(yīng)的班組(班組成員的數(shù)量會(huì)有規(guī)則,即為潛在的約束),包括一個(gè)、一個(gè)列車(chē)長(zhǎng)、若干列車(chē)員、一個(gè)車(chē)警。班組可能會(huì)變動(dòng),而且每天的 G7001 不可能都是同一個(gè)班組,所以需要一個(gè)排班表??赡軙?huì)查詢某一天的某一個(gè)班次的班組,也可能會(huì)統(tǒng)計(jì)某個(gè)車(chē)警一周工作的天數(shù)d)每一列真實(shí)運(yùn)行的班次都有可能晚點(diǎn),比如在 C 點(diǎn)晚點(diǎn),如何計(jì)算實(shí)際到達(dá) B 點(diǎn)的時(shí)間。有些情況下以上內(nèi)容可以在數(shù)據(jù)庫(kù)中,有些情況下可以即時(shí)計(jì)算e) A-B-C-D,

32、要有賣(mài)出去在 B-C 之間有哪些具體的座位賣(mài)出去了,哪些具體的座位沒(méi)2.作業(yè)要求(作業(yè) 1 和作業(yè) 2 都要如此)a)b)以文本提交作業(yè)結(jié)果提供一個(gè)數(shù)據(jù)庫(kù)模式(即數(shù)據(jù)庫(kù)表結(jié)構(gòu)),最簡(jiǎn)單的表結(jié)構(gòu) T(column1, column2, column3, column4)提供一個(gè)滿足查詢的 SQL 語(yǔ)句c)d)e)可以提供多種數(shù)據(jù)庫(kù)設(shè)計(jì),并且運(yùn)行在不同的之上,并說(shuō)明它們的不同以 create table 的方式構(gòu)建表結(jié)構(gòu),使用關(guān)鍵字 check 來(lái)設(shè)置表結(jié)構(gòu)的約束3.例子:普法a)自頂向下查詢,查詢 Vandamme 所管轄的所有i.鄰接模型查找某一個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn),這是一個(gè)典型的遞歸過(guò)程。首先

33、需要找到這個(gè)節(jié)點(diǎn)的所有直接子節(jié)點(diǎn),查出來(lái)之后放在一個(gè)臨時(shí)表中;然后遍歷臨時(shí)表,找到表里每一個(gè)節(jié)點(diǎn)的直接子節(jié)點(diǎn),繼續(xù)放入臨時(shí)表中。直到?jīng)]有新的節(jié)點(diǎn)放入臨時(shí)表中,則遞歸結(jié)束,臨時(shí)表存放了一開(kāi)始的節(jié)點(diǎn)的所有子節(jié)點(diǎn)實(shí)現(xiàn)遞歸過(guò)程,Oracle 提供的關(guān)鍵字 connect by。而 SQL 標(biāo)準(zhǔn)實(shí)現(xiàn)遞歸的關(guān)鍵字是 with,DB2 最早使用 with。with 是一個(gè)基于關(guān)系操作的遞歸過(guò)程,而 connect by 完全地去關(guān)系化,是一個(gè)基于過(guò)程的查詢方式,所以它的查詢效率非常高ii.對(duì)于物化路徑的方式,子節(jié)點(diǎn)的前綴就是父節(jié)點(diǎn)的路徑,找到某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),只需要匹配它們的前綴即可。但是物化路徑的效率不如

34、鄰接模型的效率高,因?yàn)槲锘窂阶铌P(guān)鍵的部分是字符串比較,它最大是拆分字符串可以使用 01010102 來(lái)代替路徑 1.1.1.2,計(jì)算它的深度就是路徑字符串長(zhǎng)度除以二,即 strlen(“01010102”)/2使用一個(gè)系統(tǒng)自動(dòng)生成的 ID,而不是使用物化的路徑作為字段 ID嵌套集合模型,子節(jié)點(diǎn)的 left_num 和 right_num 都在根節(jié)點(diǎn)的 left_num 和right_num 的范圍之內(nèi)。它無(wú)法直接獲得節(jié)點(diǎn)的層次iii.b)自底向上查詢,查詢某一個(gè)子節(jié)點(diǎn)的所有祖先節(jié)點(diǎn)i.關(guān)系操作可以合并相同的父節(jié)點(diǎn),很容易地找到所有的祖先結(jié)果集,但是不能做到很好的層次排序ii.iii.有一個(gè)機(jī)

35、制,可以解決字串索引,substring index因?yàn)樽缘紫蛏闲枰闅v多個(gè)節(jié)點(diǎn),而自頂向下只需要遍歷一個(gè)節(jié)點(diǎn),所以物化路徑的方式,自底向上的查詢效率遠(yuǎn)遠(yuǎn)低于自頂向下的查詢效率對(duì)于嵌套集合模型,自頂向下和自底向上的查詢效率相同,它們的差異僅僅體現(xiàn)在自底向上查詢的排序過(guò)程,這個(gè)排序比較耗時(shí)間iv.c)樹(shù)狀結(jié)構(gòu)的聚合計(jì)算i.在的樹(shù)狀結(jié)構(gòu)中,葉節(jié)點(diǎn)往往一個(gè)數(shù)值,說(shuō)明了一個(gè)團(tuán)的士兵人數(shù)??梢詫⑿值苋~節(jié)點(diǎn)聚合,得到它們的父節(jié)點(diǎn)的數(shù)值,即一個(gè)旅的士兵人數(shù)使用 oracle 的 connect by 關(guān)鍵字進(jìn)行遞歸。connect by .start with 方式,只能獲取自頂向下和自底向上的最終結(jié)果,而

36、不保存中間的遞歸過(guò)程,所以每一級(jí)別都需要做一次自底向上的操作,效率降低ii.(第九課)要封裝數(shù)據(jù)庫(kù),JDBC 仍然不方便,因?yàn)榇嬖陉P(guān)系和關(guān)系對(duì)象之間的 mismatch一個(gè)對(duì)象不可能存在一張關(guān)系表中,如果這樣,則應(yīng)當(dāng)為對(duì)象數(shù)據(jù)庫(kù)而不是關(guān)系數(shù)據(jù)庫(kù)。一個(gè)對(duì)象可能存在多b) ORM,封裝數(shù)據(jù)的過(guò)程。數(shù)據(jù)封裝層主要用來(lái)業(yè)務(wù)邏輯,OO 與關(guān)系之間的差異性,設(shè)置關(guān)系表和對(duì)象之間的關(guān)系2. 數(shù)據(jù)庫(kù)封裝的優(yōu)點(diǎn)a)b)c)應(yīng)用程序員能夠?qū)W⒂冢☉?yīng)用的)業(yè)務(wù)問(wèn)題可以實(shí)現(xiàn)公共的面向的對(duì)象的業(yè)務(wù)規(guī)則仍舊能夠利用數(shù)據(jù)庫(kù)的特性提高應(yīng)用程序的性能(第十課)1.數(shù)據(jù)庫(kù)方法學(xué)a)b)c)d)Database planning,

37、數(shù)據(jù)庫(kù)設(shè)計(jì)的計(jì)劃System definition,最主要的是定義系統(tǒng)的邊界Requirements collection andysis,需求分析和收集,收集表單和行為Database design,邏輯設(shè)計(jì)(與具體的數(shù)據(jù)庫(kù)無(wú)關(guān))和物理設(shè)計(jì)(與具體的數(shù)據(jù)庫(kù)有關(guān))i.ii.比如在構(gòu)建索引的時(shí)候,就從邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)進(jìn)入物理數(shù)據(jù)庫(kù)設(shè)計(jì)。數(shù)據(jù)庫(kù)系統(tǒng)與文件系統(tǒng)的差別,在于并發(fā)修改(而不是并發(fā)讀)。數(shù)據(jù)庫(kù)系統(tǒng)是處于并發(fā)修改的最好載體;數(shù)據(jù)量大并以使文件系統(tǒng)轉(zhuǎn)變成數(shù)據(jù)庫(kù),而如果數(shù)據(jù)關(guān)系復(fù)雜的話,則需要將信息存入數(shù)據(jù)庫(kù)中;必須要安全的信息需要存到數(shù)據(jù)庫(kù)中。正常情況下,文件系統(tǒng)的效率遠(yuǎn)遠(yuǎn)高于數(shù)據(jù)庫(kù)的效率ect

38、ion,選擇哪一個(gè)具體數(shù)據(jù)庫(kù)。如果有遺留數(shù)據(jù)庫(kù),則選擇遺留的數(shù)據(jù)e)DBM庫(kù)系統(tǒng);或者某個(gè)數(shù)據(jù)庫(kù)系統(tǒng)有其他數(shù)據(jù)庫(kù)沒(méi)有的特性,比如 Oracle Application designPrototyf)g)h)i)ImplemenionDonverand loading,數(shù)據(jù)轉(zhuǎn)換指的是數(shù)據(jù)庫(kù)的遷移,loading 指的是對(duì)遺留數(shù)據(jù)庫(kù)的重構(gòu)Testingj)k)Operational maenance2.邏輯設(shè)計(jì)(ER 圖)。ER 圖最大是,其在 UML 中沒(méi)有標(biāo)準(zhǔn)a)b)MDA模型驅(qū)動(dòng)架構(gòu)。畫(huà)完 UML 圖后,程序結(jié)構(gòu)和邏輯就可以生成強(qiáng)實(shí)體和弱實(shí)體。強(qiáng)實(shí)體是可以由自己的主鍵標(biāo)識(shí)自己的實(shí)體,比如課程

39、有課程號(hào),學(xué)生有學(xué)號(hào),都是強(qiáng)實(shí)體。如果選課是由課程號(hào)和學(xué)好來(lái)限制的話,則其沒(méi)有標(biāo)識(shí)自己的主鍵,屬于弱實(shí)體;如果選課有一個(gè)選課流水號(hào)來(lái)標(biāo)識(shí)自己的話,則它也算是強(qiáng)實(shí)體關(guān)于人與公司的雇傭關(guān)系,可以有兩種設(shè)計(jì)表達(dá):(1)人與公司是多對(duì)多的關(guān)系,它們產(chǎn)生一個(gè)雇傭關(guān)系,雇傭關(guān)系中有雇傭的屬性;(2)人與公司沒(méi)有直接的關(guān)系,人可以有多份合同說(shuō)明他所在的公司以及相關(guān)的雇傭?qū)傩?,公司也可以有多份合同說(shuō)明它雇傭的員工。第一種中,雇傭關(guān)系是弱實(shí)體,一個(gè)員工和一個(gè)公司只可能產(chǎn)生一個(gè)關(guān)聯(lián)實(shí)例;第二種中,合同是強(qiáng)實(shí)體,一個(gè)員工和一個(gè)公司可以產(chǎn)生多個(gè)關(guān)聯(lián)實(shí)例(因?yàn)楹贤珊贤?hào)來(lái)標(biāo)識(shí))注意 ER 模型中的一對(duì)一、一對(duì)多、多對(duì)

40、一、多對(duì)多的關(guān)系,以及一個(gè)實(shí)體是否強(qiáng)制參與某個(gè)關(guān)系c)d)i.ii.1:1,一對(duì)一全部參與可以放在一一對(duì)一部分參與必須分在兩,并且不會(huì)有空值,如果放在一則會(huì)出現(xiàn)很多空值。如果是一個(gè)全部參與一個(gè)部分參與的話,則將全部參與的實(shí)體的主鍵放在部分參與的表中作為外鍵(以此來(lái)描述他們的對(duì)應(yīng)關(guān)系);如果兩個(gè)都是部分參與的話,則參與 的一方的主鍵放入?yún)⑴c更少的一方的表中作為外鍵,這樣能產(chǎn)生較少的空值多對(duì)多會(huì)產(chǎn)生一個(gè)關(guān)系表,將相關(guān)的兩個(gè)實(shí)體的主鍵作為復(fù)合外鍵,作為關(guān)系實(shí)體的主鍵。這樣關(guān)系產(chǎn)生的實(shí)體是一個(gè)弱實(shí)體iii.e)強(qiáng)制性地表達(dá)表中的完整性約束,no action,cascade,set null,set

41、default,no check。這些關(guān)鍵字說(shuō)明了主鍵被刪除后,外鍵應(yīng)該怎么辦f)數(shù)據(jù)庫(kù)泛化。比如設(shè)置一個(gè) Staff 實(shí)體為父實(shí)體, 它有 manager 、salesnel、secretary 三個(gè)子實(shí)體,它們共享父實(shí)體中的屬性。這種結(jié)構(gòu)會(huì)產(chǎn)生以下的約束i.參與約束,participation constra,是不是所有的實(shí)例都存在于某一個(gè)子實(shí)體中,父實(shí)體只是一個(gè)抽象的概念。即是不是所有的員工都屬于某一個(gè)職位,如果有一個(gè)員工不是子實(shí)體中的一員,則他為父實(shí)體的實(shí)例,這屬于部分參與ii.disjoconstra,互斥約束。一個(gè)實(shí)例是不是只屬于一個(gè)子實(shí)體。如果一個(gè)人,他既是 manager 又是

42、 sales,則 manager 和 sales 這兩個(gè)子實(shí)體是overlap 的,不是 disjo數(shù)據(jù)庫(kù)泛化的約束產(chǎn)生的結(jié)果的g)i.mandatory + nondisjo,完全參與且不互斥,則所有的父實(shí)體+子實(shí)體都使用一,雖然可能會(huì)因?yàn)槟硞€(gè)實(shí)例不屬于某一個(gè)子實(shí)體而產(chǎn)生空值,但是產(chǎn)生的空值比較少,所以可以ii.optional + nondisjo所有的子實(shí)體做成一 mandatory + disjo 體分別分成一個(gè)表optional + disjo,部分參與且不互斥,則將父實(shí)體做成單獨(dú)的一,iii.,完全參與,但是互斥,則父實(shí)體產(chǎn)生一個(gè)主表,子實(shí)iv.,部分參與,但是互斥,則父實(shí)體產(chǎn)生一

43、個(gè)主表,子實(shí)體分別分成一個(gè)表。只要是 disjo表的情況,都要將子實(shí)體拆分成獨(dú)立的子h)逆范式/反范式(打破三范式的規(guī)則來(lái)生成冗余數(shù)據(jù))i.ii.合并 1:1 關(guān)系部分合并 1:*關(guān)系,不外關(guān)鍵字而常用的字段1. 比如 staff 和 department 之間有一對(duì)多的關(guān)系,將 department 中常被連接查詢的字段并遷移到 staff 表中(比如 department 的名字是一般需要查詢到的,則將名字放入 staff 表中,這樣查詢 staff 所屬部門(mén)的名字時(shí)就不需要連接兩個(gè)表了),降低連接查詢的數(shù)量2. 使用“一致性控制”模式來(lái)保證兩個(gè)表中冗余字段的一致性,這種控制放在 UI 界

44、面中進(jìn)行,使用 combo list 或者 check box 進(jìn)行選擇,而不是獲取用戶的輸入iii.iv.在 1:*關(guān)系中在*:*關(guān)系中外關(guān)鍵字屬性1. 比如多對(duì)多關(guān)系的 orders、articles 的關(guān)系,有一個(gè)關(guān)系表中保存了 oid和 aid。如果要知道某個(gè)訂單中某個(gè)產(chǎn)品的名字和價(jià)格的話,則需要三表連接2. 在現(xiàn)今的電子商務(wù)系統(tǒng)中,article 的某些屬性會(huì)直接到關(guān)系表中,即關(guān)系表中除了 oid 和 aid 之后,還包括 price(price 現(xiàn)在已經(jīng)是缺省放入關(guān)系表的字段)、article name、數(shù)量i) 為了避免查詢和更新這兩個(gè)不可調(diào)和的,可以將更新和查詢放在兩,從工作表提取出查詢表,專門(mén)用于查詢。這個(gè)方法演化成了數(shù)據(jù)倉(cāng)庫(kù)。這個(gè)方法只適用于查詢的實(shí)時(shí)性要求不高的情況3. 物理設(shè)計(jì)(第十一課)SAP + HANA1. 數(shù)據(jù)以列的形式存在數(shù)據(jù)庫(kù)中。當(dāng)需要查詢某幾個(gè)列的數(shù)據(jù)時(shí),只需要將這幾個(gè)列中的數(shù)據(jù)移入內(nèi)存之中(第十二課)列數(shù)據(jù)庫(kù)column famil

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論