《SQL作业-活期储蓄管理系统数据库要点(共25页).doc》由会员分享,可在线阅读,更多相关《SQL作业-活期储蓄管理系统数据库要点(共25页).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上计科2011级数据库应用技术实验报告学号: 姓名:李文菊实验名称任务1:活期储蓄管理系统数据设计完成时间2014年5月实验目的1、 掌握数据库中概念模型、关系模型、约束关系以及关系结构的概念;2、 掌握系统需求分析的方法;3、 学会概念模型和关系模型的设计方法。实验内容在活期储蓄管理过程中,“储户”通过“存取款”与“储蓄所”发生业务联系。试设计活期储蓄管理系统数据库的概念模型、关系模型并确定约束。实验要求1、填写实验过程中的T-SQL2、思考和记录实验中的问题,并能够找出解决方法实验过程:1、 需求分析通过对数据库用户(储蓄所业务人员)的调查,对用户的需求进行分析得知
2、:(1)储户是指在某个储蓄所开户的人。该储蓄所称为储户的开户行。(2)一个储蓄所可以有多个储户,每个储户有惟一的账号。(3)每个储户可以在多个允许发生业务的储蓄所进行存取款。(4)储户按信誉分为“一般”和“良好”两种(分别用0和1表示)。信誉“一般”的储户不允许透支。信誉“良好”的储户可以透支,但不能超过5万元。(5)储户按状态分为:“正常”和“挂失”两种(分别用0、1表示)。状态为“正常”的储户允许存取款,状态为“挂失”的储户不允许存取款。(6)储户的信息有:账号、姓名、密码、电话、地址、信誉、存款额、开户行编号、开户日期、状态等。(7)储蓄所的信息有:编号、名称、电话、地址、负责人(8)储
3、户进行存取款时应该提供账号、存取标志(1:表示存款,0:表示取款)、存取金额、存取日期等信息,储蓄所首先要对储户的身份进行验证,对合法的储户再根据“信誉”判断是否可以发生此次业务。若发生业务则记录相应信息,修改储户的存款额。2、概念模型设计根据系统需求分析设计出的E-R图如下:储户账号姓名电话地址开户行开户日期存取款存取标志信誉金额日期储蓄所编号名称存款额负责人电话地址3、关系模型设计根据概念模型中得出的E-R图可转换成对应的关系模型,关系模型设计如下:转换后的关系模型为:储户信息(账号,姓名,电话,地址,开户行编号,开户日期)储户动态信息(账号,密码,存款额,状态,信誉)储蓄所信息(编号,名
4、称,存款额,负责人,电话,地址)存取款(账号,编号,存取标志,信誉,金额,日期)4、约束关系(1)实体完整性所有实体中的主码都不能为空,即实体“储户信息”的主码“账号”不能为空,实体“储蓄所信息”的主码“编号”以及“储蓄所信息”中的主码“编号”和“日期”不能为空,关系“存取款”中的主码“账号”不能为空。另外,“储户信息”中的所有字段都不能为空,“储蓄所信息”中的“名称”和“负责人”也不能为空,关系“存取款”中的“金额”要大于0.(2)参照完整性参照关系“存取款”的属性“账号”和“编号”分别是被参照关系“储户”和“储蓄所信息”的外码。因此,参照关系“存取款”的属性“账号”的值必须是被参照关系“储
5、户信息”中某一元组的“账号”的值,参照关系“存取款”的属性“编号”的值必须是被参照关系“储蓄所信息”中某一元组的值。参照关系“储户信息”的属性“开户行编号”是被参照关系“储蓄所信息”的外码,因此,参照关系“储户信息”的属性“开户行编号”的取值必须是“储蓄所信息”的“编号”的值。(3)用户定义完整性储户按信誉分为“一般”和“良好”,对于信誉为“一般”的储户,只有当储户的存款额大于储户的取款额时,才可以进行取款,也就是说信誉为“一般”的储户不可以透支金额。对于信誉为“良好”的储户,当储户的存款额小于储户的取款额是,也可以进行取款,但最高不能超过5万元。储户按状态分为“正常”和“挂失”。当储户状态处
6、于“正常”状态时,可以进行存取款,当储户状态处于“挂失”状态时,不允许进行存取款。5、关系结构的描述活期储蓄管理系统的关系结构描述关系名称属性名称数据类型宽度说明储户信息账号字符串20主键姓名字符串10不为空开户行编号字符串15不为空开户日期日期型电话字符串15不为空地址字符串50不为空储户动态信息账号字符串20主键密码字符串30存款额整型状态整型取值为1、0信誉整型取值为1、0储蓄所信息编号字符串15主键名称字符串30不为空存款额整型负责人字符串10不为空电话字符串15不为空地址字符串50不为空存取款账号字符串20引用了储户信息中的账号编号字符串15引用了储蓄所信息中的编号存取标志整型取值为
7、1、0信誉整型取值为1、0金额整型金额0日期日期型问题讨论:1、需求分析应尽量考虑周全并且要合理,应站在用户的角度进行需求分析。2、设计E-R图时,要考虑好实体与实体之间的关系以及实体具有的属性。3、约束关系应当设计合理,各个属性值的约束要设计得当。实验名称任务2:创建活期储蓄管理系统数据库完成时间2014年5月实验目的1掌握使用Transact-SQL语句创建数据库、数据表。实验内容1、 使用Transact-SQL语句创建活期储蓄管理系统数据库。该数据库的要求如下:数据库名称为:活期储蓄。数据主文件为:活期储蓄_data.mdf,存储在“D:data”(或者是自行定义的文件夹),存储空间初
8、始值为5MB,最大空间为100MB,文件增量10。数据次数据文件为:活期储蓄_data2.mdf,存储在“D:data”(或者是自行定义的文件夹),存储空间初始值为5MB,最大空间为100MB,文件增量10。日志文件为:活期储蓄_log.ldf,存储在“E:data” (或者是自行定义的文件夹,但是不要和数据文件在一起),存储空间初始值为5MB,最大空间为200MB,文件增量5MB。 2、 使用Transact-SQL语句创建活期管理系统数据库的数据表和添加数据。实验要求1、填写实验过程中的T-SQL2、思考和记录实验中的问题,并能够找出解决方法实验过程:1、创建活期储蓄管理系统数据库crea
9、te database 活期储蓄on (name=活期储蓄_temp,filename=D:data活期储蓄_temp.mdf,size=5MB,maxsize=100MB,filegrowth=10%),filegroup 活期储蓄_temp1(name=活期储蓄_temp1,filename=D:data活期储蓄_temp1.mdf,size=5MB,maxsize=100MB,filegrowth=10%)log on(name=活期储蓄_log,filename=E:data活期储蓄_log.ldf,size=5MB,maxsize=200MB,filegrowth=5MB)2、数据库
10、的管理(1)收缩数据库:分别使用SHRINKDATABASE和SHRINKFILE进行收缩活期储蓄数据库DBCC SHRINKDATABASE (活期储蓄)DBCC SHRINKFILE (活期储蓄_log)(2)数据可更名exec sp_renamedb 活期储蓄,活期储蓄数据库(3)查看数据可的属性exec sp_helpdb 活期储蓄(4)数据库的附加和分离分离:use 活期储蓄 gosp_detach_db 活期储蓄go结果:命令已成功完成附加:(1)use mastergosp_attach_db 活期储蓄,F:数据库活期储蓄_temp.mdf,F:数据库活期储蓄_log.ldf(2
11、)use mastergocreate database 活期储蓄 ON PRIMARY ( NAME = N活期储蓄_temp, FILENAME = NE:数据库活期储蓄_temp.mdf ), FILEGROUP 活期储蓄_temp1 ( NAME = N活期储蓄_temp1, FILENAME = NE:数据库活期储蓄_temp1.mdf) LOG ON ( NAME = N活期储蓄_log, FILENAME = NE:数据库活期储蓄_log.ldf )go结果:命令已成功完成3、创建表(1)储户信息表use 活期储蓄gocreate table 储户信息(账号 char (20)p
12、rimary key,姓名 char (10) not null,开户行编号 char (15)not null,开户日期 datetime,电话 char(15) not null,地址 varchar(50) not null)(2)储户动态信息表use 活期储蓄gocreate table 储户动态信息(账号 char (20)primary key,密码 varchar (30)not null,存款额 int,状态 int check(状态=1 or 状态=0),信誉 int check(信誉=1 or 信誉=0)(3)储蓄所信息表use 活期储蓄gocreate table 储蓄所
13、信息(编号 char (15)primary key,名称 varchar (30)not null,存款额 int,负责人 char(10) not null,电话 char (15) not null,地址 varchar(50) not null,)(4)存取款表use 活期储蓄gocreate table 存取款(账号 char (20)references 储户信息(账号),编号 char (15)references 储蓄所信息(编号),存取标志 int check(存取标志=1 or 存取标志=0),信誉 int check(信誉=1 or 信誉=0),金额 int check(
14、金额 0),日期 datetime,)4、 添加数据(1) 储户信息表use 活期储蓄goinsert into 储户信息(账号,姓名,开户行编号,开户日期,电话,地址)values(,张晓军,1002,2002-11-20,(0871),昆明), (,李丹娜,1208,2000-08-06,(021),上海), (,张岚,1002,1998-06-01,(0871),昆明), (,王立群,1303,2004-01-08,(021),上海), (,赵庆,1208,2003-02-08,(0871),昆明)(2) 储户动态信息表use 活期储蓄goinsert into 储户动态信息(账号,密码
15、,存款额,状态,信誉)values(,ASDZXC,1,0), (,WERERT,1,1), (,DFGASD,1,1), (,SDFCVB,35000,1,0), (,CVBGHJ,1,1)(3) 储蓄所信息表use 活期储蓄goinsert into 储蓄所信息(编号,名称,存款额,负责人,电话,地址)values(1001,中国建行昆明分行秋涛支行,张三,(0871),秋涛北街号), (1002,中国建行昆明分行武林支行,王敏,(0871),武林南路号), (1208,中国建行昆明分行下沙支行,张硕,(0871),下沙号大街号), (1303,中国建行昆明分行滨江支行,李贞,(0871)
16、,滨江号大街号)(4) 存取款表use 活期储蓄goinsert into 存取款(账号,编号,存取标志,信誉,金额,日期)values(,1002,1,1,50000,2003-09-28), (,1208,0,1,80000,2003-10-16), (,1002,0,1,10000,2003-12-10), (,1303,1,0,12000,2003-12-10), (,1002,0,1,20000,2003-12-16), (,1002,0,1,10000,2004-01-08), (,1208,1,1,20000,2004-02-08), (,1208,1,1,30000,2004-
17、03-16)问题讨论:1、使用Transact-SQL语句创建数据库时,数据文件和日志文件最好不要放在同一个驱动器上,因为当某一个驱动器发生故障而导致数据文件丢失时,可以恢复日志文件,以便保证不损坏日志文件。2、使用Transact-SQL语句对数据库进行附加时,使用第二种方法时我觉得相当于重新创建一个新的数据库, 当我使用第二种方法附加数据库时,提示为“该数据库已存在,请更换路径”,重新换一个路径后,命令也就成功完成了,而附加上的数据库也是一个空白数据库。而使用”sp_attach_db”命令进行附加,便能正确的把数据库附加上(该命令上网查的)。3、进行数据库的收缩时,SHRINKDATAB
18、ASE是对数据库进行收缩,SHRINKFILE是对数据文件的收缩。实验名称任务3:活期储蓄管理系统数据库上的一般操作完成时间2014年5月实验目的1、 熟练使用Transact-SQL为数据表添加数据;2、 熟练使用Transact-SQL语句完成查询命令。实验内容为活期储蓄管理系统数据库的数据表录入数据,并根据需要,进行编写Transact-SQL语句的查询命令。实验要求1、填写实验过程中的T-SQL2、思考和记录实验中的问题,并能够找出解决方法实验过程:1、录入数据(1)储户信息表use 活期储蓄goinsert into 储户信息(账号,姓名,开户行编号,开户日期,电话,地址)value
19、s(,张晓军,1002,2002-11-20,(0871),昆明), (,李丹娜,1208,2000-08-06,(021),上海), (,张岚,1002,1998-06-01,(0871),昆明), (,王立群,1303,2004-01-08,(021),上海), (,赵庆,1208,2003-02-08,(0871),昆明)(2)储户动态信息表use 活期储蓄goinsert into 储户动态信息(账号,密码,存款额,状态,信誉)values(,ASDZXC,1,0), (,WERERT,1,1), (,DFGASD,1,1), (,SDFCVB,35000,1,0), (,CVBGHJ
20、,1,1)(3)储蓄所信息表use 活期储蓄goinsert into 储蓄所信息(编号,名称,存款额,负责人,电话,地址)values(1001,中国建行昆明分行秋涛支行,张三,(0871),秋涛北街号), (1002,中国建行昆明分行武林支行,王敏,(0871),武林南路号), (1208,中国建行昆明分行下沙支行,张硕,(0871),下沙号大街号), (1303,中国建行昆明分行滨江支行,李贞,(0871),滨江号大街号)(4)存款额表use 活期储蓄goinsert into 存取款(账号,编号,存取标志,信誉,金额,日期)values(,1002,1,1,50000,2003-09-
21、28), (,1208,0,1,80000,2003-10-16), (,1002,0,1,10000,2003-12-10), (,1303,1,0,12000,2003-12-10), (,1002,0,1,20000,2003-12-16), (,1002,0,1,10000,2004-01-08), (,1208,1,1,20000,2004-02-08), (,1208,1,1,30000,2004-03-16)2、数据查询(1)查询储户的姓名和存款额select 姓名,存款额from 储户信息,储户动态信息where 储户信息.账号=储户动态信息.账号(2)查询账号为的储户的存取款
22、记录。select *from 存取款 where 账号=(3)查询编号为1002的储蓄所2003.10-2004.10的存取款业务详细记录。select *from 存取款 where 编号=1002 and 日期 between 2003-10-01 and 2004-10-01(4)查询编号为1002的储蓄所的存取款业务汇总情况。select *from 存取款 where 编号=1002(5)查询所有储户的基本信息。use 活期储蓄goselect *from 储户信息(6)查询储户的状态及信誉。use 活期储蓄goselect 姓名,存款额,状态,信誉from 储户信息,储户动态信息
23、where 储户信息.账号=储户动态信息.账号 问题讨论:1、 录入信息时,各个属性列的值要对应好,否则会出现错误2、 在录入数据时,有时候会出现“语句已终止”的提示,这时就得检查创建表时属性值的长度是否够长,多数是长度不够时,会出现这样的提示。3、 在查询信息时,当鼠标移到带有红色波浪线出,如果出现的提示是“列名无效或无法绑定多个状态”,就得考虑是否是多个表之间进行查询了或者是所写的列名与表中的列名不对应。实验名称任务4:建立活期储蓄管理系统数据库的触发器和存储过程完成时间2014年5月实验目的1、 掌握使用T-SQL语句创建触发器;2、 掌握使用T-SQL语句创建存储过程实验内容在活期储蓄
24、管理系统数据库的“存取款”表上创建INSERT触发器和编写验证出乎“密码”的存储过程。实验要求1、填写实验过程中的T-SQL2、思考和记录实验中的问题,并能够找出解决方法实验过程:1、在“存取款”表上创建触发器“存取款insert”use 活期储蓄gocreate trigger 存取款inserton 存取款for insertasdeclare cke int, je int, bz int, xy int, zh char(20), zt intselect zh=i.账号,je=i.金额,bz=i.存取标志 from inserted iselect cke=a.存款额,xy=a.信誉
25、,zt=a.状态 from 储户动态信息 aif(zt=0) print该账号处于挂失状态!else begin if(bz=1) set cke=cke+je else set cke=cke-je if(xy=0 and cke0) begin print抱歉,您当前的情况不能透支金额! rollback end update 储户动态信息 set 存款额=cke where 账号=zh end结果:命令已成功完成2、验证触发器是否创建成功:向存取款表中插入数据(相当于账号为储户存款20000元)账号编号存取标志信誉金额日期100211200002004.7.16use 活期储蓄goins
26、ert into 存取款values (,1002,1,1,20000,2004-07-16)未插入数据之前的储户动态信息表插入数据后的储户动态信息表:3、编写验证储户“密码”的存储过程问题要求:将储户输入的“密码”与“用户动态信息”表中保存的“密码”值进行比较,回答正确返回“1”,不正确返回“0”。存储过程设计:use 活期储蓄gocreate procedure 密码 zh char(20), mima varchar(30), flag int output -值为1 ,表示输入正确! as if exists( select * from 储户动态信息 where (ltrim(rtr
27、im(zh)=ltrim(rtrim(账号)and ltrim(rtrim(mima)=ltrim(rtrim(密码) begin print 请继续操作! set flag=1 end else begin print 账号或密码错误!不能继续操作 set flag=0 end 实验结果:触发器已创建成功,向存取款中插入数据后,相应的储户动态信息表中的存款额已发生改变。创建“密码”存储过程设计时,已提示“命令已完成”。问题讨论:1、触发器与存储过程的区别:触发器不能执行execute语句调用,而是在用户执行Transact-SQL语句时自动触发执行。2、创建触发器时,如有变量,需要先对其进行
28、声明。3、trim、ltrim、rtrim函数完成将字符串中的一部分空格或全部空格去掉。trim去掉字符串中的全部空格,ltrim去掉字符串中起始的空格,而rtrim将字符串末尾的空格都去掉。实验名称任务5:建立活期储蓄管理系统数据库的视图和索引完成时间2014年5月实验目的1、 掌握使用T-SQL语句建立视图;2、 掌握使用T-SQL语句建立索引。实验内容根据活期储蓄管理系统数据库,建立相应的视图和索引。实验要求1、填写实验过程中的T-SQL2、思考和记录实验中的问题,并能够找出解决方法实验过程:1、 创建视图(1) 创建视图“存款”,包括信息:储户信息.账号、储户信息.姓名、储户动态信息.
29、存款额,以便于储户简单查询。create view 存款asselect 储户信息.账号 ,姓名,存款额from 储户信息,储户动态信息where 储户信息.账号 = 储户动态信息.账号 设计状态下:编辑状态下:(2) 创建视图“储户”,信息来自“储户基本信息”和“储户动态信息”。前台应用程序,输入开户信息时,应该包括这两个表的内容,建立视图后,应用程序可以只调用这个视图,从而简化了前台应用程序对数据库的调用。create view 储户asselect 储户信息.账号 ,密码,储户信息.姓名,开户行编号,开户日期,存款额,信誉,状态,电话,地址 from 储户信息,储户动态信息where 储户信息.账号 = 储户动态信息.账号go设计状态下:编辑状态下2、 创建索引在表“存取款”上按“存取日期”的建立索引,以利于按时间段的业务查询。create index 存取日期on 存取款(日期)(1) 储户信息表(2) 储户动态信息表(3) 储蓄所信息表(4)存款额表问题讨论:1创建视图,可以简化数据的操作,从而便于储户简单查询。创建索引,利用索引可以提高在表或视图中的查询速度。 2视图与索引的异同。 视图是原始数据库的一种变换,是查看表中数据的另外一种方式。通过视图可以看到自己想要的数据。 索引依表而存在,主要目的是为了较快查询速度。专心-专注-专业
限制150内