资源描述
《数据库原理与应用》课程实验
数据库原理与应用
实验报告
题目: 数据库的完整性
学号:________________
姓名:________________
教师:________________
实验题目
数据库的完整性
1、 实验内容
理解以下几张表的内容,根据实际情况设计属性名、数据类型、及各种完整性约束(primary key、foreign key、not null、unique、check),用数据定义语言实现,然后设计实验数据验证约束的效果,当操作违反了完整性约束条件时,数据库管理系统是如何处理的。
1、创建数据库S_T。
2、新建一张学生信息表,该表至少包含学号,姓名,性别,出生日期,专业,身份证号,联系方式等属性,根据以下学生信息为每个属性选择合适的数据类型。
学号
姓名
性别
出生日期
专业
身份证号
联系方式
09011101
李彤
女
1989-6-5
JK
33020319890605234X
654234
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique),为性别设置检查约束(check)使该属性只能取“男”或 “女”。
3、新建一张专业信息表,该表至少包含专业号,专业名称,专业负责人,专业简介等属性,根据以下专业信息为每个属性选择合适的数据类型。
专业号
专业名称
专业负责人
专业简介
JK
计算机科学与技术
女
Null
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique)。
4、新建一张课程信息表,该表至少包含课程号,课程名称,学分,开课学期等属性,根据以下课程信息为每个属性选择合适的数据类型。
课程号
课程名称
学分
开课学期
10001
数据库原理
3
5
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为学分设置约束使该属性取值范围为1到10之间的整数。
5、新建一张选课信息表,该表至少包含学号,课程号,成绩,基点等属性,根据以下选课信息为每个属性选择合适的数据类型。
学号
课程号
成绩
基点
09011101
10001
89
3.0
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为成绩设置约束使该属性取值范围为0到100之间的整数。为基点设置约束使该属性取值为0或者大于等于1的值。
6、修改学生信息表,选择该表中合适的属性设置外码约束(foreign key),实现表间数据的参考完整性。
7、修改选课信息表,选择该表中合适的属性设置外码约束(foreign key),要求允许级联更新,但不允许级联删除。
2、 实验目的与要求
1、理解数据库完整性的内容以及各类约束的作用。
2、掌握设置数据表中的各类约束的SQL语句。
3、根据要求为数据表设计数据类型、完整性约束实现数据库的完整性,设计数据验证各类约束的效果,并根据数据库管理系统的提示分析各种出现违反完整性约束的情况。
3、 实验环境
已安装SQL Server 2008 企业版的计算机;
具有局域网环境,有固定IP;
4、 实验结果与分析
2、新建一张学生信息表,该表至少包含学号,姓名,性别,出生日期,专业,身份证号,联系方式等属性,根据以下学生信息为每个属性选择合适的数据类型。
学号
姓名
性别
出生日期
专业
身份证号
联系方式
09011101
李彤
女
1989-6-5
JK
33020319890605234X
654234
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique),为性别设置检查约束(check)使该属性只能取“男”或 “女”。
create table student
(sno char(9) primary key,
sname varchar(20),
ssex char(2) check(ssex in ('男','女')),
sbirth date,
sdept varchar(10),
sid char(18) unique,
sphone varchar(20)
)
3、新建一张专业信息表,该表至少包含专业号,专业名称,专业负责人,专业简介等属性,根据以下专业信息为每个属性选择合适的数据类型。
专业号
专业名称
专业负责人
专业简介
JK
计算机科学与技术
女
Null
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique)。
create table dept
(dno varchar(10) primary key,
dname varchar(20) unique,
drpaname varchar(20),
ddescrib varchar(50)
)
4、新建一张课程信息表,该表至少包含课程号,课程名称,学分,开课学期等属性,根据以下课程信息为每个属性选择合适的数据类型。
课程号
课程名称
学分
开课学期
10001
数据库原理
3
5
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为学分设置约束使该属性取值范围为1到10之间的整数。
create table course
(cno char(5) primary key,
cname varchar(20),
ccredit smallint check(ccredit>=1 and ccredit<=10),
csem smallint,
)
5、新建一张选课信息表,该表至少包含学号,课程号,成绩,基点等属性,根据以下选课信息为每个属性选择合适的数据类型。
学号
课程号
成绩
基点
09011101
10001
89
3.0
要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为成绩设置约束使该属性取值范围为0到100之间的整数。为基点设置约束使该属性取值为0或者大于等于1的值。
create table sc
(sno char(9) not null,
cno char(5) not null,
grade smallint check(grade>=0 and grade<=100),
gradepoint smallint check(gradepoint=0 or gradepoint>=1),
primary key(sno,cno)
)
6、修改学生信息表,选择该表中合适的属性设置外码约束(foreign key),实现表间数据的参考完整性。
create table student
(sno char(9) primary key,
sname varchar(20),
ssex char(2) check(ssex in ('男','女')),
sbirth date,
sdept varchar(10),
sid char(18) unique,
sphone varchar(20),
foreign key (sdept) references dept(dno)
)
7、修改选课信息表,选择该表中合适的属性设置外码约束(foreign key),要求允许级联更新,但不允许级联删除。
create table sc
(sno char(9) not null,
cno char(5) not null,
grade smallint check(grade>=0 and grade<=100),
gradepoint smallint check(gradepoint=0 or gradepoint>=1),
primary key(sno,cno),
foreign key(sno) references student(sno)
on delete no action
on update cascade,
foreign key(cno) references course(cno)
on delete no action
on update cascade
测试:
表里的约束设置完后,可通过向表输入数据来检测设置的约束是否有效。请为每张表设计测试方案,检验你设置的约束是否有效。
1、学生信息表
insert into student values('09011101','李彤','女','1989-6-5','JK','33020319890605234X','654234')
sid唯一约束:
insert into student values('09011102','王城','男','1989-7-5','JK','33020319890605234X','652224')
性别不再约束范围:
insert into student values('09011102','王城','1','1989-7-5','JK','330203198906052221','652224')
专业没有参照dept表:
insert into student values('09011102','王城','男','1989-7-5','ST','330203198906052221','652224')
2、专业信息表
insert into dept values('JK','计算机科学与技术','张兰',NULL)
insert into dept values('DK','电子科学与技术','李磊',NULL)
insert into dept values('KJ','会计学','韩梅',NULL)
专业名唯一约束
insert into dept values('DK','计算机科学与技术','张兰',NULL)
3、课程信息表
insert into course values('10001','数据库原理',3,5)
学分超出范围:
insert into course values('10002','数据结构',11,5)
4、选课信息表
insert into sc values('09011101','10001',89,3)
成绩超出范围:
insert into sc values('09011103','10011',101,3)
7
展开阅读全文