《銀行ATM存取款機系統(tǒng)設(shè)計與實現(xiàn)》課程設(shè)計報告_第1頁
《銀行ATM存取款機系統(tǒng)設(shè)計與實現(xiàn)》課程設(shè)計報告_第2頁
《銀行ATM存取款機系統(tǒng)設(shè)計與實現(xiàn)》課程設(shè)計報告_第3頁
《銀行ATM存取款機系統(tǒng)設(shè)計與實現(xiàn)》課程設(shè)計報告_第4頁
《銀行ATM存取款機系統(tǒng)設(shè)計與實現(xiàn)》課程設(shè)計報告_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、內(nèi)蒙古科技大學(xué)數(shù)據(jù)庫技術(shù)與開發(fā)課程設(shè)計報告項目名稱:銀行atm存取款機系統(tǒng)設(shè)計與實現(xiàn)姓 名:專 業(yè):軟件工程指導(dǎo)教師:完成日期:2015-11-21目錄實訓(xùn)一:制定數(shù)據(jù)庫設(shè)計與編程規(guī)范3一、總則31、目的32、基本原則33、基本設(shè)計規(guī)范3二、數(shù)據(jù)庫設(shè)計規(guī)范41、 表設(shè)計規(guī)范42、反規(guī)范化表設(shè)計43、大表設(shè)計規(guī)范54、臨時表設(shè)計規(guī)范65、分區(qū)表設(shè)計規(guī)范66、列(字段)設(shè)計規(guī)范77、索引設(shè)計規(guī)范88、命名規(guī)范8三、數(shù)據(jù)庫編程規(guī)范10實訓(xùn)二:數(shù)據(jù)庫分析設(shè)計與建模13一、分析銀行atm存取款系統(tǒng)實體13二、規(guī)范數(shù)據(jù)庫結(jié)構(gòu)設(shè)計131.第一范式132.第二范式133.第三范式14三、繪制cdm模型、生成p

2、dm模型和生成t-sql語句14實訓(xùn)三:創(chuàng)建數(shù)據(jù)庫24一、創(chuàng)建數(shù)據(jù)庫24二、創(chuàng)建各個數(shù)據(jù)表及相關(guān)的約束25三、添加外鍵約束和生成數(shù)據(jù)庫關(guān)系圖29實訓(xùn)四:創(chuàng)建觸發(fā)器和插入測試數(shù)據(jù)30一、創(chuàng)建級聯(lián)觸發(fā)器301.創(chuàng)建insert觸發(fā)器302.創(chuàng)建insert觸發(fā)器323.創(chuàng)建insert觸發(fā)器344.創(chuàng)建insert觸發(fā)器365.創(chuàng)建delete觸發(fā)器376.創(chuàng)建update觸發(fā)器39二、插入數(shù)據(jù)表的測試數(shù)據(jù)431.向bankbusinesstype表添加測試數(shù)據(jù)432.向bankcustomer表添加測試數(shù)據(jù)443.向bankcard表添加測試數(shù)據(jù)464.bankdealinfo表的測試數(shù)據(jù)48實

3、訓(xùn)五:模擬常規(guī)業(yè)務(wù)51一、修改客戶密碼51二、辦理銀行卡掛失52三、統(tǒng)計銀行資金流通余額和盈利結(jié)算52四、查詢本周開戶信息54五、查詢本月單次交易金額最高的卡號和總交易金額最高的卡號55六、查詢掛失客戶56七、催款提醒業(yè)務(wù)57實訓(xùn)六:創(chuàng)建、使用視圖58一、輸出銀行客戶記錄視圖vw_userinfo58二、輸出銀行卡記錄視圖vw_cardinfo59三、輸出銀行卡交易記錄視圖vw_transinfo61四、根據(jù)客戶登錄名查詢該客戶賬戶信息vw_oneuserinfo61實訓(xùn)七:存儲過程實現(xiàn)業(yè)務(wù)處理62一、完成存款或取款業(yè)務(wù)62二、產(chǎn)生隨機卡號66三、完成開戶業(yè)務(wù)67四、分頁顯示查詢交易數(shù)據(jù)70五

