数据库实验指导书资料
可复制的文字
目录
目录 2
实验1 SQL Server的安装及管理工具的使用 3实验2 交互式SQL一 4
实验3 交互式SQL二 7实验4 数据安全性管理 10实验5 数据完整性管理 13实验6 触发器和存储过程实验 20实验7 数据库设计综合应用 25实验1 SQL Server的安装及管理工具的使用一、实验目的1、通过对某个商用数据库管理系统的使用,了解DBMS的工作原理和系统构架。在此推荐数据库管理系统SQL Server 2008,该系统已经在机房FTP上。你也可以从微软官方网站上下载该系统。2、熟悉对DBMS的操作二、实验内容1、根据安装文件的说明安装数据库管理系统。在安装过程中记录安装的选择,并且对所作的选择进行思考,为何要进行这样的配置,对今后运行数据库管理系统会有什么影响。2、学会启动和停止数据库服务,思考可以用哪些方式来完成启动和停止。3、掌握管理工具的使用 (1)SQL Server Management Studio的使用> 连接服务器的方法> 查询编辑器的使用 (2)配置管理器的使用4、了解数据库系统的逻辑组件:
它们主要是数据库对象,包括基本表、视图、触发器、存储过程、约束等。今后将学习如何操作这些数据库对象。三、实验报告要求1、给出安装过程中出现的错误及解决方法。
2、根据你所了解的SQL Server工具,写出部分主要组件的功能(以SQL Server2008为例,写出SQL Server Management Studio、配置管理器)。实验2 交互式SQL一(创建数据库及表)一、实验目的 本次实验了解SQL Server 2008的启动,熟悉如何使用SSMS和SQL建立数据库和表,并加深对于完整性的理解。二、背景知识 在使用数据库的过程中,接触最多的就是数据库中的表。表是数据存储的地方,是数据库中最重要的部分,管理好表也就管理好了数据库。 表是由行和列组成的。创建表的过程主要就是定义表的列的过程。表的列名在同一个表中具有唯一性,同一列的数据属于同一种数据类型。除了用列名和数据类型来指定列的属性外,还可以定义其它属性:是否为空、默认值、标识符列、全局唯一标识符列等。
约束是SQL Server提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。在SQL Server中有5种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和默认约束(Default Constraint)。三、实验内容与要求3.1 在SSMS中创建数据库和表
在本练习中,将使用SQL Server2008数据库管理系统创建Student数据库(要求改为 学生本人"姓名的拼音首字母"加上部分"学号"命名,如学生姓名"黄添强",其学号为123012013105,Student改为HTQ2013105,下面其余实验要求同上),并在Student数据库中创建表Student,使你能够掌握使用SQL Server2008数据库管理系统创建数据库和表的方法。1) 启动SQL Server2008: 依次单击开始->所有程序->SQL Server 2008->SQL Server Management Studio 启动SQL Server 2008数据库管理系统2) 登录数据库服务器: 点击"连接到服务器"对话框中的连接按钮连接到SQL Server 2008数据库服务器。3) 创建数据库Student
在SQL Server 2008数据库管理系统的左边栏"对象资源管理器"中右击数据库对象,在弹出的快捷菜单中单击"新建数据库"命令。 在弹出的"新建数据库"对话框右侧的数据库名称中输入数据库名称"Student",然后单击确定。4) 在Student数据库中新建表"Student" 单击SQL Server 2008数据库管理系统的左侧的"对象资源管理器"栏中的"刷新"按钮,以显示出新建的数据库"Student"。 依次展开左侧栏对象资源管理器中的"数据库"->"Student",并右击Student数据库中的表项目,在弹出的快捷菜单中单击"新建表"命令。在右侧在工作区中输入"Student"表的信息,该表具有如下列:列名数据类型完整性约束SnoCHAR(5)主码Sname
CHAR(10)非空SsexBIT无SageINT无SdeptCHAR(15)无
单击文件菜单中的保存命令保存该表,并取名为"Student"。3.2 使用SQL语句创建数据库和表
1) 单击工具栏中的"新建查询"按钮,并在弹出的"连接到服务器"对话框中单击"连接"按钮,新建一个SQL脚本。2) 在右侧的SQL脚本输入框中输入如下SQL代码:
CREATE DATABASE STUDENT -- 创建STUDENT数据库GOUSE STUDENT -- 转到STUDENT数据库GO单击工具栏中的执行按钮,运行SQL语句,完成数据库与表的创建。3.3 在新建数据库中创建三个表Employee表列名数据类型长度
是否允许为空说明
EmployeeIDChar6否员工编号,主键NameChar10否
姓名
BirthdayDatetime8否出生日期SexBit1否
性别
AddressChar20是地址
Zip
Char6是邮编
PhoneNumberChar12是电话号码
EmailAddressChar30是电子邮件地址
DepartmentIDChar3否员工部门号,外键
Departments表列名数据类型长度是否允许为空说明
DepartmentIDChar3否员工部门号,主键
DepartmentNameChar20否部门名
NoteText16是备注
Salary表列名数据类型长度是否允许为空说明
EmployeeIDChar6否员工编号,外键IncomeFloat8否收入
OutComeFloat8否支出
3.4 对三张表输入数据(可任意输入,但注意要符合完整性要求,否则会出错,在本实验中,外键设置可先不做要求。注意:要求至少有一条是学生本人的信息) 3.5 实验要求
(1)要求给出三个表创建的SQL语句,要求建表时给出主外键约束、唯一约束、取空值约束、用户自定义的约束等。 (2)举例说明如何操作会违背完整性(实体完整性、参照完整性)。实验3 交互式SQL二(数据查询、更新、视图等)一、实验目的* 掌握SELECT语句的基本语法和查询条件表示方法* 掌握GROUP BY 和ORDER BY 子句的作用和使用方法* 掌握连接查询和子查询的使用方法
* 加深对SQL数据更新(插入、修改及删除)语句的基本语法格式的掌握* 掌握单个元组及多个元组的插入、修改及删除操作的实现过程* 加深对更新操作时数据库中数据一致性问题的了解* 加深对约束条件在数据更新操作执行中的作用问题的了解* 理解视图的概念,掌握视图的使用方法。二、实验内容
1、使用SQL语句创建数据库和表
单击工具栏中的"新建查询"按钮,并在弹出的"连接到服务器"对话框中单击"连接"按钮,新建一个SQL脚本。
在右侧的SQL脚本输入框中输入SQL代码,创建STUDENT数据库(要求改为 学生本人"姓名的拼音首字母"加上部分"学号"命名,如学生姓名"黄添强",其学号为123012013105,Student改为HTQ2013105,下面其余实验要求同上):CREATE DATABASE STUDENT -- 创建STUDENT数据库GOUSE STUDENT -- 转到STUDENT数据库GO单击工具栏中的执行按钮,运行SQL语句,完成数据库与表的创建。2、在新建数据库中创建三个表Student表列名
数据类型长度
是否允许为空说明SnoChar12否
学生编号,主键SnameChar20是姓名
SsexChar2是性别
Sage
SMALLINT是年龄
SdeptChar20是系别
Course表列名数据类型长度是否允许为空说明CnoChar4否
课程标号,主键CnameChar40是课程名
CpnoChar4是
先修课程名,外键CcreditSMALLINT是学分
SC表列名数据类型长度是否允许为空说明SnoChar12否
学生编号,外键CnoChar4否
课程标号,外键GradeSMALLINT是
成绩
注:主键为Sno、Cno3、输入数据
对照课本对三张表输入数据(注意要符合完整性要求,否则会出错。另外,要求Student表首条记录输入实验学生"本人"的信息) 4、对照课本第3章的例题,练习查询、更新、视图等SQL操作。三、实验报告要求
1、写出与上述查询任务相对应的SQL查询语句;2、并记录在实验过程中遇到的问题、解决办法及心得体会。实验4 数据库安全性管理一、实验目的* 掌握SQL Server身份验证模式。* 掌握创建登录账户、数据库用户的方法。* 掌握使用角色实现数据库安全性的方法。* 掌握权限的分配。二、 实验内容用可视化界面与SQL两种方式进行下面实验:
1、设置身份验证模式:Windows身份验证模式和混合模验证模式。2、设置登录账户3、设置数据库用户4、设置数据库角色。5、设置管理对象的权限三、实验步骤指导3.1 可视化界面实现1.设置身份验证模式> 依次单击开始->所有程序->SQL Server 2008->SQL Server Management Studio 启动SQL Server 2008数据库管理系统> 连接成功后,右键你的实例,选择"属性"
> 在"属性"窗口中, 转到"Security"(安全性)项,在"服务器身份验证"中设置为"SQL Server和Windows身份验证模式", 确定,根据提示,应该重新启动sql服务 > 然后执行下面的语句启用sa用户, 同时清除sa的密码(能成功登陆后再根据你的需要设置) EXEC sp_password null,null,'sa' ALTER LOGIN sa ENABLE > 语句执行完成后, 再用sa连接你的实例, 应该就没有问题了. 2.设置登录账户> 创建使用 Windows 身份验证 (SQL Server Management Studio) 的 SQL Server 登录名* ?在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* ?右键单击"安全性"文件夹,指向"新建",然后单击"登录名"。* ?在"常规"页上的"登录名"框中输入一个 Windows 用户名。 * ?选择"Windows 身份验证"。* ?单击"确定"。
> 创建使用 SQL Server 身份验证 (SQL Server Management Studio) 的 SQL Server 登录名 * ?在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* ?右键单击"安全性"文件夹,指向"新建",然后单击"登录名"。* ?在"常规"页上的"登录名"框中输入一个新登录名的名称。* ?选择"SQL Server 身份验证"。* ?输入登录名的密码。* ?选择应当应用于新登录名的密码策略选项。通常,强制密码策略是更安全的选择。 * ?单击"确定"。> 通过 Transact-SQL 创建使用 Windows 身份验证的 SQL Server 登录名
* ?在查询编辑器中,输入以下 Transact-SQL 命令:CREATE LOGIN FROM WINDOWS; GO > 通过 Transact-SQL 创建使用 SQL Server 身份验证的 SQL Server 登录名 * ?在查询编辑器中,输入以下 Transact-SQL 命令:CREATE LOGIN WITH PASSWORD = '' ; GO3.设置数据库用户> 创建数据库用户* 在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* 依次展开数据库,某个具体数据库,"用户"* 右键单击用户,选择"新建用户"* 输入用户名,选择登录名,确定
> 通过 Transact-SQL 创建数据库用户(create user): create user dba for login dba with default_schema=dbo * 并指定数据库用户"dba" 的默认 schema 是"dbo"。这意味着 用户"dba" 在执行"select * from t",实际上执行的是 "select * from dbo.t"。 4设置数据库角色> 新建角色* 在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* 依次展开数据库,某个具体数据库,"角色"* 右击选中新建角色
> 通过 Transact-SQL新建角色:CREATE ROLE role_name> 在对象资源管理器中设置数据库角色
* 在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* 依次展开数据库,某个具体数据库,"用户"* 选中某用户,右击"属性",在展开的数据库用户属性对话框中进行设置> 通过 Transact-SQL设置数据库角色* 通过加入数据库角色,赋予数据库用户"dba"权限: exec sp_addrolemember 'db_owner', 'dba' * 此时,dba 就可以全权管理数据库 mydb 中的对象了。 * 如果想让 SQL Server 登陆帐户"dba"访问多个数据库,比如 mydb2。可以让 sa 执行下面的语句: * use mydb2 go create user dba for login dba with default_schema=dbo go exec sp_addrolemember 'db_owner', 'dba' go * 此时,dba 就可以有两个数据库 mydb, mydb2 的管理权限了! 5.设置管理对象的权限> 在对象资源管理器中授权:* 选中需要授权的登录名、用户名或角色名
* 右键单击选择"属性",在弹出的该对象的属性窗口中选择"安全对象",进行权限分配> 通过 Transact-SQL分配权限:通过GRANT和REVOKE语句3.2 1、创建角色StudentRole,拥有创建表,存储过程,视图权限,拥有对Student表的查询、修改、插入权限2、创建一个登录账号Studentlogin3、创建对应于这个登录账号的数据库用户StudentUser4、将用户StudnetUser添加到TestRole角色中5、对角色的权限进行回收。四、实验报告要求1、写出与上述任务相对应的SQL语句
2、思考数据库服务器上的角色有哪些?权限类型有哪些?3、并记录在实验过程中遇到的问题、解决办法及心得体会。实验5 数据完整性一、实验目的* 掌握域完整性的实现方法。* 掌握实体完整性的实现方法。* 掌握参照完整性的方法。二、实验内容2.1 使用可视化界面完成数据库的完整性设置:> 实体完整性
1.将student表的"sno"字段设为主键:在表设计界面中,单击左边的行选定块,选定"sno"字段,单击工具按钮设置主键。如图1所示: 图11. 将"sc"表的"sno"和"cno"设置为主键:在表设计界面中,单击并按住Ctrl键拖动左边的行选定块,选定sno和cno字段,单击工具按钮设置主键。如图2所示: 图2> 域完整性
3. 将"ssex"字段设置为只能取"男","女"两值:在表设计界面,点击鼠标右键--CHECK约束,--添加约束,添加CK_student_sex名称,然后在约束表达式框中输入" ssex in ('男','女') "。如图3所示。图3> 参照完整性
4. 将"student"表和"sc"表中的"sno"字段设为参照: 打开"sc"表的设计界面, 点击工具栏按钮, 在弹出的属性(properties)对话框中点击"新建"按钮,在"主键表(Primary key table)"下拉框中选择"student"表,在其下的字段选择框中选择"sno",在"外键表(Foreign key table)"下拉框中选择"sc"表,在其下的字段选择框中选择"sno",单击关闭即可。见图4。图4* 命令方式操作方法:> 实体完整性
1.将"student"表的"sno"字段设为主键: 当"student"表已存在则执行:
alter table student add constraint pk_sno primary key (sno) 当"student"表不存在则执行: Create table student(sno CHAR(5) primary key , sname CHAR(10) NOT NULL, ssex CHAR(2), sage int, sdept CHAR(4)) 注:可用命令"drop table student"删除"student"表 2. 添加一身份证号字段,设置其惟一性.(注: 操作前应删除表中的所有记录) Alter table student add id char(18) unique (id) 3. 将"sc"表的"sno"和"cno"设置为主键: 当"sc"表已存在则执行: alter table sc add constraint PK_SnoCno primary key (sno,cno) 当"sc"表不存在则执行: Create table sc(sno CHAR(5), cno CHAR(2), grade INT NULL,
constraint PK_SnoCno primary key (sno,cno)) > 域完整性 4. 将"ssex"字段设置为只能取"男","女"两值: 当"student"表已存在则执行:
alter table student add constraint CK_Sex check (ssex in ('男' ,'女')) 当"student"表不存在则执行: Create table student(sno CHAR(5) primary key , sname CHAR(10), ssex CHAR(2) check (ssex in ('男' ,'女')) , sage int, sdept CHAR(4)) 5. 设置学号字段只能输入数字: alter table student add constraint CK_Sno_Format check (sno like '[0-9][0-9][0-9][0-9][0-9]') 6. 设置身份证号的输入格式:
alter table student add constraint CK_ID_Format check ((id like '[0-9][0-9][0-9][0-9][0-9][0-9][1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]_') OR (id like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]')) 7. 设置18位身份证号的第7位到第10位为合法的年份(1900-2050) alter table student add constraint CK_ID_Format2 check (len(id)=18 and ( (convert(smallint,substring(id,7,4) )>=1900) and(convert(smallint,substring(id,7,4) )<=2050)) )6. 设置男生的年龄必须大于22, 女生的年龄必须大于20. Alter table student add constraint CK_age check (ssex='男' and sage>=22 or ssex='女' and sage>=20 )> 参照完整性 9. 将"student"表和"sc"表中的"sno"字段设为参照: 当"sc"表已存在则执行:
alter table sc add constraint FP_sno foreign key (sno) references student(sno ) 当"sc"表不存在则执行:
Create table sc(sno CHAR(5) constraint FP_sno foreign key references student(sno), cno CHAR(2),grade INT NULL, constraint PK_SnoCno primary key (sno,cno) )* 完整性验证1. 实体完整性: 在"student"表数据浏览可视化界面中输入学号相同的两条记录将会出现错误如图5所示:图5
或者在命令窗口输入下面两条命令也会出现错误提示:
insert into student values('95003','张三','男',24,'CS','42222919901012903X')insert into student values('95001','李四','女',21,'CS','422229199510129031')图6 下面的语句用来验证"sc"表中的实体完整性:
insert into sc values('95002', '10',65) insert into sc values('95002', '10',90) 图72. 域完整性:
使用下面的语句验证"ssex"字段的域完整性:
insert into student values('95009','张匀','大',20,'CS', '42222919901012904X') 3.参照完整性:
使用下面的语句"验证"sc表中的"sno"字段的域完整性(假设student表中没有学号为"95998"的学生记录):insert into sc values('98998', '10',98)2.2 根据课本第5章的内容,使用SQL完成数据库的完整性设置。 参照第5章的例题,练习完整性设置,并用违约例子测试。三、实验报告要求1、写出与上述任务相对应的SQL语句
2、并记录在实验过程中遇到的问题、解决办法及心得体会。实验6 触发器和存储过程实验4.1 触发器实验一、实验目的* 掌握触发器的创建、修改和删除操作。* 掌握触发器的触发执行。* 掌握触发器与约束的不同。二、实验要求1.创建触发器。
2.触发器执行触发器。
3.验证约束与触发器的不同作用期。4.删除新创建的触发器。三、实验内容 (一)示例 1.创建触发器
①启动SQL Server 查询编辑器,选择要操作数据库,如"sc(学生选课)"数据库。②在查询命令窗口中输入以下CREATE TRIGGER语句,创建触发器。
为sc(学生选课)表创建一个基于UPDATE操作和DELETE操作的复合型触发器,当修改了该表中的成绩信息或者删除了成绩记录时,触发器被激活生效,显示相关的操作信息。 --创建触发器 CREATE TRIGGER tri_UPDATE_DELETE_sc ON sc FOR UPDATE,DELETE AS
--检测成绩列表是否被更新 IF UPDATE(成绩) BEGIN --显示学号、课程号、原成绩和新成绩信息
SELECT INSERTED.课程号,DELETED.成绩AS原成绩, INSERTED.成绩AS新成绩 FROM DELETED ,INSERTED WHERE DELETED.学号=INSERTED.学号 END --检测是更新还是删除操作 ELSE IF COLUMNS_UPDATED( )=0 BEGIN --显示被删除的学号、课程号和成绩信号
SELECT 被删除的学号=DELETED.学号,DELETED.课程号, DELETED.成绩AS原成绩 FROM DELETED END ELSE
--返回提示信息 PRINT ' 更新了非成绩列!' ③点击快捷工具栏上的快捷按钮,完成触发器的创建。 2.触发触发器①在查询命令窗口中输入以下UPDATE sc语句,修改成绩列,激发触发器。 UPDATE sc
SET成绩=成绩+5 WHERE 课程号='101'②在查询命令窗口中输入以下UPDATE sc语句修改非成绩列,激发触发器。 UPDATE sc SET 课程号='113' WHERE 课程号='103'③在查询命令窗口中输入以下DELETE sc 语句,删除成绩记录,激发触发器。 DELETE sc WHERE 课程号='102' 3. 比较约束与触发器的不同作用期①在查询命令窗口中输入并执行以下ALTER TABLE 语句,为sc表添加一个约束,使得成绩只能大于等于0且小于等于100。 ALTER TABLE sc ADD CONSTRAINT CK_成绩 CHECK(成绩>=0 AND成绩<=100)②在查询命令窗口中输入并执行以下UPDATE sc语句,查看执行结果。 UPDATE sc SET成绩=120 WHERE 课程号='108'
③在查询命令窗口中输入执行以下UPDATE sc语句,查看执行结果。 UPDATE sc SET成绩=90 WHERE 课程号='108'
从这部分实验中,我们可以看到,约束优先于触发器起作用,它在更新前就生效,以对要更新的值进行规则检查。当检查到与现有规则冲突时,系统给出错误消息,并取消更新操作。如果检查没有问题,更新被执行,当执行完毕后,再激活触发器。 4. 删除新创建的触发器①在查询命令窗口中输入DROP TRIGGER 语句,删除新创建的触发器。DROP TRIGGER tri_UPDATE_DELETE_sc②点击快捷工具栏上的快捷按钮,删除触发器。 (二)练习1.在Student表中编写insert的触发器,假如每个班的学生不能超过30个,如果低于此数,添加可以完成;如果超过此数,则插入将不能实现。2.在SC表上编写update触发器,当修改SC表中的grade字段时将其修改前后的信息保存在SC_log表中。四、实验报告要求1、写出与上述任务相对应的SQL语句
2、并记录在实验过程中遇到的问题、解决办法及心得体会。4.2存储过程实验一、实验目的
* 掌握用户存储过程的创建操作。* 掌握用户存储过程的执行操作。* 掌握用户存储过程的删除操作。二、实验内容 1、创建带输入参数的存储过程的存储过程。 2、执行所创建的存储过程。 3、删除所有新创建的存储过程。三、实验步骤对应于student数据库
(1) 创建一个无参存储过程StuScoreInfo,查询以下信息:学号,姓名,性别,课程名称,考试成绩.(2) 创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的信息.(3) 创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生编号和课程名称查询以下信息:姓名,课程名称,考试成绩.(4) 编写带参数的存储过程,根据传入的课程名称统计该课程的平均成绩.(5) 编写存储过程,根据传入的课程名统计这门课的成绩分布情况,即按照各分数段统计人数.四、实验报告要求1、写出与上述任务相对应的SQL语句
2、并记录在实验过程中遇到的问题、解决办法及心得体会。实验7 数据库设计综合应用一、实验任务与要求目的与任务:
1. 掌握数据库设计和实现的基本过程2. 掌握数据库模式设计、分析和实现的方法3. 了解数据库应用系统软件开发的一般过程。实验基本要求: (1)学习相关的预备知识(2)按照数据库设计与实现过程完成数据库的设计,应用程序的开发,上机调试、运行(3)写出课程设计报告二、课程设计基础知识
数据库设计与实现的基本过程包括需求分析、概念结构设计、逻辑结构设计、数据库的物理设计以及数据库的实施和维护等内容。需求分析确定系统的数据需求和处理需求;概念结构设计通过对用户需求的综合、归纳和抽象,形成一个独立的概念模型;逻辑结构设计则将概念模型转换为具体的数据库管理系统所支持的数据模型;数据库的物理设计结合应用确定数据模型的存储结构和存取方式。在这些工作完成之后,就可以建立数据库并开始调试运行了,在数据库的运行过程中必须对其进行维护--包括数据库的备份与恢复、性能分析与改进等等。1. 概念结构设计--ER图 概念模型是用户需求的抽象,通常用实体关系图(Entity Relationship Diagram,即ER图)来表示。设计ER图的出发点是数据流图层次的选择,一般选择中层的数据流图作为分析设计的依据。在得到各个局部ER图后,需要将它们合并成一张总的ER图。首先是简单的合并,协调各个局部ER之间不一致的地方;然后再对得到总ER图消除冗余,可通过分析数据字典中数据项之间的逻辑关系加以消除。2. 逻辑结构设计--ER图向关系模型的转换 关系数据库的数据模型(即关系模型)由一组关系模式组成,因而ER图向关系模型的转换实际上就是将实体(包括实体的属性)和联系转换为关系模式,一般遵循以下基本原则: 1. 一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
2. 一个1:X(X为1或n)联系通常与某一端的关系模式合并,其中1:n的联系需要与n端对应的关系模式合并。需要在合并的关系模式的属性中加入另一个关系模式的码和联系本身的属性。 3. 一个m:n联系转换为一个关系模式。与该关系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。 4. 三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体的码的组合。 5. 具有相同码的关系模式可合并。3. 数据库设计过程
三、课程设计题目及进度安排
建议6--8人一组建立开发团队。开发团体组织架构和职责: 组长: 1人
负责本开发项目的组织与实施,协调团队各成员的开发进度,负责本开发项目的需求分析,负责课程设计报告文档的组织。 数据库分析员: 1人 负责数据库的概念结构设计 、逻辑结构设计、应用系统功能模块设计,编写相关文档。 用户界面设计员: 1人 负责本开发项目的用户交互界面设计,编写相关文档。 程序员: 3-5人 负责本开发项目的程序设计,编写相关文档。 测试员: 1人 负责本开发项目的程序测试,编写相关文档。课程设计题目:每个开发团队分别选择一个题目完成课程设计,可以自定题目,也可以从以下题目中选择。1. 客户订购登记系统
一个公司希望为其客户订购行为建立一个数据库。一个消费者可以有一个或多个订单,每个订单可以有一种或多种商品。每个订单有一个,可以通过多种方式来支付,例如支票、信用卡或者现金。开始运行这个客户订购登记的员工的名字要被记下来。有一个相应的部门工作人员来负责整理订单病把这些订单发给顾客。如果订单上的货物在库中没有,就需写明库中有什么,这样在订单中可能就会用其他货物来填充。2. 货存控制系统 一个公司希望为控制它的货存建立一个数据库,货存中的产品被分为几类,如服装、食品和文具。当产品需要从供应商那里重新订购时,工作人员需要提出一个购买订单。跟踪记录要提供买进、卖出的货物以及其他的费用。3. 人力资源管理系统
人力资源部门希望建立一个数据库来管理它的员工。一个公司有几个部门,而一个员工属于一个部门。这个部门指派一个经理来全面负责部门事务和部门员工。为了有助于管理好部门工作,某些工作人员被任命来管理一组人员。当有一个新的员工进入公司时,需要他以前的工作经历和成绩。通常来说,每个员工都要经历一次面试,这通常是由经理来进行的。公司定义了一系列的职位类型,例如经理、业务分析员、销售人员和秘书,而且每个类型都有相关的等级,员工所处的位置决定了员工的工资。职位依据其工作量来分配给一个部门。例如,一个部门可能分配给两个业务分析员的职位。每个岗位会分配给一个员工,随着时间的过去,各个职位都会被分配给工作人员。4. 工资管理系统 工资管理部门希望建立一个数据库来管理员工的工资。要计算员工的工资,就需要考虑不在休假日期以内的假期、工作期间的病假时间、奖金和扣除的部分。必须指明给每个员工发薪水的方式,随着时间的推移,方式可能会有些改变。大多数的员工是通过银行卡来结算工资的,但是也有一部分人使用现金或支票。如果是通过银行卡,就需要知道账号和卡的类型。付款方式只可能是一种方式。有几种原因可以扣除工资:例如,个人所得税、国家税、医疗保险、退休保险或者预付款。5. 学生管理系统 一所大学希望建立一个数据库以便对学生进行管理。当一个学生进入学校时,他就会选择一个专业。每个学生也会指定一个指导老师。每个专业每年由一些课程组成。组成专业的课程的最小和最大数目分别是6和8。一般情况下给一个学生三次机会来通过这门课程的考试。有些特殊的课程可以在一个或多个专业中存在。大学可以有几个部门,每个部门都有一个部门负责人,每个课程都会分配一定数量的员工(称为课程合作人)来负责课程的教学。四、提交课程设计报告,内容包括:1. 课程设计说明(含设计题目、设计任务与要求、开发环境说明)2. 功能需求分析3. 数据库概念设计4. 数据库逻辑设计5. 应用系统功能模块6. 源程序代码及运行结果(含运行界面屏幕截图)。7. 总结
目录 2
实验1 SQL Server的安装及管理工具的使用 3实验2 交互式SQL一 4
实验3 交互式SQL二 7实验4 数据安全性管理 10实验5 数据完整性管理 13实验6 触发器和存储过程实验 20实验7 数据库设计综合应用 25实验1 SQL Server的安装及管理工具的使用一、实验目的1、通过对某个商用数据库管理系统的使用,了解DBMS的工作原理和系统构架。在此推荐数据库管理系统SQL Server 2008,该系统已经在机房FTP上。你也可以从微软官方网站上下载该系统。2、熟悉对DBMS的操作二、实验内容1、根据安装文件的说明安装数据库管理系统。在安装过程中记录安装的选择,并且对所作的选择进行思考,为何要进行这样的配置,对今后运行数据库管理系统会有什么影响。2、学会启动和停止数据库服务,思考可以用哪些方式来完成启动和停止。3、掌握管理工具的使用 (1)SQL Server Management Studio的使用> 连接服务器的方法> 查询编辑器的使用 (2)配置管理器的使用4、了解数据库系统的逻辑组件:
它们主要是数据库对象,包括基本表、视图、触发器、存储过程、约束等。今后将学习如何操作这些数据库对象。三、实验报告要求1、给出安装过程中出现的错误及解决方法。
2、根据你所了解的SQL Server工具,写出部分主要组件的功能(以SQL Server2008为例,写出SQL Server Management Studio、配置管理器)。实验2 交互式SQL一(创建数据库及表)一、实验目的 本次实验了解SQL Server 2008的启动,熟悉如何使用SSMS和SQL建立数据库和表,并加深对于完整性的理解。二、背景知识 在使用数据库的过程中,接触最多的就是数据库中的表。表是数据存储的地方,是数据库中最重要的部分,管理好表也就管理好了数据库。 表是由行和列组成的。创建表的过程主要就是定义表的列的过程。表的列名在同一个表中具有唯一性,同一列的数据属于同一种数据类型。除了用列名和数据类型来指定列的属性外,还可以定义其它属性:是否为空、默认值、标识符列、全局唯一标识符列等。
约束是SQL Server提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。在SQL Server中有5种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和默认约束(Default Constraint)。三、实验内容与要求3.1 在SSMS中创建数据库和表
在本练习中,将使用SQL Server2008数据库管理系统创建Student数据库(要求改为 学生本人"姓名的拼音首字母"加上部分"学号"命名,如学生姓名"黄添强",其学号为123012013105,Student改为HTQ2013105,下面其余实验要求同上),并在Student数据库中创建表Student,使你能够掌握使用SQL Server2008数据库管理系统创建数据库和表的方法。1) 启动SQL Server2008: 依次单击开始->所有程序->SQL Server 2008->SQL Server Management Studio 启动SQL Server 2008数据库管理系统2) 登录数据库服务器: 点击"连接到服务器"对话框中的连接按钮连接到SQL Server 2008数据库服务器。3) 创建数据库Student
在SQL Server 2008数据库管理系统的左边栏"对象资源管理器"中右击数据库对象,在弹出的快捷菜单中单击"新建数据库"命令。 在弹出的"新建数据库"对话框右侧的数据库名称中输入数据库名称"Student",然后单击确定。4) 在Student数据库中新建表"Student" 单击SQL Server 2008数据库管理系统的左侧的"对象资源管理器"栏中的"刷新"按钮,以显示出新建的数据库"Student"。 依次展开左侧栏对象资源管理器中的"数据库"->"Student",并右击Student数据库中的表项目,在弹出的快捷菜单中单击"新建表"命令。在右侧在工作区中输入"Student"表的信息,该表具有如下列:列名数据类型完整性约束SnoCHAR(5)主码Sname
CHAR(10)非空SsexBIT无SageINT无SdeptCHAR(15)无
单击文件菜单中的保存命令保存该表,并取名为"Student"。3.2 使用SQL语句创建数据库和表
1) 单击工具栏中的"新建查询"按钮,并在弹出的"连接到服务器"对话框中单击"连接"按钮,新建一个SQL脚本。2) 在右侧的SQL脚本输入框中输入如下SQL代码:
CREATE DATABASE STUDENT -- 创建STUDENT数据库GOUSE STUDENT -- 转到STUDENT数据库GO单击工具栏中的执行按钮,运行SQL语句,完成数据库与表的创建。3.3 在新建数据库中创建三个表Employee表列名数据类型长度
是否允许为空说明
EmployeeIDChar6否员工编号,主键NameChar10否
姓名
BirthdayDatetime8否出生日期SexBit1否
性别
AddressChar20是地址
Zip
Char6是邮编
PhoneNumberChar12是电话号码
EmailAddressChar30是电子邮件地址
DepartmentIDChar3否员工部门号,外键
Departments表列名数据类型长度是否允许为空说明
DepartmentIDChar3否员工部门号,主键
DepartmentNameChar20否部门名
NoteText16是备注
Salary表列名数据类型长度是否允许为空说明
EmployeeIDChar6否员工编号,外键IncomeFloat8否收入
OutComeFloat8否支出
3.4 对三张表输入数据(可任意输入,但注意要符合完整性要求,否则会出错,在本实验中,外键设置可先不做要求。注意:要求至少有一条是学生本人的信息) 3.5 实验要求
(1)要求给出三个表创建的SQL语句,要求建表时给出主外键约束、唯一约束、取空值约束、用户自定义的约束等。 (2)举例说明如何操作会违背完整性(实体完整性、参照完整性)。实验3 交互式SQL二(数据查询、更新、视图等)一、实验目的* 掌握SELECT语句的基本语法和查询条件表示方法* 掌握GROUP BY 和ORDER BY 子句的作用和使用方法* 掌握连接查询和子查询的使用方法
* 加深对SQL数据更新(插入、修改及删除)语句的基本语法格式的掌握* 掌握单个元组及多个元组的插入、修改及删除操作的实现过程* 加深对更新操作时数据库中数据一致性问题的了解* 加深对约束条件在数据更新操作执行中的作用问题的了解* 理解视图的概念,掌握视图的使用方法。二、实验内容
1、使用SQL语句创建数据库和表
单击工具栏中的"新建查询"按钮,并在弹出的"连接到服务器"对话框中单击"连接"按钮,新建一个SQL脚本。
在右侧的SQL脚本输入框中输入SQL代码,创建STUDENT数据库(要求改为 学生本人"姓名的拼音首字母"加上部分"学号"命名,如学生姓名"黄添强",其学号为123012013105,Student改为HTQ2013105,下面其余实验要求同上):CREATE DATABASE STUDENT -- 创建STUDENT数据库GOUSE STUDENT -- 转到STUDENT数据库GO单击工具栏中的执行按钮,运行SQL语句,完成数据库与表的创建。2、在新建数据库中创建三个表Student表列名
数据类型长度
是否允许为空说明SnoChar12否
学生编号,主键SnameChar20是姓名
SsexChar2是性别
Sage
SMALLINT是年龄
SdeptChar20是系别
Course表列名数据类型长度是否允许为空说明CnoChar4否
课程标号,主键CnameChar40是课程名
CpnoChar4是
先修课程名,外键CcreditSMALLINT是学分
SC表列名数据类型长度是否允许为空说明SnoChar12否
学生编号,外键CnoChar4否
课程标号,外键GradeSMALLINT是
成绩
注:主键为Sno、Cno3、输入数据
对照课本对三张表输入数据(注意要符合完整性要求,否则会出错。另外,要求Student表首条记录输入实验学生"本人"的信息) 4、对照课本第3章的例题,练习查询、更新、视图等SQL操作。三、实验报告要求
1、写出与上述查询任务相对应的SQL查询语句;2、并记录在实验过程中遇到的问题、解决办法及心得体会。实验4 数据库安全性管理一、实验目的* 掌握SQL Server身份验证模式。* 掌握创建登录账户、数据库用户的方法。* 掌握使用角色实现数据库安全性的方法。* 掌握权限的分配。二、 实验内容用可视化界面与SQL两种方式进行下面实验:
1、设置身份验证模式:Windows身份验证模式和混合模验证模式。2、设置登录账户3、设置数据库用户4、设置数据库角色。5、设置管理对象的权限三、实验步骤指导3.1 可视化界面实现1.设置身份验证模式> 依次单击开始->所有程序->SQL Server 2008->SQL Server Management Studio 启动SQL Server 2008数据库管理系统> 连接成功后,右键你的实例,选择"属性"
> 在"属性"窗口中, 转到"Security"(安全性)项,在"服务器身份验证"中设置为"SQL Server和Windows身份验证模式", 确定,根据提示,应该重新启动sql服务 > 然后执行下面的语句启用sa用户, 同时清除sa的密码(能成功登陆后再根据你的需要设置) EXEC sp_password null,null,'sa' ALTER LOGIN sa ENABLE > 语句执行完成后, 再用sa连接你的实例, 应该就没有问题了. 2.设置登录账户> 创建使用 Windows 身份验证 (SQL Server Management Studio) 的 SQL Server 登录名* ?在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* ?右键单击"安全性"文件夹,指向"新建",然后单击"登录名"。* ?在"常规"页上的"登录名"框中输入一个 Windows 用户名。 * ?选择"Windows 身份验证"。* ?单击"确定"。
> 创建使用 SQL Server 身份验证 (SQL Server Management Studio) 的 SQL Server 登录名 * ?在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* ?右键单击"安全性"文件夹,指向"新建",然后单击"登录名"。* ?在"常规"页上的"登录名"框中输入一个新登录名的名称。* ?选择"SQL Server 身份验证"。* ?输入登录名的密码。* ?选择应当应用于新登录名的密码策略选项。通常,强制密码策略是更安全的选择。 * ?单击"确定"。> 通过 Transact-SQL 创建使用 Windows 身份验证的 SQL Server 登录名
* ?在查询编辑器中,输入以下 Transact-SQL 命令:CREATE LOGIN
> 通过 Transact-SQL 创建数据库用户(create user): create user dba for login dba with default_schema=dbo * 并指定数据库用户"dba" 的默认 schema 是"dbo"。这意味着 用户"dba" 在执行"select * from t",实际上执行的是 "select * from dbo.t"。 4设置数据库角色> 新建角色* 在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* 依次展开数据库,某个具体数据库,"角色"* 右击选中新建角色
> 通过 Transact-SQL新建角色:CREATE ROLE role_name> 在对象资源管理器中设置数据库角色
* 在 SQL Server Management Studio 中,打开对象资源管理器并展开要在其中创建新登录名的服务器实例的文件夹。* 依次展开数据库,某个具体数据库,"用户"* 选中某用户,右击"属性",在展开的数据库用户属性对话框中进行设置> 通过 Transact-SQL设置数据库角色* 通过加入数据库角色,赋予数据库用户"dba"权限: exec sp_addrolemember 'db_owner', 'dba' * 此时,dba 就可以全权管理数据库 mydb 中的对象了。 * 如果想让 SQL Server 登陆帐户"dba"访问多个数据库,比如 mydb2。可以让 sa 执行下面的语句: * use mydb2 go create user dba for login dba with default_schema=dbo go exec sp_addrolemember 'db_owner', 'dba' go * 此时,dba 就可以有两个数据库 mydb, mydb2 的管理权限了! 5.设置管理对象的权限> 在对象资源管理器中授权:* 选中需要授权的登录名、用户名或角色名
* 右键单击选择"属性",在弹出的该对象的属性窗口中选择"安全对象",进行权限分配> 通过 Transact-SQL分配权限:通过GRANT和REVOKE语句3.2 1、创建角色StudentRole,拥有创建表,存储过程,视图权限,拥有对Student表的查询、修改、插入权限2、创建一个登录账号Studentlogin3、创建对应于这个登录账号的数据库用户StudentUser4、将用户StudnetUser添加到TestRole角色中5、对角色的权限进行回收。四、实验报告要求1、写出与上述任务相对应的SQL语句
2、思考数据库服务器上的角色有哪些?权限类型有哪些?3、并记录在实验过程中遇到的问题、解决办法及心得体会。实验5 数据完整性一、实验目的* 掌握域完整性的实现方法。* 掌握实体完整性的实现方法。* 掌握参照完整性的方法。二、实验内容2.1 使用可视化界面完成数据库的完整性设置:> 实体完整性
1.将student表的"sno"字段设为主键:在表设计界面中,单击左边的行选定块,选定"sno"字段,单击工具按钮设置主键。如图1所示: 图11. 将"sc"表的"sno"和"cno"设置为主键:在表设计界面中,单击并按住Ctrl键拖动左边的行选定块,选定sno和cno字段,单击工具按钮设置主键。如图2所示: 图2> 域完整性
3. 将"ssex"字段设置为只能取"男","女"两值:在表设计界面,点击鼠标右键--CHECK约束,--添加约束,添加CK_student_sex名称,然后在约束表达式框中输入" ssex in ('男','女') "。如图3所示。图3> 参照完整性
4. 将"student"表和"sc"表中的"sno"字段设为参照: 打开"sc"表的设计界面, 点击工具栏按钮, 在弹出的属性(properties)对话框中点击"新建"按钮,在"主键表(Primary key table)"下拉框中选择"student"表,在其下的字段选择框中选择"sno",在"外键表(Foreign key table)"下拉框中选择"sc"表,在其下的字段选择框中选择"sno",单击关闭即可。见图4。图4* 命令方式操作方法:> 实体完整性
1.将"student"表的"sno"字段设为主键: 当"student"表已存在则执行:
alter table student add constraint pk_sno primary key (sno) 当"student"表不存在则执行: Create table student(sno CHAR(5) primary key , sname CHAR(10) NOT NULL, ssex CHAR(2), sage int, sdept CHAR(4)) 注:可用命令"drop table student"删除"student"表 2. 添加一身份证号字段,设置其惟一性.(注: 操作前应删除表中的所有记录) Alter table student add id char(18) unique (id) 3. 将"sc"表的"sno"和"cno"设置为主键: 当"sc"表已存在则执行: alter table sc add constraint PK_SnoCno primary key (sno,cno) 当"sc"表不存在则执行: Create table sc(sno CHAR(5), cno CHAR(2), grade INT NULL,
constraint PK_SnoCno primary key (sno,cno)) > 域完整性 4. 将"ssex"字段设置为只能取"男","女"两值: 当"student"表已存在则执行:
alter table student add constraint CK_Sex check (ssex in ('男' ,'女')) 当"student"表不存在则执行: Create table student(sno CHAR(5) primary key , sname CHAR(10), ssex CHAR(2) check (ssex in ('男' ,'女')) , sage int, sdept CHAR(4)) 5. 设置学号字段只能输入数字: alter table student add constraint CK_Sno_Format check (sno like '[0-9][0-9][0-9][0-9][0-9]') 6. 设置身份证号的输入格式:
alter table student add constraint CK_ID_Format check ((id like '[0-9][0-9][0-9][0-9][0-9][0-9][1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]_') OR (id like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]')) 7. 设置18位身份证号的第7位到第10位为合法的年份(1900-2050) alter table student add constraint CK_ID_Format2 check (len(id)=18 and ( (convert(smallint,substring(id,7,4) )>=1900) and(convert(smallint,substring(id,7,4) )<=2050)) )6. 设置男生的年龄必须大于22, 女生的年龄必须大于20. Alter table student add constraint CK_age check (ssex='男' and sage>=22 or ssex='女' and sage>=20 )> 参照完整性 9. 将"student"表和"sc"表中的"sno"字段设为参照: 当"sc"表已存在则执行:
alter table sc add constraint FP_sno foreign key (sno) references student(sno ) 当"sc"表不存在则执行:
Create table sc(sno CHAR(5) constraint FP_sno foreign key references student(sno), cno CHAR(2),grade INT NULL, constraint PK_SnoCno primary key (sno,cno) )* 完整性验证1. 实体完整性: 在"student"表数据浏览可视化界面中输入学号相同的两条记录将会出现错误如图5所示:图5
或者在命令窗口输入下面两条命令也会出现错误提示:
insert into student values('95003','张三','男',24,'CS','42222919901012903X')insert into student values('95001','李四','女',21,'CS','422229199510129031')图6 下面的语句用来验证"sc"表中的实体完整性:
insert into sc values('95002', '10',65) insert into sc values('95002', '10',90) 图72. 域完整性:
使用下面的语句验证"ssex"字段的域完整性:
insert into student values('95009','张匀','大',20,'CS', '42222919901012904X') 3.参照完整性:
使用下面的语句"验证"sc表中的"sno"字段的域完整性(假设student表中没有学号为"95998"的学生记录):insert into sc values('98998', '10',98)2.2 根据课本第5章的内容,使用SQL完成数据库的完整性设置。 参照第5章的例题,练习完整性设置,并用违约例子测试。三、实验报告要求1、写出与上述任务相对应的SQL语句
2、并记录在实验过程中遇到的问题、解决办法及心得体会。实验6 触发器和存储过程实验4.1 触发器实验一、实验目的* 掌握触发器的创建、修改和删除操作。* 掌握触发器的触发执行。* 掌握触发器与约束的不同。二、实验要求1.创建触发器。
2.触发器执行触发器。
3.验证约束与触发器的不同作用期。4.删除新创建的触发器。三、实验内容 (一)示例 1.创建触发器
①启动SQL Server 查询编辑器,选择要操作数据库,如"sc(学生选课)"数据库。②在查询命令窗口中输入以下CREATE TRIGGER语句,创建触发器。
为sc(学生选课)表创建一个基于UPDATE操作和DELETE操作的复合型触发器,当修改了该表中的成绩信息或者删除了成绩记录时,触发器被激活生效,显示相关的操作信息。 --创建触发器 CREATE TRIGGER tri_UPDATE_DELETE_sc ON sc FOR UPDATE,DELETE AS
--检测成绩列表是否被更新 IF UPDATE(成绩) BEGIN --显示学号、课程号、原成绩和新成绩信息
SELECT INSERTED.课程号,DELETED.成绩AS原成绩, INSERTED.成绩AS新成绩 FROM DELETED ,INSERTED WHERE DELETED.学号=INSERTED.学号 END --检测是更新还是删除操作 ELSE IF COLUMNS_UPDATED( )=0 BEGIN --显示被删除的学号、课程号和成绩信号
SELECT 被删除的学号=DELETED.学号,DELETED.课程号, DELETED.成绩AS原成绩 FROM DELETED END ELSE
--返回提示信息 PRINT ' 更新了非成绩列!' ③点击快捷工具栏上的快捷按钮,完成触发器的创建。 2.触发触发器①在查询命令窗口中输入以下UPDATE sc语句,修改成绩列,激发触发器。 UPDATE sc
SET成绩=成绩+5 WHERE 课程号='101'②在查询命令窗口中输入以下UPDATE sc语句修改非成绩列,激发触发器。 UPDATE sc SET 课程号='113' WHERE 课程号='103'③在查询命令窗口中输入以下DELETE sc 语句,删除成绩记录,激发触发器。 DELETE sc WHERE 课程号='102' 3. 比较约束与触发器的不同作用期①在查询命令窗口中输入并执行以下ALTER TABLE 语句,为sc表添加一个约束,使得成绩只能大于等于0且小于等于100。 ALTER TABLE sc ADD CONSTRAINT CK_成绩 CHECK(成绩>=0 AND成绩<=100)②在查询命令窗口中输入并执行以下UPDATE sc语句,查看执行结果。 UPDATE sc SET成绩=120 WHERE 课程号='108'
③在查询命令窗口中输入执行以下UPDATE sc语句,查看执行结果。 UPDATE sc SET成绩=90 WHERE 课程号='108'
从这部分实验中,我们可以看到,约束优先于触发器起作用,它在更新前就生效,以对要更新的值进行规则检查。当检查到与现有规则冲突时,系统给出错误消息,并取消更新操作。如果检查没有问题,更新被执行,当执行完毕后,再激活触发器。 4. 删除新创建的触发器①在查询命令窗口中输入DROP TRIGGER 语句,删除新创建的触发器。DROP TRIGGER tri_UPDATE_DELETE_sc②点击快捷工具栏上的快捷按钮,删除触发器。 (二)练习1.在Student表中编写insert的触发器,假如每个班的学生不能超过30个,如果低于此数,添加可以完成;如果超过此数,则插入将不能实现。2.在SC表上编写update触发器,当修改SC表中的grade字段时将其修改前后的信息保存在SC_log表中。四、实验报告要求1、写出与上述任务相对应的SQL语句
2、并记录在实验过程中遇到的问题、解决办法及心得体会。4.2存储过程实验一、实验目的
* 掌握用户存储过程的创建操作。* 掌握用户存储过程的执行操作。* 掌握用户存储过程的删除操作。二、实验内容 1、创建带输入参数的存储过程的存储过程。 2、执行所创建的存储过程。 3、删除所有新创建的存储过程。三、实验步骤对应于student数据库
(1) 创建一个无参存储过程StuScoreInfo,查询以下信息:学号,姓名,性别,课程名称,考试成绩.(2) 创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的信息.(3) 创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生编号和课程名称查询以下信息:姓名,课程名称,考试成绩.(4) 编写带参数的存储过程,根据传入的课程名称统计该课程的平均成绩.(5) 编写存储过程,根据传入的课程名统计这门课的成绩分布情况,即按照各分数段统计人数.四、实验报告要求1、写出与上述任务相对应的SQL语句
2、并记录在实验过程中遇到的问题、解决办法及心得体会。实验7 数据库设计综合应用一、实验任务与要求目的与任务:
1. 掌握数据库设计和实现的基本过程2. 掌握数据库模式设计、分析和实现的方法3. 了解数据库应用系统软件开发的一般过程。实验基本要求: (1)学习相关的预备知识(2)按照数据库设计与实现过程完成数据库的设计,应用程序的开发,上机调试、运行(3)写出课程设计报告二、课程设计基础知识
数据库设计与实现的基本过程包括需求分析、概念结构设计、逻辑结构设计、数据库的物理设计以及数据库的实施和维护等内容。需求分析确定系统的数据需求和处理需求;概念结构设计通过对用户需求的综合、归纳和抽象,形成一个独立的概念模型;逻辑结构设计则将概念模型转换为具体的数据库管理系统所支持的数据模型;数据库的物理设计结合应用确定数据模型的存储结构和存取方式。在这些工作完成之后,就可以建立数据库并开始调试运行了,在数据库的运行过程中必须对其进行维护--包括数据库的备份与恢复、性能分析与改进等等。1. 概念结构设计--ER图 概念模型是用户需求的抽象,通常用实体关系图(Entity Relationship Diagram,即ER图)来表示。设计ER图的出发点是数据流图层次的选择,一般选择中层的数据流图作为分析设计的依据。在得到各个局部ER图后,需要将它们合并成一张总的ER图。首先是简单的合并,协调各个局部ER之间不一致的地方;然后再对得到总ER图消除冗余,可通过分析数据字典中数据项之间的逻辑关系加以消除。2. 逻辑结构设计--ER图向关系模型的转换 关系数据库的数据模型(即关系模型)由一组关系模式组成,因而ER图向关系模型的转换实际上就是将实体(包括实体的属性)和联系转换为关系模式,一般遵循以下基本原则: 1. 一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
2. 一个1:X(X为1或n)联系通常与某一端的关系模式合并,其中1:n的联系需要与n端对应的关系模式合并。需要在合并的关系模式的属性中加入另一个关系模式的码和联系本身的属性。 3. 一个m:n联系转换为一个关系模式。与该关系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。 4. 三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体的码的组合。 5. 具有相同码的关系模式可合并。3. 数据库设计过程
三、课程设计题目及进度安排
建议6--8人一组建立开发团队。开发团体组织架构和职责: 组长: 1人
负责本开发项目的组织与实施,协调团队各成员的开发进度,负责本开发项目的需求分析,负责课程设计报告文档的组织。 数据库分析员: 1人 负责数据库的概念结构设计 、逻辑结构设计、应用系统功能模块设计,编写相关文档。 用户界面设计员: 1人 负责本开发项目的用户交互界面设计,编写相关文档。 程序员: 3-5人 负责本开发项目的程序设计,编写相关文档。 测试员: 1人 负责本开发项目的程序测试,编写相关文档。课程设计题目:每个开发团队分别选择一个题目完成课程设计,可以自定题目,也可以从以下题目中选择。1. 客户订购登记系统
一个公司希望为其客户订购行为建立一个数据库。一个消费者可以有一个或多个订单,每个订单可以有一种或多种商品。每个订单有一个,可以通过多种方式来支付,例如支票、信用卡或者现金。开始运行这个客户订购登记的员工的名字要被记下来。有一个相应的部门工作人员来负责整理订单病把这些订单发给顾客。如果订单上的货物在库中没有,就需写明库中有什么,这样在订单中可能就会用其他货物来填充。2. 货存控制系统 一个公司希望为控制它的货存建立一个数据库,货存中的产品被分为几类,如服装、食品和文具。当产品需要从供应商那里重新订购时,工作人员需要提出一个购买订单。跟踪记录要提供买进、卖出的货物以及其他的费用。3. 人力资源管理系统
人力资源部门希望建立一个数据库来管理它的员工。一个公司有几个部门,而一个员工属于一个部门。这个部门指派一个经理来全面负责部门事务和部门员工。为了有助于管理好部门工作,某些工作人员被任命来管理一组人员。当有一个新的员工进入公司时,需要他以前的工作经历和成绩。通常来说,每个员工都要经历一次面试,这通常是由经理来进行的。公司定义了一系列的职位类型,例如经理、业务分析员、销售人员和秘书,而且每个类型都有相关的等级,员工所处的位置决定了员工的工资。职位依据其工作量来分配给一个部门。例如,一个部门可能分配给两个业务分析员的职位。每个岗位会分配给一个员工,随着时间的过去,各个职位都会被分配给工作人员。4. 工资管理系统 工资管理部门希望建立一个数据库来管理员工的工资。要计算员工的工资,就需要考虑不在休假日期以内的假期、工作期间的病假时间、奖金和扣除的部分。必须指明给每个员工发薪水的方式,随着时间的推移,方式可能会有些改变。大多数的员工是通过银行卡来结算工资的,但是也有一部分人使用现金或支票。如果是通过银行卡,就需要知道账号和卡的类型。付款方式只可能是一种方式。有几种原因可以扣除工资:例如,个人所得税、国家税、医疗保险、退休保险或者预付款。5. 学生管理系统 一所大学希望建立一个数据库以便对学生进行管理。当一个学生进入学校时,他就会选择一个专业。每个学生也会指定一个指导老师。每个专业每年由一些课程组成。组成专业的课程的最小和最大数目分别是6和8。一般情况下给一个学生三次机会来通过这门课程的考试。有些特殊的课程可以在一个或多个专业中存在。大学可以有几个部门,每个部门都有一个部门负责人,每个课程都会分配一定数量的员工(称为课程合作人)来负责课程的教学。四、提交课程设计报告,内容包括:1. 课程设计说明(含设计题目、设计任务与要求、开发环境说明)2. 功能需求分析3. 数据库概念设计4. 数据库逻辑设计5. 应用系统功能模块6. 源程序代码及运行结果(含运行界面屏幕截图)。7. 总结