《第14章数据完整性PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第14章数据完整性PPT讲稿.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第14章数据完整性第1页,共14页,编辑于2022年,星期日2.实体完整性也可以称为行完整性,要求表中的所有行有一个唯一的标识符例如:身份证号码3.参考完整性参考完整性保证在主键(在被参考表中)和外键之间的关系总是得到维护例如:人事表中记录了员工的基本信息,财务表记录了借款信息一般地,如果某个员工有借款,那么该员工的信息就不能从人事表中被直接删除可以使用两种方式实现数据完整性:(1)声明数据完整性;(2)过程数据完整性(1)声明数据完整性声明数据完整性就是通过在对象定义中定义数据标准来实现数据完整性,是由系统本身自动强制来实现的(2)过程数据完整性过程数据完整性是通过在脚本语言中定义的数据完整
2、性标准来实现的第2页,共14页,编辑于2022年,星期日14.2 约束管理约束是通过限制列中数据、行中数据和表之间数据来保证数据完整性的非常有效的方法。14.2.1 约束的类型表14-1 约束和完整性之间的关系(P219)完整性类型完整性类型约约 束束 类类 型型描描 述述域完整性域完整性DEFAULT(缺省缺省)在使用在使用INSERT语语句插入数据句插入数据时时,如果某个列的,如果某个列的值值没有明没有明确提供,确提供,则则将定将定义义的缺省的缺省值值插入到插入到该该列中列中CHECK(检查检查)指定某一个列中的可保存指定某一个列中的可保存值值的范的范围围实实体完整性体完整性PRIMARY
3、 KEY(主主键键)每一行的惟一每一行的惟一标识标识符,确保用符,确保用户户不能不能输输入冗余入冗余值值和确保和确保创创建索引,提高性能,不允建索引,提高性能,不允许许空空值值UNIQUE(惟一性惟一性)防止出防止出现现冗余冗余值值,并且确保,并且确保创创建索引,提高性能。允建索引,提高性能。允许许空空值值参考完整性参考完整性FOREIGN KEY(外外键键)定定义义一列或者几列,其一列或者几列,其值值与本表或者另外一个表的主与本表或者另外一个表的主键值键值匹配匹配第3页,共14页,编辑于2022年,星期日14.2.2 定义约束使用CREATE TABLE语句表示在创建表的时候定义约束,使用A
4、LTER TABLE语句表示在已有的表中添加约束使用CREATE TABLE定义约束的语法形式:CREATE TABLE table_name(column_name data_typeCONSTRAINT constraint_namePRIMARY KEY CLUSTERED|NONCLUSTERED|UNIQUE CLUSTERED|NONCLUSTERED|FOREIGN KEY REFERENCES ref_table(ref_colunm)|DEFAULT constant_expression|CHECK logical_expression第4页,共14页,编辑于2022年,星
5、期日例:创建一个表student,并且在该表上定义了一个主键约束,该主键约束放在学生代号(student_id)列上程序清单14-1:定义一个主键约束CREATE TABLE student(student_id int NOT NULL CONSTRAINT PK_student_id PRIMARY KEY,student_name char(30)NOT NULL,student_gender char(1)NOT NULL,student_birthdate datetime NOT NULL)当定义约束或修改约束的定义时,应该考虑下列因素:不必删除表,就可以直接创建、修改和删除约束的
6、定义。应该在应用程序中增加错误检查机制,测试数据是否与约束相冲突。当在表上增加索引时,SQL Server系统检查表中的数据是否与约束冲突约束名称的格式:约束类型简称_表名_列名_代号。查看约束的信息,方法有:执行系统存储过程,如sp_help或者sp_helpconstraint.查询信息模式视图:如check_constraints,referential_constraints,table_constraints.第5页,共14页,编辑于2022年,星期日查看一些系统表,如syscomments,sysreferences,sysconstraints例如:sp_helpconstrai
7、nt authorsSELECT id,text,texttype,languageFROM syscommentsSELECT*FROM sysreferences第6页,共14页,编辑于2022年,星期日14.2.3 缺省约束管理例如:定义一个缺省约束,在表student中增加一个缺省约束。当向student表中插入一行数据时,如果没有为性别(gender)列提供数据,那么,系统自动输入F值。ALTER TABLE studentADDCONSTRAINT DEFAULT _student_gender DEFAULT F FOR gender14.2.4 检查约束管理例如:增加一个检查约
8、束,确保在性别(gender)列中只能接受指定的性别数据(F或M),而不会接受任何不符合这种规定的数据格式。ALTER TABLE studentADDCONSTRAINT CHECK_student_gender CHECK(gender=F OR gender=M)第7页,共14页,编辑于2022年,星期日使用检查约束,需考虑的因素:当执行INSERT或UPDATE时,该约束验证相应的数据是否满足检查约束的条件。检查约束可参考本表中的其他列。检查约束不能放在有IDENTITY属性的列上或者数据类型为timestamp的列上。因这两种列都会自动插入数据。检查约束不能包含子查询语句。14.2.
9、5 主键约束管理常用的主键约束应该创建在这些列上:身份证号码、学生代号、产品的代码、图书的国际标准书号等。例如:在表member中增加一个主键约束,指定成员代号(member_no)为主键值,并且还创建一个聚簇索引。ALTER TABLE memberADDCONSTRAINT PK_member_member_noPRIMARY KEY CLUSTERED(member_no)第8页,共14页,编辑于2022年,星期日例:增加级联操作选项的主键约束ALTER TABLE memberADDCONSTRAINT PK_member_member_noPRIMARY KEY CLUSTERED(
10、member_no)ON DELETE CASCADEON UPDATE CASCADE14.2.6 唯一性约束管理唯一性约束唯一性约束指定表中某一个列或多个列不能有相同的两行或两个以上行数据存在。例:增加一个唯一性约束。USE companyALTER TABLE employee第9页,共14页,编辑于2022年,星期日ADDCONSTRAINT unique_driver_lic_noUNIQUE NONCLUDTERED(driver_lic_no)14.2.7 外键约束管理外键约束外键约束定义一个列或多个列,这些列可以参考同一个表或另外一个表中的主键约束或唯一性约束列。例如:增加一个
11、外键约束USE libraryALTER TABLE juvenileADDCONSTRAINT FK_adult_membernoFOREIGN KEY (adult_memberno)REFERENCES adult(member_no)第10页,共14页,编辑于2022年,星期日例:参考同一个表的外键约束USE libraryCREATE TABLE employee(em_num int NOT NULL CONSTRAINT pk_emp_num PRIMARY KEY,mgr_num int NOT NULL CONSTRAINT fk_mgr_numREFERENCES empl
12、oyes(emp_num)14.2.8 禁止在已有的数据上应用约束在某些特殊情况下,还可以禁止约束检查已经存在的数据是否满足约束的定义。禁止在已有的数据上应用约束,实际上就是说这些约束对表中已有的数据不起作用。这种禁止只有在向表中增加约束时才能指定。第11页,共14页,编辑于2022年,星期日14.2.9禁止在加载数据时应用约束对于检查约束和外键约束,除了可以禁止对已有的数据应用约束之外,也可以在加载数据时禁止应用这些定义的约束。也就是说,在修改表中数据或向表中添加数据时,可以不判断这些数据是否与所定义的检查约束或外键约束冲突。14.3 缺省管理缺省是一种数据库对象,英文名称是DEFAULT,
13、它可以被绑定到某个表的一个或多个列上,还可以被绑定到用户自己定义的数据类型上。当缺省定义之后,可以反复使用。当使用INSERT语句向表中插入数据时,如果没有为绑定有缺省的列或者数据类型指定数据,那么系统将自动地把指定的缺省值插入到相应的位置。在定义缺省时,定义的缺省值必须与列的数据类型一致,并且不能与表中的各种约束定义相违背。第12页,共14页,编辑于2022年,星期日14.4 规则管理规则是一种数据库对象,可以被绑定到一个或多个列上,还可以被绑定到用户自己定义的数据类型上。当某个规则定义之后,可以反复使用。当使用INSERT语句向表中插入数据时,如果表中有绑定有规则对象的列或数据类型,那么所插入的数据必须符合所定义的规则对象的要求。当创建规则时,应该考虑下列一些因素:在规则定义中,可以包含任意在WHERE子句中有效的表达式。一个列或数据类型上同时只能有一个绑定的规则。第13页,共14页,编辑于2022年,星期日14.5 完整性技术比较研究数据完整性方法数据完整性方法功功 能能 性性开开 支支事务之前或者之后事务之前或者之后约约束束中中低低之前之前缺省和缺省和规则规则低低中中之前之前触触发发器器高高高高之后之后第14页,共14页,编辑于2022年,星期日