4、、打印客戶對賬單72六、統(tǒng)計未發(fā)生交易的賬戶76七、統(tǒng)計銀行卡交易量和交易額80實訓(xùn)八:利用事務(wù)實現(xiàn)轉(zhuǎn)賬87心得體會94實訓(xùn)一:制定數(shù)據(jù)庫設(shè)計與編程規(guī)范一、 總則1、目的為了規(guī)范開發(fā)過程中sql語句的編寫工作,提高sql 語句共享,避免語義或語句相同的sql語句重復(fù)解析,優(yōu)化sql查詢,培養(yǎng)良好的代碼風(fēng)格。2、基本原則以大小寫敏感編寫sql語句。 盡量使用unicode 數(shù)據(jù)類型。 優(yōu)先使用連接代替子查詢或嵌套查詢。 盡量使用參數(shù)化sql查詢代替語句拼接sql查詢。 禁止使用拼音+英語的方式來命名sql對象或變量。 盡量使用存儲過程代替sql語句。3、基本設(shè)計規(guī)范(1) 長度規(guī)范凡是需要命名的

5、對象其標(biāo)識符均控制在30個字符以內(nèi),也即:sql server中的表名、字段名、函數(shù)名、存儲過程、觸發(fā)器、視圖等名字長度要盡量不超過30個字符長度。 (2) 構(gòu)成規(guī)范 數(shù)據(jù)庫各種名稱必須以字母開頭,但嚴禁以系統(tǒng)關(guān)鍵字開頭,名稱只能含有字母、數(shù)字以及下劃線“_”三類字符,“_”用于間隔名稱中的各語義字段;不要使用系統(tǒng)保留字作表名。(3) 大小寫規(guī)范 構(gòu)成sql server數(shù)據(jù)庫中的各種名稱(表名、字段名、過程名、視圖名等所有命名符的首字母需要使用大寫,也即每個命名單詞的首字母大寫,其它字符小寫。但對于簡寫或縮寫的短單詞,如id、 ui可以全為大寫。(4) 主鍵規(guī)范除臨時表、流水表以及日志表外,

6、其它表都要建立主鍵。主鍵最好設(shè)計成單一主鍵,盡量不要用復(fù)合主鍵,盡量使用沒有業(yè)務(wù)語義的字段作為主鍵,如采用按順序自增的數(shù)值型字段為主鍵。(5) 注釋規(guī)范 每個表,每個字段都要有注釋,說明其含義,對于冗余字段還要特別說明其維護方法,外鍵字段要說明參照于那個表,另外對于存儲過程、視圖、觸發(fā)器、函數(shù)等代碼均要增加注釋,以保持代碼的可讀性以及后續(xù)的可維護性。(6) 行大小規(guī)范sql server的1頁的大小是8k,因此一行的數(shù)據(jù)要控制到8k之內(nèi),如果超過8k要想辦法將表進行拆分成多個子表。二、 數(shù)據(jù)庫設(shè)計規(guī)范1、 表設(shè)計規(guī)范(1) 第一范式 1nf是最基本的范式,用以確保保持每列原子性,如數(shù)據(jù)庫表中的

7、所有字段值都是不可分解的原子值,就說明該數(shù)據(jù)庫表滿足了第一范式。(2) 第二范式 2nf需要確保表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)。也即在一個表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在一張表中。(3) 第三范式 3nf需要確保表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。比如在設(shè)計一個訂單數(shù)據(jù)表的時候,可以將客戶編號作為一個外鍵和訂單表建立相應(yīng)的關(guān)系,而不可以在訂單表中添加關(guān)于客戶其它信息(比如姓名、所屬公司等)的字段。2、反規(guī)范化表設(shè)計(1) 原因 數(shù)據(jù)庫規(guī)范化設(shè)計目前占數(shù)據(jù)庫設(shè)計主導(dǎo)地位,規(guī)范化設(shè)計達到了數(shù)據(jù)存儲空間最佳利用和控制數(shù)據(jù)冗余,但是也帶來了查詢性能的降

