版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)庫設(shè)計(jì)的重要性引言:一直在從事數(shù)據(jù)庫開發(fā)和設(shè)計(jì)工作,也看了一些書籍,算是略有心得。很久之前就想針對關(guān)系數(shù)據(jù)庫設(shè)計(jì)進(jìn)行整理、總結(jié),但因?yàn)榉N種原因遲遲沒有動(dòng)手,主要還是惰性使然。今天也算是痛下決心開始這項(xiàng)卓絕又令我興奮的工作。這將是一個(gè)系列的文章,我將以講座式的口吻展開討論(個(gè)人偷懶,這里的總結(jié)直接拿去公司培訓(xùn)新人用)。系列的第一講我們先來回答下面幾個(gè)問題: 數(shù)據(jù)庫是大樓的根基大多數(shù)程序員都很急切,在了解基本需求之后希望很快的進(jìn)入到編碼階段(可能只有產(chǎn)出代碼才能反映工作量),對于數(shù)據(jù)庫設(shè)計(jì)思考得比較少。這給系統(tǒng)留下了許多隱患。許多軟件系統(tǒng)的問題,如:輸出錯(cuò)誤的數(shù)據(jù),性能差或后期維護(hù)繁
2、雜等,都與前期數(shù)據(jù)庫設(shè)計(jì)有著密切的關(guān)系。到了這個(gè)時(shí)候再想修改數(shù)據(jù)庫設(shè)計(jì)或進(jìn)行優(yōu)化等同于推翻重來。我經(jīng)常把軟件開發(fā)比作汽車制造。汽車制造會(huì)經(jīng)過圖紙?jiān)O(shè)計(jì),模型制作,樣車制造,小批量試生產(chǎn),最后是批量生產(chǎn)等步驟。整個(gè)過程環(huán)環(huán)相扣,后一過程是建立在前一過程正確的前提基礎(chǔ)之上的。如果在圖紙?jiān)O(shè)計(jì)階段發(fā)現(xiàn)了一個(gè)紕漏,我們可以重新進(jìn)行圖紙?jiān)O(shè)計(jì),如果到了樣車制造階段發(fā)現(xiàn)這個(gè)錯(cuò)誤,那么我們就要把從圖紙?jiān)O(shè)計(jì)到樣車制造的階段重來,越到后面發(fā)現(xiàn)設(shè)計(jì)上的問題,所付出的代價(jià)越大,修改的難度也越大。數(shù)據(jù)庫是整個(gè)應(yīng)用的根基,沒有堅(jiān)實(shí)的根基,整個(gè)應(yīng)用也就岌岌可危了。強(qiáng)大的數(shù)據(jù)庫面對不良設(shè)計(jì)也無能為力現(xiàn)代數(shù)據(jù)庫管理系統(tǒng)(DBMS)
3、提供了方便的圖形化界面工具,通過這些工具可以很方便的創(chuàng)建表、定義列,但我們設(shè)計(jì)出的結(jié)構(gòu)好嗎?關(guān)系數(shù)據(jù)庫有許多非常好的特性,但設(shè)計(jì)不當(dāng)會(huì)使這些特性部分或完全的喪失。我們來看看以下幾個(gè)數(shù)據(jù)庫不良設(shè)計(jì)造成的場景:1. 數(shù)據(jù)一致性的喪失一個(gè)訂單管理系統(tǒng),維護(hù)著客戶和客戶下的訂單信息。使用該系統(tǒng)的用戶在接到客戶修改收貨地址的電話后,在系統(tǒng)的客戶信息頁面把該客戶的收貨地址進(jìn)行了修改,但原先該客戶的訂單還是送錯(cuò)了地址。2. 數(shù)據(jù)完整性的喪失公司戰(zhàn)略轉(zhuǎn)移,準(zhǔn)備撤出某地區(qū)。系統(tǒng)操作人員順手把該地區(qū)的配置信息在系統(tǒng)中進(jìn)行刪除,系統(tǒng)提示刪除成功。隨后問題就來了,客服人員發(fā)現(xiàn)該地區(qū)的歷史訂單頁面一打開就出錯(cuò)。3. 性
4、能的喪失一個(gè)庫存管理系統(tǒng),倉庫管理員使用該系統(tǒng)記錄每一筆進(jìn)出貨情況,并能查看當(dāng)前各貨物的庫存情況。在系統(tǒng)運(yùn)行幾個(gè)月后,倉庫管理員發(fā)現(xiàn)打開當(dāng)前庫存頁面變得非常慢,而且整個(gè)趨勢是越來越慢。上面這些場景都是由于數(shù)據(jù)庫設(shè)計(jì)不當(dāng)造成的,根源包括:設(shè)計(jì)時(shí)引入了冗余字段,沒有設(shè)計(jì)合理的約束,對性能沒有進(jìn)行充足設(shè)計(jì)等,上面的例子也只是滄海一粟。數(shù)據(jù)庫平臺(tái)無關(guān)性我在這個(gè)系列博客里討論的數(shù)據(jù)庫設(shè)計(jì)不針對任何一個(gè)關(guān)系數(shù)據(jù)庫產(chǎn)品。無論你使用的是Oracle,SQL Server,Sybase,亦或是開源數(shù)據(jù)庫如:MySQL,SQLite等,都可以用來實(shí)踐我們這里討論的設(shè)計(jì)方法和設(shè)計(jì)理念,設(shè)計(jì)是這個(gè)系列博文的核心和靈魂
5、。注:在文中我會(huì)選用一個(gè)數(shù)據(jù)庫產(chǎn)品來進(jìn)行演示,大家可以選用自己熟悉的數(shù)據(jù)庫產(chǎn)品來實(shí)驗(yàn)。本文最后會(huì)給出一些免費(fèi)數(shù)據(jù)庫產(chǎn)品的鏈接,大家可以下載學(xué)習(xí)。一起學(xué)習(xí)共同進(jìn)步無論你是數(shù)據(jù)庫設(shè)計(jì)師,應(yīng)用架構(gòu)師,軟件工程師,數(shù)據(jù)庫管理員(DBA),軟件項(xiàng)目經(jīng)理,軟件測試工程師等項(xiàng)目組成員,都能從該系列博文中有所收獲。大家一起討論,共同進(jìn)步。內(nèi)容涉及領(lǐng)域我對這一系列博文現(xiàn)在的設(shè)想是涉及數(shù)據(jù)庫設(shè)計(jì)的整個(gè)過程。從需求分析開始,到數(shù)據(jù)庫建模(概念數(shù)據(jù)建模),進(jìn)行范式化,直至轉(zhuǎn)化為SQL語句。在我們一頭扎進(jìn)數(shù)據(jù)庫設(shè)計(jì)之前,我們先了解一下除了關(guān)系型數(shù)據(jù)庫之外的數(shù)據(jù)存儲(chǔ)方式。平面文件(Flat File)包括以.txt和.i
6、ni結(jié)尾的文件。eg: 一個(gè).ini文件的內(nèi)容:1. WebSites 2. MyBlog= 3. 4. Directorys 5. Image=E:DBFocus ProjectImg 6. Text=E:DBFocus ProjectDocuments 7. Data=E:DBFocus ProjectDB 優(yōu)點(diǎn):文件的存儲(chǔ)形式非常簡單,普通的編輯器都能對其進(jìn)行打開、修改缺點(diǎn):無法支持復(fù)雜的查詢沒有任何驗(yàn)證功能對平面文件中間的內(nèi)容進(jìn)行插入、刪除操作其實(shí)是重新生成了一個(gè)新文件適用場
7、景:存放小量,修改不頻繁的數(shù)據(jù),如應(yīng)用配置信息Windows注冊表錯(cuò)誤的修改Windows注冊表會(huì)引起系統(tǒng)的紊亂,故不建議把很多數(shù)據(jù)存放在注冊表中。Windows注冊表為樹形結(jié)構(gòu),存放著一些系統(tǒng)配置信息和應(yīng)用配置信息。通過把不同的配置存放在注冊表的不同分支上,使得應(yīng)用程序公共配置信息與用戶個(gè)人配置信息分離。eg:某文檔版本管理系統(tǒng),能通過配置與本主機(jī)上安裝的文件比較器建立關(guān)聯(lián)進(jìn)行文檔比較。這是一個(gè)公共配置信息,文件比較器路徑可以存放在注冊表的HKEY_LOCAL_MACHINESOFTWARE分支下。同時(shí)該文檔版本管理系統(tǒng)能記錄用戶最近打開的10個(gè)文檔路徑。這是用戶個(gè)人配置信息,對于不同的Wi
8、ndows用戶最近打開的10個(gè)文檔可以不同,這些配置信息可存放在注冊表的HKEY_CURRENT_USERSoftware分支下。Excel表單(Spreadsheets)優(yōu)點(diǎn):Excel 非常普及,用戶對于Spreadsheet的表現(xiàn)形式非常熟悉可以進(jìn)行簡單統(tǒng)計(jì),方便出各種圖表缺點(diǎn):不適用于許多Spreadsheet之間關(guān)系復(fù)雜的情況無法應(yīng)對復(fù)雜查詢數(shù)據(jù)驗(yàn)證功能弱適用場景:數(shù)據(jù)量不是非常大的辦公自動(dòng)化環(huán)境XMLXML是一種半結(jié)構(gòu)化的數(shù)據(jù)。相比于超文本標(biāo)記語言(HTML),其標(biāo)簽是可以自行定義的,即可擴(kuò)展的。eg:一個(gè)XML文件內(nèi)容-1. <?xml version=”1.0”
9、 encoding=”UTF-8” ?> 2. 3. <ClassSchedule> 4. 5. <Class Name=“Psychology” Room=”Field 3”> 6. 7. <Instructor>Richard Storm</
10、Instructor> 8. 9. <Students> 10. 11. <Student> 12. 13.
11、; <FirstName>Ben</FirstName> 14. 15. <LastName>Breaker</LastName&
12、gt; 16. 17. </Student> 18. 19. <Student> 20. 21.
13、160; <FirstName>Carol</FirstName> 22. 23. <LastName&g
14、t;Enflame</LastName> 24. 25. <NickName>Candy</NichName> 26. 27. </Stude
15、nts> 28. 29. </Class> 30. 31. </ClassSchedule> -XML文件有幾個(gè)特點(diǎn)。首先,XML標(biāo)簽要求嚴(yán)格對應(yīng),且不能出現(xiàn)交錯(cuò)的現(xiàn)象。其次,XML文件必須有一個(gè)根節(jié)點(diǎn),該節(jié)點(diǎn)包含所有其他元素。第三,同級別的不同節(jié)點(diǎn)內(nèi)不必包含相同的元素,如上例中第二個(gè)學(xué)生Carol有一個(gè)特別的節(jié)點(diǎn)NickName。這個(gè)特性使得在某些場景中XML比關(guān)系數(shù)據(jù)庫更能應(yīng)對變化。優(yōu)點(diǎn):1. 自然的層次型結(jié)構(gòu)2. 文本內(nèi)容通過標(biāo)簽是自解釋的3.
16、通過XSD(XML Schema語言)可以驗(yàn)證XML的結(jié)構(gòu)4. 有許多輔助型技術(shù)如:XPath, XQuery, XSL, XSLT等5. 一些商業(yè)數(shù)據(jù)庫(如Oracle,SQL Server)已支持XML數(shù)據(jù)的存儲(chǔ)與操作缺點(diǎn):1. 數(shù)據(jù)的冗余信息較多2. 無法支持復(fù)雜的查詢3. 驗(yàn)證功能有限4. 對XML中間的內(nèi)容進(jìn)行插入、刪除操作其實(shí)是重新生成一個(gè)新文件適用場景:適合存放數(shù)據(jù)量不大,具有層次型結(jié)構(gòu)的數(shù)據(jù),如樹形配置信息NoSQL數(shù)據(jù)庫非關(guān)系型數(shù)據(jù)庫我接觸的不是很多,除了給出一些產(chǎn)品名稱之外不做很多展開。園子里已有一些文章,本文最后也給出了鏈接供大家學(xué)習(xí)、研究。1. Key-Value數(shù)據(jù)庫
17、Redis, Tokyo Cabinet, Flare2. 面向文檔的數(shù)據(jù)庫MongoDB, CouchDB3. 面向分布式計(jì)算的數(shù)據(jù)庫Cassandra, Voldemort這幾年NoSQL非常熱。我認(rèn)為NoSQL并不是“銀彈”,在某些SNS應(yīng)用場景中NoSQL顯示了其優(yōu)越性,但在如金融行業(yè)等對數(shù)據(jù)的一致性、完整性、可用性、事務(wù)性高要求的場景下,現(xiàn)在的NoSQL就未必適用。我們應(yīng)充分分析應(yīng)用的需求,非常謹(jǐn)慎地選擇技術(shù)和產(chǎn)品。主要內(nèi)容回顧1.數(shù)據(jù)庫設(shè)計(jì)對于軟件項(xiàng)目成功的關(guān)鍵作用2.本課程與數(shù)據(jù)庫產(chǎn)品無關(guān),核心是設(shè)計(jì)的理念和方法3.各種數(shù)據(jù)存儲(chǔ)所適用的場景參考資料1. Oracle Databa
18、se 10g Express Edition2. SQL Server 2008 R2 Express Overview3. SQLite Home Page4. NoSQL數(shù)據(jù)庫筆談原文鏈接:高處俯瞰生命周期引言:一步一步設(shè)計(jì)你的數(shù)據(jù)庫1得到這么多朋友的關(guān)注著實(shí)出乎了我的意外。這也堅(jiān)定了我把這一系列的博文寫好的決心。近來工作上的事務(wù)比較繁重,加之我期望這個(gè)系列的文章能盡可能的系統(tǒng)、完整,需要花很多時(shí)間整理、思考數(shù)據(jù)庫設(shè)計(jì)的各種資料,所以文章的更新速度可能會(huì)慢一些,也希望大家能夠諒解。系列的第二講我們將站在高處俯瞰一下數(shù)據(jù)庫的生命周期,了解數(shù)據(jù)庫設(shè)計(jì)的整體流程 數(shù)據(jù)庫生命周期大家對軟
19、件生命周期較為熟悉,數(shù)據(jù)庫也有其生命周期,如下圖所示。 圖(1)數(shù)據(jù)庫生命周期數(shù)據(jù)庫的生命周期主要分為四個(gè)階段:需求分析、邏輯設(shè)計(jì)、物理設(shè)計(jì)、實(shí)現(xiàn)維護(hù)。這個(gè)系列的博文將主要關(guān)注數(shù)據(jù)庫生命周期中的前兩個(gè)階段(需求分析、邏輯設(shè)計(jì)),還會(huì)涉及反范式化設(shè)計(jì)的一些內(nèi)容。如圖中高亮圈出的部分。數(shù)據(jù)庫的物理設(shè)計(jì),包括索引的選擇與優(yōu)化、數(shù)據(jù)分區(qū)等內(nèi)容。這些內(nèi)容也非常豐富,而且可以自成體系,園子里也有很多好文章,故在本系列中不作主要關(guān)注。本文最后將給出一些鏈接供大家參考。數(shù)據(jù)庫生命周期的四個(gè)階段又能細(xì)分為多個(gè)小步驟,我們配合圖(1)來看看每一小步包含的內(nèi)容。階段1 需求分析數(shù)據(jù)庫設(shè)計(jì)與軟件設(shè)計(jì)一樣首先
20、需要進(jìn)行需求分析。我們需要與數(shù)據(jù)的創(chuàng)造者和使用者進(jìn)行訪談。對訪談獲得的信息進(jìn)行整理、分析,并撰寫正式的需求文檔。需求文檔中需包含:需要處理的數(shù)據(jù);數(shù)據(jù)的自然關(guān)系;數(shù)據(jù)庫實(shí)現(xiàn)的硬件環(huán)境、軟件平臺(tái)等; 圖(2)階段1 需求分析階段2 邏輯設(shè)計(jì)使用ER或UML建模技術(shù),創(chuàng)建概念數(shù)據(jù)模型圖,展示所有數(shù)據(jù)以及數(shù)據(jù)間關(guān)系。最終概念數(shù)據(jù)模型必須被轉(zhuǎn)化為范式化的表。數(shù)據(jù)庫邏輯設(shè)計(jì)主要步驟包括:a) 概念數(shù)據(jù)建模注:在需求分析完成后,使用ER圖或UML圖對數(shù)據(jù)進(jìn)行建模。使用ER圖或UML圖描述需求中的語義,即得到了數(shù)據(jù)概念模型(Conceptual Data Model),例如:三元關(guān)系(ternar
21、y relationships)、超類(supertypes)、子類(subtypes)等。例:零售商視角,產(chǎn)品/客戶數(shù)據(jù)庫的ER模型簡圖注:ER圖的含義,以及詳細(xì)標(biāo)記方法將在該系列的下一篇博文中進(jìn)行討論 圖(3)階段2(a) 概念數(shù)據(jù)建模b) 多視圖集成注:當(dāng)在大型項(xiàng)目設(shè)計(jì)或多人參與設(shè)計(jì)的情況下,會(huì)產(chǎn)生數(shù)據(jù)和關(guān)系的多個(gè)視圖。這些視圖必須進(jìn)行化簡與集成,消除模型中的冗余與不一致,最終形成一個(gè)全局的模型。多視圖集成可以使用ER建模語義中的同義詞(synonyms)、聚合(aggregation)、泛化(generalization)等方法。多視圖集成在整合多個(gè)應(yīng)用的場景中也非常重要。例
22、:集成零售商ER圖與客戶ER圖零售商ER圖如圖(3)所示??蛻粢暯?,產(chǎn)品/客戶數(shù)據(jù)庫的ER模型簡圖如下: 圖(4)以客戶為關(guān)注點(diǎn)繪制的ER圖注:現(xiàn)在市面上有許多輔助建模工具可以繪制ER圖。使用Sybase的PowerDesigner繪制與圖(4)相同語義的ER圖如下: 其標(biāo)記法與圖(4)中略有不同,這將在今后的博文中加以說明。這里需要指出的是輔助軟件的使用不是設(shè)計(jì)的核心,大家不要被這些工具迷惑。所以后文中我們將主要使用手繪。只要掌握了ER圖的語義,使用這些軟件都不會(huì)是件難事。集成零售商ER圖與客戶ER圖 圖(5) 階段2(b) 多視圖集成c) 轉(zhuǎn)化概念數(shù)據(jù)模型為S
23、QL表注:根據(jù)映射規(guī)則,把ER圖中的實(shí)體與關(guān)系轉(zhuǎn)化為SQL表結(jié)構(gòu)。在這一過程中我們將識別冗余的表,并去除這些表。例:把圖(5)中的customer, product, salesperson實(shí)體轉(zhuǎn)化為SQL表 圖(6) 階段2(c)轉(zhuǎn)化概念數(shù)據(jù)模型為SQL表d) 范式化注:范式化是數(shù)據(jù)庫邏輯設(shè)計(jì)中的重要一步。范式化的目標(biāo)是盡可能去除模型中的冗余信息,從而消除關(guān)系模型更新、插入、刪除異常(anomalies)。講到范式化就會(huì)引出函數(shù)依賴(Functional Dependency)這一概念。函數(shù)依賴(FDs)源自于概念數(shù)據(jù)模型圖,反映了需求分析中的數(shù)據(jù)關(guān)系語義。不同實(shí)體之間的
24、函數(shù)依賴表示各個(gè)實(shí)體唯一鍵之間的依賴。實(shí)體內(nèi)部也有函數(shù)依賴,反映了實(shí)體中鍵屬性與非鍵屬性之間的依賴。在保證數(shù)據(jù)完整性約束的前提下,基于函數(shù)依賴對候選表進(jìn)行范式化(分解、降低數(shù)據(jù)冗余)。例:對圖(6)中的Salesperson表進(jìn)行范式化,消除更新異常(update anomalies) 圖(7) 階段2(d)范式化階段3 物理設(shè)計(jì)數(shù)據(jù)庫物理設(shè)計(jì)包括選擇索引,數(shù)據(jù)分區(qū)與分組等。邏輯設(shè)計(jì)方法學(xué)通過減少需要分析的數(shù)據(jù)依賴,簡化了大型關(guān)系數(shù)據(jù)庫的設(shè)計(jì),這也減輕了數(shù)據(jù)庫物理設(shè)計(jì)階段的壓力。1. 概念數(shù)據(jù)建模和多視圖集成準(zhǔn)確地反映了現(xiàn)實(shí)需求場景2. 范式化在模型轉(zhuǎn)化為SQL表的過程中保留了數(shù)據(jù)完
25、整性數(shù)據(jù)庫物理設(shè)計(jì)的目標(biāo)是盡可能優(yōu)化性能。物理設(shè)計(jì)階段,全局表結(jié)構(gòu)可能需要進(jìn)行重構(gòu)來滿足性能上的需求,這被稱為反范式化。反范式化的步驟包括:1. 辨別關(guān)鍵性流程,如頻繁運(yùn)行、大容量、高優(yōu)先級的處理操作2. 通過增加冗余來提高關(guān)鍵性流程的性能3. 評估所造成的代價(jià)(對查詢、修改、存儲(chǔ)的影響)和可能損失的數(shù)據(jù)一致性階段4 數(shù)據(jù)庫的實(shí)現(xiàn)維護(hù)當(dāng)設(shè)計(jì)完成之后,使用數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的數(shù)據(jù)定義語言(DDL)來創(chuàng)建數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)庫創(chuàng)建完成后,應(yīng)用程序或用戶可以使用數(shù)據(jù)操作語言(DML)來使用(查詢、修改等)該數(shù)據(jù)庫。一旦數(shù)據(jù)庫開始運(yùn)行,就需要對其性能進(jìn)行監(jiān)視。當(dāng)數(shù)據(jù)庫性能無法滿足要求或用戶提出新的
26、功能需求時(shí),就需要對該數(shù)據(jù)庫進(jìn)行再設(shè)計(jì)與修改。這形成了一個(gè)循環(huán):監(jiān)視 > 再設(shè)計(jì) > 修改 > 監(jiān)視。 關(guān)系數(shù)據(jù)庫基礎(chǔ)在進(jìn)行數(shù)據(jù)庫設(shè)計(jì)之前,我們先回顧一下關(guān)系數(shù)據(jù)庫的相關(guān)基本概念。這里只做一個(gè)提綱挈領(lǐng)的簡介,大家可以根據(jù)相應(yīng)的線索進(jìn)行擴(kuò)展。表、行、列關(guān)系數(shù)據(jù)庫可以想象成表的集合,每個(gè)表包含行與列。(可以想象成一個(gè)Excel workbook,包含多個(gè)worksheet)。表在關(guān)系代數(shù)中被稱為關(guān)系,這也是關(guān)系數(shù)據(jù)庫名稱的起源(不要與表之間的外鍵關(guān)系混淆)。列在關(guān)系代數(shù)中被稱為屬性(attribute)。列中允許存放的值的集合稱為列的域(域與數(shù)據(jù)類型密切相關(guān)
27、,但并不完全相同)。行在關(guān)系代數(shù)中的學(xué)名是元組(tuple)。關(guān)系數(shù)據(jù)庫的理論基礎(chǔ)來自于“關(guān)系代數(shù)”。但在關(guān)系代數(shù)中,一個(gè)集合的各個(gè)元組沒有次序的概念,在關(guān)系數(shù)據(jù)庫中為了方便使用,定義了行的次序。鍵、索引鍵是一種約束,目的是保證數(shù)據(jù)完整性1. 復(fù)合鍵(Compound key):由多個(gè)數(shù)據(jù)列組成的鍵2. 超鍵(Superkey):列的集合,其中任何兩行都不會(huì)完全相同3. 候選鍵(Candidate key):首先是一個(gè)超鍵,同時(shí)這個(gè)超鍵中的任何列的缺失都會(huì)破壞行的唯一性4. 主鍵(Primary key):指定的某個(gè)候選鍵索引是數(shù)據(jù)的物理組織形式,目的是提高查詢的性能約束基本約束not nul
28、l constraint, domain constraint檢查約束(Check Constraints)例:Salary > 0主鍵約束(Primary Key Constraints)實(shí)體完整性(entity integrity),沒有兩條記錄是完全相同的,組成主鍵的字段不能為null唯一性約束(Unique Constraints)外鍵約束(Foreign Key Constraints)也被稱為引用完整性約束例: 關(guān)系數(shù)據(jù)庫操作1.選擇(Selection)2.映射(Projection)3.聯(lián)合(Union)4.交集(Intersection)5.差集(Differ
29、ence)6.笛卡爾積(Cartesian Product)7.連接(Join)上述7種是最基本的關(guān)系數(shù)據(jù)庫操作,對應(yīng)于集合論中的關(guān)系運(yùn)算。有些書籍中還會(huì)加入改名(Rename),除(Divide)等關(guān)系操作。主要內(nèi)容回顧1. 數(shù)據(jù)庫生命周期的四個(gè)階段:需求分析、邏輯設(shè)計(jì)、物理設(shè)計(jì)、實(shí)現(xiàn)維護(hù)。2. 關(guān)系數(shù)據(jù)庫的理論基礎(chǔ)是關(guān)系代數(shù)。數(shù)據(jù)庫物理設(shè)計(jì)參考資料第一個(gè)鏈接是我針對查詢優(yōu)化作的讀書筆記,后三個(gè)鏈接是SQLServerCentral中幾篇關(guān)于索引的文章(需要簡單注冊后才能看到全文)1. 查詢優(yōu)化系列(查詢優(yōu)化(1),查詢優(yōu)化(2),查詢優(yōu)化(3),查詢優(yōu)化(4),查詢優(yōu)化(5)總結(jié))2. P
30、art 1 - The basics of indexes3. Part 2 - The Clustered Index4. Part 3 - The Non-clustered index原文鏈接:看看基礎(chǔ)ER模型引言:一步一步設(shè)計(jì)你的數(shù)據(jù)庫二發(fā)表之后,筆者收到了一些郵件,還有朋友直接電話筆者詢問為什么不包含數(shù)據(jù)庫物理設(shè)計(jì)方面的內(nèi)容。筆者在這里解釋一下,數(shù)據(jù)庫物理設(shè)計(jì)與數(shù)據(jù)庫產(chǎn)品是密切相關(guān)的,本系列的專注點(diǎn)是較為通用的數(shù)據(jù)庫設(shè)計(jì)理念與方法,這也是國內(nèi)軟件項(xiàng)目中容易被忽視的一塊。今天我們將學(xué)習(xí)實(shí)體關(guān)系(ER)模型構(gòu)件及其語義,這是數(shù)據(jù)庫邏輯設(shè)計(jì)的基礎(chǔ)。內(nèi)容可能有些枯燥,但卻非常重要和有用。由于
31、內(nèi)容比較多,我們將分兩講來學(xué)習(xí)實(shí)體關(guān)系模型構(gòu)件。今天我們先來學(xué)習(xí)基本實(shí)體關(guān)系模型。 實(shí)體關(guān)系(ER)模型的目標(biāo)是捕獲現(xiàn)實(shí)世界的數(shù)據(jù)需求,并以簡單、易理解的方式表現(xiàn)出來。ER模型可用于項(xiàng)目組內(nèi)部交流或用于與用戶討論系統(tǒng)數(shù)據(jù)需求。ER模型中的基本元素基本的ER模型包含三類元素:實(shí)體、關(guān)系、屬性圖1 實(shí)體、關(guān)系、屬性的ER構(gòu)圖實(shí)體(Entities):實(shí)體是首要的數(shù)據(jù)對象,常用于表示一個(gè)人、地方、某樣事物或某個(gè)事件。一個(gè)特定的實(shí)體被稱為實(shí)體實(shí)例(entity instance或entity occurrence)。實(shí)體用長方形框表示,實(shí)體的名稱標(biāo)識在框內(nèi)。一般名稱單詞的首字母大寫。關(guān)系(R
32、elationships):關(guān)系表示一個(gè)或多個(gè)實(shí)體之間的聯(lián)系。關(guān)系依賴于實(shí)體,一般沒有物理概念上的存在。關(guān)系最常用來表示實(shí)體之間,一對一,一對多,多對多的對應(yīng)。關(guān)系的構(gòu)圖是一個(gè)菱形,關(guān)系的名稱一般為動(dòng)詞。關(guān)系的端點(diǎn)聯(lián)系著角色(role)。一般情況下角色名可以省略,因?yàn)閷?shí)體名和關(guān)系名已經(jīng)能清楚的反應(yīng)角色的概念,但有些情況下我們需標(biāo)出角色名來避免歧義。屬性(Attributes):屬性為實(shí)體提供詳細(xì)的描述信息。一個(gè)特定實(shí)體的某個(gè)屬性被稱為屬性值。Employee實(shí)體的屬性可能有:emp-id, emp-name, emp-address, phone-no。屬性一般以橢圓形表示,并與描述的實(shí)體連接
33、。屬性可被分為兩類:標(biāo)識符(identifiers),描述符(descriptors)。Identifiers可以唯一標(biāo)識實(shí)體的一個(gè)實(shí)例(key),可以由多個(gè)屬性組成。ER圖中通過在屬性名下加上下劃線來標(biāo)識。多值屬性(multivalued attributes)用兩條線與實(shí)體連接,eg:hobbies屬性(一個(gè)人可能有多個(gè)hobby,如reading,movies)。復(fù)合屬性(Complex attributes)本身還有其它屬性。辨別強(qiáng)實(shí)體與弱實(shí)體:強(qiáng)實(shí)體內(nèi)部有唯一的標(biāo)識符。弱實(shí)體(weak entities)的標(biāo)識符來自于一個(gè)或多個(gè)其它強(qiáng)實(shí)體。弱實(shí)體用雙線長方形框表示,依賴于強(qiáng)實(shí)體而存在
34、。深入理解關(guān)系關(guān)系在ER模型中扮演了非常重要的角色。通過ER圖可以描述實(shí)體間關(guān)系的度、連通數(shù)、存在性信息。我們一一來解釋這些概念。首先我們來看一下關(guān)系在ER圖中的各種語義。圖2 關(guān)系的度、連通數(shù)、存在性關(guān)系的度(Degree of a Relationship)表示關(guān)系所關(guān)聯(lián)的實(shí)體數(shù)量。二元關(guān)系與三元關(guān)系的度分別為2和3,以此可以類推至n元。二元關(guān)系是最常見的關(guān)系。一個(gè)Employee與另一個(gè)Employee之間的領(lǐng)導(dǎo)關(guān)系稱為二元回歸關(guān)系。如圖2中所示,Employee實(shí)體通過關(guān)系manages與自身連接。由于Employee在這一關(guān)系中扮演兩個(gè)角色,故標(biāo)出了角色名(manager和subor
35、dinate)。三元關(guān)系聯(lián)系三個(gè)實(shí)體。當(dāng)二元關(guān)系無法準(zhǔn)確描述關(guān)聯(lián)的語義時(shí),就需要使用三元關(guān)系。我們來看下面這個(gè)例子,下圖(1)能反映出一個(gè)Employee在某個(gè)Project中使用了什么Skill。下圖(2)只能看出Employee有什么Skill,參與了哪些Project,但無法知道在某個(gè)Project中使用的特定Skill。圖3 三元關(guān)系蘊(yùn)含的語義需要注意的是有些情況下會(huì)錯(cuò)誤的定義三元關(guān)系。這些三元關(guān)系可分解為2個(gè)或3個(gè)二元關(guān)系,來達(dá)到化簡與語義的純凈。以后的博文中會(huì)進(jìn)一步詳細(xì)討論三元關(guān)系。一個(gè)實(shí)體可以參與到任意多個(gè)關(guān)系中。每個(gè)關(guān)系可以聯(lián)系任意多個(gè)元(實(shí)體),而且兩個(gè)實(shí)體之間也能有任意多個(gè)
36、二元關(guān)系。關(guān)系的連通數(shù)(Connectivity of a Relationship)表示關(guān)系所關(guān)聯(lián)的實(shí)例數(shù)量的約束。連通數(shù)的值可以是“一”或“多”。“一”這一端,在ER圖中通過在實(shí)體與關(guān)系間標(biāo)記“1”表示?!岸唷币欢藰?biāo)記“N”表示。如圖2中關(guān)系連通數(shù)部分,“一”對“一”:Department is managed by Employee;“一”對“多”:Department has Employees;“多”對“多”:Employee may work on many Projects and each Project may have many Employees。有些情況下最大連通數(shù)是確
37、定的,可以用數(shù)值代替N。如:田徑隊(duì)隊(duì)員有12人。關(guān)系的屬性關(guān)系也能有屬性。如下圖4所示,某員工參與某項(xiàng)目的起始日期,某員工在某項(xiàng)目中被分配的任務(wù)只有放在關(guān)系works-on上才有意義。圖4 關(guān)系的屬性需要注意的是關(guān)系的屬性一般出現(xiàn)在“多”對“多”的二元關(guān)系或三元關(guān)系上。一般“一”對“一”或“一”對“多”關(guān)系上不會(huì)放屬性(會(huì)引起歧義)。而且這些屬性可以移至一端的實(shí)體中。如下圖5所示,如果部門與員工(經(jīng)理)之間是“一”對“一”關(guān)系,在建模中可能把start-date作為關(guān)系is managed by的屬性(表示被接管的時(shí)間),這個(gè)屬性可以移至Department或Employee實(shí)體中。圖5 部門
38、與經(jīng)理之間的一對一管理關(guān)系大家可以思考一下如果部門和經(jīng)理之間是“多”對“多”關(guān)系,即交叉管理,那又會(huì)怎樣?關(guān)系中實(shí)體的存在性(Existence of an Entity in a Relationship)關(guān)系中實(shí)體的存在性可以是強(qiáng)制的或可選的。當(dāng)關(guān)系中的某一邊實(shí)體(無論是“一”或“多”端)必須總是存在,則該實(shí)體為強(qiáng)制的。反之,該實(shí)體為可選的。在實(shí)體與關(guān)系之間的連接線上標(biāo)識“0”來表示可選存在性。含義是最小連通數(shù)為0。強(qiáng)制存在性表示最小連通數(shù)為1。在存在性不確定或不可知的情況下,默認(rèn)最小連通數(shù)為1。在ER圖中最大連通數(shù)顯式地標(biāo)識在實(shí)體旁邊。如圖6所示,其蘊(yùn)含的語義為一個(gè)Department有
39、且只有一個(gè)Employee來當(dāng)經(jīng)理,一個(gè)Employee可能是一個(gè)Department的經(jīng)理,也可能不是。圖6 關(guān)系中實(shí)體的存在性其他概念數(shù)據(jù)模型標(biāo)記法前文中使用的ER構(gòu)圖方法是Peter Chen 1976年提出的。在現(xiàn)代數(shù)據(jù)庫設(shè)計(jì)領(lǐng)域,還有其他多種ER模型標(biāo)記法。我們來看一下另一種使用較多的標(biāo)記法,“crows-foot”(魚尾紋)標(biāo)記法,并與前面介紹的標(biāo)記法進(jìn)行一個(gè)簡單對比。學(xué)習(xí)每一種標(biāo)記法沒有意義。在你的組織中推廣應(yīng)用一種標(biāo)記法,使其成為大家共通的“語言”。圖7 Chen式標(biāo)記法與crows-foot標(biāo)記法對照 主要內(nèi)容回顧1. 組成ER模型的基本元素包括:實(shí)體、關(guān)系、屬性2
40、. 深入理解關(guān)系中包含的語義:關(guān)系的度、關(guān)系的連通數(shù)、關(guān)系的存在性3. 了解ER模型的不同標(biāo)記法,掌握其中一種標(biāo)記法,并在你的項(xiàng)目中推廣使用實(shí)體關(guān)系模型參考1. Entity-relationship model(/wiki/Entity-relationship_model)2. Entity-relationship modelling(http:/www.inf.unibz.it/franconi/teaching/2000/ct481/er-modelling/)原文鏈接:縱覽高級ER模型引言:一步一步設(shè)計(jì)你的數(shù)據(jù)庫三中我們討論了
41、基本實(shí)體關(guān)系模型構(gòu)件及其語義。這些概念非常重要,是今天這一講的基礎(chǔ),在開始本文內(nèi)容之前建議大家可以再回顧一下上一篇的內(nèi)容。今天我們將討論高級實(shí)體關(guān)系模型構(gòu)件,與上一篇一起涵蓋了ER模型構(gòu)圖的大部分內(nèi)容。三元關(guān)系是今天這一講的難點(diǎn),大家可以重點(diǎn)關(guān)注。 泛化(Generalization):超類型與子類型原始的ER模型已經(jīng)能描述基本的數(shù)據(jù)和關(guān)系,但泛化(Generalization)概念的引入能方便多個(gè)概念數(shù)據(jù)模型的集成。泛化關(guān)系是指抽取多個(gè)實(shí)體的共同屬性作為超類實(shí)體。泛化層次關(guān)系中的低層次實(shí)體子類型,對超類實(shí)體中的屬性進(jìn)行繼承與添加,子類型特殊化了超類型。ER模型中的泛化與面向?qū)ο缶幊?/p>
42、中的繼承概念相似,但其標(biāo)記法(構(gòu)圖方式)有些差異。下圖表示員工與經(jīng)理、工程師、技術(shù)員、秘書之間的泛化關(guān)系。Employee為超類實(shí)體,并包含共同屬性,Manager、Engineer、Technician、Secretary都是Employee的子類實(shí)體,它們能包含自身特有的屬性。 圖1 Employee與Manager、Engineer、Technician、Secretary之間的泛化關(guān)系泛化可以表達(dá)子類型的兩種重要約束,重疊性約束(disjointness)與完備性約束(completeness)。重疊性約束表示各個(gè)子類型之間是否是排他的。若為排他的則用字母“d”標(biāo)
43、識,否則用“o”標(biāo)識(o -> overlap)。圖1中各子類實(shí)體概念上是排他的。對員工、客戶實(shí)體進(jìn)行泛化,抽象出超類實(shí)體個(gè)人,得到如下關(guān)系圖。由于部分Employee也可能是Customer,故子類實(shí)體Employee與Customer之間概念是重疊的。 圖2 Individual與Employee、Customer之間的泛化關(guān)系完備性約束表示所有子類型在當(dāng)前系統(tǒng)中是否能完全覆蓋超類型。若能完全覆蓋則在超類型與圓圈之間用雙線標(biāo)識(可以把雙線理解為等號)。在圖2中子類實(shí)體Employee與Customer能完全覆蓋超類Individual實(shí)體。聚合(Aggregat
44、ion)聚合是與泛化抽象不同的另一種超類型與子類型間的抽象。泛化表示“is-a”語義,聚合表示“part-of”語義。聚合中子類型與超類型間沒有繼承關(guān)系。聚合關(guān)系的標(biāo)記法是在圓圈中標(biāo)識字母“A”來表示。下圖表示軟件產(chǎn)品由程序與用戶手冊組成。 圖3 Software-product與Program、Users Guide之間的聚合關(guān)系三元關(guān)系(Ternary Relationships)當(dāng)通過二元關(guān)系無法準(zhǔn)確描述三個(gè)實(shí)體間的聯(lián)系時(shí),我們需要使用三元關(guān)系。三元關(guān)系中“連通數(shù)”的確定方法:1. 以三元關(guān)系中的一個(gè)實(shí)體作為中心,假設(shè)另兩個(gè)實(shí)體都只有一個(gè)實(shí)例2. 若中心實(shí)體只有一個(gè)實(shí)例能與另兩個(gè)實(shí)體的一個(gè)實(shí)例進(jìn)行關(guān)聯(lián),則中心實(shí)體的連通數(shù)為“一”3. 若中心實(shí)體有多于一個(gè)實(shí)例能與另兩個(gè)實(shí)體實(shí)例進(jìn)行關(guān)聯(lián),則中心實(shí)體的連通數(shù)為“多”注:什么時(shí)候需要使用三元關(guān)系的實(shí)例請參看:一步一步設(shè)計(jì)你的數(shù)據(jù)庫三中的“關(guān)系的度(Degree of a Relationship)”小節(jié)。關(guān)系的“連通數(shù)”概念請參看:一步一步設(shè)計(jì)你的數(shù)據(jù)庫三的“關(guān)系的連通數(shù)(Connectivity of a Relationship)”小節(jié)。我們來看幾個(gè)三元關(guān)系的實(shí)例,注意各個(gè)圖中關(guān)系的度,并理解其中的語義。 圖4 技術(shù)員在項(xiàng)目中使用手冊的關(guān)系圖4中蘊(yùn)含的語義為:1. 一名技術(shù)員對于每一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 營銷代理合同范本
- 五金交電灰土工程協(xié)議
- 智能工廠建設(shè)項(xiàng)目招投標(biāo)流程
- 電商企業(yè)總監(jiān)招聘合同范文
- 智能客服系統(tǒng)開發(fā)招投標(biāo)文件
- 草原消防班組施工合同
- 旅游景點(diǎn)外墻裝修合同
- 通信企業(yè)銷售總經(jīng)理招聘協(xié)議
- 河道城市給水工程合同
- 軟件開發(fā)公司文秘崗位聘用合同
- 學(xué)生會(huì)培訓(xùn)課件
- 浙江森馬服飾股份有限公司營運(yùn)能力分析及提升策略研究
- 腫瘤科工作計(jì)劃與總結(jié)報(bào)告
- 圖像數(shù)據(jù)預(yù)處理詳述
- 室顫的搶救與護(hù)理課件
- 人教版 九年級化學(xué)上冊 第六單元 碳和碳的氧化物 課題2 二氧化碳的制取研究 說課稿
- 2023人民音樂出版社招聘7人筆試參考題庫(共500題)答案詳解版
- 第19課《小站》課件(共18張)(五四學(xué)制)語文六年級上冊
- 2023年幼兒照護(hù)及養(yǎng)育初級理論知識考試題庫(附含答案)
- 高中期中考試成績分析主題班會(huì)課件
- 智慧醫(yī)療人工智能的應(yīng)用
評論
0/150
提交評論