2023年6月21日发(作者:)
目录
实验1 用E-R图设计数据库 ............................ 2
实验2 熟悉SQL Server 2008环境 ...................... 3
实验3 数据库和表创建 ............................... 22
实验4 数据库查询 ................................... 22
实验5 视图的定义和操作 ............................. 22
实验6 实现数据完整性 ............................... 22
实验7 实现数据库安全管理 ........................... 22
实验8 存储过程和触发器 ............................. 22
实验9 数据库的备份和恢复 ........................... 23
实验10 数据库设计综合应用 ........................... 23
1 实验1 用E-R图设计数据库
实验目的与要求:
1. 掌握E-R模型的基本概念和图形的表示方法。
2. 掌握将现实世界的事物转化成E-R图的基本技巧
3. 熟悉关系数据模型的基本概念。
4. 掌握E-R图转化成关系表的基本方法
实验环境:
1. Windows 2000/XP
2. SQL Server 2008
实验内容:
1. 根据需求确定实体、属性和联系。
2. 将实体、属性和联系转化为E-R图。
3. 将E-R图转化为表。
实验步骤:
1. 设计能够表示学生、课程关系的数据库。
1) 确定学生、课程实体的属性。
2) 确定学生、课程实体的联系以及联系类型。
3) 画出学生、课程关系的E-R图。
2. 设计能够表示商品、顾客和商品生产厂家关系的数据库。
1) 确定商品、顾客和商品生产厂家实体的属性。
2) 确定商品、顾客和商品生产厂家的联系以及联系类型。
3) 画出商品、顾客和商品生产厂家关系的E-R图。
讨论:E-R图和关系表之间的关系。
2
实验2 熟悉SQL Server 2008环境
一、实验目的
掌握SQL Server 2008的安装
了解SQL Server 2008和客户端开发工具开发数据库信息管理系统的大致过程
掌握SQL Server 2008管理工具的使用
了解数据库及对象
二、实验准备
安装SQL Server 2008简体中文版
安装Visual C++ 6.0
准备好产品销售数据库备份文件
三、实验内容
1.安装Microsoft的数据库服务软件SQL Server 2008
见实验2.1文档
2. 了解SQL Server 2008和客户端开发工具开发数据库信息管理系统的大致过程
⑴打开SQL Server 2008中文版,将产品销售信息管理系统的产品销售数据库CPXS恢复到SQL Server 2008中。步骤如下:
3 菜单中选择还原数据库,弹出下对话框
目标数据库为CPXS,选择源设备,单击右边浏览按钮
单击添加,找到CPXS数据库备份文件,确定即可恢复。
⑵打开SQL Server Management Studio,选择产品销售数据库CPXS,打开供应商(XSS)表,显示记录,临时输入一些记录。
⑶打开SQL Server 2008查询分析器,查询⑵中临时输入的全部或部分记录。
⑷打开VC++,打开产品销售信息工程
修改数据库连接串,步骤如下:
4 ①打开StdAfx.h文件,修改连接串如下图:
②打开CCPXSSet.h文件,修改如下
③打开IDD_CPWH对话框,选择Adodc1,右键属性,然出对话框中选择Control,单击BUILD按钮,设置数据库连接串。
5
④打开IDD_XSWH对话框,选择Adodc1,右键属性,然出对话框中选择Control,单击BUILD按钮,设置数据库连接串。操作和③一样;
⑸运行产品销售管理系统
3. 掌握SQL Server 2008管理工具的使用、了解数据库及对象
参看实验教材实验2
4. 安装图解
放入SQL Server 2008光盘,直接运行
6
要求安装.NET
开始安装
再次运行SQL Server 2008安装
7 单击安装-全新的SQL Server独立安装,如果我们准备好了故障转移群集,那么我们就可以创建故障转移群集SQL
常规检查
8
授权协议
9
支持文件安装
10 安装完成开始检查自身
俩警告,一个是.NET警告,说没网络会延迟,或者需要下载文件
11 一个数要打开端口,无视了,晚点再打开
选择安装的功能,SQL数据库和管理工具
12 选择实例
驱动器检查
13 选择服务账户,如图选择的是本地系统账户
验证模式:sql和本地模式两种,输入密码,另外添加管理员,可以添加本地组或者当前用户
选择汇报微软选项
14
运行检查
信息预览确认
15
开始正式安装
16 安装完成
单击关闭完成
17 开始菜单中的sql2008
打开smse管理工具
打开管理工具如图
18
新建数据库选项居然有启动ps选项了,集成到sql2008了
新建数据库页面已经抛弃了sql7.0,只兼容SQL Server 2000了,其他的倒没什么大的变化
19
启动ps后如图
在防火墙中新建入站规则,端口选择1433
20
建立完成,可以在客户端作业了.
21 实验3 数据库和表创建
参看实验教材实验3
实验报告要求
1、记录在使用SQL语句过程中遇到的问题及解决办法。
2、举例说明如何操作会违背完整性(实体完整性、参照完整性)。
实验4 数据库查询
参看实验教材实验4.1(P12页)
实验报告要求
写出与上述查询任务相对应的SQL查询语句,并记录在实验过程中遇到的问题、解决办法及心得体会。
实验5 视图的定义和操作
参考实验教材4.2
实验报告要求:
1、在实验报告中要给出具体的视图定义要求;
2、分情况讨论那些操作可以成功完成,哪些不能成功完成。
查询操作:举出一个进行查询操作的例子。
更新操作:更新操作包含插入、更新、删除,针对不能成功完成更新操作的情况举出两个例子,并分析原因。
实验6 实现数据完整性
参考实验教材实验6
实验7 实现数据库安全管理
参考实验教材实验8
实验8 存储过程和触发器
参考实验教材实验7
22 实验9 数据库的备份和恢复
参考实训教材实验9
实验10 数据库设计综合应用
实验内容:
可选择实验教材的产品销售数据库系统实验,也可选择下面实验
任务1:活期储蓄管理系统数据库设计
1.问题的提出
在活期储蓄管理过程中,“储户”通过“存取款”与“储蓄所”发生业务联系。试设计活期储蓄管理系统数据库的概念模型、关系模型并确定约束。
2.系统需求分析
通过对数据库用户(储蓄所业务人员)的调查,对用户的需求进行分析得知:
(1)储户是指在某个储蓄所开户的人。该储蓄所称为储户的开户行。
(2)一个储蓄所可以有多个储户,每个储户有惟一的账号。
(3)每个储户可以在多个允许发生业务的储蓄所进行存取款。
(4)储户按信誉分为“一般”和“良好”两种(分别用0和1表示)。信誉“一般”的储户不允许透支。信誉“良好”的储户可以透支,但不能超过5万元。
(5)储户按状态分为:“正常”和“挂失”两种(分别用0、1表示)。状态为“正常”的储户允许存取款,状态为“挂失”的储户不允许存取款。
(6)储户的信息有:账号、姓名、密码、电话、地址、信誉、存款额、开户行编号、开户日期、状态等。
(7)储蓄所的信息有:编号、名称、电话、地址、负责人
(8)储户进行存取款时应该提供账号、存取标志(1:表示存款,0:表示取款)、存取金额、存取日期等信息,储蓄所首先要对储户的身份进行验证,对合法的储户再根据“信誉”判断是否可以发生此次业务。若发生业务则记录相应信息,修改储户的存款额。
23 3.概念模型设计
请你根据系统需求分析设计E-R图。
4.关系模型设计
请你跟据E-R图转换成对应的关系模型,并标出主码
5.约束关系
(1)实体完整性
例如实体“储户”的主码“账号”不能为空等。请你描述出全部的实体完整性。
(2)参照完整性
例如参照关系“存取款”的属性“账号”和储蓄所“编码”分别是被参照关系“储户”和“储蓄所”的外码。因此,参照关系“存取款”的属性“账号”的值必须是被参照关系“储户”中某一元组的“账号”的值。
请你描述出全部的参照完整性。
(3)用户定义的完整性
要求如下:
对信誉为“一般”的储户取款时,只有当:
“储户.存款额”-“存取款.金额”≥0
时才可以发生取款业务。
同理,对信誉为“良好”的储户取款时,只要:
“储户.存款额”-“存取款.金额”≥-50000(元)
时便可以发生取款业务。
24 6.关系结构描述
请你仿照表1描述出活期储蓄管理系统的关系结构,实际上是给出了该系统数据库模式的型。
表1 学生数据库关系结构描述
关系名称
学生
课程
学生选课
属性名称
学号
姓名
电话
出生年月
性别
课程号
课程名
先修课程号
状态
学号
课程号
成绩
数据类型
字符串
字符串
字符串
日期时间型
字符串
日期时间型
字符串
字符串
货币型
整数
字符串
字符串
字符串
宽度
10
8
16
8
15
8
15
6
8
1
10
40
16
说明
取值为0、1
25
26 任务2:活期储蓄管理系统数据库上的查询
1.示例数据
这里的示例数据,实际上是给出了活期储蓄管理系统数据库模式中各关系型的一个值,这些值构成数据库模式的一个值(或一个状态)。
(1)
储户基本信息数据
账号
10020089
10020123
10245082
10204568
10204567
姓名
张晓军
李丹娜
张岚
王立群
赵庆
电话 地址 开户行
1002
1208
1002
1303
1208
开户日期
2002-11-20
2000-08-06
1998-06-01
2004-01-08
2003-02-08
(0571)22959618 杭州
(021)86129618 上海
(0571)66787968 杭州
(021)89727982 上海
(0571)28008986 杭州
(2)
储户动态信息数据
账号
10020089
10020123
10245082
10204568
10204567
密码
ASDZXC
WERERT
DFGASD
SDFCVB
CVBGHJ
信誉
0
1
1
0
1
存款额[元]
286000
1678120
3000000
35000
1200000
状态
1
1
1
1
1
密码一般都是加密存储的。
(3)
储蓄所数据
编号
1001
1002
1208
1303
名称
中国建行杭州分行秋涛支行
中国建行杭州分行武林支行
中国建行杭州分行下沙支行
中国建行杭州分行滨江支行
电话
(0571)88049082
(0571)68066080
(0571)28800088
(0571)26880266
地址
秋涛北街283号
武林南路366号
下沙22号大街788号
滨江18号大街632号
(4)存取款数据
账号
10020123
10245082
10020123
10020089
10020123
10245082
10204567
10245082
储蓄所编号
1002
1208
1001
1303
1002
1002
1208
1208
标志
1
0
0
1
0
0
1
1
存取金额
50000
80000
10000
12000
20000
10000
20000
30000
存取日期
2003-09-28
2003-10-16
2003-12-10
2003-12-10
2003-12-16
2004-01-08
2004-02-08
2004-03-16
27 2. 数据查询
这里的每个查询可以侠义的视为一个应用,它所涉及的基本表或视图即为该应用的外模式。
请你在上述给出的活期储蓄管理系统数据库表数据中,写出完成如下诸查询SQL命令。
(1)查询储户的姓名和存款额
(2)查询账号为10245082的储户的存取款记录。
(3)查询编号为1002的储蓄所2003.10-2004.10的存取款业务详细记录。 (4)查询编号为1002的储蓄所的存取款业务汇总情况。
28
任务3:创建活期储蓄管理系统数据库
--数据库的物理设计与实现
这里给出的活期储蓄数据库的物理设计与实现,实际上就是数据库模式到内模式(数据库的存储模式)的映射。
1.用SQL Server 2000创建案例1描述的数据库
数据库名称为:活期储蓄。
数据主文件为:活期储蓄_,存储在“D:data”,存储空间初始值为5MB,最大空间为100MB,文件增量15%。
日志文件为:活期储蓄_,存储在“E:data”,存储空间初始值为5MB,最大空间为200MB,文件增量5MB。
请你写出实现上述要求的Transact-SQL语句为。
2.创建表
根据案例1描述的关系结构,建立表,并设置实体完整性、参照完整性。
请你写出Transact-SQL语句。
3.创建视图
(1) 创建视图“存款”,包括信息:
储户基本信息.账号、储户基本信息.姓名、储户动态信息.存款额
以便于储户简单查询。
(2) 创建视图“储户”,信息来自“储户基本信息”和“储户动态信息”。前台应用程序,输入开户信息时,应该包括这两个表的内容,建立视图后,应用程序可以只调用这个视图,从而简化了前台应用程序对数据库的调用。
4.创建索引
在表“存取款”上按“存取日期”的索引。以利于按时间段的业务查询。
Transact-SQL语句为:
29
30 任务4:活期储蓄管理系统数据库上的一般操作
1.录入数据
利用企业管理器,将案例2中的示例数据输入到相应的表中。
2.数据查询
在案例2中,给出了活期储蓄管理系统数据库表上用SQL语句进行查询的命令。这里给出在SQL Server 2000查询分析器中使用Transact-SQL语句完成相应查询的命令。
(1)查询账号10245082的姓名和存款额。查询语句和查询结果如图4-1所示。
图4-1 查询(1)的语句和结果
(2) 查询账号10245082自2003.10-2004.10的存取款记录。查询语句和查询结果如图4-2所示。
图4-2查询(2)的语句和结果
(3) 查询编号为1002的储蓄所2003.10-2004.10的存取款业务详细记录。查询语句和查询结果如图4-3所示。
31
图4-3查询(3)的语句和结果
(4) 查询编号为1002的储蓄所的存取款业务汇总情况。
存取款表的数据如图4-4所示。查询语句及其结果如图4-5所示。
图4-4 存取款表中的数据
图4-5 查询(4)的语句和结果
32 任务5:建立活期储蓄管理系统数据库的触发器和存储过程
1.问题的提出
利用企业管理器向“存取款”表中插入两条记录:
账号
10020123
10245082
储蓄所编号
1208
1002
标志
0
1
存取金额
20000
30000
存取日期
2004.06.28
2004.7.16
检查“储户动态信息表”,会发现以上两个储户存取款后,储户的“存款额”值并未发生改变。这显然是不符合实际情况的。
我们希望,每当“储户”在某一个“储蓄所”进行“存取款”时,应同时自动修改该储户的“存款额”。这一功能可以通过在表“存取款”上建立“INSERT”触发器完成。
2.在“存取款”表上创建“INSERT”触发器
步骤:
(1) 驱动企业管理器,打开【数据库】文件夹,打开【活期储蓄】数据库,选择表【存取款】并单击右键,在弹出的菜单中选择【所有任务】,然后选择【管理触发器】命令,出现如图5-1所示的界面。
图5-1在表存取款上选择建立触发器
(2) 在编辑窗口中,输入以下Transact-SQL命令:
CREATE TRIGGER [ins-存取款] ON [dbo].[存取款]
33 FOR INSERT
AS
DECLARE @cke money, --存款额
@je money, --存取金额
@bz int, --存取标志
@xy int, --信誉
@zh char(15), --账号
@zt int --储户状态
SELECT @zh=i.账号,@je=i.[金额(元)],@bz=i.标志 FROM inserted i
SELECT @cke=a.[存款额(元)],@xy=a.信誉,@zt=a.状态 from 储户动态信息 a
IF (@zt=1)
PRINT '此账号为挂失状态!'
ELSE
BEGIN
IF (@bz=1)
SET @cke=@cke+@je
ELSE
SET @cke=@cke-@je
IF (@xy=0 and @cke<0)
BEGIN
PRINT '对不起,您不能透支!'
ROLLBACK
END
IF (@xy=1 and @cke<-5000)
BEGIN
PRINT '您的透支金额超过5000元'
ROLLBACK
END
UPDATE 储户动态信息表
SET [存款额(元)]=@cke
WHERE 账号=@zh
END
(3)【检查语法】无误后,单击【确定】按钮,便在表“存取款”上建立了名为ins-存取款触发器。如图5-2所示。
34
图5-2 建立触发器操作界面
将“存取款”表中插入的两条记录删除,重新插入,会发现“储户动态信息表”中,储户的“存款额”值以正确改变。
3.编写验证储户“密码”的存储过程
问题要求:将储户输入的“密码”与“用户动态信息”表中保存的“密码”值进行比较,回答正确返回“1”,不正确返回“0”。
存储过程设计
入口参数:@zh-储户账号,@ma-储户输入的密码。
出口参数:@tag- 值为1,表示密码正确;值为0,表示密码错误。
Transact-SQL程序
CREATE PROCEDURE [dbo].[test]
@zh char(15), --储户账号
@ma char(6), --储户密码
@tag int output --值为1,表示输入正确;值为0,表示账号或密码错误
AS
IF EXISTS(
SELECT *
FROM 储户动态信息
WHERE (ltrim(rtrim(@zh))=ltrim(rtrim(账号))
and ltrim(rtrim(@ma))=ltrim(rtrim(密码))))
BEGIN
PRINT '可以继续操作!'
SET @tag=1
END
ELSE
BEGIN
35 PRINT '账号或密码错误,不能继续操作!'
SET @tag=0
END
建立存储过程,命名为:test。
步骤如下:打开【活期储蓄】数据库,右击【存储过程】,在弹出的菜单中选择【新建存储过程】,输入以上程序,进行【检查语法】,无误后【确定】即可。
也可以在查询分析器中输入以上程序,检查语法,无误后执行,与上述过程等效。
执行存储过程
可以在查询分析器中执行建立的存储过程:test。
命令:
EXEC test '10245082','DFGASD',0
结果:
10245082
可以继续操作!
36 任务6:活期储蓄管理系统数据库的完整性控制
1.实体完整性
实体完整性一般在创建表时,通过定义主码完成。若有遗漏应及时修改,使各关系满足实体完整性。
2.参照完整性
(1) 表“储户基本信息”和“储户动态信息”互为参照关系,由于两个表本来就是一个表,因而可以任意指定其中一个表为被参照关系。考虑到“储户基本信息”表比较稳定,所以将此表作为被参照关系,“储户动态信息”表为参照关系。“储户动态信息.账号”既是外码又是内码。考虑到实际情况,在“储户基本信息”表上定义“Update”、“Delete”触发器(一般情况下,不允许进行修改和删除操作)。
Transact-SQL程序如下:
CREATE TRIGGER [dele] ON [dbo].[储户基本信息]
FOR DELETE,UPDATE
AS
DECLARE @zh char(15)
SELECT @zh=d.账号 FROM deleted d
IF exists (SELECT * FROM 储户动态信息
WHERE 账号=@zh)
BEGIN
--' 储户动态信息表中包含储户 @zh '的信息,不能进行删除操作!
ROLLBACK
END
(2) “储户动态信息”还是“存取款”表的被参照关系。每当表“储户动态信息”上有插入(新开户)操作时,“存取款”表上有一条存款操作。因此,要修改“储户动态信息”表上的“Insert”触发器,加上下面代码:
CREATE TRIGGER [ins-开户] ON [dbo].[储户动态信息]
FOR INSERT,UPDATE
AS
DECLARE @zh char(15),
@cke money,
@bh char(15),
@khrq datetime
SELECT @zh=i.账号 FROM inserted i
SELECT @zh=a.账号, @cke=i.[存款额(元)], @khrq=a.开户日期
FROM inserted i,储户基本信息 a
WHERE a.账号=i.账号
INSERT INTO 存取款
37 VALUES(@zh,@bh,1,@cke,@khrq)
(3) 用关系图建立参照完整性。存取款表的被参照关系有两个:储蓄所表、储户基本信息表。储户基本信息表和储户动态信息表互为参照表。用SQL Server 2000提供的关系图建立参照完整性的步骤如下:
1)打开【活期储蓄】数据库,右击【关系图】,在弹出的菜单中选择【新建数据库关系图】。
2)在出现的向导界面中单击【下一步】,则出现如图6-1所示的对话框。
3)【从可用表】中,将所需的表添加到【要添加到关系图中的表】中,单击【下一步】按钮,在向导对话中单击【完成】按钮,则选择的表出现在关系图中,如图6-2所示。
图6-1 选择关系图中所需的表对话框
图6-2选中的表在关系图中
38 图图6-3建立约束
4)拖动储户基本信息表的“账号”到储户动态信息表的“账号”,在弹出的创建关系对话框中确定参照关系,单击【确定】按钮,完成(如图6-3所示)。用相同的方法建立其他外码约束关系。右击任一关系,在弹出的菜单中选择显示关系标签,这形成如图6-4所示的关系图。关闭窗口,给关系图命名,完成。
图6-4 活期储蓄的关系图
3.用户定义的完整性
(1) 定义约束,使储户动态信息表中的属性“状态”、“信誉”和存取款表的属性“标志”的域为{0,1}
Tansact-SQL命令如下:
ALTER TABLE 储户动态信息
ADD CHECK (状态=0 or 状态=1)
39 ALTER TABLE 储户动态信息
ADD CHECK (信誉=0 or 信誉=1)
ALTER TABLE 存取款
ADD CHECK (标志=0 or 标志=1)
上述问题可以通过创建规则、绑定规则来实现。Tansact-SQL命令如下:
--创建规则range_rull
CREATE RULE range_rull
AS
@rag=0 or @rag=1
Go
--绑定规则
EXEC sp_bindrule 'range_rull','储户动态信息.状态'
EXEC sp_bindrule 'range_rull','储户动态信息.信誉'
EXEC sp_bindrule 'range_rull','存取款.标志'
(2) 存取款的域为大于零的实数
ALTER TABLE 存取款
ADD CHECK ([金额(元)]>0)
40
2023年6月21日发(作者:)
目录
实验1 用E-R图设计数据库 ............................ 2
实验2 熟悉SQL Server 2008环境 ...................... 3
实验3 数据库和表创建 ............................... 22
实验4 数据库查询 ................................... 22
实验5 视图的定义和操作 ............................. 22
实验6 实现数据完整性 ............................... 22
实验7 实现数据库安全管理 ........................... 22
实验8 存储过程和触发器 ............................. 22
实验9 数据库的备份和恢复 ........................... 23
实验10 数据库设计综合应用 ........................... 23
1 实验1 用E-R图设计数据库
实验目的与要求:
1. 掌握E-R模型的基本概念和图形的表示方法。
2. 掌握将现实世界的事物转化成E-R图的基本技巧
3. 熟悉关系数据模型的基本概念。
4. 掌握E-R图转化成关系表的基本方法
实验环境:
1. Windows 2000/XP
2. SQL Server 2008
实验内容:
1. 根据需求确定实体、属性和联系。
2. 将实体、属性和联系转化为E-R图。
3. 将E-R图转化为表。
实验步骤:
1. 设计能够表示学生、课程关系的数据库。
1) 确定学生、课程实体的属性。
2) 确定学生、课程实体的联系以及联系类型。
3) 画出学生、课程关系的E-R图。
2. 设计能够表示商品、顾客和商品生产厂家关系的数据库。
1) 确定商品、顾客和商品生产厂家实体的属性。
2) 确定商品、顾客和商品生产厂家的联系以及联系类型。
3) 画出商品、顾客和商品生产厂家关系的E-R图。
讨论:E-R图和关系表之间的关系。
2
实验2 熟悉SQL Server 2008环境
一、实验目的
掌握SQL Server 2008的安装
了解SQL Server 2008和客户端开发工具开发数据库信息管理系统的大致过程
掌握SQL Server 2008管理工具的使用
了解数据库及对象
二、实验准备
安装SQL Server 2008简体中文版
安装Visual C++ 6.0
准备好产品销售数据库备份文件
三、实验内容
1.安装Microsoft的数据库服务软件SQL Server 2008
见实验2.1文档
2. 了解SQL Server 2008和客户端开发工具开发数据库信息管理系统的大致过程
⑴打开SQL Server 2008中文版,将产品销售信息管理系统的产品销售数据库CPXS恢复到SQL Server 2008中。步骤如下:
3 菜单中选择还原数据库,弹出下对话框
目标数据库为CPXS,选择源设备,单击右边浏览按钮
单击添加,找到CPXS数据库备份文件,确定即可恢复。
⑵打开SQL Server Management Studio,选择产品销售数据库CPXS,打开供应商(XSS)表,显示记录,临时输入一些记录。
⑶打开SQL Server 2008查询分析器,查询⑵中临时输入的全部或部分记录。
⑷打开VC++,打开产品销售信息工程
修改数据库连接串,步骤如下:
4 ①打开StdAfx.h文件,修改连接串如下图:
②打开CCPXSSet.h文件,修改如下
③打开IDD_CPWH对话框,选择Adodc1,右键属性,然出对话框中选择Control,单击BUILD按钮,设置数据库连接串。
5
④打开IDD_XSWH对话框,选择Adodc1,右键属性,然出对话框中选择Control,单击BUILD按钮,设置数据库连接串。操作和③一样;
⑸运行产品销售管理系统
3. 掌握SQL Server 2008管理工具的使用、了解数据库及对象
参看实验教材实验2
4. 安装图解
放入SQL Server 2008光盘,直接运行
6
要求安装.NET
开始安装
再次运行SQL Server 2008安装
7 单击安装-全新的SQL Server独立安装,如果我们准备好了故障转移群集,那么我们就可以创建故障转移群集SQL
常规检查
8
授权协议
9
支持文件安装
10 安装完成开始检查自身
俩警告,一个是.NET警告,说没网络会延迟,或者需要下载文件
11 一个数要打开端口,无视了,晚点再打开
选择安装的功能,SQL数据库和管理工具
12 选择实例
驱动器检查
13 选择服务账户,如图选择的是本地系统账户
验证模式:sql和本地模式两种,输入密码,另外添加管理员,可以添加本地组或者当前用户
选择汇报微软选项
14
运行检查
信息预览确认
15
开始正式安装
16 安装完成
单击关闭完成
17 开始菜单中的sql2008
打开smse管理工具
打开管理工具如图
18
新建数据库选项居然有启动ps选项了,集成到sql2008了
新建数据库页面已经抛弃了sql7.0,只兼容SQL Server 2000了,其他的倒没什么大的变化
19
启动ps后如图
在防火墙中新建入站规则,端口选择1433
20
建立完成,可以在客户端作业了.
21 实验3 数据库和表创建
参看实验教材实验3
实验报告要求
1、记录在使用SQL语句过程中遇到的问题及解决办法。
2、举例说明如何操作会违背完整性(实体完整性、参照完整性)。
实验4 数据库查询
参看实验教材实验4.1(P12页)
实验报告要求
写出与上述查询任务相对应的SQL查询语句,并记录在实验过程中遇到的问题、解决办法及心得体会。
实验5 视图的定义和操作
参考实验教材4.2
实验报告要求:
1、在实验报告中要给出具体的视图定义要求;
2、分情况讨论那些操作可以成功完成,哪些不能成功完成。
查询操作:举出一个进行查询操作的例子。
更新操作:更新操作包含插入、更新、删除,针对不能成功完成更新操作的情况举出两个例子,并分析原因。
实验6 实现数据完整性
参考实验教材实验6
实验7 实现数据库安全管理
参考实验教材实验8
实验8 存储过程和触发器
参考实验教材实验7
22 实验9 数据库的备份和恢复
参考实训教材实验9
实验10 数据库设计综合应用
实验内容:
可选择实验教材的产品销售数据库系统实验,也可选择下面实验
任务1:活期储蓄管理系统数据库设计
1.问题的提出
在活期储蓄管理过程中,“储户”通过“存取款”与“储蓄所”发生业务联系。试设计活期储蓄管理系统数据库的概念模型、关系模型并确定约束。
2.系统需求分析
通过对数据库用户(储蓄所业务人员)的调查,对用户的需求进行分析得知:
(1)储户是指在某个储蓄所开户的人。该储蓄所称为储户的开户行。
(2)一个储蓄所可以有多个储户,每个储户有惟一的账号。
(3)每个储户可以在多个允许发生业务的储蓄所进行存取款。
(4)储户按信誉分为“一般”和“良好”两种(分别用0和1表示)。信誉“一般”的储户不允许透支。信誉“良好”的储户可以透支,但不能超过5万元。
(5)储户按状态分为:“正常”和“挂失”两种(分别用0、1表示)。状态为“正常”的储户允许存取款,状态为“挂失”的储户不允许存取款。
(6)储户的信息有:账号、姓名、密码、电话、地址、信誉、存款额、开户行编号、开户日期、状态等。
(7)储蓄所的信息有:编号、名称、电话、地址、负责人
(8)储户进行存取款时应该提供账号、存取标志(1:表示存款,0:表示取款)、存取金额、存取日期等信息,储蓄所首先要对储户的身份进行验证,对合法的储户再根据“信誉”判断是否可以发生此次业务。若发生业务则记录相应信息,修改储户的存款额。
23 3.概念模型设计
请你根据系统需求分析设计E-R图。
4.关系模型设计
请你跟据E-R图转换成对应的关系模型,并标出主码
5.约束关系
(1)实体完整性
例如实体“储户”的主码“账号”不能为空等。请你描述出全部的实体完整性。
(2)参照完整性
例如参照关系“存取款”的属性“账号”和储蓄所“编码”分别是被参照关系“储户”和“储蓄所”的外码。因此,参照关系“存取款”的属性“账号”的值必须是被参照关系“储户”中某一元组的“账号”的值。
请你描述出全部的参照完整性。
(3)用户定义的完整性
要求如下:
对信誉为“一般”的储户取款时,只有当:
“储户.存款额”-“存取款.金额”≥0
时才可以发生取款业务。
同理,对信誉为“良好”的储户取款时,只要:
“储户.存款额”-“存取款.金额”≥-50000(元)
时便可以发生取款业务。
24 6.关系结构描述
请你仿照表1描述出活期储蓄管理系统的关系结构,实际上是给出了该系统数据库模式的型。
表1 学生数据库关系结构描述
关系名称
学生
课程
学生选课
属性名称
学号
姓名
电话
出生年月
性别
课程号
课程名
先修课程号
状态
学号
课程号
成绩
数据类型
字符串
字符串
字符串
日期时间型
字符串
日期时间型
字符串
字符串
货币型
整数
字符串
字符串
字符串
宽度
10
8
16
8
15
8
15
6
8
1
10
40
16
说明
取值为0、1
25
26 任务2:活期储蓄管理系统数据库上的查询
1.示例数据
这里的示例数据,实际上是给出了活期储蓄管理系统数据库模式中各关系型的一个值,这些值构成数据库模式的一个值(或一个状态)。
(1)
储户基本信息数据
账号
10020089
10020123
10245082
10204568
10204567
姓名
张晓军
李丹娜
张岚
王立群
赵庆
电话 地址 开户行
1002
1208
1002
1303
1208
开户日期
2002-11-20
2000-08-06
1998-06-01
2004-01-08
2003-02-08
(0571)22959618 杭州
(021)86129618 上海
(0571)66787968 杭州
(021)89727982 上海
(0571)28008986 杭州
(2)
储户动态信息数据
账号
10020089
10020123
10245082
10204568
10204567
密码
ASDZXC
WERERT
DFGASD
SDFCVB
CVBGHJ
信誉
0
1
1
0
1
存款额[元]
286000
1678120
3000000
35000
1200000
状态
1
1
1
1
1
密码一般都是加密存储的。
(3)
储蓄所数据
编号
1001
1002
1208
1303
名称
中国建行杭州分行秋涛支行
中国建行杭州分行武林支行
中国建行杭州分行下沙支行
中国建行杭州分行滨江支行
电话
(0571)88049082
(0571)68066080
(0571)28800088
(0571)26880266
地址
秋涛北街283号
武林南路366号
下沙22号大街788号
滨江18号大街632号
(4)存取款数据
账号
10020123
10245082
10020123
10020089
10020123
10245082
10204567
10245082
储蓄所编号
1002
1208
1001
1303
1002
1002
1208
1208
标志
1
0
0
1
0
0
1
1
存取金额
50000
80000
10000
12000
20000
10000
20000
30000
存取日期
2003-09-28
2003-10-16
2003-12-10
2003-12-10
2003-12-16
2004-01-08
2004-02-08
2004-03-16
27 2. 数据查询
这里的每个查询可以侠义的视为一个应用,它所涉及的基本表或视图即为该应用的外模式。
请你在上述给出的活期储蓄管理系统数据库表数据中,写出完成如下诸查询SQL命令。
(1)查询储户的姓名和存款额
(2)查询账号为10245082的储户的存取款记录。
(3)查询编号为1002的储蓄所2003.10-2004.10的存取款业务详细记录。 (4)查询编号为1002的储蓄所的存取款业务汇总情况。
28
任务3:创建活期储蓄管理系统数据库
--数据库的物理设计与实现
这里给出的活期储蓄数据库的物理设计与实现,实际上就是数据库模式到内模式(数据库的存储模式)的映射。
1.用SQL Server 2000创建案例1描述的数据库
数据库名称为:活期储蓄。
数据主文件为:活期储蓄_,存储在“D:data”,存储空间初始值为5MB,最大空间为100MB,文件增量15%。
日志文件为:活期储蓄_,存储在“E:data”,存储空间初始值为5MB,最大空间为200MB,文件增量5MB。
请你写出实现上述要求的Transact-SQL语句为。
2.创建表
根据案例1描述的关系结构,建立表,并设置实体完整性、参照完整性。
请你写出Transact-SQL语句。
3.创建视图
(1) 创建视图“存款”,包括信息:
储户基本信息.账号、储户基本信息.姓名、储户动态信息.存款额
以便于储户简单查询。
(2) 创建视图“储户”,信息来自“储户基本信息”和“储户动态信息”。前台应用程序,输入开户信息时,应该包括这两个表的内容,建立视图后,应用程序可以只调用这个视图,从而简化了前台应用程序对数据库的调用。
4.创建索引
在表“存取款”上按“存取日期”的索引。以利于按时间段的业务查询。
Transact-SQL语句为:
29
30 任务4:活期储蓄管理系统数据库上的一般操作
1.录入数据
利用企业管理器,将案例2中的示例数据输入到相应的表中。
2.数据查询
在案例2中,给出了活期储蓄管理系统数据库表上用SQL语句进行查询的命令。这里给出在SQL Server 2000查询分析器中使用Transact-SQL语句完成相应查询的命令。
(1)查询账号10245082的姓名和存款额。查询语句和查询结果如图4-1所示。
图4-1 查询(1)的语句和结果
(2) 查询账号10245082自2003.10-2004.10的存取款记录。查询语句和查询结果如图4-2所示。
图4-2查询(2)的语句和结果
(3) 查询编号为1002的储蓄所2003.10-2004.10的存取款业务详细记录。查询语句和查询结果如图4-3所示。
31
图4-3查询(3)的语句和结果
(4) 查询编号为1002的储蓄所的存取款业务汇总情况。
存取款表的数据如图4-4所示。查询语句及其结果如图4-5所示。
图4-4 存取款表中的数据
图4-5 查询(4)的语句和结果
32 任务5:建立活期储蓄管理系统数据库的触发器和存储过程
1.问题的提出
利用企业管理器向“存取款”表中插入两条记录:
账号
10020123
10245082
储蓄所编号
1208
1002
标志
0
1
存取金额
20000
30000
存取日期
2004.06.28
2004.7.16
检查“储户动态信息表”,会发现以上两个储户存取款后,储户的“存款额”值并未发生改变。这显然是不符合实际情况的。
我们希望,每当“储户”在某一个“储蓄所”进行“存取款”时,应同时自动修改该储户的“存款额”。这一功能可以通过在表“存取款”上建立“INSERT”触发器完成。
2.在“存取款”表上创建“INSERT”触发器
步骤:
(1) 驱动企业管理器,打开【数据库】文件夹,打开【活期储蓄】数据库,选择表【存取款】并单击右键,在弹出的菜单中选择【所有任务】,然后选择【管理触发器】命令,出现如图5-1所示的界面。
图5-1在表存取款上选择建立触发器
(2) 在编辑窗口中,输入以下Transact-SQL命令:
CREATE TRIGGER [ins-存取款] ON [dbo].[存取款]
33 FOR INSERT
AS
DECLARE @cke money, --存款额
@je money, --存取金额
@bz int, --存取标志
@xy int, --信誉
@zh char(15), --账号
@zt int --储户状态
SELECT @zh=i.账号,@je=i.[金额(元)],@bz=i.标志 FROM inserted i
SELECT @cke=a.[存款额(元)],@xy=a.信誉,@zt=a.状态 from 储户动态信息 a
IF (@zt=1)
PRINT '此账号为挂失状态!'
ELSE
BEGIN
IF (@bz=1)
SET @cke=@cke+@je
ELSE
SET @cke=@cke-@je
IF (@xy=0 and @cke<0)
BEGIN
PRINT '对不起,您不能透支!'
ROLLBACK
END
IF (@xy=1 and @cke<-5000)
BEGIN
PRINT '您的透支金额超过5000元'
ROLLBACK
END
UPDATE 储户动态信息表
SET [存款额(元)]=@cke
WHERE 账号=@zh
END
(3)【检查语法】无误后,单击【确定】按钮,便在表“存取款”上建立了名为ins-存取款触发器。如图5-2所示。
34
图5-2 建立触发器操作界面
将“存取款”表中插入的两条记录删除,重新插入,会发现“储户动态信息表”中,储户的“存款额”值以正确改变。
3.编写验证储户“密码”的存储过程
问题要求:将储户输入的“密码”与“用户动态信息”表中保存的“密码”值进行比较,回答正确返回“1”,不正确返回“0”。
存储过程设计
入口参数:@zh-储户账号,@ma-储户输入的密码。
出口参数:@tag- 值为1,表示密码正确;值为0,表示密码错误。
Transact-SQL程序
CREATE PROCEDURE [dbo].[test]
@zh char(15), --储户账号
@ma char(6), --储户密码
@tag int output --值为1,表示输入正确;值为0,表示账号或密码错误
AS
IF EXISTS(
SELECT *
FROM 储户动态信息
WHERE (ltrim(rtrim(@zh))=ltrim(rtrim(账号))
and ltrim(rtrim(@ma))=ltrim(rtrim(密码))))
BEGIN
PRINT '可以继续操作!'
SET @tag=1
END
ELSE
BEGIN
35 PRINT '账号或密码错误,不能继续操作!'
SET @tag=0
END
建立存储过程,命名为:test。
步骤如下:打开【活期储蓄】数据库,右击【存储过程】,在弹出的菜单中选择【新建存储过程】,输入以上程序,进行【检查语法】,无误后【确定】即可。
也可以在查询分析器中输入以上程序,检查语法,无误后执行,与上述过程等效。
执行存储过程
可以在查询分析器中执行建立的存储过程:test。
命令:
EXEC test '10245082','DFGASD',0
结果:
10245082
可以继续操作!
36 任务6:活期储蓄管理系统数据库的完整性控制
1.实体完整性
实体完整性一般在创建表时,通过定义主码完成。若有遗漏应及时修改,使各关系满足实体完整性。
2.参照完整性
(1) 表“储户基本信息”和“储户动态信息”互为参照关系,由于两个表本来就是一个表,因而可以任意指定其中一个表为被参照关系。考虑到“储户基本信息”表比较稳定,所以将此表作为被参照关系,“储户动态信息”表为参照关系。“储户动态信息.账号”既是外码又是内码。考虑到实际情况,在“储户基本信息”表上定义“Update”、“Delete”触发器(一般情况下,不允许进行修改和删除操作)。
Transact-SQL程序如下:
CREATE TRIGGER [dele] ON [dbo].[储户基本信息]
FOR DELETE,UPDATE
AS
DECLARE @zh char(15)
SELECT @zh=d.账号 FROM deleted d
IF exists (SELECT * FROM 储户动态信息
WHERE 账号=@zh)
BEGIN
--' 储户动态信息表中包含储户 @zh '的信息,不能进行删除操作!
ROLLBACK
END
(2) “储户动态信息”还是“存取款”表的被参照关系。每当表“储户动态信息”上有插入(新开户)操作时,“存取款”表上有一条存款操作。因此,要修改“储户动态信息”表上的“Insert”触发器,加上下面代码:
CREATE TRIGGER [ins-开户] ON [dbo].[储户动态信息]
FOR INSERT,UPDATE
AS
DECLARE @zh char(15),
@cke money,
@bh char(15),
@khrq datetime
SELECT @zh=i.账号 FROM inserted i
SELECT @zh=a.账号, @cke=i.[存款额(元)], @khrq=a.开户日期
FROM inserted i,储户基本信息 a
WHERE a.账号=i.账号
INSERT INTO 存取款
37 VALUES(@zh,@bh,1,@cke,@khrq)
(3) 用关系图建立参照完整性。存取款表的被参照关系有两个:储蓄所表、储户基本信息表。储户基本信息表和储户动态信息表互为参照表。用SQL Server 2000提供的关系图建立参照完整性的步骤如下:
1)打开【活期储蓄】数据库,右击【关系图】,在弹出的菜单中选择【新建数据库关系图】。
2)在出现的向导界面中单击【下一步】,则出现如图6-1所示的对话框。
3)【从可用表】中,将所需的表添加到【要添加到关系图中的表】中,单击【下一步】按钮,在向导对话中单击【完成】按钮,则选择的表出现在关系图中,如图6-2所示。
图6-1 选择关系图中所需的表对话框
图6-2选中的表在关系图中
38 图图6-3建立约束
4)拖动储户基本信息表的“账号”到储户动态信息表的“账号”,在弹出的创建关系对话框中确定参照关系,单击【确定】按钮,完成(如图6-3所示)。用相同的方法建立其他外码约束关系。右击任一关系,在弹出的菜单中选择显示关系标签,这形成如图6-4所示的关系图。关闭窗口,给关系图命名,完成。
图6-4 活期储蓄的关系图
3.用户定义的完整性
(1) 定义约束,使储户动态信息表中的属性“状态”、“信誉”和存取款表的属性“标志”的域为{0,1}
Tansact-SQL命令如下:
ALTER TABLE 储户动态信息
ADD CHECK (状态=0 or 状态=1)
39 ALTER TABLE 储户动态信息
ADD CHECK (信誉=0 or 信誉=1)
ALTER TABLE 存取款
ADD CHECK (标志=0 or 标志=1)
上述问题可以通过创建规则、绑定规则来实现。Tansact-SQL命令如下:
--创建规则range_rull
CREATE RULE range_rull
AS
@rag=0 or @rag=1
Go
--绑定规则
EXEC sp_bindrule 'range_rull','储户动态信息.状态'
EXEC sp_bindrule 'range_rull','储户动态信息.信誉'
EXEC sp_bindrule 'range_rull','存取款.标志'
(2) 存取款的域为大于零的实数
ALTER TABLE 存取款
ADD CHECK ([金额(元)]>0)
40
发布评论