8、低,因此在適當(dāng)?shù)臈l件下,對數(shù)據(jù)庫進行反規(guī)范化設(shè)計也是很有必要的。(2) 反規(guī)范化設(shè)計的目的反規(guī)范化設(shè)計通過增加數(shù)據(jù)冗余,數(shù)據(jù)分片等策略來改進原有規(guī)范設(shè)計,以達到改善數(shù)據(jù)庫性能的目的,也即以空間換性能。需要注意的是:數(shù)據(jù)庫設(shè)計沒有一層不變的規(guī)范,也沒有百分百完美的模式,因此要結(jié)合實際的應(yīng)用需要統(tǒng)一考量設(shè)計,未來的發(fā)展方向?qū)嵌喾N設(shè)計規(guī)范的混搭模式,即數(shù)據(jù)庫中即有規(guī)范化設(shè)計又有反規(guī)范化設(shè)計。(3) 遵循原則全面了解系統(tǒng),確信對系統(tǒng)的邏輯設(shè)計有全面的了解,當(dāng)改變數(shù)據(jù)庫時,會對其它模塊帶來哪些影響。采取索引、數(shù)據(jù)存儲等技術(shù)提升性能,分析系統(tǒng)的數(shù)據(jù)量,對于數(shù)據(jù)量不大,響應(yīng)時間不高的盡量通過數(shù)據(jù)庫本身技

9、術(shù)來提升性能數(shù)據(jù)完整性維護,使用反規(guī)范化帶來的最大問題是數(shù)據(jù)完整性問題,在程序設(shè)計中要充分考慮到數(shù)據(jù)庫事務(wù)的處理,增刪改查保證數(shù)據(jù)庫操作一致性;完整性約束還可以通過批處理及觸發(fā)器實現(xiàn)(盡量少用觸發(fā)器)。(4) 反規(guī)范化表設(shè)計方法兩大方法增加冗余列 關(guān)系表中的冗余 層次關(guān)系中的冗余數(shù)據(jù)分片 水平分片 垂直分片 混合分片3、大表設(shè)計規(guī)范(1) 數(shù)據(jù)保留策略大表由于數(shù)據(jù)量較大,往往是系統(tǒng)的性能瓶頸所在,因此對于大表的設(shè)計好考慮到今后的數(shù)據(jù)轉(zhuǎn)移、分片、 partition等,并且對大表以及其相關(guān)表的數(shù)據(jù)保留時間也要有一個提前規(guī)劃,以免今后出現(xiàn)性能問題束手無策。(2) 必備字段要求每個大表都應(yīng)該添加以下

10、幾個有用的字段,分別為創(chuàng)建日期、修改日期、操作人以及版本標(biāo)記,創(chuàng)建這些字段的目的是為今后的數(shù)據(jù)轉(zhuǎn)移以及分片或分區(qū)做準(zhǔn)備,同時也有利于今后的數(shù)據(jù)審計等。(3) 注意事項基于大表的任何操作都要慎重思考,通常情況下要禁止在大表上創(chuàng)建觸發(fā)器,禁止在大表上做頻繁的批量更新或刪除動作,禁止在生產(chǎn)時間對大表做ddl操作,禁止在大表上做全表掃描(full scan)等。4、臨時表設(shè)計規(guī)范(1) 臨時表功能sql server分為全局臨時表和局部臨時表,臨時表在很多場合下能帶來意想不到的效果,尤其是需要中轉(zhuǎn)的數(shù)據(jù)記錄集采用臨時表能提升系統(tǒng)性能。臨時表支持索引、約束、排序等實體表具有的功能。(2) 存儲特點臨時表

11、的數(shù)據(jù)存儲在tempdb數(shù)據(jù)庫中,因此過于頻繁的創(chuàng)建臨時表會增加tempdb庫的負荷,尤其是數(shù)據(jù)量超過10w條記錄的臨時表更是會影響tempdb庫的性能,由此在某些情況下可用cte替代臨時表的使用。(3) 注意事項臨時表執(zhí)行完畢后,要及時的手工drop掉,及時釋放資源,減輕系統(tǒng)的loading,另外特別注意的是要盡量禁止使用全局臨時表,全局適合多個session間的數(shù)據(jù)交互,但往往會引起數(shù)據(jù)的串值。5、分區(qū)表設(shè)計規(guī)范(1) 功能定義目前sql server 2005/2008/2012的企業(yè)版均支持表分區(qū),表分區(qū)的目的是將一個大表的數(shù)據(jù)從物理上分散存儲到不同的物理磁盤或文件組,從而提高該表的讀

