文档介绍:第7章实现数据完整性
本章学习目标
l 理解完整性的概念、类型及作用
l 灵活使用约束、规则、默认值、IDENTITY列实现数据完整性
数据完整性概述 数据完整性的定义 数据完整性是指存放在数据库中的数据要满足的业务规则,是确保数据库的数据一致、正确以及符合企业规则的一种思想。如年龄0~150,性别{男,女},成绩表中学号必须在学生基本信息表中存在等。这样可以保证有效的有意义的数据存放到数据库中。 完整性类型 数据完整性有四种类型:实体完整性、域完整性、引用完整性、用户自定义完整性。
实体完整性也可称为表的完整性,是指表中必须有一个主关键字,用来惟一地标识表中的每一行,且不允许为空值(NULL)。实体完整性强制表的标识符列或主键的完整性(通过索引、UNIQUE约束、PRIMARY KEY约束或IDENTITY属性实现)。2. 域完整性 域完整性也可称为列的完整性,是指给定列的输入有效性,用于限制向表中输入的值的范围。强制域有效性的方法有:限制类型(通过类型)、格式(通过CHECK约束和规则)或可能值的范围(通过FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规则)。
3. 引用完整性 引用完整性也称参照完整性,在输入或删除记录时,引用完整性保持表之间已定义的关系。在SQL Server2000中,引用完整性基于外键与主键之间或外键与唯一键之间的关系(通过FOREIGN KEY和CHECK约束)。
引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。
强制引用完整性时,SQL Server禁止用户进行下列操作:
l 当主表没有关联的记录时,将记录添加到相关表中。
l 更改主表中的值并导致相关表中的记录孤立。
l 从主表中删除记录,但仍存在与该记录匹配的相关记录。
4. 用户自定义完整性 用户自定义完整性主要体现实际运用的业务规则中。例如,在“班级表”中,规定04届学生班级的“班级名称”前两个字符必须是04等。用户定义的完整性可以通过前面3种完整性的实施得到维护。
使用约束实现数据完整性
PRIMARY KEY约束
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键(PK),通过它可强制表的实体完整性。当创建或更改表时可通过定义PRIMARY KEY约束来创建主键。注意,每个表有且只有一个PRIMARY KEY约束,PRIMARY KEY约束中的列不能接受空值,系统在定义PK的列上自动建立唯一索引,主键可以是多列的组合。
如果PRIMARY KEY约束定义在不止一列上,则一列中的值可以重复,但PRIMARY KEY约束定义的所有列的组合的值必须唯一。只有在进行联接或执行INSERT时才检查主键约束。
【例7-1】为数据库XSCJ中“学生基本信息表”的“学号”列上创建PRIMARY KEY约束。方法一、使用企业管理器创建主键约束。可以按以下步骤操作:①展开服务器,单击【数据库】,在展开数据库XSCJ后,单击【表】,显示XSCJ数据库所属的表信息。②右击【学生基本信息表】,在弹出的快捷菜单中单击【设计表】,打开如图7-1所示对话框。
图7-1设计表
③单击【列名】下的【学号】列。④单击工具栏中的【设置主键】按钮,单击【保存】按钮即可。方法二、用ALTER TABLE命令来创建一个主键约束。其语法为: ALTER TABLE table_name ADD [CONSTAINT Constraint_name] PRIMARY KEY {(Column[,…n])
其中:
l table_name:要更改的表名称。如果表不在当前数据库中或者不属于当前用户所拥有,可以显式指定数据库和所有者。
l constrain_name:新约束的名称。约束的名称必须符合标识符规则,但其名称的首字符不能为#。如果没有提供 constraint_name,约束使用系统生成的名称。
l column[,...n]:新约束所用的一列或多列(置于括号中)的列名。
l 在查询分析器中执行以下语句可以完成【例7-1】的任务。
USE XSCJGOALTER TABLE 学生基本信息表ADD CONSTRAINT PK_stu_id PRIMARY KEY (学号)GO
运行结果如图7-2所示,成功地在“学生基本信息表”上创建了PRIMARY KEY约束
图7-2 使用ALTER TABLE命令创建主键约束