




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一、目的与意义1二、设计内容与要求1三、设计原理11、数据库基本操作:1、定义基本表1、修改基本表1III、删除基本表2IV、数据查询2V、插入元组2VI、修改数据2VII、删除数据22、数据库完整性3I、实体完整性定义3II、参照完整性定义33、触发器3I、定义触发器3II、激活触发器4III、删除触发器44、存储过程4I、PL/SQL的块结构4II、变量常量的定义4III、控制结构5IV、存储过程的用户接口5四、总体设计方案6五、详细设计61、需求分析62、流程图63、E-R图74、设计表75、关系图86、编码8六、测试与调试11七、收获与体会15八、主要参考资料15一、目的与意义本课程设计是在学完数据库系统与应用课程之后,让学生综合应用数据库知识,设计数据库,进行调试与测试,以加深对数据库基本知识及SQL语言的理解,提高综合应用知识的能力、分析解决问题的能力,加强数据库知识的实践技能,初步培养开发实用数据库系统的能力。二、设计内容与要求设计一个银行账户管理系统,至少能够实现存款、取款、查询、转账等基本功能,要求在在数据库实现过程中至少建立三张表、不得少于四个查询、三个触发器、使用至少一个存储过程。三、设计原理SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询。SQL是一个通用的、功能极强的关系数据库语言。它之所以能够为用户和业界所接受,并成为国际标准,是因为它是一个综合的、功能极强同时又简捷易学的语言。SQL语言集数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体。1、数据库基本操作:、定义基本表语句格式:CREATE TABLE ( , , ); 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。 、修改基本表语句格式: ADD 完整性约束 DROP ALTER COLUMN ; III、删除基本表语句格式:DROP TABLE RESTRICT| CASCADE; RESTRICT:删除表是有限制的。欲删除的基本表不能被其他表的约束所引用,如果存在依赖该表的对象,则此表不能被删除。CASCADE:删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除。IV、数据查询语句格式:SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ; V、插入元组语句格式:INSERT INTO (,) VALUES ( , ) 功能:将新元组插入指定表中。VI、修改数据语句格式: UPDATE SET =,= WHERE ; 功能:修改指定表中满足WHERE子句条件的元组。VII、删除数据语句格式: DELETE FROM WHERE ; 功能:删除指定表中满足WHERE子句条件的元组。WHERE子句:指定要删除的元组。缺省表示要删除表中的全部元组,表的定义仍在字典中。2、数据库完整性I、实体完整性定义单属性构成的码有两种说明方法:定义为列级约束条件;定义为表级约束条件。对多个属性构成的码只有一种说明方法:定义为表级约束条件。插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:. 检查主码值是否唯一,如果不唯一则拒绝插入或修改。. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。II、参照完整性定义在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。参照完整性违约处理:.拒绝(NO ACTION)执行-默认策略 .级联(CASCADE)操作 .设置为空值(SET-NULL) 对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值。3、触发器触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程,由服务器自动激活,可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力。I、定义触发器语法格式: CREATE TRIGGER BEFORE | AFTER ON FOR EACH ROW | STATEMENT WHEN II、激活触发器触发器的执行,是由触发事件激活的,并由数据库服务器自动执行,一个数据表上可能定义了多个触发器。同一个表上的多个触发器激活时遵循如下的执行顺序: .执行该表上的BEFORE触发器; .激活触发器的SQL语句; .执行该表上的AFTER触发器。III、删除触发器语法格式: DROP TRIGGER ON ; 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。 4、存储过程I、PL/SQL的块结构.定义部分 DECLARE -变量、常量、游标、异常等 定义的变量、常量等只能在该基本块中使用,当基本块执行结束时,定义就不再存在。.执行部分 BEGIN -SQL语句、PL/SQL的流程控制语句 EXCEPTION -异常处理部分 END;II、变量常量的定义.PL/SQL中定义变量的语法形式是:: 变量名 数据类型 NOT NULL:=初值表达式或 变量名 数据类型 NOT NULL初值表达式 .常量的定义类似于变量的定义:: 常量名 数据类型 CONSTANT :=常量表达式 常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,PL/SQL将返回一个异常。.赋值语句 变量名称:= 表达式III、控制结构.条件控制语句 IF-THEN,IF-THEN-ELSE和嵌套的IF语句:A. IF condition THEN Sequence_of_statements; END IF B. IF condition THEN Sequence_of_statements1; ELSE Sequence_of_statements2; END IF; C. 在THEN和ELSE子句中还可以再包括IF语句,即IF语句可以嵌套。.循环控制语句A.最简单的循环语句LOOP LOOP Sequence_of_statements; END LOOP; 多数数据库服务器的PL/SQL都提供EXIT、BREAK或LEAVE等循环结束语句,保证LOOP语句块能够结束。B. WHILE-LOOP WHILE condition LOOP Sequence_of_statements; END LOOP; 每次执行循环体语句之前,首先对条件进行求值,如果条件为真,则执行循环体内的语句序列,如果条件为假,则跳过循环并把控制传递给下一个语句。C. FOR-LOOP FOR count IN REVERSEbound1 bound2 LOOP Sequence_of_statements; END LOOP;.错误处理: 如果PL/SQL在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型去执行异常处理语句。SQL标准对数据库服务器提供什么样的异常处理做出了建议,要求PL/SQL管理器提供完善的异常处理机制。IV、存储过程的用户接口. 创建存储过程: CREATE Procedure 过程名(参数1,参数2,.) AS ; 过程名:数据库服务器合法的对象标识。参数列表:用名字来标识调用时给出的参数值,必须指定值的数据类型。参数也可以定义输入参数、输出参数或输入/输出参数。默认为输入参数。过程体:是一个。包括声明部分和可执行语句部分。. 执行存储过程: CALL/PERFORM Procedure 过程名(参数1,参数2,.); 使用CALL或者PERFORM等方式激活存储过程的执行。在PL/SQL中,数据库服务器支持在过程体中调用其他存储过程。. 删除存储过程 DROP PROCEDURE 过程名();四、总体设计方案首先进行需求分析和结构设计,确定该系统的一些功能要求及数据的存储方法,画出流程图以及E-R图。然后根据需求分析所得的流程图及E-R图设计表,确定属性。再用SQL语言编写程序实现操作。最后对系统进行调试与测试,确定系统是否完成设计要求。五、详细设计1、需求分析银行账户管理系统主要用于用户的一些操作,包括存款、取款、查询、转账等基本操作,主要涉及到银行与用户两个实体,还有交易这个联系。2、流程图3、E-R图4、设计表Bank表:表示银行信息,属性有名称,网点,存款总额。其中网点号为主码。Customer表:表示客户信息,属性有账号,姓名,ID,开户时间,账户余额,开户银行,银行网点。其中账号为主码。trade表:用于记录每次交易信息,属性有流水号,姓名,账号,交易项目,交易金额,交易时间,交易对象,余额,上次余额,网点。其中流水号为主码。5、关系图建立关系图其中customer表的外码银行网点参照引用bank表的主码网点;trade表的外码账号参照引用customer表的主码账号;trade表的外码网点参照引用bank表的主码网点。6、编码CREATE TRIGGER totle ON dbo.user_customerafter UPDATE AS if update(银行)update 总存款额 set 存款总额 = (select SUM(余额) from user_inform where 银行总存款额.银行=customer.银行)CREATE TRIGGER 交易项目 ON dbo.tradeafter UPDATE AS if update(余额)if (select 余额 from trade where 流水号=(select max(流水号) from trade) ) (select 上次余额 from trade where 流水号=(select max(流水号) from trade)update trade set 交易项目=支入 where 流水号=(select max(流水号) from trade) and 账号=(select 账号 from trade where 流水号 = (select max(流水号) from trade)elseupdate trade set 交易项目=支出 where 流水号=(select max(流水号) from trade) and 账号=(select 账号 from trade where 流水号 = (select max(流水号) from trade)CREATE TRIGGER 交易余额 ON dbo.tradeafter UPDATEAS if update(交易金额)beginupdate trade set 余额= (select 账户余额 from customer where 账号 = (select 账号 from trade where 流水号 = (select max(流水号) from trade) where 流水号 = (select max(流水号) from trade)end;CREATE proc 交易 card varchar(18)asbegininsert trade(交易时间,账号,姓名,余额,上次余额) select getdate(),card,姓名,账户余额,账户余额 from customer a where a.账号=cardendGOCREATE PROCEDURE 存款(card varchar(18),cke money)ASBEGIN exec 交易 cardupdate customer set 账户余额=(账户余额+cke) where 账号=cardupdate trade set 交易金额=cke where 账号=card and 流水号=(select max(流水号) from trade where 账号=card )select * from customer where 账号=cardRETURN;END;GOCREATE procedure 开户 name varchar(20),id varchar(18),card varchar(18) output,bal moneyasbegin select card=60+substring(ltrim(str(rand(),30,30),len(ltrim(str(rand(),30,30)-15,6) insert customer(开户时间,姓名,ID,账号,账户余额) values (getdate(),name,id,card,bal) print 账号创建成功,你的账号为:+cardendGOCREATE PROCEDURE 查询(card varchar(18)ASBEGIN exec 交易 cardupdate trade set 交易项目=查询 where 账号=card and 流水号=(select max(流水号) from trade where 账号=card )select * from customer where 账号=cardselect * from trade where 账号=cardRETURN;END;GOCREATE PROCEDURE 转账(card1 varchar(18),card2 varchar(18),zze money)ASBEGIN exec 交易 card1update customer set 账户余额=(账户余额-zze) where 账号=card1if( (select 账户余额 from customer where 账号=card1 )0 ) begin print 余额不足! update customer set 账户余额=(账户余额+zze) where 账号=card1 endelsebeginupdate trade set 交易项目=转出 where 账号=card1 and 流水号=(select max(流水号) from trade where 账号=card1 )update trade set 交易金额=zze where 账号=card1 and 流水号=(select max(流水号) from trade where 账号=card1 )select *from customer where 账号=card1select * from trade where 账号=card1exec 交易 card2update customer set 账户余额=(账户余额+zze) where 账号=card2update trade set 交易项目=转入 where 账号=card2 and 流水号=(select max(流水号) from trade where 账号=card2 )update trade set 交易金额=zze where 账号=card2 and 流水号=(select max(流水号) from trade where 账号=card2 )select * from customer where 账号=card2select * from trade where 账号=card2endRETURN;END;GOCREATE PROCEDURE 取款(card varchar(18),qke money)ASBEGIN exec 交易 cardupdate customer set 账户余额=(账户余额-qke) where 账号=cardif( (select 账户余额 from customer where 账号=card )0 ) begin print 账户余额不足! update customer set 账户余额=(账户余额+qke) where 账号=card endelsebeginupdate trade set 交易项目=取款 where 账号=card and 流水号=(select max(流水号) from trade where 账号=card )update trade set 交易金额=qke where 账号=card and 流水号=(select max
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三基临床考试试题及答案
- 政务方面考试试题及答案
- 学前口语考试试题及答案
- 湘雅医院输血科课件
- 大气课件的特点
- 2025年美甲工具合作协议书
- 大棚销售专业知识培训总结课件
- 2025年钱包、座套相关皮革制品合作协议书
- 旬阳市网格员考试真题2024
- 农村公路防灭火应急预案(3篇)
- 医院护理投诉课件
- DB62T 3155-2018 兰州市新区回弹法检测泵送混凝土抗压强度技术规程
- 园区停车场建设运营方案
- 试用合同延期协议书
- 签约夜场佳丽合同协议
- 品质管理工具:五大工具与七大手法
- 学习重庆小面合同协议
- 高考物理规范答题指导
- 叉车维修管理制度
- 国企保密管理制度
- 2025年山东威海城投集团子公司招聘工作人员19人自考难、易点模拟试卷(共500题附带答案详解)
评论
0/150
提交评论