數據庫設計是指針對給定的應用環境,構建壹個最優的數據庫模式,建立壹個數據庫及其應用系統,使其能夠有效地存儲數據,滿足各種用戶的應用需求(信息需求和處理需求)。在數據庫領域,各種使用數據庫的系統往往統稱為數據庫設計,是指為給定的應用環境構造最優的數據庫模式,建立數據庫及其應用系統,使其能夠有效地存儲數據,滿足各種用戶的應用需求(信息需求和處理需求)。在數據庫領域,各種使用數據庫的系統通常被稱為數據庫應用系統。1.數據庫與信息系統(1)數據庫是信息系統的核心和基礎。它將信息系統中的大量數據按照壹定的模型組織起來,並提供存儲、維護和檢索數據的功能,使信息系統能夠方便、及時、準確地從數據庫中獲取所需的信息。(2)數據庫是信息系統各部分能否以及如何緊密結合的關鍵。(3)數據庫設計是信息系統開發建設的重要組成部分。(4)數據庫設計人員應具備的技能和知識:數據庫和數據庫設計技術的基礎知識,計算機科學的基礎知識和編程的方法與技巧,軟件工程的原理與方法,應用領域的知識。二、數據庫設計的特點。數據庫建設是硬件、軟件和幹件的結合,三分技術,七分管理。基礎數據技術和管理的接口稱為“幹工作”。數據庫設計應與應用系統設計相結合。結構(數據)設計:數據庫框架或數據庫結構行為(處理)設計:應用程序、事務處理等結構與行為分離的設計。傳統的軟件工程忽略了應用程序中數據語義的分析和抽象。盡可能推遲數據結構設計的決策。早期的數據庫設計致力於數據模型和建模方法的研究,忽略了行為的設計如圖3所示。數據庫設計方法簡介手工試湊法的設計質量直接關系到設計人員的經驗和水平。沒有科學理論和工程方法的支持,工程質量難以保證。數據庫運行壹段時間後,往往會不同程度地發現各種問題。增加了維護成本標準設計方法。手工設計師的基本思維過程是叠代,逐步細化。標準設計法(續)典型法:(1)新奧爾良法:數據庫設計分為四個階段。s.b.yao方法:數據庫設計分為五個步驟。i.r.palmer方法:將數據庫設計視為壹個循序漸進的過程。(2)計算機輔助設計Oracle Designer 2000 Sybase PowerDesigner IV。數據庫設計的基本步驟數據庫設計的過程(六個階段)1。需求分析階段準確理解和分析用戶需求(包括數據和處理)是整個設計過程的基礎。這是最困難也是最耗時的壹步。2.概念結構設計階段是整個數據庫設計的關鍵。通過對用戶需求的綜合、概括和抽象,形成壹個獨立於具體dbms的概念模型。3.在邏輯結構設計階段,將概念結構轉換為dbms支持的數據模型,以優化它。4.在數據庫物理設計階段,為邏輯數據模型選擇壹個最適合應用環境的物理結構(包括存儲結構和訪問方法)。5.在數據庫實現階段,使用dbms提供的數據語言、工具和宿主語言。根據邏輯設計和物理設計的結果,建立數據庫,編寫調試應用程序,數據入庫,並投入試運行。在數據庫系統運行過程中,我們必須不斷評估、調整和修改其設計特點:在設計過程中,數據庫的設計和數據庫中數據處理的設計緊密結合,這兩個方面的需求分析、抽象、設計和實現在每個階段同時進行,相互借鑒,相互補充。為了完善設計過程中每個階段的設計描述分兩個方面,如圖:5。各級數據庫模型的形成過程1。需求分析階段:整合每個用戶的應用需求。2.概念設計階段:形成獨立於機器特性和dbms產品的概念模型(e-r圖)。3.邏輯設計階段:首先將e-r圖轉換成特定數據庫產品支持的數據模型,比如關系模型。然後根據用戶的處理需求和安全考慮,在基本表的基礎上建立必要的視圖,形成數據的外部模式。4.物理設計階段:根據數據庫管理系統的特點和處理需要,進行物理存儲安排,建立索引,形成數據庫的內部模式。6.數據庫設計技能1。設計數據庫之前(需求分析階段)1)了解客戶的需求並詢問。讓客戶解釋他們的需求,隨著開發的繼續,經常詢問客戶,以確保他們的需求仍然在開發的目的中。2)了解企業的業務,可以在後期發展階段節省大量時間。3)註意輸入輸出。在定義數據庫表和字段要求(輸入)時,您應該首先檢查現有的或設計的報告、查詢和視圖(輸出),以確定哪些表和字段是支持這些輸出所必需的。例如,如果客戶需要壹個按郵政編碼排序、細分和匯總的報表,您應該確保它包含壹個單獨的郵政編碼字段,而不是將郵政編碼放入地址字段。4)創建數據字典和er圖表er圖表和數據字典可以讓任何壹個了解數據庫的人明確如何從數據庫中獲取數據。Er圖表對於顯示表之間的關系非常有用,而數據字典顯示每個字段的用途和任何可能的別名。這對於sql表達式的文檔來說是絕對必要的。5)定義標準的對象命名規範。數據庫中各種對象的命名必須標準化。2.表和字段的設計(數據庫邏輯設計)表的設計原則1)數據的標準化和規範化有助於消除數據庫中的數據冗余。標準化有幾種形式,但第三範式(3nf)通常被認為是性能、可伸縮性和數據完整性之間的最佳平衡。簡單來說,符合3nf標準的數據庫的表設計原則是:“壹個地方壹個事實”,即壹個表只包含自己的基本屬性,當不是自己的屬性時需要分解。表之間的關系由外鍵連接。它有以下幾個特點:有壹組專門存儲相關數據的表,用鍵連接。例如,存儲客戶及其相關訂單的3nf數據庫可能有兩個表:customer和order。order表不包含與訂單相關聯的客戶的任何信息,但是表中將存儲壹個鍵值,該鍵值指向customer表中包含客戶信息的行。其實為了效率,有時候不規範表格是必要的。2)數據驅動是數據驅動的,而不是硬編碼的,這使得許多策略的更改和維護變得更加方便,大大增強了系統的靈活性和可擴展性。例如,如果用戶界面想要訪問外部數據源(文件、xml文檔、其他數據庫等)。),建議在用戶界面支持表中存儲相應的連接和路徑信息。此外,如果用戶界面執行工作流(發送郵件、打印信紙、修改記錄狀態等)等任務。),那麽生成工作流的數據也可以存儲在數據庫中。角色權限管理也可以通過數據驅動來完成。事實上,如果流程是數據驅動的,您可以將相當大的責任放在用戶身上,他們將維護自己的工作流程。3)在設計數據庫時考慮各種變化,考慮未來哪些數據字段可能發生變化。比如姓氏是這樣的(註意西方人的姓氏,比如女性婚後隨夫姓等。).因此,在建立系統存儲客戶信息時,將姓氏字段存儲在單獨的數據表中,並添加開始日期和結束日期等字段,以便可以跟蹤該數據項的變化。字段設計原則4)每個表中應該添加的三個有用字段drecordcreationdate,現在在vb中默認是(),但是在sql server中呢?默認為getdate() srecordcreator,默認為sql server下的not null default?用戶nrecordversion,記錄的版本標簽;幫助準確解釋記錄中出現空數據或缺失數據的原因?5)對於地址和電話號碼,使用多個字段來描述街道地址是不夠的。Address_line1、address_line2和address_line3可以提供更大的靈活性。此外,電話號碼和電子郵件地址應該有自己的數據表,有自己的類型和標簽類別。6)使用角色實體定義屬於某個類別的列。當需要定義屬於特定類別或具有特定角色的事物時,可以使用角色實體來創建特定的時間相關關系,從而實現自文檔化。例如,使用person實體和person_type實體來描述人。例如,當john smith,工程師晉升為john smith,董事,並最終爬到john smith,cio的高位時,您所要做的就是更改兩個表person和person_type之間的關系的鍵值,並添加壹個日期/時間字段以了解更改發生的時間。這樣,person_type表就包含了所有可能的人員類型,比如助理、工程師、主管、cio或ceo。另壹種替代方法是更改人員記錄以反映新頭銜的變化,但無法及時跟蹤個人所在位置的具體時間。7)選擇盡可能多的數字類型和文本類型。在sql中使用smallint和tinyint類型時要特別小心。例如,如果您要查看每月的總銷售額,而“合計”字段類型很小,那麽如果總額超過32,767美元,您就無法計算它。id類型的文本字段,如客戶id或訂單號,應該設置得比平時大。假設客戶id的長度為10位數字。然後,您應該將數據庫表字段的長度設置為12或13個字符。但是,這額外的空間並不需要在未來重建整個數據庫來實現數據庫規模的增長。8)添加壹個刪除標誌字段,以便在表中包含壹個“刪除標誌”字段,這樣就可以將行標記為已刪除。不要刪除關系數據庫中的任何壹行;最好使用數據清理程序,並小心維護索引的完整性。3.鍵選擇和索引(數據庫邏輯設計)鍵選擇原則:1)鍵設計原則4為相關字段創建外鍵。?所有鍵必須是唯壹的。?避免使用組合鍵。?外鍵總是與唯壹的鍵字段相關聯。?2)用系統生成的主鍵設計數據庫時,使用系統生成的鍵作為主鍵,所以實際上控制了數據庫的索引完整性。這樣,數據庫和非手工機制有效地控制了對存儲數據中每壹行的訪問。使用系統生成的鍵作為主鍵的另壹個優點是,當您擁有壹致的鍵結構時,很容易發現邏輯缺陷。3)不要使用用戶的鍵(不要讓主鍵可更新)。當確定使用哪個字段作為表的鍵時,必須小心用戶將要編輯的字段。壹般情況下,不要選擇用戶可以編輯的字段作為關鍵字。4)可選鍵有時可以作為主鍵,可選鍵還可以進壹步作為主鍵,可以具備建立強大索引的能力。索引使用原則:索引是從數據庫中獲取數據的最有效的方法之壹。95%的數據庫性能問題可以通過索引技術解決。1)對邏輯主鍵使用唯壹分組索引,對系統鍵使用唯壹未分組索引(作為存儲過程),對任何外鍵列使用未分組索引。考慮數據庫有多少空間,如何訪問表,這些訪問是否主要用於讀寫。2)大部分數據庫都會索引自動創建的主鍵字段,但是不要忘記索引外鍵,外鍵也是常用的鍵,比如運行壹個查詢來顯示主表和所有相關表中的壹條記錄。3)不要索引memo/note字段,不要索引大字段(字符多),這樣會使索引占用過多存儲空間。4)不要索引常用的小表。不要為小數據表設置任何鍵,尤其是如果它們經常有插入和刪除操作。這些插入和刪除操作的索引維護可能比掃描表空間花費更多的時間。4.數據完整性設計(數據庫邏輯設計)1)完整性實現機制:實體完整性:主鍵引用完整性:刪除父表中的數據:級聯刪除;限制性刪除;在空父表中插入數據:有限插入;遞歸地將更新數據插入父表:級聯更新;受限更新;Null dbms可以通過兩種方式實現參照完整性:外鍵實現機制(約束規則)和觸發器實現機制自定義完整性:非null;;檢查;觸發器2)用約束代替業務規則強制數據完整性,用數據庫系統實現數據完整性。這不僅包括通過標準化實現的完整性,還包括數據的功能性。還可以在寫數據的時候添加觸發器,保證數據的正確性。不依賴業務層保證數據完整性;它不能保證表(外鍵)之間的完整性,所以不能強加在其他完整性規則上。3)在有害數據進入數據庫之前,強制完整性指示消除有害數據。激活數據庫系統指示的完整性特征。這可以保持數據的整潔,並迫使開發人員花費更多的時間來處理錯誤情況。4)使用搜索控制數據完整性控制數據完整性的最好方法是限制用戶的選擇。只要有可能,就應該為用戶提供壹個清晰的值列表以供選擇。這將減少鍵入代碼時的錯誤和誤解,並提供數據壹致性。壹些公共數據特別適合搜索:國家代碼、狀態代碼等。5)采用視圖為了在數據庫和應用程序代碼之間提供另壹層抽象,可以為應用程序建立特殊的視圖,而不需要應用程序直接訪問數據表。這樣做還可以讓您在處理數據庫更改時更加自由。5.其他設計提示1)避免使用觸發器的功能通常可以通過其他方式實現。調試程序時,觸發器可能會成為幹擾。如果妳真的需要使用觸發器,妳最好專註於記錄它。2)使用通用英語(或任何其他語言)代替編碼。創建下拉菜單、列表和報表時,最好按英文名稱排序。如果需要編碼,可以在編碼中附上用戶認識的英文。3)保存常用信息,讓壹個表存儲壹般的數據庫信息,非常有用。在該表中,存儲了數據庫的當前版本、最新檢查/維修(用於訪問)、相關設計文檔的名稱、客戶和其他信息。這可以實現壹個簡單的機制來跟蹤數據庫,當客戶抱怨他們的數據庫不符合期望的要求並與您聯系時,這對於非客戶機/服務器環境尤其有用。4)在數據庫中引入版本控制機制,以確定正在使用的數據庫的版本。隨著時間的推移,用戶的需求總是會發生變化。您最終可能需要修改數據庫結構。將版本信息直接存儲在數據庫中更方便。5)記錄所有快捷方式、命名規範、限制和功能。使用數據庫工具來註釋表、列、觸發器等。對於開發、支持和跟蹤變更非常有用。記錄數據庫,或者在數據庫內部或單獨建立文檔。這樣壹年多以後妳再去找第二個版本的時候,出錯的幾率會大大降低。6)測試、測試、反復測試數據庫建立或修改後,數據字段必須用用戶新輸入的數據進行測試。最重要的是,讓用戶測試並與用戶壹起工作,以確保所選擇的數據類型滿足業務需求。在將新數據庫投入實際服務之前,需要完成測試。7)檢查設計在開發期間檢查數據庫設計的壹種常見技術是通過數據庫支持的應用程序原型來檢查數據庫。換句話說,對於每個最終表達數據的原型應用程序,請確保檢查數據模型並了解如何提取數據。
上一篇:《致命復活》結局如何?誰是導演了綁架案的幕後黑手?下一篇:如何應對供應鏈管理的信息危機