12、寫性能。對于小于1000w條記錄的表無需做表分區(qū)。(2) 分區(qū)規(guī)范 當(dāng)表的數(shù)據(jù)量超過1000w條記錄時,要考慮做表分區(qū)。 sql server目前僅支持范圍分區(qū),因此可以以時間或數(shù)值型代碼作為分區(qū)字段,分區(qū)的總體原則是將數(shù)據(jù)盡可能平均分布到各個分區(qū)文件組,以減少熱點訪問數(shù)據(jù)。(3) 注意規(guī)范正確的使用分區(qū)表能帶來數(shù)據(jù)庫性能的提升,但運用不當(dāng)也可能會適得其反,導(dǎo)致系統(tǒng)速度變慢,甚至引起系統(tǒng)宕機。因此對于分區(qū)表,在應(yīng)用程序代碼中的增刪改查必須要加上分區(qū)字段條件,否則系統(tǒng)會遍歷所有分區(qū)文件組。6、列(字段)設(shè)計規(guī)范(1) 命名規(guī)范盡量采用有意義的字段名,使描述盡可能清楚,如采用縮寫,盡量使用通用的縮

13、寫語言,如addr代表address,避免出現(xiàn)只有自己理解的縮寫。(2) 日期字段時效性數(shù)據(jù)應(yīng)包括“創(chuàng)建時間/修改時間”字段,時間標(biāo)記對查找數(shù)據(jù)、清理數(shù)據(jù)、排序合并特別有用,另外要根據(jù)具體業(yè)務(wù)考量時間字段的類型,如在smalldatetime和datetime類型進行選擇。(3) 注意保留詞 對于字段的命名,要確保字段名沒有和保留詞、數(shù)據(jù)庫系統(tǒng)或者常用方法沖突,比如master、 cross、 address、 substring、 len、 sysobjects等詞就不適合用來做字段的獨立命名。(4) 數(shù)值規(guī)范數(shù)值型的主要有int、 bigint、 tinyint、 smallint、 fl

14、oat、numeric、 money等類型,要根據(jù)實際應(yīng)用選擇合適的類型,如字段的數(shù)據(jù)為小于255的整形數(shù)字,那么就要選擇tinyint;如字段數(shù)據(jù)小于32767的整形數(shù)字,那么就要選擇smallint,以此類推。(5) 文本規(guī)范文本類型主要有char、 varchar、 text等類型,要根據(jù)實際應(yīng)用選擇合適的類型,如字段文本長度固定為8位,那么就要用char(8);如文本長度最大為100,并且大小是非定長的,那么就要設(shè)為varchar(100)。并且以上文本若為漢字,那么就要設(shè)為nvarchar和nchar。(6) 字段命名技巧字段命名要統(tǒng)一規(guī)范,同一個字段在不同的表中命名要一致,另外字段

15、名一般都要帶上業(yè)務(wù)模塊的前綴,如訂單(order)價格字段命名為or_price,部門(department)編號為dep_no。命名規(guī)范沒有那個是最合理的,只有定義好最適合自己的統(tǒng)一規(guī)范即可。7、索引設(shè)計規(guī)范(1) 外鍵建立索引 外鍵不建立索引,將有可能導(dǎo)致兩個嚴重的問題:1).更新相關(guān)的表產(chǎn)生死鎖;2).兩表關(guān)聯(lián)查詢時性能低下。因此通常情況下都必須要求外鍵建立索引。(2) 聯(lián)合索引規(guī)范當(dāng)數(shù)據(jù)對某表經(jīng)常要多條件查詢時,可能就需要建立聯(lián)合索引,聯(lián)合索引的第一個引導(dǎo)列字段非常重要,引導(dǎo)列字段通常要能過濾掉大部分數(shù)據(jù),這樣方能減少io的讀寫,提高性能。非引導(dǎo)列字段在引導(dǎo)列的查詢數(shù)據(jù)基礎(chǔ)上繼續(xù)過濾數(shù)

16、據(jù),以提高查詢速度。聯(lián)合索引對更新會產(chǎn)生一定的性能影響。(3) 禁用多余索引數(shù)據(jù)庫索引能提高查詢速度,但會增加寫操作的開銷,因此對一些幾月或者從沒有使用過的索引要刪除掉,以免增大數(shù)據(jù)庫的負荷。(4) 重復(fù)索引問題一般情況下,盡量避免重復(fù)索引的出現(xiàn),重復(fù)索引很容易引起死鎖,減低數(shù)據(jù)庫的并發(fā)訪問。重復(fù)索引也會造成索引的維護困難。(5) 索引數(shù)量限制數(shù)據(jù)庫索引主要用來解決讀的性能瓶頸,但是會增加寫操作的負荷,因此過多的索引會造成更新速度變慢,甚至?xí)鸩灰乃梨i。一般情況下表中的索引不要超過5個。(6) 注意事項建立索引前,要充分了解表的使用及數(shù)據(jù)特性,要了解表的查詢條件和查詢頻率,甚至隨著業(yè)務(wù)的變

