您好,欢迎来到九壹网。
搜索
您的当前位置:首页数据库实验 数据完整性管理

数据库实验 数据完整性管理

来源:九壹网
数 据 库 实 验 报 告

实验五 数据完整性管理

一、 实验目的

(1)掌握域完整性的实现方法。 (2)掌握实体完整性的实现方法。 (3)掌握参照完整性的方法。 二、 实验内容

数据库的完整性设置。 三、 实验步骤 (一) Sc表:

Student表:

Course表:

可视化界面的操作方法: 实体完整性

1.将student 表的“sno”字段设为主键:在表设计界面中,单击左边的行选定块,选定

“sno”字段,单击工具按钮设置主键。如图所示:

数 据 库 实 验 报 告

2. 将“sc”表的“sno”和“cno”设置为主键:在表设计界面中,单击并按住Ctrl 键

拖动左边的行选定块,选定sno 和cno 字段,单击工具按钮设置主键。如图

所示:

域完整性

3. 将“ssex”字段设置为只能取“男”,“女”两值:在表设计界面,点击鼠标右键——CHECK约束,——添加约束,添加CK_student_sex 名称,然后在约束表达式框中输入“ ssex in ('男','女') ”。如图所示。

数 据 库 实 验 报 告

参照完整性

4. 将“student”表和“sc”表中的“sno”字段设为参照: 打开“sc”表的设计界面, 点击工具栏按钮, 在弹出的属性(properties)对话框中点击“新建”按钮,在“主键表(Primary key

table)”下拉框中选择“student”表,在其下的字段选择框中选择“sno”,在“外键表(Foreign

key table)”下拉框中选择“sc”表,在其下的字段选择框中选择“sno”,单击关闭即可。

数 据 库 实 验 报 告

命令方式操作方法: 实体完整性

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

constraintCK_ID_Formatcheck((idlike'[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(idlike'[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”表数据浏览可视化界面中输入学号相同的两条记录将会出

现错误如图所示:

或者在命令窗口输入下面两条命令也会出现错误提示: insert into student values('95003','张三','男',24,'CS','42222919901012903X')

insert into student values('95001','李四','女',21,'CS','422229199510129031')

数 据 库 实 验 报 告

下面的语句用来验证“sc”表中的实体完整性: insert into sc values('95002', '10',65) insert into sc values('95002', '10',90)

2. 域完整性:

使用下面的语句验证“ssex”字段的域完整性:

insert into student values('95009','张匀','大',20,'CS', ‘42222919901012904X’)

3.参照完整性:

使用下面的语句“验证”sc 表中的“sno”字段的域完整性(假设student 表中没有学号为“95998”的学生记录):insert into sc values('998', '10',98) (二)实验任务

1、建立课程的实体完整性, 和课程号cno 的参照完整性; 课程的实体完整性:

数 据 库 实 验 报 告

课程号cno 的参照完整性:

alter table sc add constraint FK_cno foreign key (cno) references course(cno )

2、对HRM 数据库,练习建立三个表的主外键约束、唯一约束、取空值约束、用户自定义的约束(参考HRM 数据库表定义图中说明); 主键约束: Departments:

alter table departments add constraint FK_DepartmentID primary key (DepartmentiID)

Employee:

alter table Employee add constraint FK_EmployeeID primary key (EmployeeID)

外键约束: Salary:

alter table salary add constraint FK_EmployeeID foreign key (EmployeeID) references Employee(EmployeeID) Employee:

alter table employee

add constraint FK_EMPLOYEE_DEPARTMENT foreign key (DepartmentID)

references Departments(DepartmentID) 唯一约束: Departments:

alter table Departments

add constraint UNIQUE_Department UNIQUE (DepartmentID)

数 据 库 实 验 报 告

Employee:

alter table Employee add constraint UNIQUE_Employee UNIQUE (DepartmentID) Salary:

alter table Salary add constraint UNIQUE_Salary UNIQUE (EmployeeID)

非空约束:

表Employee:

alter table Employee alter column EmployeeID char(6) not null

alter table Employee alter column Name char(10) not null alter table Employee alter column Birthday Datetime not null

alter table Employee alter column Sex Bit not null

alter table Employee alter column DepartmentID char(3) not null

表Departments:

alter table Departments alter column DepartmentID char(3) not null

表Salary:

alter table Salary alter column EmployeeID char(6) not null alter table Salary alter column Income Float(8) not null alter table Salary alter column OutCome Float(8) not null 用户自定义约束:

alter table Employee add constraintCK_Sex check (sex in ('男' ,'女'))

数 据 库 实 验 报 告

3、建立salary 表的Income 字段限定在0-9999 之间。 alter table Salary

add constraint CK_Salary_INCOME

check (Income between 0 and 9999) 四、 实验总结

(1)举例说明如何操作会违背完整性(实体完整性、参照完整性) 1.实体完整性

指关系里的任何一个属性都是不可再分的。

列如关于学生信息的一个关系student(ID,number,age,sex,grade,e.English)

学生关系grade(成绩)里包含了English的英语成绩,那么就违背了实体完整性。 2.参照完整性

指两个关系之间的,目的是保证数据的一致性。

如再有一个关系courese(id,coursename,number)

当我修改了关系student中的number,那么courese关系中的number就与student中的number不一致了,违背了参照完整性。 3.用户定义完整性

这是自己设置的

列如我设置student关系里的age属性只能在16到24之间,那么超出这个范围的数据将不允许插入,用户每执行一条操作,数据库都会检查上述的三个完整性。

(2)掌握域完整性、实体完整性、参照完整性的实现方法。

(3)深入理解了域完整性、实体完整性、参照完整性的用途和意义

(4)数据完整性包含参照完整性,实体完整性,用户自定义完整性,这些完整性约束能更好的保证数据的规范性以及合法性,并提高数据的安全性,尤其在设计主外键关系的时候,要注意其内在逻辑,肯能很容易就把外间关系弄掉了,或者逻辑考虑不周,导致最后数据插入不进去。所以数据的逻辑关系在数据库设计时十分重要

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务