首页计算机计算机软件数据库原理与应用(SQLServer版) 10 第10章 数据的完整性.pptx

10 第10章 数据的完整性.pptx

页数:44页文件大小:111.9 KB来源: 数据库原理与应用(SQLServer版)ppt课件

本课件讲解数据完整性的含义与分类,演示主键约束、唯一约束、检查约束、默认约束与外键约束的创建方法,并说明规则与默认值的定义、绑定与删除操作,帮助在表设计阶段落实数据质量控制。

第10章数据的完整性封面,讲解完整性概述、约束、规则与默认值机制
数据完整性概述,涵盖数据库的完整性是指数据的正确性、而安全性控制的对象是非法的用户与数据完整性是保证数据质量的一种重等要点
数据操作中存在的问题,涵盖问题1、问题2与问题3等要点
查看本课件的文字版(共 44 页,供检索与复制)

第1页:第10章数据的完整性

第10章数据的完整性

第2页:数据完整性概述

数据完整性概述

数据库的完整性
指数据的正确性和相容性,它检查和控制的对象是不合语义的、不正确的数据,防止它们进入数据库;
而安全性控制的对象
非法的用户和非法的操作,防止他们对数据库中数据的进行非法存取。
数据完整性
保证数据质量的一种重要方法,是现代数据库系统的一个重要特征。SQL Server2005提供了一系列的数据完整性方法和机制。

第3页:数据操作中存在的问题

数据操作中存在的问题

问题1
不能确保同一表内数据间的相容性。
问题2
不能确保不同表之间数据的相容性。
问题3
不能保证数据值的正确性。

第4页:数据完整性的实现

数据完整性的实现

二、数据完整性的实现 约束(Constraint) 规则(Rule) 触发器(Trigger) 存储过程(Stored Procedure) 标识列(Identity Column) 数据类型(Data Type) 索引(Index)等。

第5页:数据完整性的实现

数据完整性的实现

数据完整性的实现途径1.实体完整性实体完整性的实现途径主要包括Primary Key(主键约束)、Unique(唯一性约束)、Unique Inedx(唯一索引)和IdentityColumn(标识列)。2.域完整性域完整性的实现途径主要包括Default(默认值)、Check(检查约束)、Foreign Key(外键约束)、Data Type(数据类型)和Rule(规则)。3.参照完整性参照完整性的实现途径主要包括Foreign Key(外键约束)、Check(检查约束)、Triggers(触发器)和Stored Procedure(存储过程)。4.用户定义完整性用户定义完整性的实现途径主要包括Check(检查约束)、Rule(规则)、Triggers(触发器)和Stored Procedure(存储过程)等。

第6页:约束:Primary Key约

约束:Primary Key约

  • Primary Key约束
  • Unique约束
  • Check约束
  • Foreign Key约束
  • Default定义
  • Not Null约束

第7页:Primary Key约束

Primary Key约束

  • PRIMARY KEY约束是通过定义表的主键来实现实体完整性约束的。
  • 为了能唯一的表示表中的数据行,通常将某一列或多列的组合定义为主键。
  • 一个表只能有一个主键,而且主键约束中的列不能为空值,且唯一地标识表中的每一行。
  • 如果主键不止一列,则一列中的值可以重复,但主键定义的所有列的组合值必须唯一。

第8页:Primary Key约束的创建

Primary Key约束的创建

方法一
在“对象资源管理器”窗口中,,右击相应的数据表,选择【修改】命令,在表设计器中,右击需要设置为主键的列名,选择“设置主键”命令。
方法二
在建表时加入命令[CONSTRAINTconstraint_name]PRIMARY KEY [CLUSTERED |NONCLUSTERED] (column_name[,…n] )

第9页:Primary Key约束的删除

Primary Key约束的删除

方法一
右击已设置的主键属性,在弹出的快捷菜单中选择【移除主键】命令。
方法二
使用T-SQL语句删除约束,其语法格式如下:

