SQL作业活期储蓄管理系统数据库要点.docx
- 文档编号:4571217
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:30
- 大小:829.78KB
SQL作业活期储蓄管理系统数据库要点.docx
《SQL作业活期储蓄管理系统数据库要点.docx》由会员分享,可在线阅读,更多相关《SQL作业活期储蓄管理系统数据库要点.docx(30页珍藏版)》请在冰豆网上搜索。
SQL作业活期储蓄管理系统数据库要点
计科2011级《数据库应用技术》实验报告
学号:
2011091122姓名:
李文菊
实验名称
任务1:
活期储蓄管理系统数据设计
完成时间
2014年5月
实验目的
1、掌握数据库中概念模型、关系模型、约束关系以及关系结构的概念;
2、掌握系统需求分析的方法;
3、学会概念模型和关系模型的设计方法。
实验内容
在活期储蓄管理过程中,“储户”通过“存取款”与“储蓄所”发生业务联系。
试设计活期储蓄管理系统数据库的概念模型、关系模型并确定约束。
实验要求
1、填写实验过程中的T-SQL
2、思考和记录实验中的问题,并能够找出解决方法
实验过程:
1、需求分析
通过对数据库用户(储蓄所业务人员)的调查,对用户的需求进行分析得知:
(1)储户是指在某个储蓄所开户的人。
该储蓄所称为储户的开户行。
(2)一个储蓄所可以有多个储户,每个储户有惟一的账号。
(3)每个储户可以在多个允许发生业务的储蓄所进行存取款。
(4)储户按信誉分为“一般”和“良好”两种(分别用0和1表示)。
信誉“一般”的储户不允许透支。
信誉“良好”的储户可以透支,但不能超过5万元。
(5)储户按状态分为:
“正常”和“挂失”两种(分别用0、1表示)。
状态为“正常”的储户允许存取款,状态为“挂失”的储户不允许存取款。
(6)储户的信息有:
账号、姓名、密码、电话、地址、信誉、存款额、开户行编号、开户日期、状态等。
(7)储蓄所的信息有:
编号、名称、电话、地址、负责人
(8)储户进行存取款时应该提供账号、存取标志(1:
表示存款,0:
表示取款)、存取金额、存取日期等信息,储蓄所首先要对储户的身份进行验证,对合法的储户再根据“信誉”判断是否可以发生此次业务。
若发生业务则记录相应信息,修改储户的存款额。
2、概念模型设计
根据系统需求分析设计出的E-R图如下:
3、关系模型设计
根据概念模型中得出的E-R图可转换成对应的关系模型,关系模型设计如下:
转换后的关系模型为:
储户信息(账号,姓名,电话,地址,开户行编号,开户日期)
储户动态信息(账号,密码,存款额,状态,信誉)
储蓄所信息(编号,名称,存款额,负责人,电话,地址)
存取款(账号,编号,存取标志,信誉,金额,日期)
4、约束关系
(1)实体完整性
所有实体中的主码都不能为空,即实体“储户信息”的主码“账号”不能为空,实体“储蓄所信息”的主码“编号”以及“储蓄所信息”中的主码“编号”和“日期”不能为空,关系“存取款”中的主码“账号”不能为空。
另外,“储户信息”中的所有字段都不能为空,“储蓄所信息”中的“名称”和“负责人”也不能为空,关系“存取款”中的“金额”要大于0.
(2)参照完整性
参照关系“存取款”的属性“账号”和“编号”分别是被参照关系“储户”和“储蓄所信息”的外码。
因此,参照关系“存取款”的属性“账号”的值必须是被参照关系“储户信息”中某一元组的“账号”的值,参照关系“存取款”的属性“编号”的值必须是被参照关系“储蓄所信息”中某一元组的值。
参照关系“储户信息”的属性“开户行编号”是被参照关系“储蓄所信息”的外码,因此,参照关系“储户信息”的属性“开户行编号”的取值必须是“储蓄所信息”的“编号”的值。
(3)用户定义完整性
储户按信誉分为“一般”和“良好”,对于信誉为“一般”的储户,只有当储户的存款额大于储户的取款额时,才可以进行取款,也就是说信誉为“一般”的储户不可以透支金额。
对于信誉为“良好”的储户,当储户的存款额小于储户的取款额是,也可以进行取款,但最高不能超过5万元。
储户按状态分为“正常”和“挂失”。
当储户状态处于“正常”状态时,可以进行存取款,当储户状态处于“挂失”状态时,不允许进行存取款。
5、关系结构的描述
活期储蓄管理系统的关系结构描述
关系名称
属性名称
数据类型
宽度
说明
储户信息
账号
字符串
20
主键
姓名
字符串
10
不为空
开户行编号
字符串
15
不为空
开户日期
日期型
电话
字符串
15
不为空
地址
字符串
50
不为空
储户动态信息
账号
字符串
20
主键
密码
字符串
30
存款额
整型
状态
整型
取值为1、0
信誉
整型
取值为1、0
储蓄所信息
编号
字符串
15
主键
名称
字符串
30
不为空
存款额
整型
负责人
字符串
10
不为空
电话
字符串
15
不为空
地址
字符串
50
不为空
存取款
账号
字符串
20
引用了储户信息中的账号
编号
字符串
15
引用了储蓄所信息中的编号
存取标志
整型
取值为1、0
信誉
整型
取值为1、0
金额
整型
金额>0
日期
日期型
问题讨论:
1、需求分析应尽量考虑周全并且要合理,应站在用户的角度进行需求分析。
2、设计E-R图时,要考虑好实体与实体之间的关系以及实体具有的属性。
3、约束关系应当设计合理,各个属性值的约束要设计得当。
实验名称
任务2:
创建活期储蓄管理系统数据库
完成时间
2014年5月
实验目的
1掌握使用Transact-SQL语句创建数据库、数据表。
实验内容
1、使用Transact-SQL语句创建活期储蓄管理系统数据库。
该数据库的要求如下:
数据库名称为:
活期储蓄。
数据主文件为:
活期储蓄_data.mdf,存储在“D:
\data”(或者是自行定义的文件夹),存储空间初始值为5MB,最大空间为100MB,文件增量10%。
数据次数据文件为:
活期储蓄_data2.mdf,存储在“D:
\data”(或者是自行定义的文件夹),存储空间初始值为5MB,最大空间为100MB,文件增量10%。
日志文件为:
活期储蓄_log.ldf,存储在“E:
\data”(或者是自行定义的文件夹,但是不要和数据文件在一起),存储空间初始值为5MB,最大空间为200MB,文件增量5MB。
2、使用Transact-SQL语句创建活期管理系统数据库的数据表和添加数据。
实验要求
1、填写实验过程中的T-SQL
2、思考和记录实验中的问题,并能够找出解决方法
实验过程:
1、创建活期储蓄管理系统数据库
createdatabase活期储蓄
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%)
logon
(name='活期储蓄_log',
filename='E:
\data\活期储蓄_log.ldf',
size=5MB,
maxsize=200MB,
filegrowth=5MB)
2、数据库的管理
(1)收缩数据库:
分别使用SHRINKDATABASE和SHRINKFILE进行收缩活期储蓄数据库
DBCCSHRINKDATABASE(活期储蓄)
DBCCSHRINKFILE(活期储蓄_log)
(2)数据可更名
execsp_renamedb活期储蓄,活期储蓄数据库
(3)查看数据可的属性
execsp_helpdb活期储蓄
(4)数据库的附加和分离
分离:
use活期储蓄
go
sp_detach_db活期储蓄
go
结果:
命令已成功完成
附加:
(1)
usemaster
go
sp_attach_db活期储蓄,'F:
\数据库\活期储蓄_temp.mdf','F:
\数据库\活期储蓄_log.ldf'
(2)
usemaster
go
createdatabase活期储蓄ONPRIMARY
(NAME=N'活期储蓄_temp',FILENAME=N'E:
\数据库\活期储蓄_temp.mdf'),
FILEGROUP[活期储蓄_temp1]
(NAME=N'活期储蓄_temp1',FILENAME=N'E:
\数据库\活期储蓄_temp1.mdf')
LOGON
(NAME=N'活期储蓄_log',FILENAME=N'E:
\数据库\活期储蓄_log.ldf')
go
结果:
命令已成功完成
3、创建表
(1)储户信息表
use活期储蓄
go
createtable储户信息(
[账号][char](20)primarykey,
[姓名][char](10)notnull,
[开户行编号][char](15)notnull,
[开户日期]datetime,
[电话][char](15)notnull,
[地址][varchar](50)notnull
)
(2)储户动态信息表
use活期储蓄
go
createtable储户动态信息(
[账号][char](20)primarykey,
[密码][varchar](30)notnull,
[存款额][int],
[状态][int]check(状态='1'or状态='0'),
[信誉][int]check(信誉='1'or信誉='0')
)
(3)储蓄所信息表
use活期储蓄
go
createtable储蓄所信息(
[编号][char](15)primarykey,
[名称][varchar](30)notnull,
[存款额][int],
[负责人][char](10)notnull,
[电话][char](15)notnull,
[地址][varchar](50)notnull,
)
(4)存取款表
use活期储蓄
go
createtable存取款(
[账号][char](20)references储户信息(账号),
[编号][char](15)references储蓄所信息(编号),
[存取标志][int]check(存取标志='1'or存取标志='0'),
[信誉][int]check(信誉='1'or信誉='0'),
[金额][int]check(金额>0),
[日期]datetime,
)
4、添加数据
(1)储户信息表
use活期储蓄
go
insertinto储户信息(账号,姓名,开户行编号,开户日期,电话,地址)
values('10020089','张晓军','1002','2002-11-20','(0871)22959618','昆明'),
('10020123','李丹娜','1208','2000-08-06','(021)86129618','上海'),
('10245082','张岚','1002','1998-06-01','(0871)667879668','昆明'),
('10204568','王立群','1303','2004-01-08','(021)89727982','上海'),
('10204567','赵庆','1208','2003-02-08','(0871)28008986','昆明')
(2)储户动态信息表
use活期储蓄
go
insertinto储户动态信息(账号,密码,存款额,状态,信誉)
values('10020089','ASDZXC','286000',1,0),
('10020123','WERERT','1678120',1,1),
('10245082','DFGASD','3000000',1,1),
('10204568','SDFCVB','35000',1,0),
('10204567','CVBGHJ','1200000',1,1)
(3)储蓄所信息表
use活期储蓄
go
insertinto储蓄所信息(编号,名称,存款额,负责人,电话,地址)
values('1001','中国建行昆明分行秋涛支行','265000','张三','(0871)88049082','秋涛北街号'),
('1002','中国建行昆明分行武林支行','395810','王敏','(0871)68066080','武林南路号'),
('1208','中国建行昆明分行下沙支行','600000','张硕','(0871)28800088','下沙号大街号'),
('1303','中国建行昆明分行滨江支行','245100','李贞','(0871)26880266','滨江号大街号')
(4)存取款表
use活期储蓄
go
insertinto存取款(账号,编号,存取标志,信誉,金额,日期)
values('10020123','1002',1,1,'50000','2003-09-28'),
('10245082','1208',0,1,'80000','2003-10-16'),
('10020123','1002',0,1,'10000','2003-12-10'),
('10020089','1303',1,0,'12000','2003-12-10'),
('10020123','1002',0,1,'20000','2003-12-16'),
('10245082','1002',0,1,'10000','2004-01-08'),
('10204567','1208',1,1,'20000','2004-02-08'),
('10245082','1208',1,1,'30000','2004-03-16')
问题讨论:
1、使用Transact-SQL语句创建数据库时,数据文件和日志文件最好不要放在同一个驱动器上,因为当某一个驱动器发生故障而导致数据文件丢失时,可以恢复日志文件,以便保证不损坏日志文件。
2、使用Transact-SQL语句对数据库进行附加时,使用第二种方法时我觉得相当于重新创建一个新的数据库,
当我使用第二种方法附加数据库时,提示为“该数据库已存在,请更换路径”,重新换一个路径后,命令也就成功完成了,而附加上的数据库也是一个空白数据库。
而使用”sp_attach_db”命令进行附加,便能正确的把数据库附加上(该命令上网查的)。
3、进行数据库的收缩时,SHRINKDATABASE是对数据库进行收缩,SHRINKFILE是对数据文件的收缩。
实验名称
任务3:
活期储蓄管理系统数据库上的一般操作
完成时间
2014年5月
实验目的
1、熟练使用Transact-SQL为数据表添加数据;
2、熟练使用Transact-SQL语句完成查询命令。
实验内容
为活期储蓄管理系统数据库的数据表录入数据,并根据需要,进行编写Transact-SQL语句的查询命令。
实验要求
1、填写实验过程中的T-SQL
2、思考和记录实验中的问题,并能够找出解决方法
实验过程:
1、录入数据
(1)储户信息表
use活期储蓄
go
insertinto储户信息(账号,姓名,开户行编号,开户日期,电话,地址)
values
('10020089','张晓军','1002','2002-11-20','(0871)22959618','昆明'),
('10020123','李丹娜','1208','2000-08-06','(021)86129618','上海'),
('10245082','张岚','1002','1998-06-01','(0871)667879668','昆明'),
('10204568','王立群','1303','2004-01-08','(021)89727982','上海'),
('10204567','赵庆','1208','2003-02-08','(0871)28008986','昆明')
(2)储户动态信息表
use活期储蓄
go
insertinto储户动态信息(账号,密码,存款额,状态,信誉)
values('10020089','ASDZXC','286000',1,0),
('10020123','WERERT','1678120',1,1),
('10245082','DFGASD','3000000',1,1),
('10204568','SDFCVB','35000',1,0),
('10204567','CVBGHJ','1200000',1,1)
(3)储蓄所信息表
use活期储蓄
go
insertinto储蓄所信息(编号,名称,存款额,负责人,电话,地址)
values('1001','中国建行昆明分行秋涛支行','265000','张三','(0871)88049082','秋涛北街号'),
('1002','中国建行昆明分行武林支行','395810','王敏','(0871)68066080','武林南路号'),
('1208','中国建行昆明分行下沙支行','600000','张硕','(0871)28800088','下沙号大街号'),
('1303','中国建行昆明分行滨江支行','245100','李贞','(0871)26880266','滨江号大街号')
(4)存款额表
use活期储蓄
go
insertinto存取款(账号,编号,存取标志,信誉,金额,日期)
values('10020123','1002',1,1,'50000','2003-09-28'),
('10245082','1208',0,1,'80000','2003-10-16'),
('10020123','1002',0,1,'10000','2003-12-10'),
('10020089','1303',1,0,'12000','2003-12-10'),
('10020123','1002',0,1,'20000','2003-12-16'),
('10245082','1002',0,1,'10000','2004-01-08'),
('10204567','1208',1,1,'20000','2004-02-08'),
('10245082','1208',1,1,'30000','2004-03-16')
2、数据查询
(1)查询储户的姓名和存款额
select姓名,存款额
from储户信息,储户动态信息
where储户信息.账号=储户动态信息.账号
(2)查询账号为10245082的储户的存取款记录。
select*
from存取款
where账号='10245082'
(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活期储蓄
go
select*
from储户信息
(6)查询储户的状态及信誉。
use活期储蓄
go
select姓名,存款额,状态,信誉
from储户信息,储户动态信息
where储户信息.账号=储户动态信息.账号
问题讨论:
1、录入信息时,各个属性列的值要对应好,否则会出现错误
2、在录入数据时,有时候会出现“语句已终止”的提示,这时就得检查创建表时属性值的长度是否够长,多数是长度不够时,会出现这样的提示。
3、在查询信息时,当鼠标移到带有红色波浪线出,如果出现的提示是“列名无效或无法绑定多个状态”,就得考虑是否是多个表之间进行查询了或者是所写的列名与表中的列名不对应。
。
实验名称
任务4:
建立活期储蓄管理系统数据库的触发器和存储过程
完成时间
2014年5月
实验目的
1、掌握使用T-SQL语句创建触发器;
2、掌握使用T-SQL语句创建存储过程
实验内容
在活期储蓄管理系统数据库的“存取款”表上创建INSERT触发器和编写验证出乎“密码”的存储过程。
实验要求
1、填写实验过程中的T-SQL
2、思考和记录实验中的问题,并能够找出解决方法
实验过程:
1、在“存取款”表上创建触发器“存取款insert”
use活期储蓄
go
createtrigger存取款insert
on存取款
forinsert
as
declare@ckeint,
@jeint,
@bzint,
@xyint,
@zhchar(20),
@ztint
select@zh=i.账号,@je=i.金额,@bz=i.存取标志
frominsertedi
select@cke=a.存款额,@xy=a.信誉,@zt=a.状态
from储户动态信息a
if(@zt=0)
print'该账号处于挂失状态!
'
else
begin
if(@bz=1)
set@cke=@cke+@je
else
set@cke=@cke-@je
if(@xy=0and@cke<0)
begin
print'抱歉,您当前的情况不能透支金额!
'
rollback
end
update储户动态信息
set存款额=@cke
where账号=@zh
end
结果:
命令已成功完成
2、验证触发器是否创建成功:
向存取款表中插入数据(相当于账号为10245082储户存款20000元)
账号
编号
存取标志
信誉
金额
日期
10245082
1002
1
1
20000
2004.7.16
use活期储蓄
go
insertinto存取款
values
('10245082','1002',1,1,'20000','2004-07-16')
未插入数据之前的储户动态信息表
插入数据后的储户动态信息表:
3、编写验证储户“密码”的存储过程
问题要求:
将储户输入的“密码”与“用户动态信息”表中保存的“密码”值进行比较,回答正确返回“1”,不正确返回“0”。
存储过程设计:
use活期储蓄
go
createprocedure密码
@zhchar(20),
@mimavarchar(30),
@flagintoutput--值为1,表示输入正确!
as
ifexists(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 作业 活期 储蓄 管理 系统 数据库 要点
![提示](https://static.bdocx.com/images/bang_tan.gif)