資料庫技術是資訊資源管理最有效的手段。資料庫設計是建立資料庫及其應用系統的核心和基礎,它要求對於指定的應用環境,構造出較優的資料庫模式,建立起資料庫應用系統,並使系統能有效地儲存資料,滿足使用者的各種應用需求。
1、設計資料庫之前
1)理解客戶需求,詢問使用者如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶以保證其需求仍然在開發的目的之中;2、表與字段的設計2)了解企業業務,在以後的開發階段節約大量時間;
3)重視輸入輸出。在定義資料庫表和字段需求(輸入)時,首先應檢查現有的或者已經設計出的報表、查詢和檢視(輸出),以決定為了支援這些輸出哪些是必要的表和字段;
4)建立資料字典和e-r 圖,對sql 表示式的文件化來說這是完全必要的;
5)定義標準的物件命名規範。
1)表設計原則
(1)標準化和規範化;2)字段設計原則資料的標準化有助於消除資料庫中的資料冗餘。標準化有好幾種形式,但third normal form(3nf)通常被認為在效能、擴充套件性和資料完整性方面達到了最好平衡。事實上,為了效率的緣故,對錶不進行標準化有時也是必要的。
(2)採用資料驅動,增強系統的靈活性與擴充套件性;
(3)在設計資料庫的時候考慮到哪些資料字段將來可能會發生變更。
(1)每個表中都應該新增的3 個有用的字段;①drecordcreationdate,在sql server 下預設為getdate();
②srecordcreator,在sql server 下預設為not nulldefault user;
③nrecordversion,記錄的版本標記,有助於準確說明記錄中出現null 資料或者丟失資料的原因。(2)對位址和**採用多個字段,**號碼和郵件位址最好擁有自己的資料表,其間具有自身的型別和標記類別;
(3)使用角色實體定義屬於某類別的列,建立特定的時間關聯關係,從而可以實現自我文件化;
(4)選擇數字型別和文字型別要盡量充足,否則無法進行計算操作;
(5)增加刪除標記字段。在關聯式資料庫裡不要單獨刪除某一行,而在表中包含乙個「刪除標記」字段,這樣就可以把行標記為刪除。
3、鍵和索引
1)鍵選擇原則
(1)鍵設計4 原則①所有的鍵都必須唯一;
②為關聯字段建立外來鍵;
③避免使用復合鍵;
④外來鍵總是關聯唯一的鍵字段。(2)使用系統生成的主鍵,控制資料庫的索引完整性,並且當擁有一致的鍵結構時,找到邏輯缺陷很容易;
(3)不要用使用者的鍵,通常情況下不要選擇使用者可編輯的字段作為鍵;
(4)可選鍵有時可作主鍵,能擁有建立強大索引的能力。
2)索引使用原則
索引是從資料庫中獲取資料的最高效方式之一,絕大多數的資料庫效能問題都可以採用索引技術得到解決。
(1)邏輯主鍵使用唯一的成組索引,對系統鍵(作為儲存過程)採用唯一的非成組索引,對任何外來鍵列採用非成組索引。考慮資料庫的空間有多大,表如何進行訪問,還有這些訪問是否主要用於讀寫;4、資料完整性設計(2)大多數資料庫都索引自動建立的主鍵字段,但是不能忘了索引外來鍵,它們也是經常使用的鍵;
(3)不要索引memo/note 字段,不要索引大型字段,這樣會讓索引占用太多的儲存空間;
(4)不要索引常用的小型表,不要為小型資料表設定任何鍵,尤其當它們經常有插入和刪除操作時。
1)完整性實現機制
(1)實體完整性:主鍵(2)參照完整性
①父表中刪除資料:級聯刪除,受限刪除,置空值;
②父表中插入資料:受限插入,遞迴插入;
③父表中更新資料:級聯更新,受限更新,置空值。
dbms 對參照完整性可以有兩種方法實現:外來鍵實現機制(約束規則)和觸發器實現機制。
(3)使用者定義完整性:not null,check,觸發器。2)用約束而非商務規則強制資料完整性;
3)強制指示完整性。在有害資料進入資料庫之前將其剔除,啟用資料庫系統的指示完整性特性;
4)使用查詢控制資料完整性,控制資料完整性的最佳方式就是限制使用者的選擇;
5)採用檢視。可以為應用程式建立專門的檢視而不必非要應用程式直接訪問資料表,這樣做還等於在處理資料庫變更時給你提供了更多的自由。
5、其他設計
1)避免使用觸發器,確實需要的話最好集中對它文件化;
2)使用常用英語(或者其他任何語言)而不要使用編碼,確實需要的話可以在編碼旁附上使用者知道的英語;
3)儲存常用資訊。讓乙個表專門存放一般資料庫資訊,可以實現一種簡單機制跟蹤資料庫,這樣做對非客戶機/伺服器環境特別有用;
4)包含版本機制,在修改資料庫結構時更為方便;
5)編制文件,對所有的快捷方式、命名規範、限制和函式都要編制文件;
6)反覆測試,保證選擇的資料型別滿足商業要求;
7)檢查設計,在開發期間檢查資料庫設計的常用技術是通過其所支援的應用程式原型檢查資料庫。
6、資料庫命名規範
1)實體(表)的命名
(1)表以名詞或名詞短語命名,給表的別名定義簡單規則;2)屬性(列)的命名(2)如果表或者是字段的名稱僅有乙個單詞,那麼建議不使用縮寫,而是用完整的單詞;
(3)所有的儲存值列表的表前面加上字首z,目的是將這些值列表類排序在資料庫最後;
(4)所有的冗餘類的命名(主要是累計表)前面加上字首x。冗餘類是為了提高資料庫效率,非規範化資料庫的時候加入的字段或者表;
(5)關聯類通過用下劃線連線兩個基本類之後,再加字首r的方式命名,後面按照字母順序羅列兩個表名或者表名的縮寫。關聯表用於儲存多對多關係。
(1)採用有意義的列名,表內的列要針對鍵採用一整套設計規則;3)檢視的命名每乙個表都將有乙個自動id作為主健,邏輯上的主健作為第一組候選主健來定義。如果是自定義的邏輯上的編碼則用縮寫加「id」的方法命名。如果鍵是數字型別,你可以用_no 作為字尾。如果是字元型別則可以採用_code 字尾。對列名應該採用標準的字首和字尾。
(2)所有的屬性加上有關型別的字尾,如果還需要其它的字尾,都放在型別字尾之前。資料型別是文字的字段,型別字尾tx可以不寫,有些型別比較明顯的字段也可以不寫型別字尾;
(3)採用字首命名。給每個表的列名都採用統一的字首,那麼在編寫sql表示式的時候會得到大大的簡化,但這樣做也有缺點,比如會破壞自動表連線工具的作用。
(1)檢視以v作為字首,其他命名規則和表的命名類似;4)觸發器的命名(2)命名應盡量體現各檢視的功能。
觸發器以tr作為字首,觸發器名為相應的表名加上字尾,insert觸發器加_i,delete觸發器加_d ,update觸發器加_u 。如:tr_user_i,tr_user_d,tr_user_u。
5)儲存過程名
儲存過程應以up_ 開頭,和系統的儲存過程區分,後續部分主要以動賓形式構成,並用下劃線分割各個組成部分。
6)變數名
變數名採用小寫,若屬於片語形式,用下劃線分隔每個單詞。
7)命名中其他注意事項
(1)以上命名都不得超過30個字元的系統限制,變數名的長度限制為29(不包括標識字元@);(2)資料物件、變數的命名都採用英文本元,禁止使用中文命名,絕對不要在物件名的字元之間留空格;
(3)小心保留詞,要保證你的欄位名沒有和保留詞、資料庫系統或者常用訪問方法衝突;
(4)保持欄位名和型別的一致性,在命名字段並為其指定資料型別的時候一定要保證一致性。
資料庫優化設計方案
本文首先討論了基於第三正規化的資料庫表的基本設計,著重論述了建立主鍵和索引的策略和方案,然後從資料庫表 的擴充套件設計和庫表物件的放置等角度概述了資料庫管理系統的優化方案。1 引言 資料庫優化的目標無非是避免磁碟i o瓶頸 減少cpu利用率和減少資源競爭。為了便於讀者閱讀和理解,筆者參閱了sybas...
資料庫同步設計方案
需求 目前我們公司開發的系統大部分都涉及到資料傳輸,簡單的系統架構如下,有企業輸入單證資訊,提交到 機關進行審批,將審批的結果返回到企業端,由於企業客戶端系統,和行政審批中心的系統存在多不多的複雜關係 同時又存在大量的資料報文的交換 為了提高整個系統在資料傳輸過程中的可靠性,安全性及時性。我們在中間...
軟體設計原則
開閉原則 ocp 軟體設計的最大原則 這個原則說的是 對擴充套件開放,對修改關閉。其實意思是說,給系統新增新的功能,但不修改原有 如果能做到呢,關鍵在於抽象化,也就是封裝變化,抽象層不變,讓具體實現依賴抽象隨需求變化。使得系統具有很強的擴充套件性和可維護性。黎克特制代換原則 任何基類可以出現的地方,...