第10页:应用实例

应用实例

  • 【例10-1】在TeachingData数据库中,在StuInfo中为了唯一的区别每个学生实体,防止出现两条完全相同的学生记录,需要设置学号(SID)字段为主键。为StuInfo表创建PRIMARY KEY约束。
  • 【例10-3】用T-SQL语句将成绩表ScoreInfo中的SID和CID字段设置复合主键,并将该约束命名为PK_SC。ALTER TABLE ScoreInfoADD CONSTRAINT PK_SC PRIMARY KEYCLUSTERED(SID,CID)
  • 【例10-4】用T-SQL语句删除成绩表(ScoreInfo)中的已创建的主键。

第11页:Unique约束

Unique约束

  • UNIQUE约束确保表中一列或多列的组合值具有唯一性,防止输入重复值,主要用于保证非主键列的实体完整性。

第12页:Unique约束的创建

Unique约束的创建

方法一
在“对象资源管理器”窗口中,右击相应的数据表,选择【修改】命令,在表设计器中,右击需要建立UNIQUE约束的列名,在弹出的快捷菜单中选择【索引/键】命令,然后在【索引/键】中添加约束,并设置【是唯一的】为“是”,完成后【关闭】。
方法二
在建表时加入命令[CONSTRAINTconstraint_name]UNIQUE [CLUSTERED | NONCLUSTERED](column_name[,…n] )

第13页:Unique约束的删除

Unique约束的删除

方法一
打开【索引/键】对话框后,从左侧【选定的主/唯一键或索引】列表中选择要删除的唯一键约束的名称,单击【删除】按钮,然后关闭对话框并保存修改即可。
方法二
利用T-SQL命令DROP CONSTRAINTconstraint_name

第14页:应用实例

应用实例

  • 【例10-5】在TeachingData数据库中,使用对象资源管理器为课程信息表(CourseInfo)中的课程名属性建立UNIQUE约束。

第15页:Check约束

Check约束

  • CHECK约束用于限制输入到一个属性或多个属性的值的范围。
  • 使用一个逻辑表达式来检查要输入数据的有效性,如果输入内容满足CHECK约束的条件,将数据写入到表中,否则,数据无法输入,从而保证SQL Server数据库中数据的域完整性。
  • 一个数据表可以定义多个CHECK约束。

第16页:Check约束的创建

Check约束的创建

方法一
在“对象资源管理器”窗口展开相应的表,右击【约束】,选择【新建约束】命令,在弹出的【CHECK约束】窗口中添加约束,输入约束条件,完成后【确定】。
方法二
使用T-SQL语句建立CHECK约束的语法格式为:[ CONSTRAINTconstraint_name]CHECK [NOT FOR REPLICATION] (logical_expression)

第17页:Check约束的删除

Check约束的删除

方法一
打开【CHECK约束】对话框后,先在左侧【选定的CHECK约束】列表中选取要删除的约束名,单击【删除】按钮,然后依次确认,最后单击工具栏上的【保存】按钮即可。
方法二
利用T-SQL命令DROP CONSTRAINTconstraint_name

第18页:应用实例

应用实例

  • 【10-7】使用对象资源管理器为TeachingData数据库的成绩表ScoreInfo设置约束:要求成绩(Score)属性的取值在0~100之间。
  • 【例10-8】用T-SQL语句为学生信息表StuInfo添加性别(Sex)属性只能取“男”或“女”的约束,并将该约束命名为CK_Sex。

第19页:Foreign Key约束

Foreign Key约束

  • FOREIGN KEY约束为表中一列或多列的组合定义为外键。其主要目的建立和加强表与表之间的数据联系,确保数据的参照完整性。
  • 在创建和修改表时可通过定义FOREIGN KEY约束来建立外键。
  • 外键的取值只能是被参照表中对应字段已经存在的值,或者是Null值。
  • FOREIGN KEY约束只能参照本身所在数据库中的某个表,包括参照自身表,但不能参照其他数据库中的表

