《强制数据完整性.doc
文本预览下载声明
强制数据完整性――使用数据表约束
数据完整性
强制数据完整性可保证数据库中数据的质量。数据完整性分为下列类别:
实体完整性
实体完整性将行定义为特定表的唯一实体。实体完整性通过索引、UNIQUE 约束、PRIMARY KEY 约束或 IDENTITY 属性强制表的标识符列或主键的完整性。
域完整性
域完整性指特定列的项的有效性。您可以强制域完整性限制类型(通过使用数据类型)、限制格式(通过使用 CHECK 约束和规则)或限制可能值的范围(通过使用 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。
引用完整性
在输入或删除记录时,引用完整性保持表之间已定义的关系。在 SQL Server 2005 中,引用完整性通过 FOREIGN KEY 和 CHECK 约束,以外键与主键之间或外键与唯一键之间的关系为基础。引用完整性确保键值在所有表中一致。这类一致性要求不引用不存在的值,如果一个键值发生更改,则整个数据库中,对该键值的所有引用要进行一致的更改。
强制引用完整性时,SQL Server 将防止用户执行下列操作:
!--[if !supportLists]--????????? !--[endif]--在主表中没有关联的记录时,将记录添加或更改到相关表中。
!--[if !supportLists]--????????? !--[endif]--更改主表中的值,这会导致相关表中生成孤立记录。
!--[if !supportLists]--????????? !--[endif]--从主表中删除记录,但仍存在与该记录匹配的相关记录。
用户定义完整性
用户定义完整性使您可以定义不属于其他任何完整性类别的特定业务规则。所有完整性类别都支持用户定义完整性。这包括 CREATE TABLE 中所有列级约束和表级约束、存储过程以及触发器。
?
数据约束
SQL Server 2005 提供了下列机制来强制列中数据的完整性:
PRIMARY KEY 约束
表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。
一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束
???????? 创建:
ALTER TABLE TableName ADD CONSTRAINT TableName _pk PRIMARY KEY (Id)
???????? 删除:
ALTER TABLE TableName DROP CONSTRAINT TableName _pk
FOREIGN KEY 约束
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。
在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。
FOREIGN KEY 约束并不仅仅可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束可以包含空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过组成 FOREIGN KEY 约束的所有值的验证。若要确保验证了组合 FOREIGN KEY 约束的所有值,请将所有参与列指定为 NOT NULL。
???????? 创建:
ALTER TABLE TableName
ADD CONSTRAINT TableName _fk1
FOREIGN KEY (FKId)
REFERENCES PrimarKeyTable (Id)
???????? 删除:
ALTER TABLE TableName
DROP CONSTRAINT TableName _fk1
UNIQUE 约束
可以使用 UNIQUE 约束确保在非主键列中不输入重复的值。尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束。
可以对一个表定义多个 UNIQUE 约束,但只能定义一个 PRIMARY KEY 约束。
而且,UNIQUE 约束允许 NULL 值,这一点与 PRIMARY KEY 约束不同。不过,当与参与 UNIQUE 约束的任何值一起使用时,每列只允许一个空值。
FOREIGN KEY 约束可以引用
显示全部