数据库实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据库实验报告全”。
实验7 索引和数据完整性的使用
1、目的与要求
(1)掌握索引的使用方法;
(2)掌握数据完整性的实现方法;
2、实验准备
(1)了解索引的作用与分类;(2)掌握索引的创建方法;
(3)理解数据的完整性的概念与分类;(4)掌握各种数据完整性的实现方法。
3、实验内容
(1)建立索引
①使用CREATE INDEX语句创建索引。
对YGGL数据库的Employees表中的DepartmentID列建立索引。在查询分析器中输入如下程序并执行: USE YGGL GO CREATE INDEX depart_ind
ON Employees(DepartmentID)GO 在Employees表的Name列和Addre列上建立复合索引。CREATE INDEX Ad_ind
ON Employees(Name,Addre)对Departments表上的DepartmentName列建立唯一非聚集索引。CREATE UNIQUE INEDX Dep_ind ON Departments(DepartmentName)【思考与练习】
a.索引创建完后在对象资源管理器中查看表中的索引。b.了解索引的分类情况
c.使用CREATE INDEX语句能创建主题吗? d.在什么情况下可以看到建立索引的好处?
②使用界面方式创建索引。
使用界面方式在Employees表的PhoneNumber列上创建索引。
启动SQL Server Management Studio,在对象资源管理器中展开数据库YGGL,展开表Employees,右击“索引,选择“新建索引”选项。在新建索引的窗口中填写索引的名称和类型,单击“添加”按钮,在列表框中选择要创建的索引的列,选择完单击“确定”按钮即完成创建工作。【思考与练习】
a.使用界面方式创建一个复合索引。
b.在Employees表的表设计窗口选择Addre列,右击选择“索引/键”菜单项,在新窗口中的Addre列创建一个唯一的索引。
c.创建一个数据量很大的新表,查看使用索引和不使用索引的区别。
(2)重建索引。
重建表Employees中的所有索引。USE YGGL GO ALTER INDEX ALL
ON Employ REBUILD 【思考与练习】重建表Employees中EmployeeID列上的索引。
(3)删除索引。
使用DROP INDEX语句删除表Employees上的索引Depart_ind,计划使用如下SQL语句:
DROP INDEX Depart_ind ON Employees 【思考与练习】
a.使用QROP INDEX一次删除Employees表上的多个索引 b使用界面方式删除Department表上的索引。
(4)数据完整性。
①创建一个表Employees5,只含EmployeesID,Name,Sex和Education列。将Name,设为主键,作为列Name的约束。对EmployeesID列进行UNIQUE约束,并作为表的约束。
CREATE TABLE Employees5(EmployeesID char(6)NOT NULL PRIMARY KEY, Sex tinyint Education char(4), CONSTRAINT UK_id UNIQUE(EmployeesID))
②删除上例中创建的UNIQUE约束。ALTER TABLE Employees5 DROPCONSTRAINT UK_id GO 【思考与练习】
a.使用T-SQL命令创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命名。b.使用语句为表ALTER TABLEEmployees5添加一个新列Addre,并为该列定义UNIQUE约束,并了解如何使用图形向导方式删除主键和UNIOQUE约束。
③创建新表student,只考虑“号码”和“性别”两列,性别只能包含男或女。CREATE TABLE student(号码char(6)NOT NULL 性别char(2)Employees
CHECK(性别 IN(“男”,“女”))
【思考与练习】 向该表插入数据,“性别”列插入“男”和“女”以外的字符,查看会发生什么情况。
④创建新表Salary2,结构与Salary相同,但Salary2表不可以OutCome列大于Income列。
CREATE TABLE Salary2(EmployeesID char(6)NOT NULL Income Float NOT NULL, OUTCOME FLOAT NOT NULL, CHECK(INCOME>=OUTCOME))【思考与练习】
a.向表中插入数据,查看OUTCOME值比INCOME值大是会有什么情况。b.创建一个表Employees6,只考虑“学号”和“出生日期”两列,出生日期必须晚于1980年1月1日。
⑤对YGGL数据库中的Employees表进行修改,为其增加“DepartmentID”字段的CHECK约束。
use YGGL go alter table Employees add constraint depart check(DepartmentID>=1 and DepartmentID
⑥创建一个规则对象,用以限制输入到该规则所绑定的列中的值只能是该规则中列出的值。
create rule list_rule as @list in('财务部','研发部','人力资源部','销售部')go exec sp_bindrule 'list_rule','Departments.DepartmentName' go 【思考与练习】创建一个规则对象,限制在0~20之间。然后把他绑定知道Employees表的WorkYear字段上。
删除上述建立的规则对象。
⑦创建一个表Salary3,要求所有Salary3表上EmployeeID列的值都要出现在Salary表中,利用参照完整性约束实现,要求当删除或修改Salary表上的EmployeeID列时,Salary3表中的EmployeeID值也会随之变化
create table Salary3(EmployeeID char(6)not null primary key, InCome float not null, OutCome float(8)not null, foreign key(EmployeeID)references Salary(EmployeeID)on update cascade
on delete cascade)
4、实验结果
(1)建立索引 ①【思考与练习】
a.索引创建完后在对象资源管理器中查看表中的索引。
b.了解索引的分类情况
答:索引分为两类:分别是聚集索引和非聚集索引,其中有唯一索引和复合索引。每一个表中只可以有一个聚集索引,但可以有多个非聚集索引。c.使用CREATE INDEX语句能创建主题吗? 不可以
d.在什么情况下可以看到建立索引的好处? 当要在庞大的数据库中寻找自己想要的数据的时候,建立索引是很有好处的,优点如下:
第一:通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二:可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三:可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四:在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
②【思考与练习】
a.使用界面方式创建一个复合索引。
b.在Employees表的表设计窗口选择Addre列,右击选择“索引/键”菜单项,在新窗口中的Addre列创建一个唯一的索引。
c.创建一个数据量很大的新表,查看使用索引和不使用索引的区别。
(2)重建索引。
【思考与练习】重建表Employees中EmployeeID列上的索引。USE YGGL GO create index employid_ind ON Employees(EmployeeID)GO ALTER INDEX employid_ind ON Employees REBUILD GO
(3)删除索引。
【思考与练习】
a.使用QROP INDEX一次删除Employees表上的多个索引
USE YGGL GO DROP INDEX Employees.depart_ind,Employees.Employ_ind GO
b使用界面方式删除Department表上的索引。
(4)数据完整性。
②【思考与练习】
a.使用T-SQL命令创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命名。
USE YGGL GO CREATE TABLE Employ(EmployeeID char(8)NOT NULL, Name char(10)NOT NULL, Sex bit NOT NULL, Education char(5), CONSTRAINT UK_id PRIMARY KEY(EmployeeID,Name,Sex))
b.使用语句为表ALTER TABLEEmployees5添加一个新列Addre,并为该列定义UNIQUE 约束。
USE YGGL GO ALTER TABLE Employees5 ADD Addre varchar(40)NULL CONSTRAINT USK_id UNIQUE GO
C.使用界面方式为一个新表定义主键和UNIQUE约束,并了解如何使用图形向导方式删除主键和UNIQUE约束。
③【思考与练习】
向该表插入数据,“性别”列插入“男”和“女”以外的字符,查看会发生什么情况。
④【思考与练习】
a.向表中插入数据,查看OUTCOME值比INCOME值大是会有什么情况。
INSERT 语句与CHECK 约束“CK__Salary2__1A14E395”冲突。该冲突发生于数据库“YGGL”,表“dbo.Salary2”。
语句已终止。
b.创建一个表Employees6,只考虑“学号”和“出生日期”两列,出生日期必须晚于1980年1月1日。USE YGGL
GO CREATE TABLE Employees6(学号 char(6)NOT NULL,出生日期
varchar(20)NOT NULL
CHECK(出生日期>'1980-1-1'))
⑤【思考与练习】测试CHECK约束的有效性。
insert into Employees6 values('001','1980-1-0')
INSERT 语句与CHECK 约束“CK__Employees6__出生日期__1BFD2C07”冲突。该冲突发生于数据库“YGGL”,表
“dbo.Employees6”, column '出生日期'。语句已终止。结果是:上面的记录添加不进去.表现出了check的有效性.⑥【思考与练习】创建一个规则对象,限制在0~20之间。然后把他绑定知道Employees表的WorkYear字段上。USE YGGL
GO CREATE RULE Emp_rule
AS @Emp like'[0-20]' GO EXEC sp_bindrule 'Emp_rule','Employees.WorkYear' GO
删除上述建立的规则对象。USE YGGL
GO EXEC sp_unbindrule 'Employees.WorkYear' DROP RULE Emp_rule GO
⑦a.创建完Salary3表后,初始化该标的数据与salary表相同。删除salary表中一行数据,在查看salary3表的内容,看看会发生什么情况。
B.使用ALTER TABLE语句向salary表中的EmployeeID列上添加一个外键,要求EmployeeIs表中要删除或修改与EmployeeID值有关的行时,检查Salary表中有没有与该EployeeID值相关的记录,如果存在则拒绝更新Emloyees表。C.在对象资源管理器中建立Departments、Employees和Salary三个表之间的参照关系。
数据库系统原理课程设计总结报告学院: 软件学院 专业: 软件工程 年级: 2009 学号: 20092647 姓名: 李野1、开发环境Windows7系统2、DBMS系统架构采用向量的存储结构存储数据字典......
实验一 PowerDesigner 的 CDM 应用1:实验目的使用PowerDesinger进行数据库概念模型设计,掌握CDM中的实体、实体属性、实体与实体之间联系的操作方法。 2:实验内容建立一个“实......
10包三 李雅 100910306实验报告一、实验题目:数据库基本操作实验二、实验目的:掌握数据库的建立、表的设计基本方法,通过实际操作熟练掌握数据库的基本操作——数据的输入与导......
实 验 报 告一、实验室名称: 软件工程实验室二、实验项目名称:创建HIS数据库三、实验原理: 数据定义语言DDL四、实验目的:在SQL Server 2008 中创建HIS 数据库和表。五、实验内......
《数据库原理》实验报告一学号:E01114193 姓名:刘雪平年级:计科三班 成绩:实验名称:管理数据库 实验日期:2013年4月11日 实验目的:(1)熟练掌握在企业管理器中创建数据库的方法。 (2)熟......