在數據庫領域,各種使用數據庫的系統通常被稱為數據庫應用系統。
壹.數據庫和信息系統
(1)數據庫是信息系統的核心和基礎,它將信息系統中的大量數據按照壹定的模型組織起來,提供數據的存儲、維護和檢索。
功能,使信息系統能夠方便、及時、準確地從數據庫中獲取所需信息。
(2)數據庫是信息系統各部分能否以及如何緊密結合的關鍵。
(3)數據庫設計是信息系統開發建設的重要組成部分。
(4)數據庫設計人員應具備的技能和知識:
數據庫和數據庫設計技術的基礎知識
計算機科學的基礎知識和編程的方法和技巧。
軟件工程的原理和方法
應用領域的知識
二、數據庫設計的特點
數據庫建設是硬件、軟件和硬件的結合。
三分技術,七分管理,十二分基礎數據
技術和管理之間的接口被稱為“幹部分”
數據庫設計應與應用系統設計相結合。
結構(數據)設計:設計數據庫框架或數據庫結構。
行為(處理)設計:設計應用程序、事務處理等。
結構與行為分離的設計
傳統的軟件工程忽略了應用中數據語義的分析和抽象,盡可能推遲數據結構設計的決策。早期的數據庫設計致力於數據模型和建模方法的研究,忽略了行為的設計。
如圖所示:
三、簡單介紹數據庫設計方法
人工試錯法
設計質量直接關系到設計師的經驗和水平。
沒有科學理論和工程方法的支持,工程質量難以保證。
數據庫運行壹段時間後,往往會不同程度地發現各種問題,增加了維護成本。
規範設計方法
手工設計者
基本思想
過程叠代和逐步細化
標準設計方法(續)
典型方法:
(1)新奧爾良法:數據庫設計分為四個階段。
南b .姚方法:數據庫設計分五步走。
I.R.Palmer方法:將數據庫設計視為壹個循序漸進的過程。
(2)計算機輔助設計
ORACLE Designer 2000
sybase PowerDesigner
四、數據庫設計的基本步驟
數據庫設計的過程(六個階段)
1.需求分析階段
準確理解和分析用戶需求(包括數據和處理)
它是整個設計過程的基礎,也是最困難最耗時的壹步。
2.概念結構設計階段
是整個數據庫設計的關鍵。
通過對用戶需求的綜合、歸納和抽象,形成獨立於具體dbms的概念模型。
3.邏輯結構設計階段
將概念結構轉換成dbms支持的數據模型。
優化壹下。
4.數據庫物理設計階段
為邏輯數據模型選擇最適合應用環境的物理結構(包括存儲結構和訪問方法)。
5.數據庫實施階段
根據邏輯設計和物理設計的結果,使用dbms提供的數據語言、工具和宿主語言
建立數據庫,編譯調試應用程序,組織數據存儲,進行試運行。
6.數據庫操作和維護階段
數據庫應用系統經過試運行後可以投入正式運行。
數據庫系統在運行期間必須不斷評估、調整和修改。
設計特點:
在設計過程中,將數據庫的設計和數據庫中數據處理的設計緊密結合,在每個階段同時進行這兩個方面的需求分析、抽象、設計和實現,相互借鑒,相互補充,從而完善這兩個方面的設計。
設計過程每個階段的設計說明:
如圖所示:
五、各級數據庫模型的形成過程
1.需求分析階段:綜合各個用戶的應用需求。
2.概念設計階段:形成獨立於機器特性和dbms產品的概念模型(E-R圖)。
3.邏輯設計階段:首先將E-R圖轉化為特定數據庫產品支持的數據模型,如關系模型,形成數據庫邏輯模型;然後根據用戶的處理需求和安全考慮,在基本表的基礎上建立必要的視圖,形成數據的外部模式。
4.物理設計階段:根據dbms的特點和處理的需要,進行物理存儲安排,建立索引,形成數據庫中的模式。
六、數據庫設計技巧
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()
sql Server下默認為NOT null默認的SRecordCreator?用戶
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)完整性實現機制:
實體完整性:主鍵
參照完整性:
刪除父表中的數據:級聯刪除;限制性刪除;空值
將數據插入父表:受限插入;遞歸插入
更新父表中的數據:級聯更新;受限更新;空值
Dbms可以通過兩種方式實現參照完整性:外鍵實現機制(約束規則)和觸發器實現機制。
用戶定義的完整性:
不為空;檢查;引發
2)通過約束而不是業務規則來加強數據完整性。
利用數據庫系統實現數據完整性。這不僅包括通過標準化實現的完整性,還包括數據的功能性。還可以在寫數據的時候添加觸發器,保證數據的正確性。不依賴業務層保證數據完整性;它不能保證表(外鍵)之間的完整性,所以不能強加在其他完整性規則上。
3)強制性指示完整性
在有害數據進入數據庫之前將其消除。激活數據庫系統指示的完整性特征。這可以保持數據的整潔,並迫使開發人員花費更多的時間來處理錯誤情況。
4)使用查找來控制數據完整性。
控制數據完整性的最好方法是限制用戶的選擇。只要有可能,就應該為用戶提供壹個清晰的值列表以供選擇。這將減少鍵入代碼時的錯誤和誤解,並提供數據壹致性。壹些公共數據特別適合搜索:國家代碼、狀態代碼等。
5)采納觀點
為了在數據庫和應用程序代碼之間提供另壹個抽象層,可以為應用程序建立壹個特殊的視圖,而無需應用程序直接訪問數據表。這樣做還可以讓您在處理數據庫更改時更加自由。
5.其他設計技能
1)避免使用觸發器。
觸發器的功能通常可以通過其他方式實現。調試程序時,觸發器可能會成為幹擾。如果妳真的需要使用觸發器,妳最好專註於記錄它。
2)使用通用英語(或任何其他語言)代替編碼。
創建下拉菜單、列表和報表時,最好按英文名稱排序。如果需要編碼,可以在編碼中附上用戶認識的英文。
3)保存常用信息
擁有壹個專用於壹般數據庫信息的表非常有用。在該表中,存儲了數據庫的當前版本、最新檢查/維修(用於訪問)、相關設計文檔的名稱、客戶和其他信息。這可以實現壹個簡單的機制來跟蹤數據庫,當客戶抱怨他們的數據庫不符合期望的要求並與您聯系時,這對於非客戶機/服務器環境尤其有用。
4)包括版本機制
版本控制機制被引入到數據庫中,以確定正在使用的數據庫的版本。隨著時間的推移,用戶的需求總是會發生變化。您最終可能需要修改數據庫結構。將版本信息直接存儲在數據庫中更方便。
5)文件準備
記錄所有快捷方式、命名約定、限制和功能。
使用數據庫工具來註釋表、列、觸發器等。對於開發、支持和跟蹤變更非常有用。
記錄數據庫,或者在數據庫內部或單獨建立文檔。這樣壹年多以後妳再去找第二個版本的時候,出錯的幾率會大大降低。
6)測試、試驗和重復試驗
建立或修改數據庫後,必須用用戶新輸入的數據測試數據字段。最重要的是,讓用戶測試並與用戶壹起工作,以確保所選擇的數據類型滿足業務需求。在將新數據庫投入實際服務之前,需要完成測試。
7)檢查設計
在開發過程中檢查數據庫設計的壹種常見技術是通過數據庫支持的應用程序原型來檢查數據庫。換句話說,對於每個最終表達數據的原型應用程序,請確保檢查數據模型並了解如何提取數據。