第一篇:數(shù)據(jù)庫設(shè)計(jì)流程
數(shù)據(jù)庫設(shè)計(jì)流程
目前數(shù)據(jù)庫設(shè)計(jì)一般分為6個(gè)階段,即需求分析階段,概念結(jié)構(gòu)設(shè)計(jì)階段,邏輯結(jié)構(gòu)設(shè)計(jì)階段,物理結(jié)構(gòu)設(shè)計(jì)階段,實(shí)施階段,運(yùn)行與維護(hù)階段。
(1)需求分析階段
需求分析階段的主要任務(wù)是指通過充分調(diào)查現(xiàn)實(shí)世界要處理的對(duì)象, 詳細(xì)了解計(jì)算機(jī)系統(tǒng)的工作情況, 明確用戶的各種需求, 然后確定系統(tǒng)的各項(xiàng)功能。數(shù)據(jù)庫系統(tǒng)不僅要按照當(dāng)前的應(yīng)用要求來設(shè)計(jì), 而且必須充分考慮今后可能的擴(kuò)充和改變。
(2)概念結(jié)構(gòu)設(shè)計(jì)階段
概念結(jié)構(gòu)設(shè)計(jì)階段的主要任務(wù)是將需求分析階段所得到的用戶需求抽象為概念模型, 而描述概念模型的具體工具主要是E-R 模型。
(3)邏輯結(jié)構(gòu)設(shè)計(jì)階段
邏輯結(jié)構(gòu)設(shè)計(jì)階段的主要任務(wù)是把概念結(jié)構(gòu)設(shè)計(jì)階段設(shè)計(jì)的基本E-R 模型轉(zhuǎn)換為與選用DBMS產(chǎn)品所支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)。具體來說, 就是首先將概念結(jié)構(gòu)轉(zhuǎn)換為一般的關(guān)系、網(wǎng)狀、層次模型, 然后將轉(zhuǎn)換來的模型向特定DBMS 支持下的數(shù)據(jù)模型轉(zhuǎn)換, 最后對(duì)數(shù)據(jù)模型進(jìn)行優(yōu)化。
(4)物理結(jié)構(gòu)設(shè)計(jì)階段
物理結(jié)構(gòu)設(shè)計(jì)階段的主要任務(wù)是為一個(gè)指定的邏輯數(shù)據(jù)模型選取一個(gè)符合應(yīng)用要求的物理結(jié)構(gòu)。具體來說, 就是首先確定數(shù)據(jù)庫的物理結(jié)構(gòu), 即數(shù)據(jù)庫的存取方法和存儲(chǔ)結(jié)構(gòu);然后對(duì)數(shù)據(jù)庫的物理結(jié)構(gòu)進(jìn)行評(píng)估, 評(píng)估的重點(diǎn)是存取時(shí)間的長短和存儲(chǔ)空間的大小。
(5)實(shí)施階段
實(shí)施階段的主要任務(wù)是用RDBMS 提供的數(shù)據(jù)定義語言和其他實(shí)用程序?qū)⑦壿嫿Y(jié)構(gòu)設(shè)計(jì)和物理結(jié)構(gòu)設(shè)計(jì)的結(jié)果詳細(xì)描述出來, 成為DBMS 可以接受的源代碼;再經(jīng)過系統(tǒng)調(diào)試產(chǎn)生目標(biāo)模式, 最后完成數(shù)據(jù)的載入工作。
(6)運(yùn)行與維護(hù)階段
運(yùn)行與維護(hù)階段的主要任務(wù)包括數(shù)據(jù)庫的轉(zhuǎn)儲(chǔ)和恢復(fù), 數(shù)據(jù)庫完整性和安全性控制, 數(shù)據(jù)庫性能改造、分析和監(jiān)督, 數(shù)據(jù)庫的重構(gòu)造和重組織。
第二篇:數(shù)據(jù)庫設(shè)計(jì)說明書
**數(shù)據(jù)庫設(shè)計(jì)說明書
班級(jí):姓名:學(xué)號(hào)引言
1.1 編寫目的1.2 編寫背景系統(tǒng)功能分析系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
3.1 概念結(jié)構(gòu)設(shè)計(jì)(得出實(shí)體圖)
3.2 邏輯結(jié)構(gòu)設(shè)計(jì)(實(shí)體、聯(lián)系的具體信息)
3.3 物理結(jié)構(gòu)設(shè)計(jì)(表的結(jié)構(gòu))權(quán)限設(shè)計(jì)設(shè)計(jì)實(shí)施與實(shí)現(xiàn)
第三篇:數(shù)據(jù)庫設(shè)計(jì)說明書
文件編號(hào):GL5.7 匯達(dá)軟件
版次:A 代替:
2000年3月21日
共2頁 第1頁
數(shù)據(jù)庫設(shè)計(jì)說明書
數(shù)據(jù)庫設(shè)計(jì)說明書的編制目的:對(duì)于設(shè)計(jì)中的數(shù)據(jù)庫的所有標(biāo)識(shí)、邏輯結(jié)構(gòu)和物理結(jié)構(gòu)作出具體的設(shè)計(jì)規(guī)定。其內(nèi)容要求如下: 1.引言
1.1 編寫目的 1.2 背景 1.3 定義 1.4 參考資料 2.外部設(shè)計(jì)
2.1 標(biāo)識(shí)符和狀態(tài)
聯(lián)系用途,詳細(xì)說明用于唯一地標(biāo)識(shí)該數(shù)據(jù)庫的代碼、名稱或標(biāo)識(shí)符,附加的描述性信息亦要給出,如果該數(shù)據(jù)庫屬于尚在實(shí)驗(yàn)中、尚在測(cè)試中或是暫時(shí)使用的,則要說這一特點(diǎn)及其有效時(shí)間范圍。2.2 使用他的程序
列出將要使用的或訪問此數(shù)據(jù)庫的所有應(yīng)用程序,對(duì)于這些應(yīng)用程序的每一個(gè),給出名稱和版本號(hào)。2.3 約定
陳述一個(gè)程序員或一個(gè)系統(tǒng)分析員為了能使用此數(shù)據(jù)庫而需要了解的建立符號(hào)、標(biāo)識(shí)的約定,例如用于標(biāo)識(shí)數(shù)據(jù)庫的不同版本的約定和用于表示庫內(nèi)各個(gè)文卷、記錄、數(shù)據(jù)項(xiàng)的命名約定等。2.4 專門指導(dǎo)
向準(zhǔn)備從事此數(shù)據(jù)庫的生成、從事此數(shù)據(jù)庫的測(cè)試、維護(hù)人員提供專門的指導(dǎo),例如將被送入數(shù)據(jù)庫的數(shù)據(jù)的格式和標(biāo)準(zhǔn)、送入數(shù)據(jù)庫的操作規(guī)程和步驟,用于產(chǎn)生、修改、更新或使用這些數(shù)據(jù)文卷的操作指導(dǎo)。2.5 支持軟件
簡單介紹同此數(shù)據(jù)庫直接有關(guān)的支持軟件,說明這些軟件的名稱、版本號(hào)和主要功能特性,如所用數(shù)據(jù)模型的類型、允許的數(shù)據(jù)容量等。列出這些支持軟件的技術(shù)文件的標(biāo)題、編號(hào)及來源。
3.結(jié)構(gòu)設(shè)計(jì)
3.1 概念結(jié)構(gòu)設(shè)計(jì)
說明本數(shù)據(jù)庫將反映的現(xiàn)實(shí)世界中的實(shí)體、屬性和它們之間的關(guān)系等的原始數(shù)據(jù)形式,包括各數(shù)據(jù)項(xiàng)、記錄、系、文卷的標(biāo)識(shí)符、定義、類型、度量單位和值域,建立本數(shù)據(jù)庫的每一幅用戶視圖。3.2 邏輯結(jié)構(gòu)設(shè)計(jì)
說明把上述原始數(shù)據(jù)進(jìn)行分解、合并后重新組織起來的數(shù)據(jù)庫全局邏輯結(jié)構(gòu),包括所確定的關(guān)鍵字和屬性、重新確定的記錄結(jié)構(gòu)和文卷結(jié)構(gòu)、所建立的各個(gè)文卷之間的相互關(guān)系,形成本數(shù)據(jù)庫的數(shù)據(jù)庫管理員視圖。
文件編號(hào):GL5.7 匯達(dá)軟件
版次:A 代替:
2000年3月21日
共2頁 第2頁
3.3 物理結(jié)構(gòu)設(shè)計(jì)
建立系統(tǒng)程序員視圖,包括:
數(shù)據(jù)在內(nèi)存中的安排,包括對(duì)索引區(qū)、緩沖區(qū)的設(shè)計(jì);
所使用的外存設(shè)備及外存空間的組織,包括索引區(qū)、數(shù)據(jù)塊的組織和劃分;
訪問數(shù)據(jù)的方式方法。
4.運(yùn)行設(shè)計(jì)
4.1 數(shù)據(jù)字典設(shè)計(jì)
對(duì)數(shù)據(jù)庫設(shè)計(jì)中涉及到的各種項(xiàng)目,如數(shù)據(jù)項(xiàng)、記錄、系、文卷、模塊、子模塊等一般要建立起數(shù)據(jù)字典,以說明它們的標(biāo)識(shí)符、同義名及有關(guān)信息。在本章要說明對(duì)此數(shù)據(jù)字典設(shè)計(jì)的基本考慮。4.2 安全保密設(shè)計(jì)
說明在數(shù)據(jù)庫的設(shè)計(jì)中,將如何通過區(qū)分不同的訪問者、不同的訪問類型和不同的數(shù)據(jù)對(duì)象,進(jìn)行分別對(duì)待而獲得的數(shù)據(jù)庫安全保密的設(shè)計(jì)考慮。
相關(guān)程序
《文檔控制規(guī)范》
第四篇:數(shù)據(jù)庫設(shè)計(jì)心得
數(shù)據(jù)庫設(shè)計(jì)經(jīng)驗(yàn)談
數(shù)據(jù)庫設(shè)計(jì)經(jīng)驗(yàn)談
一個(gè)成功的管理系統(tǒng),是由:[50% 的業(yè)務(wù) + 50% 的軟件] 所組成,而 50% 的成功軟件又有 [25% 的數(shù)據(jù)庫 + 25% 的程序] 所組成,數(shù)據(jù)庫設(shè)計(jì)的好壞是一個(gè)關(guān)鍵。如果把企業(yè)的數(shù)據(jù)比做生命所必需的血液,那么數(shù)據(jù)庫的設(shè)計(jì)就是應(yīng)用中最重要的一部分。有關(guān)數(shù)據(jù)庫設(shè)計(jì)的材料汗牛充棟,大學(xué)學(xué)位課程里也有專門的講述。不過,就如我們反復(fù)強(qiáng)調(diào)的那樣,再好的老師也比不過經(jīng)驗(yàn)的教誨。所以我歸納歷年來所走的彎路及體會(huì),并在網(wǎng)上找了些對(duì)數(shù)據(jù)庫設(shè)計(jì)頗有造詣的專業(yè)人士給大家傳授一些設(shè)計(jì)數(shù)據(jù)庫的技巧和經(jīng)驗(yàn)。精選了其中的 60 個(gè)最佳技巧,并把這些技巧編寫成了本文,為了方便索引其內(nèi)容劃分為 5 個(gè)部分:
第 1 部分設(shè)計(jì)數(shù)據(jù)庫表
總共 24 個(gè)指南性技巧,涵蓋表內(nèi)字段設(shè)計(jì)以及應(yīng)該避免的常見問題等。
第 3 部分保證數(shù)據(jù)完整性
討論如何保持?jǐn)?shù)據(jù)庫的清晰和健壯,如何把有害數(shù)據(jù)降低到最小程度。
第 5 部分設(shè)計(jì)數(shù)據(jù)庫之前 考察現(xiàn)有環(huán)境
在設(shè)計(jì)一個(gè)新數(shù)據(jù)庫時(shí),你不但應(yīng)該仔細(xì)研究業(yè)務(wù)需求而且還要考察現(xiàn)有的系統(tǒng)。大多數(shù)數(shù)據(jù)庫項(xiàng)目都不是從頭開始建立的;通常,機(jī)構(gòu)內(nèi)總會(huì)存在用來滿足特定需求的現(xiàn)有系統(tǒng)(可能沒有實(shí)現(xiàn)自動(dòng)計(jì)算)。顯然,現(xiàn)有系統(tǒng)并不完美,否則你就不必再建立新系統(tǒng)了。但是對(duì)舊系統(tǒng)的研究可以讓你發(fā)現(xiàn)一些可能會(huì)忽略的細(xì)微問題。一般來說,考察現(xiàn)有系統(tǒng)對(duì)你絕對(duì)有好處。
定義標(biāo)準(zhǔn)的對(duì)象命名規(guī)范
一定要定義數(shù)據(jù)庫對(duì)象的命名規(guī)范。對(duì)數(shù)據(jù)庫表來說,從項(xiàng)目一開始就要確定表名是采用復(fù)數(shù)還是單數(shù)形式。此外還要給表的別名定義簡單規(guī)則(比方說,如果表名是一個(gè)單詞,別名就取單詞的前 4 個(gè)字母;如果表名是兩個(gè)單詞,就各取兩個(gè)單詞的前兩個(gè)字母組成 4 個(gè)字母長的別名;如果表的名字由 3 個(gè)單詞組成,你不妨從頭兩個(gè)單詞中各取一個(gè)然后從最后一個(gè)單詞中再取出兩個(gè)字母,結(jié)果還是組成 4 字母長的別名,其余依次類推)對(duì)工作用表來說,表名可以加上前綴 WORK_ 后面附上采用該表的應(yīng)用程序的名字。表內(nèi)的列[字段]要針對(duì)鍵采用一整套設(shè)計(jì)規(guī)則。比如,如果鍵是數(shù)字類型,你可以用 _N 作為后綴;如果是字符類型則可以采用 _C 后綴。對(duì)列[字段]名應(yīng)該采用標(biāo)準(zhǔn)的前綴和后綴。再如,假如你的表里有好多“money”字段,你不妨給每個(gè)列[字段]增加一個(gè) _M 后綴。還有,日期列[字段]最好以 D_ 作為名字打頭。
檢查表名、報(bào)表名和查詢名之間的命名規(guī)范。你可能會(huì)很快就被這些不同的數(shù)據(jù)庫要素的名稱搞糊涂了。假如你堅(jiān)持統(tǒng)一地命名這些數(shù)據(jù)庫的不同組成部分,至少你應(yīng)該在這些對(duì)象名字的開頭用 Table、Query 或者 Report 等前綴加以區(qū)別。
如果采用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符號(hào)來標(biāo)識(shí)對(duì)象(比如 tbl_Employees)。我在和 SQL Server 打交道的時(shí)候還用過 tbl 來索引表,但我用 sp_company(現(xiàn)在用 sp_feft_)標(biāo)識(shí)存儲(chǔ)過程,因?yàn)樵谟械臅r(shí)候如果我發(fā)現(xiàn)了更好的處理辦法往往會(huì)保存好幾個(gè)拷貝。我在實(shí)現(xiàn) SQL Server 2000 時(shí)用 udf_(或者類似的標(biāo)記)標(biāo)識(shí)我編寫的函數(shù)。
工欲善其事, 必先利其器
采用理想的數(shù)據(jù)庫設(shè)計(jì)工具,比如:SyBase 公司的 PowerDesign,她支持 PB、VB、Delphe 等語言,通過 ODBC 可以連接市面上流行的 30 多個(gè)數(shù)據(jù)庫,包括 dBase、FoxPro、VFP、SQL Server 等,今后有機(jī)會(huì)我將著重介紹 PowerDesign 的使用。
獲取數(shù)據(jù)模式資源手冊(cè)
正在尋求示例模式的人可以閱讀《數(shù)據(jù)模式資源手冊(cè)》一書,該書由 Len Silverston、W.H.Inmon 和 Kent Graziano 編寫,是一本值得擁有的最佳數(shù)據(jù)建模圖書。該書包括的章節(jié)涵蓋多種數(shù)據(jù)領(lǐng)域,比如人員、機(jī)構(gòu)和工作效能等。其他的你還可以參考:[1]薩師煊 王珊著 數(shù)據(jù)庫系統(tǒng)概論(第二版)高等教育出版社 1991、[2][美] Steven M.Bobrowski 著 Oracle 7 與客戶/服務(wù)器計(jì)算技術(shù)從入門到精通 劉建元等譯 電子工業(yè)出版社,1996、[3]周中元 信息系統(tǒng)建模方法(下)電子與信息化 1999年第3期,1999 暢想未來,但不可忘了過去的教訓(xùn)
我發(fā)現(xiàn)詢問用戶如何看待未來需求變化非常有用。這樣做可以達(dá)到兩個(gè)目的:首先,你可以清楚地了解應(yīng)用設(shè)計(jì)在哪個(gè)地方應(yīng)該更具靈活性以及如何避免性能瓶頸;其次,你知道發(fā)生事先沒有確定的需求變更時(shí)用戶將和你一樣感到吃驚。
一定要記住過去的經(jīng)驗(yàn)教訓(xùn)!我們開發(fā)人員還應(yīng)該通過分享自己的體會(huì)和經(jīng)驗(yàn)互相幫助。即使用戶認(rèn)為他們?cè)僖膊恍枰裁粗С至耍覀円矐?yīng)該對(duì)他們進(jìn)行這方面的教育,我們都曾經(jīng)面臨過這樣的時(shí)刻“當(dāng)初要是這么做了該多好..”。
在物理實(shí)踐之前進(jìn)行邏輯設(shè)計(jì)
在深入物理設(shè)計(jì)之前要先進(jìn)行邏輯設(shè)計(jì)。隨著大量的 CASE 工具不斷涌現(xiàn)出來,你的設(shè)計(jì)也可以達(dá)到相當(dāng)高的邏輯水準(zhǔn),你通常可以從整體上更好地了解數(shù)據(jù)庫設(shè)計(jì)所需要的方方面面。
了解你的業(yè)務(wù)
在你百分百地確定系統(tǒng)從客戶角度滿足其需求之前不要在你的 ER(實(shí)體關(guān)系)模式中加入哪怕一個(gè)數(shù)據(jù)表(怎么,你還沒有模式?那請(qǐng)你參看技巧 9)。了解你的企業(yè)業(yè)務(wù)可以在以后的開發(fā)階段節(jié)約大量的時(shí)間。一旦你明確了業(yè)務(wù)需求,你就可以自己做出許多決策了。
一旦你認(rèn)為你已經(jīng)明確了業(yè)務(wù)內(nèi)容,你最好同客戶進(jìn)行一次系統(tǒng)的交流。采用客戶的術(shù)語并且向他們解釋你所想到的和你所聽到的。同時(shí)還應(yīng)該用可能、將會(huì)和必須等詞匯表達(dá)出系統(tǒng)的關(guān)系基數(shù)。這樣你就可以讓你的客戶糾正你自己的理解然后做好下一步的 ER 設(shè)計(jì)。
創(chuàng)建數(shù)據(jù)字典和 ER 圖表
一定要花點(diǎn)時(shí)間創(chuàng)建 ER 圖表和數(shù)據(jù)字典。其中至少應(yīng)該包含每個(gè)字段的數(shù)據(jù)類型和在每個(gè)表內(nèi)的主外鍵。創(chuàng)建 ER 圖表和數(shù)據(jù)字典確實(shí)有點(diǎn)費(fèi)時(shí)但對(duì)其他開發(fā)人員要了解整個(gè)設(shè)計(jì)卻是完全必要的。越早創(chuàng)建越能有助于避免今后面臨的可能混亂,從而可以讓任何了解數(shù)據(jù)庫的人都明確如何從數(shù)據(jù)庫中獲得數(shù)據(jù)。
有一份諸如 ER 圖表等最新文檔其重要性如何強(qiáng)調(diào)都不過分,這對(duì)表明表之間關(guān)系很有用,而數(shù)據(jù)字典則說明了每個(gè)字段的用途以及任何可能存在的別名。對(duì) SQL 表達(dá)式的文檔化來說這是完全必要的。
創(chuàng)建模式
一張圖表勝過千言萬語:開發(fā)人員不僅要閱讀和實(shí)現(xiàn)它,而且還要用它來幫助自己和用戶對(duì)話。模式有助于提高協(xié)作效能,這樣在先期的數(shù)據(jù)庫設(shè)計(jì)中幾乎不可能出現(xiàn)大的問題。模式不必弄的很復(fù)雜;甚至可以簡單到手寫在一張紙上就可以了。只是要保證其上的邏輯關(guān)系今后能產(chǎn)生效益。
從輸入輸出下手
在定義數(shù)據(jù)庫表和字段需求(輸入)時(shí),首先應(yīng)檢查現(xiàn)有的或者已經(jīng)設(shè)計(jì)出的報(bào)表、查詢和視圖(輸出)以決定為了支持這些輸出哪些是必要的表和字段。舉個(gè)簡單的例子:假如客戶需要一個(gè)報(bào)表按照郵政編碼排序、分段和求和,你要保證其中包括了單獨(dú)的郵政編碼字段而不要把郵政編碼糅進(jìn)地址字段里。
報(bào)表技巧
要了解用戶通常是如何報(bào)告數(shù)據(jù)的:批處理還是在線提交報(bào)表?時(shí)間間隔是每天、每周、每月、每個(gè)季度還是每年?如果需要的話還可以考慮創(chuàng)建總結(jié)表。系統(tǒng)生成的主鍵在報(bào)表中很難管理。用戶在具有系統(tǒng)生成主鍵的表內(nèi)用副鍵進(jìn)行檢索往往會(huì)返回許多重復(fù)數(shù)據(jù)。這樣的檢索性能比較低而且容易引起混亂。
理解客戶需求
看起來這應(yīng)該是顯而易見的事,但需求就是來自客戶(這里要從內(nèi)部和外部客戶的角度考慮)。不要依賴用戶寫下來的需求,真正的需求在客戶的腦袋里。你要讓客戶解釋其需求,而且隨著開發(fā)的繼續(xù),還要經(jīng)常詢問客戶保證其需求仍然在開發(fā)的目的之中。一個(gè)不變的真理是:“只有我看見了我才知道我想要的是什么”必然會(huì)導(dǎo)致大量的返工,因?yàn)閿?shù)據(jù)庫沒有達(dá)到客戶從來沒有寫下來的需求標(biāo)準(zhǔn)。而更糟的是你對(duì)他們需求的解釋只屬于你自己,而且可能是完全錯(cuò)誤的。
第 2 部分選擇鍵和索引 數(shù)據(jù)采掘要預(yù)先計(jì)劃
我所在的某一客戶部門一度要處理 8 萬多份聯(lián)系方式,同時(shí)填寫每個(gè)客戶的必要數(shù)據(jù)(這絕對(duì)不是小活)。我從中還要確定出一組客戶作為市場目標(biāo)。當(dāng)我從最開始設(shè)計(jì)表和字段的時(shí)候,我試圖不在主索引里增加太多的字段以便加快數(shù)據(jù)庫的運(yùn)行速度。然后我意識(shí)到特定的組查詢和信息采掘既不準(zhǔn)確速度也不快。結(jié)果只好在主索引中重建而且合并了數(shù)據(jù)字段。我發(fā)現(xiàn)有一個(gè)指示計(jì)劃相當(dāng)關(guān)鍵——當(dāng)我想創(chuàng)建系統(tǒng)類型查找時(shí)為什么要采用號(hào)碼作為主索引字段呢?我可以用傳真號(hào)碼進(jìn)行檢索,但是它幾乎就象系統(tǒng)類型一樣對(duì)我來說并不重要。采用后者作為主字段,數(shù)據(jù)庫更新后重新索引和檢索就快多了。
可操作數(shù)據(jù)倉庫(ODS)和數(shù)據(jù)倉庫(DW)這兩種環(huán)境下的數(shù)據(jù)索引是有差別的。在 DW 環(huán)境下,你要考慮銷售部門是如何組織銷售活動(dòng)的。他們并不是數(shù)據(jù)庫管理員,但是他們確定表內(nèi)的鍵信息。這里設(shè)計(jì)人員或者數(shù)據(jù)庫工作人員應(yīng)該分析數(shù)據(jù)庫結(jié)構(gòu)從而確定出性能和正確輸出之間的最佳條件。
使用系統(tǒng)生成的主鍵
這類同技巧 1,但我覺得有必要在這里重復(fù)提醒大家。假如你總是在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候采用系統(tǒng)生成的鍵作為主鍵,那么你實(shí)際控制了數(shù)據(jù)庫的索引完整性。這樣,數(shù)據(jù)庫和非人工機(jī)制就有效地控制了對(duì)存儲(chǔ)數(shù)據(jù)中每一行的訪問。
采用系統(tǒng)生成鍵作為主鍵還有一個(gè)優(yōu)點(diǎn):當(dāng)你擁有一致的鍵結(jié)構(gòu)時(shí),找到邏輯缺陷很容易。
分解字段用于索引
為了分離命名字段和包含字段以支持用戶定義的報(bào)表,請(qǐng)考慮分解其他字段(甚至主鍵)為其組成要素以便用戶可以對(duì)其進(jìn)行索引。索引將加快 SQL 和報(bào)表生成器腳本的執(zhí)行速度。比方說,我通常在必須使用 SQL LIKE 表達(dá)式的情況下創(chuàng)建報(bào)表,因?yàn)?case number 字段無法分解為 year、serial number、case type 和 defendant code 等要素。性能也會(huì)變壞。假如和類型字段可以分解為索引字段那么這些報(bào)表運(yùn)行起來就會(huì)快多了。
鍵設(shè)計(jì) 4 原則
* 為關(guān)聯(lián)字段創(chuàng)建外鍵。* 所有的鍵都必須唯一。* 避免使用復(fù)合鍵。
* 外鍵總是關(guān)聯(lián)唯一的鍵字段。
別忘了索引
索引是從數(shù)據(jù)庫中獲取數(shù)據(jù)的最高效方式之一。95% 的數(shù)據(jù)庫性能問題都可以采用索引技術(shù)得到解決。作為一條規(guī)則,我通常對(duì)邏輯主鍵使用唯一的成組索引,對(duì)系統(tǒng)鍵(作為存儲(chǔ)過程)采用唯一的非成組索引,對(duì)任何外鍵列[字段]采用非成組索引。不過,索引就象是鹽,太多了菜就咸了。你得考慮數(shù)據(jù)庫的空間有多大,表如何進(jìn)行訪問,還有這些訪問是否主要用作讀寫。
大多數(shù)數(shù)據(jù)庫都索引自動(dòng)創(chuàng)建的主鍵字段,但是可別忘了索引外鍵,它們也是經(jīng)常使用的鍵,比如運(yùn)行查詢顯示主表和所有關(guān)聯(lián)表的某條記錄就用得上。還有,不要索引 memo/note 字段,不要索引大型字段(有很多字符),這樣作會(huì)讓索引占用太多的存儲(chǔ)空間。
不要索引常用的小型表
不要為小型數(shù)據(jù)表設(shè)置任何鍵,假如它們經(jīng)常有插入和刪除操作就更別這樣作了。對(duì)這些插入和刪除操作的索引維護(hù)可能比掃描表空間消耗更多的時(shí)間。
不要把社會(huì)保障號(hào)碼(SSN)或身份證號(hào)碼(ID)選作鍵
永遠(yuǎn)都不要使用 SSN 或 ID 作為數(shù)據(jù)庫的鍵。除了隱私原因以外,須知政府越來越趨向于不準(zhǔn)許把 SSN 或 ID 用作除收入相關(guān)以外的其他目的,SSN 或 ID 需要手工輸入。永遠(yuǎn)不要使用手工輸入的鍵作為主鍵,因?yàn)橐坏┠爿斎脲e(cuò)誤,你唯一能做的就是刪除整個(gè)記錄然后從頭開始。
我在破解他人的程序時(shí)候,我看到很多人把 SSN 或 ID 還曾被用做系列號(hào),當(dāng)然盡管這么做是非法的。而且人們也都知道這是非法的,但他們已經(jīng)習(xí)慣了。后來,隨著盜取身份犯罪案件的增加,我現(xiàn)在的同行正痛苦地從一大攤子數(shù)據(jù)中把 SSN 或 ID 刪除。
不要用用戶的鍵
在確定采用什么字段作為表的鍵的時(shí)候,可一定要小心用戶將要編輯的字段。通常的情況下不要選擇用戶可編輯的字段作為鍵。這樣做會(huì)迫使你采取以下兩個(gè)措施:
* 在創(chuàng)建記錄之后對(duì)用戶編輯字段的行為施加限制。假如你這么做了,你可能會(huì)發(fā)現(xiàn)你的應(yīng)用程序在商務(wù)需求突然發(fā)生變化,而用戶需要編輯那些不可編輯的字段時(shí)缺乏足夠的靈活性。當(dāng)用戶在輸入數(shù)據(jù)之后直到保存記錄才發(fā)現(xiàn)系統(tǒng)出了問題他們?cè)撛趺聪耄縿h除重建?假如記錄不可重建是否讓用戶走開?
* 提出一些檢測(cè)和糾正鍵沖突的方法。通常,費(fèi)點(diǎn)精力也就搞定了,但是從性能上來看這樣做的代價(jià)就比較大了。還有,鍵的糾正可能會(huì)迫使你突破你的數(shù)據(jù)和商業(yè)/用戶界面層之間的隔離。
所以還是重提一句老話:你的設(shè)計(jì)要適應(yīng)用戶而不是讓用戶來適應(yīng)你的設(shè)計(jì)。
不讓主鍵具有可更新性的原因是在關(guān)系模式下,主鍵實(shí)現(xiàn)了不同表之間的關(guān)聯(lián)。比如,Customer 表有一個(gè)主鍵 CustomerID,而客戶的定單則存放在另一個(gè)表里。Order 表的主鍵可能是 OrderNo 或者 OrderNo、CustomerID 和日期的組合。不管你選擇哪種鍵設(shè)置,你都需要在 Order 表中存放 CustomerID 來保證你可以給下定單的用戶找到其定單記錄。
假如你在 Customer 表里修改了 CustomerID,那么你必須找出 Order 表中的所有相關(guān)記錄對(duì)其進(jìn)行修改。否則,有些定單就會(huì)不屬于任何客戶——數(shù)據(jù)庫的完整性就算完蛋了。如果索引完整性規(guī)則施加到表一級(jí),那么在不編寫大量代碼和附加刪除記錄的情況下幾乎不可能改變某一條記錄的鍵和數(shù)據(jù)庫內(nèi)所有關(guān)聯(lián)的記錄。而這一過程往往錯(cuò)誤叢生所以應(yīng)該盡量避免。
可選鍵(候選鍵)有時(shí)可做主鍵
記住,查詢數(shù)據(jù)的不是機(jī)器而是人。假如你有可選鍵,你可能進(jìn)一步把它用做主鍵。那樣的話,你就擁有了建立強(qiáng)大索引的能力。這樣可以阻止使用數(shù)據(jù)庫的人不得不連接數(shù)據(jù)庫從而恰當(dāng)?shù)倪^濾數(shù)據(jù)。在嚴(yán)格控制域表的數(shù)據(jù)庫上,這種負(fù)載是比較醒目的。如果可選鍵真正有用,那就是達(dá)到了主鍵的水準(zhǔn)。
我的看法是,假如你有可選鍵,比如國家表內(nèi)的 state_code,你不要在現(xiàn)有不能變動(dòng)的唯一鍵上創(chuàng)建后續(xù)的鍵。你要做的無非是創(chuàng)建毫無價(jià)值的數(shù)據(jù)。如你因?yàn)檫^度使用表的后續(xù)鍵[別名]建立這種表的關(guān)聯(lián),操作負(fù)載真得需要考慮一下了。
別忘了外鍵
大多數(shù)數(shù)據(jù)庫索引自動(dòng)創(chuàng)建的主鍵字段。但別忘了索引外鍵字段,它們?cè)谀阆氩樵冎鞅碇械挠涗浖捌潢P(guān)聯(lián)記錄時(shí)每次都會(huì)用到。還有,不要索引 memo/notes 字段而且不要索引大型文本字段(許多字符),這樣做會(huì)讓你的索引占據(jù)大量的數(shù)據(jù)庫空間。
第 4 部分各種小技巧 文檔、文檔、文檔
對(duì)所有的快捷方式、命名規(guī)范、限制和函數(shù)都要編制文檔。
采用給表、列[字段]、觸發(fā)器等加注釋的數(shù)據(jù)庫工具。是的,這有點(diǎn)費(fèi)事,但從長遠(yuǎn)來看,這樣做對(duì)開發(fā)、支持和跟蹤修改非常有用。
取決于你使用的數(shù)據(jù)庫系統(tǒng),可能有一些軟件會(huì)給你一些供你很快上手的文檔。你可能希望先開始在說,然后獲得越來越多的細(xì)節(jié)。或者你可能希望周期性的預(yù)排,在輸入新數(shù)據(jù)同時(shí)隨著你的進(jìn)展對(duì)每一部分細(xì)節(jié)化。不管你選擇哪種方式,總要對(duì)你的數(shù)據(jù)庫文檔化,或者在數(shù)據(jù)庫自身的內(nèi)部或者單獨(dú)建立文檔。這樣,當(dāng)你過了一年多時(shí)間后再回過頭來做第 2 個(gè)版本,你犯錯(cuò)的機(jī)會(huì)將大大減少。
使用常用英語(或者其他任何語言)而不要使用編碼
為什么我們經(jīng)常采用編碼(比如 9935A 可能是?青島啤酒?的供應(yīng)代碼,4XF788-Q 可能是帳目編碼)?理由很多。但是用戶通常都用英語進(jìn)行思考而不是編碼。工作 5 年的會(huì)計(jì)或許知道 4XF788-Q 是什么東西,但新來的可就不一定了。在創(chuàng)建下拉菜單、列表、報(bào)表時(shí)最好按照英語名排序。假如你需要編碼,那你可以在編碼旁附上用戶知道的英語。
保存常用信息
讓一個(gè)表專門存放一般數(shù)據(jù)庫信息非常有用。我常在這個(gè)表里存放數(shù)據(jù)庫當(dāng)前版本、最近檢查/修復(fù)(對(duì) FoxPro)、關(guān)聯(lián)設(shè)計(jì)文檔的名稱、客戶等信息。這樣可以實(shí)現(xiàn)一種簡單機(jī)制跟蹤數(shù)據(jù)庫,當(dāng)客戶抱怨他們的數(shù)據(jù)庫沒有達(dá)到希望的要求而與你聯(lián)系時(shí),這樣做對(duì)非客戶機(jī)/服務(wù)器環(huán)境特別有用。
測(cè)試、測(cè)試、反復(fù)測(cè)試
建立或者修訂數(shù)據(jù)庫之后,必須用用戶新輸入的數(shù)據(jù)測(cè)試數(shù)據(jù)字段。最重要的是,讓用戶進(jìn)行測(cè)試并且同用戶一道保證你選擇的數(shù)據(jù)類型滿足商業(yè)要求。測(cè)試需要在把新數(shù)據(jù)庫投入實(shí)際服務(wù)之前完成。
檢查設(shè)計(jì)
在開發(fā)期間檢查數(shù)據(jù)庫設(shè)計(jì)的常用技術(shù)是通過其所支持的應(yīng)用程序原型檢查數(shù)據(jù)庫。換句話說,針對(duì)每一種最終表達(dá)數(shù)據(jù)的原型應(yīng)用,保證你檢查了數(shù)據(jù)模型并且查看如何取出數(shù)據(jù)。
Microsoft Visual FoxPro 設(shè)計(jì)技巧
對(duì)復(fù)雜的 Microsoft Visual FoxPro 數(shù)據(jù)庫應(yīng)用程序而言,可以把所有的主表放在一個(gè)數(shù)據(jù)庫容器文件里,然后增加其他數(shù)據(jù)庫表文件和裝載同原有數(shù)據(jù)庫有關(guān)的特殊文件。根據(jù)需要用這些文件連接到主文件中的主表。比如數(shù)據(jù)輸入、數(shù)據(jù)索引、統(tǒng)計(jì)分析、向管理層或者政府部門提供報(bào)表以及各類只讀查詢等。這一措施簡化了用戶和組權(quán)限的分配,而且有利于應(yīng)用程序函數(shù)(存儲(chǔ)過程)的分組和劃分,從而在程序必須修改的時(shí)候易于管理。
第五篇:數(shù)據(jù)庫設(shè)計(jì)評(píng)分標(biāo)準(zhǔn)
系統(tǒng)評(píng)分標(biāo)準(zhǔn)(40%)
一、系統(tǒng)功能設(shè)計(jì)的合理性(40分)
二、數(shù)據(jù)庫設(shè)計(jì)的合理性(60分)
總結(jié)報(bào)告評(píng)分標(biāo)準(zhǔn)(30%)
一、文章內(nèi)容是否合理:基本上包括以下內(nèi)容:(80分)
前言:簡要說明選題的背景和意義,應(yīng)用技術(shù)領(lǐng)域及范圍,設(shè)計(jì)的原理、方法和主要內(nèi)容,設(shè)計(jì)的結(jié)果。(字?jǐn)?shù)300-400字)(10分)
正文:一般應(yīng)包括以下內(nèi)容:
(1)引言:描述設(shè)計(jì)的目的、意義與任務(wù);(10分)
(2)數(shù)據(jù)庫設(shè)計(jì):包括數(shù)據(jù)庫設(shè)計(jì)各個(gè)階段(1)需求分析2)概念設(shè)計(jì) 3)邏輯設(shè)計(jì)4)物理設(shè)計(jì)5)數(shù)據(jù)庫的實(shí)施6)功能模塊代碼)(40分)
(3)總結(jié):存在問題與建議、收獲和體會(huì)。(20分)
附錄:對(duì)設(shè)計(jì)中不宜放在正文中的圖、表、程序等應(yīng)放在附錄中說明。
二、文章的格式是否存在較多的錯(cuò)字,錯(cuò)句,錯(cuò)誤排版。(20分)
平時(shí)成績標(biāo)準(zhǔn)(10%)
一、打游戲一次或做與課設(shè)無關(guān)的事情一次平時(shí)成績0分
二、對(duì)待課設(shè)的態(tài)度
出勤成績?cè)u(píng)分標(biāo)準(zhǔn)(20%)
全勤無遲到早退100分
無故缺勤一次扣50分