数据库技术与应用课程设计报告.doc

上传人:w****2 文档编号:6469774 上传时间:2020-02-27 格式:DOC 页数:41 大小:1.03MB
返回 下载 相关 举报
数据库技术与应用课程设计报告.doc_第1页
第1页 / 共41页
数据库技术与应用课程设计报告.doc_第2页
第2页 / 共41页
数据库技术与应用课程设计报告.doc_第3页
第3页 / 共41页
点击查看更多>>
资源描述
数据库技术与应用课程设计报告学 号:1467159124姓 名:张喜泉专 业:软件工程指导教师:康懿完成日期:2016-12-24目录银行ATM存取款机系统设计与实现3一、项目背景31、项目任务32、项目技能目标33、需求概述34、开发环境35、 问题分析36、 实训进度安排5二、项目实训内容5制定数据库设计与编程规范51、 实训一:创建数据库52、 实训二:创建触发器和随机卡号的存储过程(2学时)93、 实训三:生成各个表的测试数据(4学时)114、实训四:模拟常规业务165、实训五:查询统计226、实训六:创建、使用视图257、实训七:存储过程实现业务处理28358、实训八:利用事务实现转账35三:心得体会41银行ATM存取款机系统设计与实现一、项目背景1、项目任务 创建数据库、创建表、创建约束 使用触发器和插入测试数据 模拟常规业务、创建视图 使用存储过程实现业务处理 利用事务实现较复杂的数据更新2、项目技能目标 使用T-SQL语句创建数据库、表和各种约束。 使用T-SQL语句编程实现常见业务。 使用触发器实现多表之间的级联更新。 使用事务和存储过程封装业务逻辑。 使用视图简化复杂的数据查询。 使用游标技术实现结果集的行集操作。3、需求概述某银行是一家民办的小型银行企业,现有十多万客户,公司将为该银行开发一套ATM存取款机系统,对银行日常的存取款业务进行计算机管理,以便保证数据的安全性,提高工作效率。要求根据银行存取款业务需求设计出符合第三范式的数据库结构,使用T-SQL语言创建数据库和表,并添加表约束,进行数据的增删改查,运用逻辑结构语句、事务、视图和存储过程,按照银行的业务需求,实现各项银行日常存款、取款和转账业务。4、开发环境 数据库:SQL SERVER 2008开发版5、 问题分析该项目的ATM存取款机业务如下:(1) 银行存取款业务介绍 银行为客户提供了各种银行存取款业务。详见表1表1 银行存取款业务业务描述活期无固定存期,可随时存取,存取金额不限的一种比较灵活的存款定活两便事先不约定存期,一次性存入,一次性支取的存款通知不约定存期,支取时需提前通知银行,约定支取日期和金额方能支取的存款整存整取选择存款期限,整笔存入,到期提取本息的一种定期储蓄。银行提供的存款期限有1年、2年和3年零存整取一种事先原定金额,逐月按约定金额存入,到期支取本息的定期储蓄。银行提供的存款期限由1年、2年和3年自助转账在ATM存取款机上办理同一币种账户的银行卡之间互相划转(2) 客户信息 每个客户凭个人身份证在银行可以开设多个银行卡账户,开设账户时,客户需要提供的开户数据如表2所示:表2 开设银行卡账户的客户信息数据描述姓名必须提供身份证号唯一确定客户,是由17位数字和1位数字或者字符X构成。联系电话手机号码:由11位数字构成,且前2位必须是13或者15、18开头。居住地址可以选择(3) 开户网点信息表3 开户网点信息数据描述网点编号编号由6位数字构成。网点名称开户行中文名称网点地址开户行所在地址信息。(4) 银行卡账户信息 银行为每个账户提供一个银行卡,每个银行卡可以存入一种币种的存款,银行保存账户如表3所示:表4 银行卡账户信息数据描述卡号银行的卡号由16位数字组成,其中:一般前8位代表特俗含义,如代表某总行某支行等,假定该行要求其营业厅的卡号格式为1010 3576 XXXX XXXX,后8位必须是随机产生且唯一,每4位号码后有空格。密码由6位数字构成,开户时默认为“888888”币种默认为RMB,目前该银行尚未开设其他币种存款业务。存款类型必须选择开户日期客户开设银行卡账户的日期,默认为当日开户金额客户开设银行卡账户时存入的金额,规定不得小于1元。是否挂失默认为“否”网点编号客户网点编号 客户持银行卡在ATM机上输入密码,经系统验证身份后办理存款、取款和转账等银行业务。银行规定,每个账户当前的存款金额不得小于1元。(5) 银行卡交易信息 银行在为客户办理业务时,需要记录每一笔账目,账目交易信息如表4所示:表1 银行卡交易信息数据描述卡号银行的卡号由16位数字组成交易日期默认为当日交易金额必须大于0元金额,必须为100元的整数倍交易类型包括:存款、取款、转入或者转出4种备注对每笔交易做必要的说明6、 实训进度安排实训进度安排如下表所示:表2 实训进度安排实训内容所需学时提交文档实训一:制定数据库设计与编程规范41份数据库设计与编程规范实训二:创建数据库4T-SQL源文件实训三:创建触发器和插入测试数据4T-SQL源文件实训五:模拟常规业务4T-SQL源文件实训六:创建和使用视图4T-SQL源文件实训七:存储过程实现业务处理6T-SQL源文件实训八:利用事务实现转账业务6T-SQL源文件二、项目实训内容实训内容由5个实训项目构成,建议在参考代码和实现步骤基础上进行改进,每个实训子项目的T-SQL语句写成1个T-SQL源文件,如item1.sql。 制定数据库设计与编程规范 参考技术文档:数据库设计规范 (1)、数据库设计规范(修订)、数据库设计及编写规范、编程规范(T-SQL)、Transact-SQL_数据库编程命名规范、SQL_Server数据库编程规范等技术文档, 制定一份3-5页,不少于1500字的数据库设计与SQL编程规范,要求至少包含各个数据库对象的命名规范、编程规范及注释规范。 该实训项目的设计与编程要求遵循该实训制定的数据库设计与编程规范。1、 实训一:创建数据库 阅读数据库结构相关描述表名:BankBusinessType银行业务类型表序号列名数据类型长度小数位标识主键外键允许空默认值说明1BBTIdint40是是否银行业务类型编号,自动增长列2BBTNamechar200否银行业务类型名称3BBTCommentvarchar1000是银行业务描述表名:BankCard银行卡序号列名数据类型长度小数位标识主键外键允许空默认值说明1BCNochar190是否卡号2BCPwdchar60否888888密码3BCCurrencychar50否RMB币种4BCBBTIdint40是否业务类型5BCOpenDatedate30否getdate开户日期6BCOpenAmountmoney84否开户金额7BCRegLosschar20是否是否挂失8BCBCIdint40否客户编号9BCExistBalancemoney84否账户余额10BCBDIDchar60是是开户行编号表名:BankCustomer客户信息序号列名数据类型长度小数位标识主键外键允许空默认值说明1BCIdint40是是否客户编号2BCNamechar200否客户名称3BCICNochar180否客户身份证号4BCTelvarchar200否客户电话号5BCAddrvarchar1000是客户地址表名:BankDealInfo交易信息序号列名数据类型长度小数位标识主键外键允许空默认值说明1BDNoint40是是否交易编号2BDBCNochar190是否银行卡号3BDDealDatedate30否getdate交易日期4BDDealAcountmoney84否交易金额5BDDealTypechar100否交易类型6BDDealCommentvarchar1000是描述表名:BankDesposit开户网点信息序号列名数据类型长度小数位标识主键外键允许空默认值说明1BDIDchar60是否网点编号2BDNamechar200否网点名称3BDAddresschar500是网点地址使用T-SQL语句完成数据库、数据表和各种约束的创建,并保存为item1.sql文件。按下述推荐步骤,在4学时内完成下述实训内容:(1) 创建数据库(1学时)使用Create DataBase语句创建“ATM存取款机系统”数据库BankDB,数据文件和日志文件保存在指定目录下(建议建立一个文件夹,用于存放该实训项目的所有相关T-SQL源文件),文件增长率为15%。(2) 创建各个数据表及相关的约束(2学时)根据数据表结构,使用Create Table语句创建表结构。根据银行业务,分析表中每个列相应的约束要求,为每个表添加各种约束。要求创建表时要求检测是否存在表结构,如果存在,则先删除再创建。2、 实训二:创建触发器和随机卡号的存储过程(2学时)使用T-SQL语句完成触发器和随机卡号存储过程的创建,并保存为item2.sql文件。(1) 创建级联触发器 创建Insert触发器 在交易信息表BankDealInfo中创建一个Insert触发器,当增加一条交易信息时,修改相应银行卡的存款余额。建议使用游标,实现批量增加的级联更新。 创建Delete触发器在交易信息表创建一个Delete触发器,当删除一条交易信息时,修改相应银行卡的存款余额。(2) 创建产生随机卡号的存储过程Proc_randCardID创建存储过程产生8位随机数字,与前8位固定数字“1010 3576”连接,生成一个由16位数字组成的银行卡号,并输出。要求: 产生随机卡号的存储过程名为Proc_randCardID。 利用下面的代码调用存储过程进行测试declare myCardId1 char(19)exec proc_randCardId myCardId1 outputprint 产生随机卡号为+myCardId1 结果如图所示:3、 实训三:生成各个表的测试数据(4学时)使用T-SQL语句向每个表插入如下所示测试数据,要保证业务数据的一致性和完整性,保存为item3.sql文件(1) BankBusinessType表的测试数据 使用T-SQL向已经创建的BankBusinessType表插入如下数据:由于该表的数据已经给出,故直接使用向导导入。2) BankDesposit表的测试数据 使用T-SQL语句插入不少于10条开户网点信息,参考数据如下所示:BankCustomer表的测试数据BankCustomer表,产生10000条记录,如下图所示:导入数据bankcustomerBankCard表的测试数据使用T-SQL语句向BankCard表中插入15000条数据,卡号调用存储过程Proc_randCardID随机产生,开户日期设置为当前日期近3年的随机某一天(使用相应的日期函数和随机函数完成),开户金额为100-2,000之间的正数(100的倍数)。BankDealInfo表的测试数据使用T-SQL语句向BankDealInfo表中插入20万条数据,要求交易日期设置为当前日期近3年的随机某一天(使用相应的日期函数和随机函数完成),要求交易日期晚于该卡的开户日期,交易金额为100-2,000之间的正数(100的倍数)。 实训四:模拟常规业务使用T-SQL语句实现银行的日常业务,并保存为item4.sql文件。按下述推荐步骤,在4学时内完成下述实训内容:(1) 修改存款类型为活期的银行卡密码将存款类型为活期的银行卡密码改为身份证号后6位,并查询本周开户的银行卡信息,如图所示。写出更新密码和查询修改密码效果图的T-SQL语句。修改客户密码效果图(只显示本周开户的银行卡)(2) 办理银行卡挂失 将账户余额小于0的银行卡办理为挂失状态,并显示如下查询结果(按银行卡开户日期排序):由于设计表数据时就限制了余额不能小于0,所以查询为空(3) 统计某个指定客户的资金流通余额和盈利结算存入代表资金流入,支取代表资金流出(挂失的银行卡不参与计算)。计算公式:资金流通余额=总存入金额-总支取金额假定存款利率为千分之三,贷款利率为千分之八。计算公式:盈利结算=总支取金额*0.008-总存入金额*0.003。要求创建一个存储过程proc_staticsBanlanceAndProfit,执行该存储过程运行结果如下图所示:-执行统计银行资金流通余额和盈利结算的存储过程exec proc_staticsBanlanceAndProfit 张建军;图1 统计某客户的资金流通余额和盈利结算(4) 查询某个开户网点本季度开户信息查询本季度某个开户网点的银行卡开户相关信息,如查询大连新型支行的本季度开户信息。结果如下图所示,按开户日期排序:图2 本季度某个开户网点的开户信息 (5) 查询本周开户且本周单次交易金额最高的交易信息查询本周开户的银行卡中单次交易金额最高的信息。结果如下图所示: 查询本季度各银行卡交易总额的信息,结果如下图所示:图1 本季度各银行卡的交易信息:卡号,交易总额 查询本季度交易总金额最高的银行卡信息。图1 本季度银行卡交易额最高的银行卡信息:卡号、开户日期、开户金额(6) 查询挂失客户信息查询挂失账号的客户信息,利用子查询in的方式,查询结果如下图所示:图3 查询挂失客户由于所有卡余额均大于等于0,所以并没有挂失账户,此查询为空实训五:查询统计使用T-SQL语句实现银行的日常业务,并保存为item5.sql文件。按下述推荐步骤,在4学时内完成下述实训内容:(1) 催款提醒业务根据某种业务(如代缴电话费、代缴手机费或房贷等)的需要,每个月末,查询出各个开户网点中客户账户上余额少于200元的客户总数,由银行统一致电催款。查询结果如下图所示:图4 催款提醒业务 查询没有开户的客户信息查询没有开户的客户信息,查询结果如下图所示:图5 查询没有开户的客户信息由于在设计表数据时为每一位客户都至少开了一张卡,故不存在未开户客户(3) 统计各个开户网点营业情况 显示各开户网点的本周开户数(只统计账户余额在5000元以上的银行卡),交易总金额,交易总笔数。查询结果如下图所示:图6 查询本周各开户网点的营业情况(4) 查询客户开卡数量 显示开卡数量等于或者超过5张的客户信息。查询结果如下图所示:图7 查询开卡数量5张及以上的客户信息(5) 统计本月开户的银行卡支取情况 显示本月开户的银行卡支取情况,查看各个银行卡的开户金额+收入总额-支出总额是否和账户余额相符。查询结果如下图所示:图8 查询本月开户的银行卡支取情况6、实训六:创建、使用视图使用T-SQL语句创建如下视图,并保存为item6.sql文件。按下述推荐步骤,在2学时内完成下述实训内容:为向客户提供友好的用户界面,使用T-SQL语句创建下面几个视图,并使用这些视图输出各表信息。(1) 输出银行客户记录视图VW_userInfo 显示的列名全为中文,显示银行卡没有挂失的客户记录视图,要求先判断该视图是否存在,若存在,则先删除。结果如下图所示: 图9 输出银行客户记录(其对应的银行卡状态为未挂失)(2) 输出银行卡记录视图VW_CardInfo建议使用内部连接Inner Join语句,结果如下图所示:图10 输出银行卡记录(3) 输出银行卡交易记录视图VW_TransInfo查询该视图,视图按交易日期排序,结果如下图所示:由于要在视图中使用order by 因此使用top 图11 输出银行卡的交易记录(4) 查询本季度没有交易记录的客户信息 创建视图vw_searchCustomerNoDeal,查询本季度没有交易记录的客户信息。图12 本季度没有交易记录的客户信息vw_searchCustomerNoDeal7、实训七:存储过程实现业务处理 使用T-SQL语句创建如下视图,并保存为item7.sql文件(1) 完成存款或取款业务 描述: 根据银行卡号和交易金额实现银行卡的存款和取款业务。 每一笔存款,取款业务都要计入银行交易账,并同时更新客户的存款余额。 如果是取款业务,在记账之前,要完成下面两项数据的检查验证工作,如果检查不合格,那么中断取款业务,给出提示信息后退出。 检查客户输入的密码是否正确。 账户取款金额是否大于当前存款额加1。要求: 取款或存款存储过程名为usp_takeMoney。 编写一个存储过程完成存款和取款业务,并调用存储过程取钱或者存钱进行测试。 若是存取款过程成功,则结果窗口显示如图19的信息,包括卡号信息,以及当天的该卡号交易信息。若是存取款不成功,则给出错误提示信息。 结果如下图所示 下述两图为存取款正确时的结果窗口: 图13 执行存储过程的结果窗口(存取款)图14 执行存储过程的输出消息 提示: 鉴于存款时客户不需要提供密码,在编写存储过程中,为输入参数“密码”列设置默认值为Null。 在存储过程中使用事务,以保证数据操作的一致性。 use BankDB1 go -7-1 if exists(select * from sysobjects where id=OBJECT_ID(Nproc_TakeMoney) drop proc proc_TakeMoney go create proc proc_TakeMoney BCNo varchar(20),money money,pwd varchar(10)=null as -不返回受影响的行数 set nocount on -声明一个变量存放指定卡号的存款余额 declare existBanlance money -启动事务机制 begin tran select existBanlance=BCExistBalance from BankCard where BCNo=BCNo print(交易前,卡号+bcno+,余额为:+convert(varchar(20),existBanlance) print(交易正进行,请稍后.) -如果输入参数pwd为空,则为取款业务,否则为存款业务 if(pwd is not null) -办理取款业务 begin -判断指定卡号和密码是否存在,若存在,则可以取款,否则失败 if exists(select BCNo,BCPwd from BankCard where (BCNo=BCNo and BCPwd=pwd) begin if(select BCRegLoss from BankCard where BCNo=BCNo)=是) begin print 该卡已挂失,无法办理相应业务 rollback end else begin -判断取款金额是否小于等于余额,若条件成立,则可以取款,否则失败 if(money=existBanlance) begin insert into BankDealInfo values(BCNo,GETDATE(),money,取款,通过存储过程) if(ERROR0) begin print 交易失败 rollback tran end else begin commit tran print 交易成功,交易金额为:+convert(varchar(10),money)+,余额为:+convert(varchar(10),(existBanlance-money) end end else begin print 余额不足,取款失败 rollback tran end end end else begin print 取款失败,卡号或用户名错误 rollback tran end end else begin if(select BCRegLoss from BankCard where BCNo=BCNo)=是) begin print 该卡已挂失,无法办理相应业务 rollback end else begin -办理存款业务 insert into BankDealInfo values(BCNo,GETDATE(),money,存款,通过存储过程) -判断事物处理是否有异常,没有则提交事务,否则回滚 if(ERROR0) begin print 交易失败 rollback tran end else begin commit tran print 交易成功,交易金额为:+convert(varchar(10),money) -判断交易类型,显示余额 print 卡号+BCNo+,余额为:+convert(varchar(10),existBanlance+money) end endendgo-存款exec proc_TakeMoney1010 3576 0001 8539,100-取款exec proc_TakeMoney1010 3576 0001 8539,100,888888-若用户操作已挂失的卡exec proc_TakeMoney1010 3576 0000 7359,100go2.完成开户业务描述: 利用存储过程为客户开设2个银行卡账户,开户时需要提供客户的信息有:开户名、身份证号、电话号码、开户金额、存款类型和地址、开户网点。客户的信息见表所示: 为成功开户的客户提供银行卡,且银行卡号唯一。要求: 开户的存储过程名为usp_openAccount。 使用下面的数据执行该存储过程,进行测试:调用此存储过程开户。表3 两位客户的开户信息姓名身份证联系电话开户金额存款类型地址开户网点周公旦150203197510074339130884488221200定活两便内蒙古包头包头乐园支行姬昌150203197610174339158345678091100活期内蒙古包头包钢三中支行 结果如下图所示:图15 执行开户存储过程的结果图16 测试开户存储过程的输出信息 use BankDB1 go if exists(select * from sysobjects where name=usp_openAccount) drop proc usp_openAccount go -创建开户存储过程usp_openAccount, -输入参数分别是开户名、身份证号、电话号码、开户金额、存款类型和地址 create proc usp_openAccount BCName varchar(12),BDBCNo varchar(20),BDTel varchar(12), OpenAccount money,BCtype varchar(6),address varchar(100) as declare BCBBTId int,BCNO varchar(19),BCId int,BCOpenDate date if (exists(select * from BankBusinessType WHERE BBTName=BCtype) begin set nocount on begin tran set BCId=(select count(*) from BankCustomer)+1 select BCBBTId=BBTId from BankBusinessType where BBTName=BCtype exec randCardId BCNo output while(exists(select * from BankCard where BCNo=BCNO) exec randCardId BCNo output insert into BankCustomer values(BCName,BDBCNo,BDTel,address) insert into BankCard values(BCNO,BCBBTId,GETDATE(),OpenAccount,否,BCId,OpenAccount,100001) -判断事物操作是否有异常 if(ERROR0) begin print 尊敬的用户,开户失败,所有操作均撤销 rollback end else begin commit tran set BCOpenDate=(select BCOpenDate from BankCard where BCNo=BCNO) print 尊敬的客户,开户成功,系统为你产生的随机卡号是+BCNo print 开户日期:+convert(varchar(12),BCOpenDate)+开户金额:+convert(varchar(10),OpenAccount) select * from BankCustomer where BCId=BCId select * from BankCard where BCNo=BCNO end end else print 尊敬的客户,未能成功开户,存款类型不正确,请重新输入 go exec usp_openAccount李鑫,150202196210030491,13904721843,1000,活期,内蒙古科技大学支行 测试失败情况: exec usp_openAccount李鑫,150202196210030491,13904721843,1000,123,内蒙古科技大学支行(4) 分页显示查询交易数据根据指定的页数和每页的记录数分页显示交易数据。要求: 存储过程名称是usp_PagingDisplay. 测试数据是输出第2页,每页10行交易数据,结果如下图所示:图17 每页10行方式输出第2页交易数据 8、实训八:利用事务实现转账使用存储过程和事务实现转账业务,操作步骤如下所示:(1) 从某一个账户支取一定金额的存款。(2) 将支取金额存入到另一个指定的账户中。(3) 分别打印此笔业务的转出账单和转入账单。 要求:(1) 存储过程名称是usp_transfer。(2) 要求使用事务机制实现转账业务。(3) 结果如图所示: use BankDB1 go if exists(select * from sysobjects where name=usp_transfer) drop proc usp_transfer go -创建存储过程,传递转出账号、密码,转入账号以及转账金额 create proc usp_transfer outzh varchar(20),inzh varchar(20),pwd varchar(8),dealAcount money as -不返回受影响的行数 set nocount on -转账之后账户余额 declare outbalance money,inbalance money -转出账号的姓名,货币类型,存款类型,开户日期 declare outname varchar(8),outCurr char(3),outType varchar(30),outOpenDate date -转入账号的姓名,货币类型,存款类型,开户日期 declare inname varchar(8),inCurr char(3),inType varchar(30),inOpenDate date -判断转出账户是否存在 if(not exists(select BCNo from BankCard where BCNo=outzh) or (pwd(select BCPwd from BankCard where BCNo=outzh) begin print转出账户不存在或者密码错误,转账失败 return end else begin print开始转账,请稍后. -判断转出账户余额是否大于等于转账金额 if(exists(select * from BankCard where BCNo=outzh and BCExistBalance=dealAcount) begin -判断转入账户是否存在 if(not exists(select BCNo from BankCard where BCNo=inzh) begin print转入账户不存在,转账失败 return end else begin begin tran print交易正在进行,请稍后. -增加一条转出交易记录 insert into BankDealInfo values(outzh,GETDATE(),dealAcount,转出,通过存储过程) -增加一条转入交易记录 insert into BankDealInfo values(inzh,GETDATE(),dealAcount,转入,通过存储过程) -取得转账后两个账户的余额 select outbalance=(select BCExistBalance from BankCard where BCNo=outzh) select inbalance=(select BCExistBalance from BankCard where BCNo=inzh) -判断事务处理是否正常,有异常则回滚,无异常则提交 if(ERROR0) begin print转账失败,正在进行恢复 rollback tran end else begin commit tran print交易成功,交易金额:+convert(varchar(10),dealAcount) end end end else begin print转出账户余额不足,交易失败 return end print打印转出账户的相关信息 print- -获取转出账户的相关信息 select outname=BCName,outCurr=BCCurrency,outType=BBTName,outOpenDate=BCOpenDate from BankCard inner join BankCustomer on BankCard.BCBCId=BankCustomer.BCId inner join BankBusinessType on BankCard.BCBBTId=BankBusinessType.BBTId where BCNo=outzh print卡号:+convert(varchar(20),outzh) print姓名:+outname print货币:+outCurr print存款类型:+outType print开户日期:+convert(varchar(10),outOpenDate) print- print交易日 类型 交易金额 备注 print- print convert(varchar(15),getdate()+ +转出+ +convert(varchar(10),dealAcount) +通过存储过程 -打印转入账户对账单 print print打印转入账户对账单 print- -获取转入账户信息 select inname=BCName,inCurr=BCCurrency,inType=BBTName,inOpenDate=BCOpenDate from BankCard inner join BankCustomer on BankCard.BCBCId=BankCustomer.BCId inner join BankBusinessType on BankCard.BCBBTId=BankBusinessType.BBTId where BCNo=inzh print卡号:+convert(varchar(20),inzh) print姓名:+inname print货币:+inCurr print存款类型:+inType print开户日期:+convert(varchar(10),inOpenDate) print- print交易日 类型 交易金额 备注 print- print convert(varchar(15),getdate()+ +转入+ +convert(varchar(10),dealAcount) +通过存储过程 end go 其余情况测试: 情况一:转出账户不存在 exec usp_transfer0001 2949,1010 3576 0000 7359,888888,100 情况二:密码错误 exec usp_transfer1010 3576 0001 2949,1010 3576 0000 7359,788888,100 情况三:转出账户余额不足 exec usp_transfer1010 3576 0001 2949,1010 3576 0000 7359,888888,10000 情况四:转入账户不存在 exec usp_transfer1010 3576 0001 2949,11010 3576 0000 7359,888888,100三:心得体会通过这次数据库课程设计对数据库的基本知识有了更深的认识,包括外键、check约束、触发器、存储过程、游标、视图等。尤其加深了对触发器、存储过程和游标的理解。在本次课设中也遇到了一些问题,比如如何快速的插入20万条交易数据,刚开始用的最笨的方法,就是通过while语句多次调用存储过程已得到符合要求的卡号(保证其存在于bankcard表),所以速度很慢,大约接近1小时才能导入20W数据,后来想到了改进的办法,1分50S左右就可以导入20W条交易数据 ,改进方法是:创建bankcard临时表,该表有两个字段,自增长列ID和卡号BNCo,使用insert into #bankcard(BDBCNo) select BCNo from BankCard语句将bankcard表中的卡号复制到临时表中,这就保证了每一个卡号都有自己唯一的序号,所以交易表的卡号就直接使用序列号来从临时表中随机取,这就保证了卡号肯定存在于bankcard表中,并且导入速度迅速提高(因为不需要使用循环语句去判断)。最后,还是非常高兴能通过本次课设提高了自己的知识理解程度,也让我感觉到了数据库知识的乐趣,今后会更加努力以提高自己的知识水平。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!