版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第5章章 数据完整性数据完整性 2022年3月27日星期日1第五章第五章 数据完整性数据完整性 q 数据完整性的概念数据完整性的概念 q 约束管理约束管理 q 默认管理默认管理 q 规则管理规则管理 q 完整性技术比较研究完整性技术比较研究 q 习题习题第第5章章 数据完整性数据完整性 2022年3月27日星期日2一、数据完整性的概念一、数据完整性的概念 所谓完整性,就是指存储在数据库中数据的一致性和正确性。数据完整性是衡量数据库中数据质量好坏的一种标志,是确保数据库中数据一致、正确以及符合企业规则的一种思想,是使无序的数据条理化,确保正确的数据被存放在正确的位置的一种手段,实施数据库完整性
2、的目的是确保数据的质量。所以,满足完整性要求的数据具有以下3个特点:数据的值正确无误。数据的存在必须确保同一表格数据之间的和谐关系。数据的存在必须能确保维护不同表格数据之间的和谐关系。在Microsoft SQL Server系统中,从维护数据完整性的意义上来看,数据完整性分为四类:实体完整性、域完整性、参考完整性、用户定义的完整性。第第5章章 数据完整性数据完整性 2022年3月27日星期日31. 实体完整性实体完整性实体完整性,也可以称为行完整性,规定表的每一行在表中是惟一的实体。实体就是数据库所要表示的一个实际的物体或事件。实体完整性要求每个实体都保持惟一性,因此,要求表中的所有行有一个
3、惟一的标识符,这种标识符一般称为主键值。实体完整性要求数据库表中的每一条记录都是惟一的,即表中没有重复的记录。因此,这就要求所有数据记录中至少必须有一个字段的内容是不能重复的。第第5章章 数据完整性数据完整性 2022年3月27日星期日42域完整性(值域完整性)域完整性(值域完整性)域完整性,也可以称为列完整性,是指给定列的输入有效性,即数据库表中的列必须满足某种特定的数据类型或约束。指定一个数据集对某一个列是否有效和确定是否允许空值。域完整性通常是通过有效性检查来实现的,并且还可以通过限制数据类型、格式或者可能的取值范围来实现。因此,强制域有效性的方法有:限制类型(通过数据类型)、格式(通过
4、 CHECK 约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。第第5章章 数据完整性数据完整性 2022年3月27日星期日53. 参照完整性(引用完整性)参照完整性(引用完整性)参照完整性是在插入或删除数据时,维护表格间数据一致性的手段。参照完整性确保在不同表之间的关键性数据保持一致(涉及两个或两个以上表的数据的一致性维护),防止了数据丢失或无意义的数据在数据库中扩散。当添加、删除或修改数据库表中的记录时,可以借助引用完整性来保证相关联的表之间的数据一致性。在SQL Server中,参照完整性一般建立在主键
5、与外键之间的关系,或者外键与唯一索引之间关系的基础上,它确保了有主关键字的表中对应其它表的外部关键字的行存在。第第5章章 数据完整性数据完整性 2022年3月27日星期日6第第5章章 数据完整性数据完整性 2022年3月27日星期日74. 用户定义的完整性用户定义的完整性这是由用户定义的完整性。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。SQL Server 提供了定义和检验这类完整性的机制,以便用统一的系统方法来处理它们,而不是用应用程序来承担这一功能。用户定义完整性可以定义不属于其他任何完整性分类的特定业务规则,其它的完整性类型都
6、支持用户定义的完整性。用户定义的完整性主要是体现实际运用的业务规则,可以通过前面三种完整性的实施而得到维护。例如:在titles表中,规定商业类用书的title_id的前两个字符必须是BU等。 第第5章章 数据完整性数据完整性 2022年3月27日星期日8实现数据完整性实现数据完整性在Microsoft SQL Server系统中,可以使用两种方式实现数据完整性,即声明数据完整性和过程数据完整性。声明数据完整性(说明性引用数据完整性)声明数据完整性(说明性引用数据完整性)就是通过在对象定义中定义的数据标准来实现数据完整性,在插入、修改和删除数据时由系统本身自动强制来实现的。声明数据完整性的方式
7、包括使用各种约束、缺省和规则。过程数据完整性(引用的行动完整性)过程数据完整性(引用的行动完整性)是通过在脚本语言中定义的数据完整性标准来实现的。在执行这些脚本的过程中,由脚本中定义的强制完整性的实现。过程数据完整性的方式包括使用视图、触发器和存储过程等,其中视图和存储过程不能自动执行。第第5章章 数据完整性数据完整性 2022年3月27日星期日9实现数据完整性的途径实现数据完整性的途径数据完整性类型实施途径数据完整性类型实施途径实体完整体性主键约束 PRIMARY KEY域完整性默认值约束 Default惟一性约束 Unique Key检查约束 Check索引 Unique Index外键约
8、束 Foreign Key标识列 Identity Column数据类型 Data Type参照完整性外键约束 Foreign Key规则 Rule检查约束 Check用户定义完整性Rule、 Triggers 、 Procedure触发器 TriggersCreate Table中的全部列级和表级约束系统存储过程 Stored Procedure第第5章章 数据完整性数据完整性 2022年3月27日星期日10二、约束管理二、约束管理 约束是通过限制列中、行中和表之间数据输入值的范围来保证数据完整性的非常有效的方法。约束可以分为两种: 列级约束:是行定义的一部分,只能够应用在一列上。 表级约束
9、:其定义独立于列的定义,可以应用在一个表中的多个列上。约束的类型 定义约束 默认管理 检查约束管理 主键约束管理 惟一性约束管理 外键约束管理 约束类型约束类型综合例题第第5章章 数据完整性数据完整性 2022年3月27日星期日11约束的类型约束的类型完整性类型完整性类型约约 束束 类类 型型描描 述述域完整性域完整性DEFAULT(缺省)在使用INSERT语句插入数据时,如果某个列的值没有明确提供,则将定义的缺省值插入到该列中CHECK(检查)指定某一个列中的可保存值的范围实体完整性实体完整性PRIMARY KEY(主键)每一行的惟一标识符,确保用户不能输入冗余值和确保创建索引,提高性能,不
10、允许空值UNIQUE(惟一性)防止出现冗余值,并且确保创建索引,提高性能。允许空值参考完整性参考完整性FOREIGN KEY(外键)定义一列或几列,其值与本表或者另外一个表的主键值匹配约束是保证数据完整性的有效方法。约束可以确保把有效的数据输入到列中和维护表和表之间的特定关系。每一种数据完整性类型,例如实体完整性、域完整性、参考完整性,都由不同的约束类型来保障。下表描述了不同类型的约束和完整性之间的关系。第第5章章 数据完整性数据完整性 2022年3月27日星期日12定义约束定义约束定义约束从无到有的创建约束,这种操作可以使用CREATE TABLE语句或ALTER TABLE语句完成。使用C
11、REATE TABLE语句表示在创建表的时候定义约束,使用ALTER TABLE语句表示在已有的表中添加约束。如果表中已经有数据,那么也可以增加约束。第第5章章 数据完整性数据完整性 2022年3月27日星期日13CREATE TABLE语句语句CREATE TABLE table_name( column_name data_type CONSTRAINT constraint_name PRIMARY KEY CLUSTERED |NONCLUSTERED | UNIQUE CLUSTERED |NONCLUSTERED | FOREIGN KEY REFERENCES ref_table
12、( ref_colunm )| DEFAULT constant_expression| CHECK logical_expression 使用ALTER TABLE语句定义约束的语法与使用CREATE TABLE语句定义约束的语法类似。第第5章章 数据完整性数据完整性 2022年3月27日星期日14【示例】定义一个主键约束CREATE TABLE students(student_id int NOT NULL CONSTRAINT PK_student_id PRIMARY KEY,student_name varchar(10) NOT NULL ,student_gender char
13、(1) NOT NULL ,student_birthday datetime NOT NULL )第第5章章 数据完整性数据完整性 2022年3月27日星期日15当定义约束或修改约束的定义时,应该考虑下列因素:l不必删除表,就可以直接创建、修改和删除约束的定义。l应该在应用程序中增加错误检查机制,测试数据是否与约束相冲突。l当在表上增加索引时,SQL SERVER系统检查表中的数据是否与约束冲突。当创建约束时,应该指定约束的名称。否则,系统将要提供复杂的、系统自动生成的名称。对于一个数据库来说,约束名称必须是惟一的。一般来说,约束的名称格式应该是:约束类型简称约束类型简称_表名表名_列号列号
14、_代号代号第第5章章 数据完整性数据完整性 2022年3月27日星期日16约束信息的查看约束信息的查看查看约束信息的方法为:(1)执行系统存储过程,如:sp_help 或 sp_helpconstraint。(2)查询信息模式视图,如:check_constraints、referential_constraints或table_constraints。(3)查看一些系统表,例如约束的定义存储在下列系统表中:sysconstraints、sysreferences和syscomments。第第5章章 数据完整性数据完整性 2022年3月27日星期日17(1)使用sp_helpconstrain
15、t可得到数据库中某一个表中的全部约束信息。【例】显示pubs数据库中authors表中的全部约束信息USE pubsEXEC sp_helpconstraint authors第第5章章 数据完整性数据完整性 2022年3月27日星期日18(2)syscomments系统表包含了每一个视图、规则、缺省、触发器、检查约束、缺省约束和存储过程等信息。在该系统表中的文本列上记录了这些对象的原始定义语句。使用该系统表,可以查看有关约束的定义信息。【例】显示pubs数据库中syscomments系统表的内容USE pubsSELECT id,text,texttype,languageFROM sysc
16、omments第第5章章 数据完整性数据完整性 2022年3月27日星期日19(3)sysreferences系统表记录了与外键约束有关的信息。【例】显示pubs数据库中sysreferences系统表的内容USE pubsSELECT *FROM sysreferences第第5章章 数据完整性数据完整性 2022年3月27日星期日20默认(默认( DEFAULT )约束管理)约束管理当使用INSERT语句插入数据时,如果某一个列没有指定数据,那么默认约束就在该列中输入一个值。 因此,默认约束保证了域完整性。DEFAULT约束用于指定一个字段的默认值。它的作用是:当向表中插入数据时,如果用户
17、没有给某一字段输入数据,则系统自动将默认值作为该字段的数据内容。向表中添加数据时,如果没有输入字段值,则此字段的值可能是下面几种情况: 此字段定义了默认值,则此字段的内容为默认值; 此字段未定义默认值,而且允许为NULL值,则NULL值将成为该字段的内容; 此字段未定义默认值,也不允许为NULL值,保存时将会出现错误信息,而且添加数据操作失败。第第5章章 数据完整性数据完整性 2022年3月27日星期日21使用使用CREATE TABLE语句创建语句创建DEFAULT约束约束在CREATE TABLE语句中添加DEFAULT子句,DEFAULT子句格式如下:CONSTRAINT constra
18、int_name DEFAULT constant_expression 其中: constraint_name 为约束名; constant_expression为常量表达式。【示例】 将入学日期字段的默认值设置为2003-9-1CREATE TABLE stud_new (学号 char(8) NOT NULL,姓名 char(8) NOT NULL,入学日期 datetime CONSTRAINT dt DEFAULT 2003-9-1)第第5章章 数据完整性数据完整性 2022年3月27日星期日22使用企业管理器创建使用企业管理器创建DEFAULT约束约束第第5章章 数据完整性数据完整
19、性 2022年3月27日星期日23当使用默认约束时,需要考虑下列一些因素:l默认约束只能应用于INSERT语句。l每一个列只能定义一个默认约束。l默认约束不能放在有IDENTITY属性的列上或者数据类型为timestamp的列上。l默认约束允许指定一些由系统函数提供的值。这些系统函数包括USER 、CURRENT_USER、SESSION_USER、SYSTEM_USER、CURRENT_TIMESTAMP等。第第5章章 数据完整性数据完整性 2022年3月27日星期日24检查(检查(CHECK)约束管理)约束管理检查约束用来限制用户输入某一个列的数据,即在该列中只能输入指定范围的数据。检查约
20、束非常类似于WHERE子句,其共同之处就是指定可接受数据的条件。 检查约束与外键约束的相同之处,在于都是通过检查数据的值的合理性来实现数据完整性的维护。但是,外键约束是从另一张表上获得合理的数据,而检查约束则是通过对一个逻辑表达式的结果进行判断来对数据进行检查。检查约束可以用来限制字段上可以接受的数据值。检查约束使用逻辑表达式来限制字段上可以接受的数据值。检查约束通过检查输入表中字段的的数据值来维护域完整性。第第5章章 数据完整性数据完整性 2022年3月27日星期日25使用检查约束的方式有: 在创建表格时,定义检查约束,检查约束是表格定义的一部分。 在已经建立的表上添加检查约束。 修改或删除
21、表上已经定义的检查约束。第第5章章 数据完整性数据完整性 2022年3月27日星期日26使用使用CREATE TABLE语句创建检查约束语句创建检查约束使用CREATE TABLE语句创建表时,可以通过在该语句中添加一个CHECK子句创建检查约束。该子句的语法格式如下: CONSTRAINT check_name CHECK (check_criterial)其中,check_name为约束名,check_criterial为约束条件。 【示例】 将“学号”和“课程编号”两个字段的组合设置为主键,再将“成绩”字段的取值限制在0到100之间USE lxCREATE TABLE 学生成绩(学号 c
22、har(8) NOT NULL, 课程编号 char(3) NOT NULL,成绩 real NOT NULL CONSTRAINT CK_CJ CHECK ( 成绩成绩=0 AND 成绩成绩=0 AND vale= $1000 and range =18 AND employee_age=35)GOsp_bindrule rule_employee_age , employee.age第第5章章 数据完整性数据完整性 2022年3月27日星期日82 2、将规则绑定到用户定义的数据类型【示例】假设存在名为 rule_ssn 的规则和名为 ssn 的用户定义数据类型,此示例将 rule_ssn
23、绑定到 ssn。在 CREATE TABLE语句中,类型 ssn 的列继承 rule_ssn 规则。类型 ssn 的现有列也继承 rule_ssn 规则,除非为 futureonly_flag 指定了 futureonly 或者在 ssn 上直接绑定了规则。绑定到列的规则始终优先于绑定到数据类型的规则。 USE master EXEC sp_bindrule rule_ssn, ssn GO第第5章章 数据完整性数据完整性 2022年3月27日星期日83 3、使用 futureonly_flag【示例】将 rule_ssn 规则绑定到用户定义数据类型 ssn。因为已指定 futureonly,
24、所以不影响类型 ssn 的现有列。 USE master EXEC sp_bindrule rule_ssn, ssn, futureonly GO 4、使用分隔标识符 【示例】显示在 object_name 中分隔标识符的使用 USE master CREATE TABLE t.2 (c1 int) EXEC sp_bindrule rule1, t.2.c1 GO第第5章章 数据完整性数据完整性 2022年3月27日星期日84解除规则绑定解除规则绑定使用sp_unbindrule在当前数据库中为列或用户定义数据类型解除规则绑定。语法格式为: sp_unbindrule objname =
25、object_name , futureonly = futureonly_flag其中:object_name为要解除规则绑定的列或用户自定义数据类型的名称。futureonly = futureonly_flag为一个可选参数,仅在解除一个捆绑在用户自定义数据类型上的规则时使用。futureonly_flag默认值是NULL,如果设置为future_only,则在解除绑定前,使用这个数据类型的表列将继续受到规则的约束。其目的是为了防止具有指定用户定义数据类型的列丢失掉捆绑在其上的规则。第第5章章 数据完整性数据完整性 2022年3月27日星期日85【示例】为表 employees 的 st
26、artdate 列解除规则绑定。 exec sp_unbindrule employees.startdate【示例】为用户定义数据类型 ssn 解除规则绑定。这将为该数据类型的现有列和将来的列解除规则绑定。 exec sp_unbindrule ssn【示例】为用户定义数据类型ssn解除规则绑定,现有的 ssn 列不受影响。 exec sp_unbindrule ssn, futureonly第第5章章 数据完整性数据完整性 2022年3月27日星期日86删除规则删除规则如果规则未绑定到任何列或用户定义的数据类型,那么该规则将被立即删除。如果规则被绑定于表列或用户定义的数据类型,那么在删除该
27、规则之前,必须从所有的表列或用户定义的数据类型上解除该规则对象。当要删除的规则仍捆绑在列或用户自定义数据类型上时,执行DROP RULE语句会显示错误信息,同时DROP RULE操作将被撤销。使用DROP RULE从当前数据库中删除一个或多个用户定义的规则。 语法格式如下: DROP RULE 规则名规则名 ,.n 【示例】删除规则USE company DROP RULE rule_employee_ageGO第第5章章 数据完整性数据完整性 2022年3月27日星期日87规则的优先级规则的优先级用于规则绑定的优先级规则如下:绑定于列的规则优先于绑定于用户定义的数据类型的规则。如果一个表列和
28、定义该列的用户定义的数据类型都绑定了规则,那么绑定于表列的规则有效。如果在表列上绑定了一个新规则,那么该规则代替绑定于定义该列的用户定义的数据类型的规则。如果把规则绑定到某一列或者用户定义的数据类型上,则新规则取代原来的规则。用户只能使用绑定到表列或用户定义的数据类型之上的规则。如果把规则绑定到用户定义的数据类型上,那么它不会取代绑定于使用这种类型定义的列上。第第5章章 数据完整性数据完整性 2022年3月27日星期日88规则对已经输入到表中的数据无效。因此,表中已有的数据可以不满足规则指定的要求。如果希望一个规则限制已经输入到表中的数据,那么就要在数据输入到表中之前就把定义好的规则绑定到用户定义的数据类型或表列上。规则的优先级新规则绑定到绑定于用户定义的数据类型的旧规则绑定于列的旧规则用户定义的数据类型替换旧规则没有变化表列替换旧规则替换旧规则第第5章章 数据完整性数据完整性 2022年3月27日星期日89A .使用企业管理器创
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 米酒供销合同范例
- 2024年架子工程劳务分包合同模板版B版
- 销售门协议合同范例
- 食品承揽合同模板
- 英文个人合同模板
- 雷州租房合同范例
- 高档家具安装合同范例
- 股东股协议合同范例
- 起草合同模板写
- 2024年度产品摄影灯光布景制作合同3篇
- 奇数与偶数和的奇偶性
- VTE培训考核护理专项测试卷含答案
- 人教PEP版五年级英语上册Unit5《第六课时 Read and write. 》教学设计
- GA 1551.6-2021石油石化系统治安反恐防范要求第6部分:石油天然气管道企业
- 商业大型综合体消防安全培训课件资料
- 如何在公司中实现自我价值课件
- 最全逆做法顶管井专项施工方案
- 富士康公司组织架构及部门职责
- 二年级下册乘除法口算题
- 各少数民族的风俗习惯课件
- 优秀质量检验员培训教材
评论
0/150
提交评论