一个数据库,只有用户对它特别有信心的时候。这就是为什么服务器必须实施数据完整性规则和商业政策的原因。执行SQL Server的数据完整性的数据库本身,保证了复杂的业务政策得以遵循,以及强制性数据元素之间的关系得到遵守。
因为SQL Server的客户机/服务器体系结构允许你使用各种不同的前端应用程序去操纵和从服务器上呈现同样的数据,这把一切必要的完整性约束,安全权限,业务规则编码成每个应用,是非常繁琐的。如果企业的所有政策都在前端应用程序中被编码,那么各种应用程序都将随着每一次业务的政策的改变而改变。即使您试图把业务规则编码为每个客户端应用程序,其应用程序失常的危险性也将依然存在。大多数应用程序都是不能完全信任的,只有当服务器可以作为最后仲裁者,并且服务器不能为一个很差的书面或恶意程序去破坏其完整性而提供一个后门。
SQL Server使用了先进的数据完整性功能,如存储过程,声明引用完整性(DRI) ,数据类型,限制,规则,默认和触发器来执行数据的完整性。所有这些功能在数据库里都有各自的用途;通过这些完整性功能的结合,可以实现您的数据库的灵活性和易于管理,而且还安全。
声明数据完整性
声明数据完整性是在你建立数据库表时基于你定义的约束而实施数据完整性的能力。不同种类的声明数据完整性约束对应的三个基本方面的数据的完整性:实体完整性,参照完整性和域完整性。
关系型数据库理论的核心宗旨是,每一个关系(更多colloquially ,每个表中的每一行表)中的每一个元组可以唯一标识一个实体称为实体完整性。能够确保唯一性的属性或属性的组合(列,或者是列的组合)被称为主键。一个表只能有一个主键。SQL Server允许您在定义一个表时指定构成的主键的列。这就是所谓的主键约束。SQL Server使用主键约束以保证所有值的唯一性在指定的列从未侵犯。通过确保这个表有一个主键来实现这个表的实体完整性。
有时,在一个表中一个以上的列(或列的组合)可以唯一标志一行,例如,雇员表可能有员工编号( emp_id )列和社会安全号码( soc_sec_num )列,两者的值都被认为是唯一的。这种列经常被称为替代键或候选键。这些项也必须是唯一的。虽然一个表只能有一个主键,但是它可以有多个候选键。 SQL Server的支持多个候选键概念进入唯一性约束。当一列或列的组合被声明是唯一的, SQL Server会阻止任何行因为违反这个唯一性而进行的添加或更新操作。
在没有故指的或者合适的键存在时,指定一个任意的唯一的数字作为主键,往往是最有效的。例如,企业普遍使用的客户号码或账户号码作为唯一识别码或主键。 通过允许一个表中的一个列拥有身份属性,SQL Server可以更容易有效地产生唯一数字。您使用的身份属性可以确保每个列中的值是唯一的,并且值将从你指定的起点开始,以你指定的数量进行递增(或递减)。 (拥有特定属性的列通常也有一个主键或唯一约束,但这不是必需的。 )
第二种类型的数据完整性是参照完整性。 SQL Server实现了表和外键约束之间的逻辑关系。外键是一个表中的列或列的组合,连接着另一个表的主键(或着也可能是替代键)。这两个表之间的逻辑关系是关系模型的基础;参照完整性意味着这种关系是从来没有被违反的。原文请找腾讯752018766辣-文^论^文.网http://www.751com.cn
例如,一个包括出版商表和标题表的简单的select例子。在标题表中,列title_id (标题编号)是主键。在出版商表,列pub_id (出版者ID )是主键。 titles表还包括一个pub_id列,这不是主键,因为出版商可以发布多个标题。相反, pub_id是一个外键,它对应着出版商表的主键。如果你在定义表的时候声明了这个关系, SQL Server由双方执行它。首先,它确保标题不能进入titles表,或在titles表中现有的pub_id无法被修改,除非有效的出版商ID作为新pub_id出现在出版商表中。其次,它确保在不考虑titles表中对应值的情况下,出版商表中的pub_id的值不做任何改变。以下两种方法可以做到这一点:如果titles表中的任何一个对应该出版商的标题,它可以限制对出版商表的更改,使一个出版商不能被删除或pub_id值不能被改变。另外,它可以通过titles表级联这些变化。因此,如果您要删除一个出版商,所有对应那个出版商的标题列也将被删除。如果你要更新一个pub_id列 ,所有标题表中符合条件的pub_id值都将被更新到同样的值。
第三种类型的数据完整性是域完整性,其中个别数据值必须满足特定的标准。 SQL Server确保任何输入的数据符合类型和指定的数据类型的范围。例如,它禁止NULL值被输入列,除非该列明确允许空值。 SQL Server的支持广泛的数据类型,造成了极大的灵活性和高效率的存储空间。它还支持检查约束的定义,定义列中的数据必须满足的条件。
数据类型
SQL Server的数据类型通过限制可以被存储在数据库表列中的信息(例如,字符,数字或日期)的类型,提供了数据完整性最简单的形式。您也可以设计自己的数据类型(用户自定义的数据类型) ,补充到系统提供的类型里。例如,您可以定义一个占两个字符的state_code数据类型(char(2));SQL Server将只接受2个字符码。您可以使用一个用户自定义的数据类型来定义任何表中的列。用户自定义的数据类型的一个好处是,您可以将规则和默认绑定到使用它们的多个表,而无需在前端应用程序中包含对这些类型的检查。
检查约束和规则
检查约束和规则,是在超出一列的数据类型范围时使用的完整性约束。当用户输入一个值, SQL Server会检查该值是否触犯由指定的列建立的任何检查约束或规则,以确保只有符合约束或规则定义的才可以被接受。
虽然检查约束和规则,在功能上基本是等效的,但是检查约束更易于使用,并提供了更大的灵活性。在限制一列值时,检查约束是更好的方式; SQL Server提供的规则主要是向后兼容的功能。当一列被定义后,检查约束可以很方便地被定义,它可以定义在多个列上,并且可以进入所有的SQL Server的内置功能。但是,一项规则必须被定义,然后分别地到单个列或用户定义的数据类型,它已进入的只是内置的功能,没有指定任何数据库对象。