17、化而引起表數(shù)據(jù)使用狀況的變化,帶之而來的是索引也需要相應(yīng)調(diào)整。8、命名規(guī)范(1) 存儲過程命名遵守統(tǒng)一的規(guī)范,對于業(yè)務(wù)存儲過程要以p或proc開頭,接著加上”_”,然后再加上模塊名稱簡寫和具體的業(yè)務(wù)詞,最后加上執(zhí)行類型。例如:proc_depdetailselect: 獲取部門詳細信息的存儲過程;proc_depdetailinsert: 增加部門詳細信息的存儲過程;proc_depdetailupdate:修改部門詳細信息的存儲過程;proc_depdetaildelete: 刪除部門詳細信息的存儲過程;(2) 公共存儲過程以p或proc開頭,接著加上“_”,然后加上common的縮寫詞co

18、mm,最后加上執(zhí)行類型。如:proc_commmaxidselect: 獲取最大id的存儲過程;(3) 數(shù)據(jù)庫的存儲過程命名嚴禁以sp開頭,sp通常表示系統(tǒng)數(shù)據(jù)庫存儲過程名的前綴。(4) 表命名遵守統(tǒng)一的規(guī)范,對于業(yè)務(wù)表要以模塊名稱簡寫詞開頭,接著加上“_”,最后加上具體的業(yè)務(wù)名詞。例如:dep_detail: 部門明細表;dep_master: 部門主表;po_scrap: 訂單報廢表;(5) 觸發(fā)器以tri開頭,接著加上”_”,然后加上表名,最后加上“_”+執(zhí)行動作。例如:tri_po_scrap_insert: 基于表po_scrap的插入觸發(fā)器;tri_po_scrap_update:

19、 基于表po_scrap的更新觸發(fā)器;tri_po_scrap_delete: 基于表po_scrap的刪除觸發(fā)器;(6) 視圖我們約定,字段由前綴和實際名字組成,中間用下劃線連接。前綴:使用小寫字母vi,表示視圖。因此,合法的視圖名類似如下。vi_user vi_userinfo(7) 索引普通索引以idx開頭,接著加上”_”,然后加上表名,最后加上“_”+字段名。例如表po_scrap以update_time字段建立的索引命名為:idx_po_scrap_update_time: 索引字段為update_time;idx_po_scrap_wh_code_buyer_: 索引字段分別為wh

20、_code和buyer;主鍵索引以pk開頭,接著加上”_”,然后加上表名,最后加上“_”+字段名。例如表po_scrap以id字段建立的主鍵命名為:pk_po_scrap_id: 主鍵字段為id;唯一索引以ux開頭,接著加上”_”,然后加上表名,最后加上“_”+字段名。例如表po_scrap以serial_no和barcode兩個字段建立的唯一索引命名為:ux_po_scrap_serial_no_barcode: 以serial_no和barcode字段建立的唯一索引。外鍵以fk_為前綴,如:fk_po_scrap_gen_code;函數(shù)以fn_為前綴,如:fn_data_split三、 數(shù)

21、據(jù)庫編程規(guī)范(1) 書寫規(guī)范關(guān)鍵字建議用大寫,同樣的代碼書寫格式保持一致,sql腳本采用縮進風(fēng)格,風(fēng)格一致,縮進格式一致,使用空格。如:select col_1,col_2from tb_1where col_2getdate()(2) 避免select *避免使用select *語句,應(yīng)給出字段列表,如:select col_1,col_2,col_3from tb_1(3) insert規(guī)范通常情況下,insert語句要給出具體的字段列表,避免采用” insertinto tb_1 values(值1,值2,值3) “用法,此種用法往往會由于表結(jié)構(gòu)變遷而導(dǎo)致語句不可執(zhí)行。(4) 避免隱式轉(zhuǎn)