第20页:Foreign Key约束创建

Foreign Key约束创建

方法一
在对象资源管理器中,展开相应的数据表,右击【键】,选择【新建外键】命令,然后在【外键关系】对话框中完成相应的设置。
方法二
使用T-SQL语句创建FOREIGNKEY约束的语法格式为:[CONSTRAINTconstraint_name]FOREIGN KEY (column_name[,…n] )REFERENCESref_table(ref_column[,…n])

第21页:修改或删除FOREIGN KEY约束

修改或删除FOREIGN KEY约束

  • 修改或删除已经建立的FOREIGN KEY约束,在“对象资源管理器”窗口中展开参照表节点(如ScoreInfo表),再展开【键】选项,右击要删除或修改的“键”名称,在弹出的快捷菜单中选择【删除】命令,即可删除当前选定的键;选择【修改】命令,打开【外键关系】对话框,即可编辑已建立的外键。

第22页:应用实例

应用实例

  • 【例10-9】使用资源管理器在数据库TeachingData中建立学生信息表StuInfo和成绩表ScoreInfo之间的联系,设置ScoreInfo表中的SID为外键,参照StuInfo表中的SID属性值。

第23页:Not Null约束

Not Null约束

  • 列的NOT NULL约束定义了表中的数据行的特定列是否可以指定为Null值。Null值不同于零(0)或长度为零的字符串(‘’)。
  • 在一般情况下,如果在插入数据时不输入该属性的值,则表示为Null值。因此,出现NULL通常表示为未知或未定义。

第24页:NULL约束的实现

NULL约束的实现

  • 在SQL Server 2005中,允许Null值的实现有两种方法:一种方法是在表设计器中设计字段的时候,选择该列是否可以为空,默认可以为空;另一种方法是在用T-SQL语句创建表的时候,在对属性的描述时附加NULL、NOT NULL来实现。

第25页:应用约束

应用约束

  • 【例10-11】用T-SQL语句在创建教师信息表TchInfo时,指定教师姓名Tname字段不允许为空。

第26页:Default约束

Default约束

  • DEFAULT约束是为属性定义默认值。若表中的某属性定义了DEFAULT约束,在插入新记录时,如果未指定在该属性的值,则系统将默认值置为该属性的内容。
  • 默认值可以包括常量、函数或者NULL值等。

第27页:Default定义的创建

Default定义的创建

方法一
在对象资源管理器中,右击相应的数据表,选择【修改】命令,在表设计器界面中选需设置默认值的列,然后在列属性中设置【默认值或绑定】的值即可。
方法二
使用T-SQL语句创建DEFAULT约束的语法格式为:[CONSTRAINTconstraint_name]DEFAULTconstraint_expression[FORcolumn_name]

第28页:应用实例

应用实例

  • 【例10-12】在TeachingData数据库中,如果我们将TchInfo表中Dept属性的默认值设置为“尚未确定”。

第29页:规则的创建和管理

规则的创建和管理

  • 创建规则
  • 绑定规则
  • 解除绑定
  • 删除规则
  • 查看规则

第30页:规则

规则

规则(Rule)
数据库中对表的属性列或用户自定义数据类型取值的规定和限制。
规则
一组使用T-SQL语句书写的条件语句,它可以与属性或用户定义的数据类型绑定在一起。当用户向数据表插入数据时,指定该属性接受数据值的范围,保证数据的完整性。
规则
作为一个独立对象储存在数据库中,即属性或用户自定义数据类型的删除、修改不会对与之绑定的规则产生影响。

第31页:创建规则

创建规则

  • 参数说明:
    • rule_name:指定创建规则的名称。
    • condition_expression:指定定义规则的条件。描述规则的表达式可以是能用于WHERE条件子句中的任何有效表达式,可以包含算术运算符、关系运算符和谓词(如IN、LIKE、BETWEEN等),也可以包含不引用数据库对象的内置函数。

