数据库实验 数据完整性管理Word格式文档下载.docx
《数据库实验 数据完整性管理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库实验 数据完整性管理Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
在表设计界面中,单击并按住Ctrl键
拖动左边的行选定块,选定sno和cno字段,单击工具按钮设置主键。
如图
所示:
域完整性
3.将“ssex”字段设置为只能取“男”,“女”两值:
在表设计界面,点击鼠标右键——CHECK约束,——添加约束,添加CK_student_sex名称,然后在约束表达式框中输入“ssexin('
男'
'
女'
)”。
如图所示。
参照完整性
4.将“student”表和“sc”表中的“sno”字段设为参照:
打开“sc”表的设计界面,点击工具栏按钮,在弹出的属性(properties)对话框中点击“新建”按钮,在“主键表(Primarykey
table)”下拉框中选择“student”表,在其下的字段选择框中选择“sno”,在“外键表(Foreign
keytable)”下拉框中选择“sc”表,在其下的字段选择框中选择“sno”,单击关闭即可。
命令方式操作方法:
1.将“student”表的“sno”字段设为主键:
当“student”表已存在则执行:
altertablestudentaddconstraintpk_snoprimarykey(sno)
当“student”表不存在则执行:
Createtablestudent(snoCHAR(5)primarykey,
snameCHAR(10)NOTNULL,
ssexCHAR
(2),
sageint,
sdeptCHAR(4))
注:
可用命令“droptablestudent”删除“student”表
2.添加一身份证号字段,设置其惟一性.(注:
操作前应删除表中的所有记录)
Altertablestudentaddidchar(18)unique(id)
3.将“sc”表的“sno”和“cno”设置为主键:
当“sc”表已存在则执行:
altertablescaddconstraintPK_SnoCnoprimarykey(sno,cno)
当“sc”表不存在则执行:
Createtablesc(snoCHAR(5),
cnoCHAR
(2),
gradeINTNULL,
constraintPK_SnoCnoprimarykey(sno,cno))
4.将“ssex”字段设置为只能取“男”,“女”两值:
altertablestudentaddconstraintCK_Sexcheck(ssexin('
'
))
当“student”表不存在则执行:
snameCHAR(10),
ssexCHAR
(2)check(ssexin('
)),
sageint,sdeptCHAR(4))
5.设置学号字段只能输入数字:
altertablestudentaddconstraintCK_Sno_Formatcheck(snolike
'
[0-9][0-9][0-9][0-9][0-9]'
)
6.设置身份证号的输入格式:
altertablestudentaddconstraintCK_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)
altertablestudentaddconstraintCK_ID_Format2check(len(id)=18and
((convert(smallint,substring(id,7,4))>
=1900)and(convert(smallint,substring(id,7,4))<
=2050)))
6.设置男生的年龄必须大于22,女生的年龄必须大于20.
AltertablestudentaddconstraintCK_agecheck(ssex='
andsage>
=22orssex='
=20)
9.将“student”表和“sc”表中的“sno”字段设为参照:
altertablescaddconstraintFP_snoforeignkey(sno)referencesstudent(sno)
Createtablesc(snoCHAR(5)constraintFP_sno
foreignkeyreferencesstudent(sno),
cnoCHAR
(2),gradeINTNULL,
constraintPK_SnoCnoprimarykey(sno,cno))
完整性验证
1.实体完整性:
在“student”表数据浏览可视化界面中输入学号相同的两条记录将会出
现错误如图所示:
或者在命令窗口输入下面两条命令也会出现错误提示:
insertintostudentvalues('
95003'
张三'
24,'
CS'
42222919901012903X'
95001'
李四'
21,'
422229199510129031'
下面的语句用来验证“sc”表中的实体完整性:
insertintoscvalues('
95002'
'
10'
65)
90)
2.域完整性:
使用下面的语句验证“ssex”字段的域完整性:
95009'
张匀'
大'
20,'
‘422229************’)
3.参照完整性:
使用下面的语句“验证”sc表中的“sno”字段的域完整性(假设student表中没有学号为“95998”的学生记录):
98998'
98)
(二)实验任务
1、建立课程的实体完整性,和课程号cno的参照完整性;
课程的实体完整性:
课程号cno的参照完整性:
alter
table
sc
add
constraint
FK_cno
foreign
key
(cno)
references
course(cno
2、对HRM数据库,练习建立三个表的主外键约束、唯一约束、取空值约束、用户自定义的约束(参考HRM数据库表定义图中说明);
主键约束:
Departments:
departments
FK_DepartmentID
primary
(DepartmentiID)
Employee:
Employee
FK_EmployeeID
(EmployeeID)
外键约束:
Salary:
salary
(EmployeeID)
Employee(EmployeeID)
employee
FK_EMPLOYEE_DEPARTMENT
(DepartmentID)
Departments(DepartmentID)
唯一约束:
Departments
UNIQUE_Department
UNIQUE
(DepartmentID)
altertableEmployeeaddconstraintUNIQUE_EmployeeUNIQUE(DepartmentID)
Salary
UNIQUE_Salary
非空约束:
表Employee:
column
EmployeeID
char(6)
not
null
Name
char(10)
Birthday
Datetime
Sex
Bit
DepartmentID
char(3)
表Departments:
表Salary:
Income
Float(8)
null
OutCome
用户自定义约束:
constraintCK_Sex
check
(sex
in
('
3、建立salary表的Income字段限定在0-9999之间。
CK_Salary_INCOME
(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)数据完整性包含参照完整性,实体完整性,用户自定义完整性,这些完整性约束能更好的保证数据的规范性以及合法性,并提高数据的安全性,尤其在设计主外键关系的时候,要注意其内在逻辑,肯能很容易就把外间关系弄掉了,或者逻辑考虑不周,导致最后数据插入不进去。
所以数据的逻辑关系在数据库设计时十分重要