8实验八 数据库的完整性
- 格式:doc
- 大小:1.56 MB
- 文档页数:13
举例说明数据库完整性
举例说明数据库完整性,具体如下:
1.实体完整性。
若属性组(或属性)K是基本关系R的主码(或称主关键字),则所有元组K的取值唯一,并且K 中属性不能全部或部分取空值。
例如:在课程关系T中,若“课程名”属性为主码,则“课程名”属性不能取空值,并且课程名要唯一。
2.用户定义的完整性。
用户定义的完整性就是针对某一具体应用的关系数据库所制定的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
例如:对于学生关系中的年龄,我们可以按需要定义“年龄>7并且年龄<40”的自定义规则。
实验名称:数据完整性验证实验实验日期:2023年4月10日实验地点:XX大学计算机实验室实验目的:1. 了解数据完整性的概念和重要性。
2. 掌握数据完整性验证的方法和工具。
3. 提高对数据质量控制和数据管理的认识。
实验原理:数据完整性是指数据的准确、一致和可靠。
在数据管理过程中,数据完整性是保证数据质量的基础。
数据完整性验证是指通过各种方法对数据进行检查,确保数据的准确性和一致性。
实验器材:1. 实验计算机:一台配置较高的计算机,用于运行数据完整性验证工具。
2. 数据库管理系统:如MySQL、Oracle等,用于存储实验数据。
3. 数据完整性验证工具:如SQL Profiler、DataGrip等,用于检测数据完整性问题。
实验步骤:1. 数据准备(1)创建一个数据库,并在数据库中创建一个表,用于存储实验数据。
(2)向表中插入一些数据,包括正常数据和异常数据。
2. 数据完整性验证(1)使用SQL Profiler工具对数据库进行数据完整性验证。
(2)在SQL Profiler中配置监控参数,如监控类型、监控对象等。
(3)启动SQL Profiler,运行数据库操作,如插入、更新、删除等。
(4)观察SQL Profiler的输出结果,检查数据是否发生异常。
3. 结果分析(1)分析SQL Profiler的输出结果,找出数据完整性问题。
(2)根据问题类型,提出解决方案。
实验结果:1. 数据完整性问题(1)在插入异常数据时,发现部分数据未满足数据类型约束。
(2)在更新数据时,发现部分数据未满足唯一性约束。
2. 解决方案(1)针对数据类型约束问题,修改数据类型,确保数据满足约束条件。
(2)针对唯一性约束问题,修改数据,确保数据满足唯一性条件。
实验结论:1. 数据完整性验证对于保证数据质量至关重要。
2. 使用SQL Profiler等工具可以有效检测数据完整性问题。
3. 通过数据完整性验证,可以及时发现并解决数据质量问题,提高数据管理水平。
数据库完整性测试报告一、引言数据库完整性测试是保证数据的准确性和一致性的关键步骤。
本报告旨在分析和评估数据库的完整性,并提供测试结果和相应的建议。
二、测试目的本次数据库完整性测试的目的是评估数据库中的数据约束和完整性规则是否正常运行,以及确认数据库能否有效地保持数据的一致性、准确性和唯一性。
三、测试方法我们使用了以下几种测试方法来检验数据库的完整性:1. 字段约束测试:验证表中的字段是否满足数据类型、长度、非空等约束条件。
2. 主键约束测试:检查表中的主键是否唯一,并验证相关的外键约束。
3. 唯一约束测试:验证表中的唯一约束是否有效,确保每个被约束的字段只能有唯一的值。
4. 默认值约束测试:确认默认值约束是否正确地应用到相应的字段。
5. 触发器测试:测试触发器是否能够正确地触发和执行相关的动作。
四、测试结果经过数据库完整性测试,我们得出以下结果:1. 字段约束测试:所有字段约束条件都被满足,数据类型、长度以及非空约束均正常。
2. 主键约束测试:所有主键约束都被满足,表中每个主键都是唯一的,并且没有出现误设置外键约束的情况。
3. 唯一约束测试:唯一约束条件都生效,每个被约束的字段都保持了唯一性。
4. 默认值约束测试:默认值约束都正确地应用到了相应的字段。
5. 触发器测试:所有触发器能够正确地触发和执行所需的动作,没有出现错误或异常。
五、建议与改进措施基于测试结果,我们提出以下建议和改进措施,以进一步提高数据库的完整性:1. 针对数据库中可能存在的冗余数据,建议进行数据清理,确保每条数据的准确性和一致性。
2. 定期维护和更新数据约束和完整性规则,以适应数据库中数据的变化和业务需求的变更。
3. 加强对数据库备份和恢复机制的测试,确保在数据丢失或故障情况下能够及时有效地恢复数据库。
4. 定期进行数据库完整性测试,以确保数据库的数据一致性和准确性得到持续保证。
5. 对于触发器和存储过程等复杂逻辑的操作,建议进一步进行测试和优化,以提高数据库的性能和稳定性。
1.实验五数据库完整性与安全性实验1.1 实验目的1.通过对完整性规则的定义实现,熟悉了解Mysql中完整性保证的规则和实现方法,加深对数据完整性的理解。
2.通过对安全性相关内容的定义,熟悉了解Mysql中安全性的内容和实现方法,加深对数据库安全性的理解1.2 实验内容1.2.1 完整性实验(1)分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束;(2)分别向学生表、课程表插入具有相同学号和相同课程编号的学生数据和课程数据,验证其实体完整性约束;(3)向学生选课表中插入一条数据,课程编号是课程表中没有的,验证参照完整性约束;(4)删除学生表中的所有数据,验证参照完整性约束;(5)定义存储过程,完成查询某个学生的选课情况,并执行。
(6)定义触发器,当向学生表插入新的一条记录时,将所有学生出生日期加1;并对其进行测试。
(7)用sql完成以上操作。
1.2.2 安全性实验(1)定义一新的登陆帐号、数据库用户,并授予其访问学生数据库的读权限;(2)分别用sa用户和新定义的用户访问学生数据库,并对其中的学生表数据进行修改;(3)再次用此用户访问学生数据库,并对其中的学生表数据进行修改。
(4)用SQL语句分别完成以上内容。
1.3 实验环境Window8操作系统Mysql 8.0版本数据库Mysql workbench 8.0可视化工具Mysql命令行编辑器1.4 实验步骤及结果分析1.4.1 完整性1.4.1.1 分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束1.首先因为在之前创建表的时候定义了主键,因此,我们需要先将所有表的主键撤销掉,然后重新创建主键。
Mysql语句(删除主键):alter table student drop primary key;alter table course drop primary key;alter table sc drop primary key;2.重新创建主键Mysql语句(创建主键):alter table student add primary key(sno);alter table course add primary key(cno);alter table sc add primary key(sno,cno);3.到此,我们已经重新添加了各表的主键,接下来我们为SC表添加外键。
信息工程学院实验报告课程名称:《数据库原理》实验项目名称:数据库的完整性和安全性一、实 验 目 的:(1)掌握数据库约束的概念;(2)熟悉SQL SERVER 的完整性约束技术。
(3)了解SQL SERVER 的违反完整性处理措施。
(4)了解登录账户的管理理念与具体方法。
(5)了解数据库用户的管理的要则。
(6)了解用户权限管理的内涵与方法。
二、实 验 设 备 与 器 件 Win7 +Sql server 2008 三、实 验 内 容 与 步 骤(一)测试完整性运行附录中的SQL 语句,理解SQL 语句中包含的完整性定义。
然后执行下面的SQL 语句,看是否能正常运行,若无法执行,请说明原因。
1.对dept 表进行数据增删改,并检查完整性规则 Dept 已存在的完整性规则如下: dno CHAR(2)PRIMARY KEYdnameV ARCHAR(20) NOT NULL,UNIQUE(1)增加数据INSERT INTO dept V ALUES('D1','计科系');----正常插入INSERT INTO dept V ALUES('D2','电信系');----正常插入INSERT INTO dept V ALUES(NULL,'机械系'); ----违反dno 主键(NOT NULL )规则INSERT INTO dept V ALUES('D2','机械系'); ----违反dno 主键(UNIQUE )INSERT INTO dept V ALUES('D3',NULL); ----违反dname 的NOT NULL 规则INSERT INTO dept V ALUES('D3','计科系'); ----违反dname 的UNIQUE 规则INSERT INTO dept V ALUES('D3','机械系');----正常插入(2)删除数据DELETE FROM dept WHERE dno='D3';----正常删除(3)修改数据UPDA TE dept SET dname='计算机科学系' WHERE dno='D1';----正常修改UPDA TE dept SET dname='电信系' WHERE dno='D1'; ----违反dname的UNIQUE规则UPDA TE dept SET dname=NULL WHERE dno='D1'; 违反dname的UNIQUE规则2.对student表进行数据增删改,并检查完整性规则Student已存在完整性规则如下:sno CHAR(2) PRIMARY KEYsname V ARCHAR(20) NOT NULL,ssex CHAR(2) NOT NULL, CHECK(ssex in('男','女'))sage INT NOT NULL,dno CHAR(2) NOT NULL, FOREIGN KEY REFERENCES dept(dno)ON DELETE CASCADE ON UPDATE CASCADE(1)增加数据INSERT INTO student V ALUES('S1','张刚','男',20,'D1');----正常插入INSERT INTO student V ALUES('S2','李梅','女',21,'D2');----正常插入INSERT INTO student V ALUES('S2','吴敏','男',20,'D1'); ----正常插入INSERT INTO student V ALUES(NULL,'吴敏','男',20,'D1'); ----违反sno 的主键(NOT NULL)规则INSERT INTO student V ALUES('S3','吴敏','男',NULL,'D1'); 违反sage 的主键(NOT NULL)规则INSERT INTO student V ALUES('S3','吴敏','M',20,'D1'); 违反ssex 的CHECK规则INSERT INTO student V ALUES('S3','吴敏','男',20,'D3'); ----正常插入INSERT INTO student V ALUES('S3','吴敏','男',20,'D1');----正常插入(2)删除数据DELETE FROM student WHERE sno='S3'; ----正常删除(3)修改数据UPDA TE student SET sname='赵强',dno='D2' WHERE sno='S1'-----正常修改UPDA TE student SET ssex='F' WHERE sno='S1'; -----违反ssex的CHECK 规则UPDA TE student SET sno='S2' WHERE sno='S1'; -----违反sno的主键(UNIQUE)规则UPDA TE student SET dno='D3' WHERE sno='S1'; 违反dno 的外键规则UPDA TE dept SET dno='D3' WHERE dno='D1';----检查dno的外键ON UPDATE规则,观察运行后效果DELETE FROM dept WHERE dno='D2';----检查dno的外键ON DELETE规则,观察运行后效果(二)使用规则实现数据完整性(1)在查询分析器中,利用命令(CREATE RULE),创建一个关于年龄(sage)约束的规则,将“sage”列的值约束在0~200之间;然后将所创建的规则绑定到“sage”列(提示:用命令Sp_bindrule)。
数据库原理与应用实验报告题目:数据库的完整性学号:________________姓名:________________ 教师:________________实验题目数据库的完整性1、实验内容理解以下几张表的内容,根据实际情况设计属性名、数据类型、及各种完整性约束(primary key、foreign key、not null、unique、check),用数据定义语言实现,然后设计实验数据验证约束的效果,当操作违反了完整性约束条件时,数据库管理系统是如何处理的。
1、创建数据库S_T。
2、新建一张学生信息表,该表至少包含学号,姓名,性别,出生日期,专业,要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique),为性别设置检查约束(check)使该属性只能取“男”或“女”。
3、新建一张专业信息表,该表至少包含专业号,专业名称,专业负责人,专业要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique)。
4、新建一张课程信息表,该表至少包含课程号,课程名称,学分,开课学期等要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为学分设置约束使该属性取值范围为1到10之间的整数。
5、新建一张选课信息表,该表至少包含学号,课程号,成绩,基点等属性,根据以下选课信息为每个属性选择合适的数据类型。
《数据库原理与应用》课程实验要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为成绩设置约束使该属性取值范围为0到100之间的整数。
为基点设置约束使该属性取值为0或者大于等于1的值。
6、修改学生信息表,选择该表中合适的属性设置外码约束(foreign key),实现表间数据的参考完整性。
7、修改选课信息表,选择该表中合适的属性设置外码约束(foreign key),要求允许级联更新,但不允许级联删除。
实验8 数据库完整性实验8数据库完整性实验8数据库完整性二、背景科学知识(1)数据库完整性概念:数据库完整性就是必须避免数据库中存有不合乎语义的数据,避免数据库中存有不恰当的数据。
为了确保数据库的完整性,dbms提供更多了定义、检查和掌控数据完整性的机制,时能把用户定义的数据库完整性约束条件做为模式的一部分取走数据库中。
它采用约束、预设、规则和触发器4种方法定义和实行数据库完整性功能。
(1)数据完整性约束的分类:数据完整性约束可以分为3类:●表级约束:若干元组间以及关系之间联系的数据约束。
比如:选修表,每个人最多这样一来10门课;学生表,学生的学号必须唯一;选修表的学号和课程号必须在学生表和课程表中存有。
●元组级约束:同一个元组字段之间必须满足的约束条件。
如学生表中年龄字段的值应该等于当前日期减去出生日期。
学生学号的第5位表示的是学院代号,如果其代号为1,则学院编号只能为0001;如果其代号为2,则学院编号只能为0002等。
●属性级约束:针对列的类型、取值范围、精度、排序等而制定的约束条件。
例如:性别只能是‘男’或‘女’;课程成绩必须在0-100分之间。
(3)约束的种类及其含义:约束类型完整性功能描述指定主码,确保主码值不重复,并不允primarykey许主码内的任何列中输入null,一个表只能有一个primarykey约束主要用于在不同的表之间建立约束,以foreignkey实现不同表之间的参照完整性。
foreignkey约束的列或者为null,或者为被参照列的值。
unique唯一性约束,对表中的列集进行约束,其值或者为空,或者在整个表中是唯一的指定某个列或列组可以接受值的范围,check或指定数据应满足的条件,来强制实现用户要求的域完整性。
可以为每列设置多个checkkey约束notnulldefault非空约束,指定某个列不能为null插入数据时,如果没有明确提供列值,则用缺省值作为该列的值(4)sqlserver提供了2种方法,实现数据库完整性控制。
如何进行数据库的完整性测试数据库的完整性测试是确保数据库中存储的数据完整,准确,一致和规范的过程。
它是数据库管理的重要环节,能有效地保证数据的质量和可靠性。
在进行数据库的完整性测试时,需要考虑以下几个方面。
为了保证数据库的完整性,需要定义并实施一组恰当的约束。
约束是指对数据库表中数据的限制条件,如主键约束、外键约束、唯一约束、非空约束等。
这些约束可以确保数据的正确性和一致性,避免无效或不一致的数据被存储进数据库。
进行数据库的完整性测试时,需要验证数据在写入数据库前后的准确性。
在插入、更新或删除数据之后,需要验证数据库中的数据是否符合预期。
可以通过编写针对不同操作的测试脚本来对数据的正确性进行验证。
例如,对于插入数据的操作,可以编写脚本来检查是否成功插入了预期的数据,对于更新和删除数据的操作,可以验证是否成功修改或删除了相应的数据记录。
在进行数据库的完整性测试时,还需要确保没有数据的冗余或重复。
冗余数据是指存在于多个表或字段中的多个相同或相似的数据。
重复数据是指在同一个表或字段中存在多个相同的数据记录。
这些冗余和重复数据会浪费存储空间,降低查询和操作效率。
因此,可以通过查询和比较不同表或字段中的数据来检测冗余和重复数据,并采取相应的措施进行处理。
数据库的完整性测试还需要确保数据的完整性约束得到有效的执行。
数据完整性约束是指对数据进行一致性和准确性限制的规则。
例如,可以使用主键约束确保表中的每条数据都有唯一的标识,使用外键约束确保表之间的关联关系不会产生无效的数据。
通过编写相应的测试脚本,可以验证这些数据完整性约束是否得到正确的执行。
进行数据库的完整性测试时,还需要考虑并处理异常情况。
异常情况可能包括数据不符合约束条件、数据类型不匹配、数据长度超过限制等。
这些异常情况可能导致数据库操作失败或产生意想不到的结果。
因此,在进行完整性测试时,应编写相应的测试用例来覆盖各种可能出现的异常情况,并确保系统能够正确地处理这些异常。
实验八实现数据完整性一、实验目的
(1)实现数据完整性的概念及实施数据完整性的重要性。
(2)掌握数据完整性的分类。
(3)掌握完整性约束的添加、删除方法。
(4)掌握通用默认值的创建、实施与删除方法。
(5)掌握规则的创建、实施与删除方法。
(6)掌握级联删除、级联修改方法。
二、实验内容
1、完整性约束的添加、删除
(1)通过SQL Server Management Studio实施约束
a.为表Student的Birth字段创建检查约束,使输入的生日日期小于系统日期。
①、选择Student表,右击→设计,打开Student表
②、选择Birth一行,右击→CHECK约束,打开界面如下图所示
③、单击“添加”
④、在表达式中写入:Entrance_date<getdate()
⑤、单击“关闭”退出
b.为表Student的Sdept字段,设置默认值约束,默认值取’计算机系’。
选择Sdept一行,在其列属性中修改其默认值
c.为Student表的Sname字段添加唯一性约束。
选择Sname一行,右击→索引/键
出现如下界面:
单击“添加”,在类型中选择“唯一键”,在列中选择“Sname”,名称自定义
最后单击“关闭”退出
d.将SC表的Sno,cno字段设置外键约束,约束名自已取,并允许级联删除与级联更新。
(此要求在SQL Server2008R2中无法做出)若已存在外键约束,请先删除。
①、选中Sno,右击→单击“关系”,出现如下信息,可见已存在外键约束
选中键,点击删除,完成约束删除
②、添加约束:
选中Sno,右击,选择“关系”,出现如下信息,
③、点击添加,并修改
④、修改成自己想要的规范和名称
⑤、确定,完成
⑥、设置Cno的外键同上理
(2)使用Transact-SQL语句实施约束
a.为Student表的Sno字段添加一个check约束,使学号满足如下条件:学号前四位为2011,学号后四位为数字字符。
alter table Student
add constraint sno_num
check(sno like'[2][0][1][1][0-9][0-9][0-9][0-9]')
b.为Student表中的Birth字段添加一个约束,规定生日应小于入学时间。
alter table Student
add constraint birth_date
check(Entrance_date>Birth)
c.禁用(a)中实施的Check约束
alter table Student
NOCHECK CONSTRAINT sno_num
d.重新启用Check约束
alter table Student
CHECK CONSTRAINT sno_num
e.删除(a)所设置check约束
alter table Student
drop CONSTRAINT sno_num
f.将Student表中的classno字段设置为允许空。
alter table Student
alter column classno char(3)null
g.为SC表中的Sno,Cno添加外键约束,约束名自取;并允许级联删除与级联更新。
若已存在外键约束,请先删除。
①、首先查看SC表中Sno和Cno有无外键约束
sp_helpconstraint SC
②、由上图已知,SC中Sno存在外键约束,则删除
alter table SC
drop constraint FK_SC_Student
3、添加Sno和Cno的外键约束
alter table SC
add constraint FK_SC_Student foreign key (Sno) references Student(Sno)
on update cascade
on delete cascade
alter table SC
add constraint FK_SC_Course foreign key (Cno)
references Course(Cno)
on update cascade
on delete cascade
h.为Course表中的Cname字段添加唯一性约束。
alter table Course
add constraint AK_Cname unique(Cname)
2、默认值的实施
(1)通过SQL Server Management Studio实现
a.为数据库Student_info创建一个默认的邮政编码,名称自取,值为:200093。
b.将该默认值绑定到Student表中的Postcode列。
用企业管理器无法做出
c.将Postcode列上的绑定解除,并删除该默认值。
用企业管理器无法做出
(2)用Transact-SQL语句重做(1)中的(a)、(b)、(c)。
(a)、
create default postcode
as'200093'
(b)、sp_bindefault'postcode','Student.Postcode'
(c)、sp_unbindefault'Student.Postcode'
drop default postcode
3、规则的实施
(1)通过SQL Server Management Studio实现
a.为数据库Student_info创建一个关于性别的取值规则,规则名自取,要求字段的取值仅能为’男’或’女’。
用企业管理器无法做出
b.将该规则绑定到Student表的Sex字段上。
用企业管理器无法做出
c.解除Student表的Sex列上的绑定,并删除该规则。
用企业管理器无法做出
(2)使用Transact-SQL重做(1)中的(a)、(b)、(c)。
(a)、
alter table Student
with nocheck
add constraint sex_check check(sex in('男','女'))
create rule Sex_rule
as@sex='男'or@sex='女'
(b)、sp_bindrule'Sex_rule','Student.Sex'
3、sp_unbindrule'Student.Sex'
drop rule sex_rule。