1 目的
規(guī)范數(shù)據(jù)庫設計。
2 概述
從數(shù)據(jù)庫的設計原則 設計文檔幾方面論述數(shù)據(jù)庫設計的規(guī)范思想及命名規(guī)則。
3 數(shù)據(jù)庫設計原則
3.1 結(jié)構(gòu)原則
3.1.1 與程序流程有關(guān)的狀態(tài)信息使用域進行限制和定義,不允許最終用戶修改定義
3.1.2 用戶可修改的狀態(tài)列表信息,用數(shù)據(jù)表來定義,一經(jīng)創(chuàng)建后,用戶只可修改名稱,不能修改代碼,修改后的名稱與原名稱應代表相同的意義。
3.1.3 用戶采用列表錄入的文字信息,在一個統(tǒng)一的‘系統(tǒng)信息’表中定義,用戶可任意創(chuàng)建和修改。用此種方法錄入的信息,錄入的信息與選擇列表不存在約束關(guān)系,列表只是作為文字錄入的一種輔助手段。
3.1.4 輔助編碼表應至少有兩列—代碼和名稱。只有在名稱非常穩(wěn)定的情況下才可以不使用代碼。使用編碼表的好處是在應用程序界面中,不同的地方出現(xiàn)同一種數(shù)據(jù)的錄入(如錄入數(shù)據(jù)或查詢過濾條件)時只需定義一次選擇列表,不會出現(xiàn)兩處沖突的現(xiàn)象,方便編程。
3.1.5 所有記錄業(yè)務數(shù)據(jù)的表中都設有‘錄入員’和‘錄入日期’列,由系統(tǒng)自動記錄。
3.1.6 記錄業(yè)務數(shù)據(jù)的表中,根據(jù)需要設置‘過程’和‘狀態(tài)’列,‘過程’列用一位數(shù)字或字符記錄如錄入 審核 記賬等過程狀態(tài);‘狀態(tài)’列用一位數(shù)字或字符記錄如正常 作廢 刪除等狀態(tài)。所有表的‘過程’狀態(tài)的改變?nèi)掌诤筒僮魅擞梢粏为毐韥碛涗?,表中記錄狀態(tài)改變所涉及的表標識 記錄標識 操作人和操作日期。
3.1.7 基本編碼表中應設置‘編碼’ ‘縮語’ ‘名稱’,‘編碼’作為主鍵與其它表的外鍵形成對應關(guān)系,完成基于主-外鍵的完整性約束。
3.1.8 記錄錄入單據(jù)的表中設置‘自動單據(jù)號’,由一字符開始以區(qū)分單據(jù)類型,后跟一數(shù)字序列表示序號。‘自動單據(jù)號’由系統(tǒng)自動生成,作為主表的主鍵,不允許用戶修改,并作為連接主表和明細表的外鍵。
3.1.9 明細表中設置序號列,用于同一單據(jù)中排列各行的序號。
3.1.10 用于記錄業(yè)務數(shù)據(jù)的數(shù)據(jù)表與用于報表的數(shù)據(jù)表分別存于不同的數(shù)據(jù)庫中,分別命名為‘業(yè)務數(shù)據(jù)庫’和‘決策數(shù)據(jù)庫’。‘業(yè)務數(shù)據(jù)庫’獨立于‘決策數(shù)據(jù)庫’進行設計,‘決策數(shù)據(jù)庫’中的數(shù)據(jù)來源于‘業(yè)務數(shù)據(jù)庫’。
3.1.11 任意業(yè)務流程中應考慮創(chuàng)建 審核 記賬 修改 刪除 沖紅 結(jié)存(月結(jié) 年結(jié))的處理及滿足的條件。
3.1.12 對于主-明細表結(jié)構(gòu),設計對應的視圖將兩表連接用于查詢。
3.1.13 禁止直接用編碼或名稱列表(in)作為固定的過濾條件對數(shù)據(jù)進行查詢。應將包含此過濾條件的查詢做成特定的視圖;或在編碼表中加入一屬性字段用于分類。
3.1.14 對于業(yè)務數(shù)據(jù)表應設定一個‘存檔標記列’,對于新增行或修改行設置該標志,以便將業(yè)務數(shù)據(jù)庫中的數(shù)據(jù)向決策數(shù)據(jù)庫復制時用以選擇需更新的數(shù)據(jù)。當采用數(shù)據(jù)庫復制技術(shù)時,也希望設定此標志,以備用。此標志的設置可以由應用程序或觸發(fā)器來執(zhí)行。
3.1.15 決策數(shù)據(jù)庫中應復制基本編碼表和輔助編碼表,以保持決策數(shù)據(jù)庫數(shù)據(jù)的完整性。
3.1.16 同時采用多種分類方法:如果某一實體有多于一種的分類方法,或?qū)嶓w中的每個實例所屬的類的數(shù)量是不定的,這時實體表和分類表之間的關(guān)聯(lián)是多對多的,即一個實體屬于一個分類而同時也屬于其它的分類。對于具有可多選的分類標志的表,與分類名稱列表之間存在多對多的關(guān)系,須按多對多的關(guān)系來處理。
--實體表-- --實體-分類表-- --分類表--
實例1 實例 分類 分類1->類別1.1
實例2 1對N ... 1對N 分類1->類別1.2
實例3 ... 分類2->類別2.1
3.1.17 業(yè)務過程的記錄:如果一個業(yè)務表(或主表+明細表)依賴另外一個業(yè)務表的數(shù)據(jù),或在流程上一個業(yè)務表根據(jù)另一個業(yè)務表生成,則該業(yè)務表中應有一字段記錄另一業(yè)務表對應記錄的標識。這樣的結(jié)構(gòu)使得在流程上的所有數(shù)據(jù)形成一個鏈。他有兩個作用:其一,可以追述某一過程進行到哪一步;其二,對于流程的回退有用,當流程需要回退到某一步時,將該步驟生成的記錄作廢,同時作廢由此記錄生成的所有后續(xù)記錄,即可以回退到流程的任意一點。由于數(shù)據(jù)的依賴關(guān)系,回退時實際上是從后向前作廢記錄,直到希望回退到的位置為止。
一個業(yè)務流程應作為一個事務(在數(shù)據(jù)庫管理系統(tǒng)中的定義),要保證這一事務的完整性。首先一個事務要有一個標識,在這個事務進行過程中所產(chǎn)生的一切數(shù)據(jù)都應打上事務標識作為標記??梢?#8216;回滾’整個事務,或‘回滾’(從后向前)到事務進行的某一點上,然后再繼續(xù)進行直到完成事務。
3.1.18 分類字段的冗余:業(yè)務數(shù)據(jù)表往往關(guān)聯(lián)許多的基本信息表,這些基本信息表中可能含有一些分類字段,而業(yè)務數(shù)據(jù)表的分類統(tǒng)計可能引用這些字段。如果這些分類字段的內(nèi)容會改變,而又不希望這種改變影響業(yè)務數(shù)據(jù)的統(tǒng)計結(jié)果,則在這些業(yè)務數(shù)據(jù)表中應包含這些分類字段,用以記錄業(yè)務發(fā)生時該字段的內(nèi)容。
3.1.19 類別和狀態(tài)的多選:多選分為必選(1..n)和可選(0..n)。如是必選,在設計時要有說明,在程序?qū)崿F(xiàn)中應有控制和檢查。兩個可選的類別或狀態(tài)表可以合并為一個表,再與引用此表的主表形成多對多的關(guān)系
3.1.20 財務記賬的處理:由憑證生成各種帳目(總帳 明細帳 日記帳 部門帳 往來帳 項目帳以及備查帳)時,有兩種處理方法:一種是各賬本不生成表,需要時臨時生成,在月結(jié)時一次生成月結(jié)帳;另一方法是生成表,當對憑證進行修改時,先做刪除處理(可用數(shù)據(jù)庫的級聯(lián)刪除功能),再補新憑證然后記帳,或,先做作廢處理(各賬目中與憑證相關(guān)的記錄由憑證號關(guān)聯(lián)),再補新憑證然后記帳。當各賬本與憑證之間由憑證號關(guān)聯(lián)時,可進行關(guān)聯(lián)查找。
3.2 命名原則
3.2.1 表和視圖命名原則
系統(tǒng)信息表:TS_
基本編碼表:TB_
決策數(shù)據(jù)表:TD_
業(yè)務數(shù)據(jù)表:不同的業(yè)務以不同的縮寫(2-3個字符)開始,如‘TCRM_’;如是輔助編碼表則在代表業(yè)務的縮寫后加A_,如‘TCRM_A_’。
關(guān)聯(lián)數(shù)據(jù)表:TRE__表A_表B
視圖:在表命名的基礎上加前綴改為V_
后綴:主-明細結(jié)構(gòu)的表,主表為 _M;明細表為 _L
單詞首寫字母要大寫,多個單詞間不用任何連接符號如:TCRM_UserType
注意:盡量寫好列“描述”
3.2.2 列命名規(guī)則
第一個字母小寫,后面的單詞或拼音,采用第一個字母大寫,命名規(guī)則只來自于業(yè)務,盡量表達出列的含義
3.2.3 過程、函數(shù)、觸發(fā)器命名原則
過程:SP_
函數(shù):FN_
觸發(fā)器:TR_表名_[后面插入加I,修改加U,刪除加D],操作前觸發(fā)器(INSTEAD OF): TR_表名_OF[后面插入加I,修改加U,刪除加D]
3.2.4 自定義數(shù)據(jù)類型、默認、規(guī)則命名原則
自定義數(shù)據(jù)類型:UD_
默認: DF_,對于非綁定的默認可取系統(tǒng)默認的名字
規(guī)則:RU_,對于非綁定規(guī)則(約束) 可取系統(tǒng)默認的名字
3.2.5 主鍵、外鍵關(guān)系、索引命名原則
主鍵: PK_表名
外鍵關(guān)系:FK_主表_從表
索引:ID_列名,符合索引列名間用_隔開