22、換書寫時,必須明確表結(jié)構(gòu)及表中各個字段的數(shù)據(jù)類型,特別是查詢條件中的字段,要避免由于類型的不同導(dǎo)致數(shù)據(jù)類型轉(zhuǎn)換的發(fā)生,從而減少因為數(shù)據(jù)類型轉(zhuǎn)換產(chǎn)生的系統(tǒng)開銷。(5) null陷阱null不要直接用來進行運算符的比較,也不要和其它值進行連接操作,判斷一個值是否為null值時,要采用is null來進行比較。(6) like規(guī)范 like子句應(yīng)盡量前段匹配,要避免通配符在前段,以免導(dǎo)致全索引掃描的發(fā)生。(7) 參數(shù)化代碼sql中常量的直接使用,會導(dǎo)致sql語句頻繁的硬解析,進而嚴重影響數(shù)據(jù)庫的性能,基于這些原因,代碼中要盡量采用參數(shù)綁定,以減少語句硬解析的次數(shù),從而提高語句執(zhí)行性能。(8) 動態(tài)s

23、ql動態(tài)sql是在運行時才進行解析的,相當(dāng)于是硬解析,因此會損失一些系統(tǒng)性能,但是動態(tài)sql寫法靈活,因此在某些情況下需要以性能換靈活,但對于用靜態(tài)語句就能簡單實現(xiàn)的sql,就不要用動態(tài)sql語句。(9) 嵌套層級限制 嵌套查詢盡量少使用,尤其是對于超過3層的嵌套查詢更要慎用,對于復(fù)雜的嵌套語句要根據(jù)業(yè)務(wù)進行拆分為多條sql來實現(xiàn),或者通過臨時表來取代一部分嵌套層級。(10) 排序規(guī)范sql語句中要盡量減少排序,對查詢結(jié)果進行的排序會大大降低系統(tǒng)的性能,并且會增加tempdb數(shù)據(jù)庫的負荷,因此在開發(fā)時間寬松情況下,要盡量將排序動作放到應(yīng)用程序?qū)尤ネ瓿伞?11) hint使用hint是數(shù)據(jù)庫的一

24、種特別用法,通過它能影響語句的執(zhí)行,改變sql的執(zhí)行計劃,但hint用法有時會導(dǎo)致錯誤的結(jié)果,因此正式運行環(huán)境一般不建議使用。(12) 代碼注釋要求 注釋是指程序中會被編譯器忽略掉的部分,目的是描述代碼的用途及更新時間,合理的添加注釋可以使得程序結(jié)構(gòu)清晰,可以使代碼更好理解,便于系統(tǒng)后續(xù)的維護。一般情況下,注釋要不少于代碼的十分之一。(13) 靜態(tài)sqlsql語句要盡可能采用靜態(tài)sql,靜態(tài)sql第一次執(zhí)行時會將編譯器解析的結(jié)果存儲在緩存中,下次執(zhí)行該靜態(tài)sql時會直接從緩存中獲取其執(zhí)行計劃,相當(dāng)于是軟解析,因此采用靜態(tài)sql可以減少語句的解析時間,提升了數(shù)據(jù)庫的性能。(14) 最小事務(wù)原則數(shù)

25、據(jù)庫事務(wù)用來保持數(shù)據(jù)的一致性,但是對于一個執(zhí)行時間較長的大事務(wù),會造成數(shù)據(jù)庫鎖的增加,當(dāng)鎖越積越多的時候就會從行鎖升級到頁鎖,從業(yè)鎖升級到表鎖,從而嚴重影響數(shù)據(jù)庫的性能。因此,在能滿足數(shù)據(jù)一致性的前提下,要盡量將非一致性要求的語句代碼從事務(wù)中移除,以便提升數(shù)據(jù)庫的并發(fā)訪問。(15) 順序提交 順序提交是一個好的代碼編寫習(xí)慣,順序提交可以減少死鎖的發(fā)生,并且還能增加代碼的可讀性及可維護性。實訓(xùn)二:數(shù)據(jù)庫分析設(shè)計與建模一、 分析銀行atm存取款系統(tǒng)實體圖1 銀行atm全局er圖二、 規(guī)范數(shù)據(jù)庫結(jié)構(gòu)設(shè)計1. 第一范式1nf是最基本的范式,用以確保保持每列原子性,如數(shù)據(jù)庫表中的所有字段值都是不可分解的

26、原子值,就說明該數(shù)據(jù)庫表滿足了第一范式。如在銀行客戶表bankcustomer中,不能將客戶信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;客戶信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現(xiàn)一次。簡而言之,第一范式就是無重復(fù)的列。2. 第二范式2nf需要確保表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)。也即在一個表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在一張表中。如在銀行業(yè)務(wù)類型表bankbusinesstype中,銀行業(yè)務(wù)類型名稱bbtname,銀行業(yè)務(wù)描述bbtcomment,銀行業(yè)務(wù)類型表中的每一個字段都與主鍵相關(guān)。3. 第三范式3nf需要確保表中

