您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第6章保证数据的完整性1
1第六章保证数据的完整性理论学习(教学)目标:1.了解数据完整性的概念。2.了解数据完整性的各种类型。3.掌握各种约束的使用特点。技能学习(教学)目标:1.熟练掌握各种约束的设置方法。2.掌握各种约束的管理办法。在对数据库中数据操作的过程中,数据的添加、修改、删除都有可能造成数据的破坏或者出现表间数据的不一致,如何能保证输入数据的准确无误呢?在SQLServer2008中,系统本身提供了维护机制,通过约束、默认值、规则、触发器等维护机制来保证数据库中数据的正确性和一致性。6.1数据完整性的概念数据完整性就是指存储在数据库中的数据正确无误并且相关数据具有一致性。例如,在“学生”表中,每个学生的信息应该是唯一的,不能存在两位学生的信息完全一致;学生的学号应具有唯一性;学生所在的系,专业,班级必须是存在的。根据完整性的机制不同,数据完整性可分为:实体完整性、域完整性、参照完整性和用户定义完整性4种类型。6.1.1实体完整性这里的实体即表中的记录。实体完整性要求在表中不能存在完全相同的记录,即表中的每一条必须是唯一的。实体完整性可以通过设置主键约束、唯一性约束、标识列(IDENTITY)等多种方法来实现。例如,“学生”表的学生编号可设为主键,则每条记录的学号唯一,并且不能为空,这样就能保证学生记录的唯一性。6.1.2域完整性域完整性也称为列完整性,要求向表中输入的数据必须具有正确的类型、格式及有效的数据范围。例如,在“成绩”表中,成绩字段的值应在0-100之间;在“学生”表中,性别字段的值应为“男”或“女”,如果输入了超出此范围的数据,系统就会拒绝接受。域完整性的实现可使用用默认值(DEFAULT),检查约束(CHECK)、外键约束(FOREIGN)和规则(RULE)等方法来实现。6.1.3参照完整性参照完整性又称为引用完整性。参照完整性是指作用于有关联的两个或两个以上的表,通过使用主键和外键的关系,使表中的数据与其相关表中数据保持一致。设置参照完整性后,在用户插入、删除、更新记录时,系统将保持表间已定义的关系,确保相关表中数据的一致性。6.1.4用户定义完整性2用户定义完整性使用户得以定义不属于以上三种完整性分类的业务规则。由于每个用户的数据库都有自己独待的业务规则,所以系统必须有一种方式来实现定制的业务规则,即用户定义完整性约束。用户定义完整性可以通过用户定义数据类型、规则、触发器等来实现。6.2使用约束6.2.1约束的定义约束是SQLServer2008提供的自动强制数据完整性的一种方法,常用的约束包括:主键约束(PRIMARYKEY)、唯一键约束(UNIQUE)、检查约束(CHECK)、外键约束(FOREIGNKEY)、默认约束(DEFAULT)和级联引用完整性约束。6.2.2PRIMARYKEY主键约束主键约束主要用来强制数据的实体完整性,保证表中每条记录的唯一性。主键约束有如下特点:1.每个表中只能定义一个主键。2.主键值必须唯一并且不能为空。3.主键可以是一列,也可以是多列的组合。对于多列组合的主键,某列值可以重复,但列的组合值必须唯一。4.image和text类型的列不能被定义为主键。5.当向已有数据的表中添加主键约束时,系统检查列中现有数据以确保现有数据遵从主键的规则,所以在添加主键之前,要保证主键列没有空值和重复值。主键约束的添加、删除和修改可以使用对象资源管理器或在查询分析器中使用Transac-SQL语言实现。1.使用对象资源管理器创建主键约束下面以“学生”表为例,介绍使用对象资源管理器创建主键的步骤。3在对象资源管理器中,用鼠标右键单击“学生”表,从弹出的快捷菜单中选择“设计”命令,启动表设计器。在表设计器中,选择需要设为主键的字段,如果需要选择多个字段,可以按住CTRL键,同时用鼠标单击每个要选择的字段。然后右单击选好字段,从弹出的快捷菜单中选择“设置主键”命令。执行命令后,在作为主键字段前有一个钥匙样图标。也可以用工具栏中“钥匙”按钮,设置主键。设置完毕后,保存并关闭表设计器。图6.1“设置主键”对话框2、使用SQL语句创建主键约束可以在建表时设置主键,也可使用ALTERTABLE为已存在的表创建主键约束,修改表添加主键约束的语法如下:ALTERTABLEtable_nameADDCONSTRAINTconstraint_namePRIMARYKEY[CLUSTERED|NONCLUSTERED]{(column_name[,…n])}其中:Constraint_name指主键约束名称。CLUSTERED表示在该列上建立聚集索引。4NONCLUSTERED表示在该列上建立非聚集索引。[例6.1]在“教师”表中,将“教师编号”设为主键,语句如下:ALTERTABLE教师ADDCONSTRAINTpk_jsbhPRIMARYKEYCLUSTERED(教师编号)6.2.3FOREIGNKEY外键约束外键约束主要用于强制参照完整性,使外键表中外键字段值与主键表中主键字段值保持一致。如“专业”表中“院系编号”应是“院系”表中已存在的“院系编号”,因为在现实世界中某专业应存在于某个院系中;再如如果一个院系的编号发生改变,这时在“专业”表中相应的“院系编号”也应相应变化,这些情况都应进行外键约束的设置。1.使用对象资源管理器创建外键约束下面以在“专业”表中添加“院系编号”为外键为例说明如何设置外键。在对象资源管理器中展开指定的数据库,用鼠标右键单击“数据库关系图”,从弹出的快捷菜单中选择“新建数据库关系图”命令,将出现“添加表”对话框,在对话框中添加表“专业”及“院系”,然后关闭“添加表”对话框,这时可在关系图中看到添加进去的表。单击主键字段,并按住左键拖动到需要建立外键字段处,然后释放鼠标弹出“表和列”对话框,显示主键外键所对应的表及关系,单击确定后,弹出“外键关系”对话框,再一次单击确定后,即可建立连接。图6.2“设置外键”对话框2.使用Rransact-SQL语句设置外键约束ALTERTABLEtable_name5ADDCONSTRAINTconstraint_nameFOREIGNKEY{(column_name[,…n])}REFERENCESref_table{(ref_column_name[,…n])}[ONDELETECASCADE|ONUPDATECASCADE]其中:table_name是需要创建外键的表名称。constraint_name是外键约束名称。ref_table外键所在表名称。ONDELETECASCADE表示级联删除,即父表中删除被引用行时,也将从引用表中删除引用行;ONUPDATECASCADE表示级联更新,即父表中更新被引用行时,也将在引用表中更新引用行。[例6.2]在“学生”表中,为“班级编号”字段创建一个外键约束,从而保证输入有效的班级编号,其语句如下:ALTERTABLE学生ADDCONSTRAINTfk_bjbhFOREIGNKEY(班级编号)REFERENCES班级(班级编号)GO请同学们思考:1.在学生表中存在“班级编号”为“0000001”的学生记录,这时能否删除“班级”表中“班级编号”为“0000001”的班级信息?2.如果把“班级编号”“0000001”修改为“0000003”,这时“学生”表中相关字段值是否发生变化?6.2.4DEFAULT约束DEFAULT(默认)约束指定列的默认值,即当用户没有对某一列输入数据时,则将所定义的默认值提供给这一列。默认约束也是强制实现域完整性的一种手段。DEFAULT约束不能添加到时间戳TIMESTAMP数据类型的列或标识列上,也不能添加到已经具有默认值设置的列上,不论该默认值是通过约束还是绑定实现的。1.通过对象资源管理器创建默认约束下面举例说明如何为“学生”表“地址”字段设置默认值。进入表设计器后选中要建立默认值约束的列名“地址”,在下面列属性的默认值栏中添上要定义的值即可。6图6.3“设置默认值”对话框2.使用SQL语句创建默认约束使用SQL语句为已存在的表创建默认约束,其语法格式如下:ALTERTABLEtable_nameADDCONSTRINTconstraint_nameDEFAULTconstant_expression[FORcolumn_name]其中:table_name是需要建立默认约束的表名。constraint_name是默认约束名称。constant_expression是默认值。column_name是要建立默认值的字段。[例6.3]为“学生”表中“性别”字段创建一个默认约束,其默认值为“男”。语句如下:7ALTERTABLE学生ADDCONSTRAINTdf_xbDEFAULT‘男’for性别6.2.5UNIQUE约束UNIQUE约束(唯一性约束)用于指定一个列值或者多个列的组合值具有唯一性,以防止在列中输入重复的值。通常每个表只能有一个主键。因此,当表中已经有一个主键时,如果还需要保证其他字段值唯一,就可以使用唯一性约束。例如在“学生”表中添加“身份证号”字段,这时除“学生编号”要求唯一外,“身份证号”也要求唯一,就需要为“身份证号”字段建立一个UNIQUE约束。唯一性约束具有如下特点:(1)唯一性约束可以一列或多列的组合。(2)一个表可以设置多个唯一性约束,但只能设置一个主键约束。(3)使用唯一性约束字段允许有空值。1.使用对象资源管理器创建唯一性约束下面举例说明如何为“学生”表中“身份证号”创建唯一性约束。在对象资源管理器中,选择“学生”表,打开表设计器。在表设计器中,任意单击某个字段,从弹出的快捷菜单中选择“索引/键”命令,打开“索引/键”对话框,单击“添加”按钮,然后在对话框的右边进行设置。设置类型为唯一键,设值列为“身份证号”,设置名称为“IX_学生_sfzh”,设置完毕后关闭对话框。图6.4“设置唯一键”对话框8和添加主键一样,向已存在的表添加唯一键约束时,系统也将检查现有记录的列值,以确保现有数据符合唯一键的规则,所以在添加唯一键之前要保证唯一键列没有重复值,但可以有空值。2.使用SQL语句创建唯一性约束为已存在的表创建唯一约束,其语法格式如下:ALTERTABLEtable_nameADDCONSTRAINTconstraint_nameUNIQUE[CLUSTERED|NONCLUSTERED]{(column[,…n])}其中:(1)table_name为需要创建唯一的表名称。(2)constraint_name约束名称。(3)column是表中需要创建惟一约束的列名称。[例6.4]在“学生”表中,为“身份证号”字段创建一个唯一约束。ALTERTABLE学生ADDCONSTRAINTuk_sfzhUNIQUENONCLUSTERED(身份证号)GO6.2.6CHECK约束CHECK约束(检查约束)对输入列的值设置检查条件,以限制不符合条件数据的输入,从而维护数据的域完整性。1.通过对象资源管理器来创建CHECK约束以在“学生”表中限定输入“性别”字段的值只能是“男”或“女”为例说明。选中“学生”表,打开表设计器,在表定义网格中单击右键,在弹出的快捷菜单中选择“CHECK约束”命令,弹出“CHECK约束”对话框,在表达式中进行正确的设置,输入:性别in(‘男’,‘女’),如果在设置约束时不需要对现有数据进行检查,则将“在他建或重新启用时检查现有数据”一项设为“否”。9图6.5“设置CHECK约束”对话框2.使用SQL语句创建检查约束其语法格式如下:ALTERTABLEtable_name[WITHNOCHEDK]ADDCONSTRAINTconstraint_nameCHECK(logical_expression)其中:table_name是需要创建约束的表名称。WITHNOCHEDK对表中现在数据不检查。constraint_name是检查约束的名称。logical_expression是检查约束的条件表达式。[例6.5]在“教师”表中为“主要联系方
本文标题:第6章保证数据的完整性1
链接地址:https://www.777doc.com/doc-2197234 .html