第32页:注意:规则不能引用属性或其他数

注意:规则不能引用属性或其他数

  • (1)规则不能引用属性或其他数据库对象。
  • (2)condition_expression中应包含一个局部变量,局部变量名必须以“@”开头。

第33页:应用实例

应用实例

应用实例【例10-16】创建一个规则,用以限制绑定属性中的取值范围在0~100之间。CREATE RULE r1AS @c>=0 and @c<=100【例10-17】创建一个规则,用以限制绑定属性只能取基础课、必修课或选修课。CREATE RULE CProperty_ruleAS @cp IN ('基础课','必选课','选修课')【例10-18】创建一个规则,用以限制绑定属性的数据格式是以‘a’到‘c’的字母开头,以‘0’到‘9’的整数字符结尾。CREATE RULE mytest_rule AS @value LIKE '[a-c]%[0-9]'

第34页:绑定规则

绑定规则

  • 参数说明:
    • rule_name:指定要绑定的规则名称。
    • object_name:指定与规则绑定的对象名称,可以是属性或用户自定义数据类型名,若是属性名,需要同时指定该属性所在的表名。
    • futureonly_flag:在与用户自定义数据类型绑定时有效。若futureonly_flag设置为空,表示已经存在的使用了这个用户自定义变量的表属性将不受这个规则的约束;futureonly_flag设置为futureonly_only时,所有表属性不管是以后才创建的或者绑定的,或是已经存在的都将受到这个规则的约束。默认值为空。

第35页:注意:规则对绑定前已经输入的数

注意:规则对绑定前已经输入的数

  • (1)规则对绑定前已经输入的数据不起作用。
  • (2)规则所指定的数据类型必须与所绑定对象的数据类型一致,且规则不能与数据类型为TEXT、MAGE或TIMESTAMP的属性绑定。
  • (3)与属性绑定的规则优先于与用户自定义数据类型绑定的规则。例如,如果表的一个属性是用户自定义数据类型,该数据类型与规则A绑定,同时该属性又与规则B绑定,则以规则B为该属性的规则。

第36页:应用实例

应用实例

【例10-19】将规则CProperty_rule与课程信息表CourseInfo中的CProperty字段绑定。USE TeachingDataGOEXEC sp_BINDRULE'CProperty_rule' , 'CourseInfo.CProperty'GO

第37页:解除绑定

解除绑定

  • 注意:
    • 若某属性已与一个规则绑定,如果再次将一个新的规则绑定到该属性时,旧的规则将自动解除,只有最近一次绑定的规则有效。

第38页:应用实例

应用实例

【例10-20】解除规则CProperty_rule与课程信息表CourseInfo中CProperty属性的绑定。USE TeachingDataGOEXEC sp_UNBINDRULE 'CourseInfo.CProperty'GO

第39页:删除规则

删除规则

  • 注意:
    • 在删除一个规则前,必须先将与其绑定的对象解除绑定。

第40页:应用实例

应用实例

【例10-22】使用对象资源管理器删除规则CProperty_rule。

第41页:查看规则

查看规则

  • 参数说明:
    • rule_name:指定要查看的对象名称。
  • 用sp_HELPTEXT系统存储过程查看的对象不仅可以是当前数据库中的规则,还可以是触发器、视图或未加密的存储过程等。

第42页:应用实例

应用实例

【例10-21】查看规则CProperty_rule。sp_HELPTEXT 'CProperty_rule'

第43页:小结:数据完整性相关概念

小结:数据完整性相关概念

  • 数据完整性相关概念(实体完整性、域完整性、参照完整性、用户定义完整性)及其实现途径
  • 约束(主键、唯一性、检查、外键、空值、默认值约束)
  • 规则的基本概念与用途及其操作方法(创建、绑定、解除、删除、查看)

第44页:作业:第10章的所有例题

作业:第10章的所有例题

  • 第10章的所有例题
  • 习题十的操作题
顶部目录