27、的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。比如在設(shè)計一個訂單數(shù)據(jù)表的時候,可以將客戶編號作為一個外鍵和訂單表建立相應(yīng)的關(guān)系,而不可以在訂單表中添加關(guān)于客戶其它信息(比如姓名、所屬公司等)的字段。如在銀行業(yè)務(wù)類型表bankbusinesstype中,銀行業(yè)務(wù)類型名稱bbtname,銀行業(yè)務(wù)描述bbtcomment,銀行業(yè)務(wù)類型表中的每一個字段都與主鍵直接相關(guān)。三、 繪制cdm模型、生成pdm模型和生成t-sql語句圖2 銀行存取款系統(tǒng)數(shù)據(jù)概念模型cdm圖3 銀行存取款系統(tǒng)數(shù)據(jù)物理模型pdm/*=*/* dbms name: sybase sql anywhere 11 */* created

28、 on: 2015/11/23 22:47:47 */*=*/if exists(select 1 from sys.sysforeignkey where role=fk_bankcard_a_bankbusi) then alter table bankcard delete foreign key fk_bankcard_a_bankbusiend if;if exists(select 1 from sys.sysforeignkey where role=fk_bankcard_jj_bankcust) then alter table bankcard delete foreign

29、 key fk_bankcard_jj_bankcustend if;if exists(select 1 from sys.sysforeignkey where role=fk_bankdeal_w_bankcard) then alter table bankdealinfo delete foreign key fk_bankdeal_w_bankcardend if;if exists( select 1 from sys.sysindex i, sys.systable t where i.table_id=t.table_id and i.index_name=bankbusin

30、esstype_pk and t.table_name=bankbusinesstype) then drop index bankbusinesstype.bankbusinesstype_pkend if;if exists( select 1 from sys.systable where table_name=bankbusinesstype and table_type in (base, gbl temp) then drop table bankbusinesstypeend if;if exists( select 1 from sys.sysindex i, sys.syst

31、able t where i.table_id=t.table_id and i.index_name=a_fk and t.table_name=bankcard) then drop index bankcard.a_fkend if;if exists( select 1 from sys.sysindex i, sys.systable t where i.table_id=t.table_id and i.index_name=jj_fk and t.table_name=bankcard) then drop index bankcard.jj_fkend if;if exists

32、( select 1 from sys.sysindex i, sys.systable t where i.table_id=t.table_id and i.index_name=bankcard_pk and t.table_name=bankcard) then drop index bankcard.bankcard_pkend if;if exists( select 1 from sys.systable where table_name=bankcard and table_type in (base, gbl temp) then drop table bankcardend

33、 if;if exists( select 1 from sys.sysindex i, sys.systable t where i.table_id=t.table_id and i.index_name=bankcustomer_pk and t.table_name=bankcustomer) then drop index bankcustomer.bankcustomer_pkend if;if exists( select 1 from sys.systable where table_name=bankcustomer and table_type in (base, gbl

34、temp) then drop table bankcustomerend if;if exists( select 1 from sys.sysindex i, sys.systable t where i.table_id=t.table_id and i.index_name=w_fk and t.table_name=bankdealinfo) then drop index bankdealinfo.w_fkend if;if exists( select 1 from sys.sysindex i, sys.systable t where i.table_id=t.table_i

35、d and i.index_name=bankdealinfo_pk and t.table_name=bankdealinfo) then drop index bankdealinfo.bankdealinfo_pkend if;if exists( select 1 from sys.systable where table_name=bankdealinfo and table_type in (base, gbl temp) then drop table bankdealinfoend if;/*=*/* table: bankbusinesstype */*=*/create t

36、able bankbusinesstype ( bbtid integer not null, bbtname char(20) not null, bbtcomment varchar(100) null, constraint pk_bankbusinesstype primary key (bbtid);/*=*/* index: bankbusinesstype_pk */*=*/create unique index bankbusinesstype_pk on bankbusinesstype (bbtid asc);/*=*/* table: bankcard */*=*/cre

37、ate table bankcard ( bcno char(19) not null, bbtid integer null, bcid integer null, bcpwd char(6) not null, bccurrency char(5) not null, bcopendate date not null, bcopenamount numeric(8,2) not null, bcregloss char(2) not null, bcexistbalance numeric(8,2) null, constraint pk_bankcard primary key (bcn

38、o);/*=*/* index: bankcard_pk */*=*/create unique index bankcard_pk on bankcard (bcno asc);/*=*/* index: jj_fk */*=*/create index jj_fk on bankcard (bcid asc);/*=*/* index: a_fk */*=*/create index a_fk on bankcard (bbtid asc);/*=*/* table: bankcustomer */*=*/create table bankcustomer ( bcid integer n

39、ot null, bcname char(20) null, bcicno char(18) null, bctel varchar(20) null, bcaddr varchar(100) null, constraint pk_bankcustomer primary key (bcid);/*=*/* index: bankcustomer_pk */*=*/create unique index bankcustomer_pk on bankcustomer (bcid asc);/*=*/* table: bankdealinfo */*=*/create table bankde

40、alinfo ( bdno integer not null, bcno char(19) null, bddealdate date null, bddealacount numeric(8,2) null, bddealtype char(10) null, bddealcomment varchar(100) null, constraint pk_bankdealinfo primary key (bdno);/*=*/* index: bankdealinfo_pk */*=*/create unique index bankdealinfo_pk on bankdealinfo (

41、bdno asc);/*=*/* index: w_fk */*=*/create index w_fk on bankdealinfo (bcno asc);alter table bankcard add constraint fk_bankcard_a_bankbusi foreign key (bbtid) references bankbusinesstype (bbtid) on update restrict on delete restrict;alter table bankcard add constraint fk_bankcard_jj_bankcust foreign

42、 key (bcid) references bankcustomer (bcid) on update restrict on delete restrict;alter table bankdealinfo add constraint fk_bankdeal_w_bankcard foreign key (bcno) references bankcard (bcno) on update restrict on delete restrict;實訓(xùn)三:創(chuàng)建數(shù)據(jù)庫一、 創(chuàng)建數(shù)據(jù)庫使用create database語句創(chuàng)建“atm存取款機系統(tǒng)”數(shù)據(jù)庫bankdb,數(shù)據(jù)文件和日志文件保存在指

43、定目錄下,文件增長率為15%。-(一)創(chuàng)建bankdb數(shù)據(jù)庫,數(shù)據(jù)庫文件和日志文件均保存在-文件夾d:documentprivatemicrosoft sql servermicrosoft sql server database下-文件增長率均為%,數(shù)據(jù)文件起始大小為mb,日志文件起始大小為mbcreate database bankdb on primary(name=nbankdb,filename=nd:documentprivatemicrosoft sql servermicrosoft sql server databasebankdb.mdf,size=20mb,maxsize

44、=50mb,filegrowth=15%)log on(name=nbankdb_log,filename=nd:documentprivatemicrosoft sql servermicrosoft sql server databasebankdb_log.ldf,size=10mb,maxsize=30mb,filegrowth=15%)go二、 創(chuàng)建各個數(shù)據(jù)表及相關(guān)的約束創(chuàng)建表時要求檢測是否存在表結(jié)構(gòu),如果存在,則先刪除再創(chuàng)建。根據(jù)銀行業(yè)務(wù),分析表中每個列相應(yīng)的約束要求,為每個表添加各種約束。-(二)創(chuàng)建數(shù)據(jù)表use bankdb;go-(1)判斷銀行業(yè)務(wù)類型表是否存在,若存在則刪除

45、-object_id函數(shù)返回參數(shù)(字符類型)標(biāo)識號if exists(select * from sysobjects whereid=object_id(nbankbusinesstype)drop table bankbusinesstype-創(chuàng)建銀行業(yè)務(wù)類型表,包含銀行業(yè)務(wù)類型編號bbtid,銀行業(yè)務(wù)類型名稱bbtname,銀行業(yè)務(wù)描述bbtcommentcreate table bankbusinesstype(-銀行業(yè)務(wù)類型編號,主鍵,自增長1bbtid int identity(1,1) primary key,-銀行業(yè)務(wù)類型名稱,非空bbtname char(20) not null,-銀行業(yè)務(wù)描述bbtcomment nvarchar(100);go-(2)判斷銀行卡客戶是否存在,若存在則刪除-object_id函數(shù)返回參數(shù)(字符類型)標(biāo)識號if exists(select * from sysobjects whereid=object_id(nbankcustomer)drop table bankcustomer-創(chuàng)建銀行客戶信息表,包含客戶編號bcid,客戶姓名

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論