今天有人问我,数据库的完整性定义是什么,包括哪几个方面。我竟然一点都不知道怎么回答!
高手们,能不能给个答案啊?

解决方案 »

  1.   


    数据完整性概念
    数据完整性是指数据的正确性和完备性。在用I N S E RT、D E L E T E、U P D AT E语句修改数
    据库内容时,数据的完整性可能会遭到破坏,例如:
    • 无效的数据被添加到数据库中。如:某定单所指的产品不存在。
    • 对数据库的修改不一致,如:为某产品增加了一份定单,但却没有调整产品的库存信
    息。
    • 将存在的数据修改为无效的数据,如:将某学生的班号修改为并不存在的班级。
    为了保证存放的数据的一致性和正确性, SQL Server对关系施加了一个或多个数据完整
    性约束。这些约束限制了数据库的数据值,或者限制了数据库修改所产生的数据值,或者限
    制了对数据库中某些值的修改。在关系数据库中,主要有以下3类数据完整性:
    1. 实体完整性
    保证表中所有的行唯一。也就是说,表中的主键在所有记录上必须取值唯一,和其他记
    录上的值不同。如: t i t l e表中的t i t l e _ i d取值唯一,它们唯一标志了相应记录所代表的书,重复
    的值是非法的,因为重复的书号将造成书表达的混乱,不能将不同的书区别开来。
    2. 参照完整性
    主键和外键关系维护。它涉及两个或两个以上表的数据的一致性维护。外键值将子表中
    包含此外键的记录和父表中包含的相匹配主键值的记录关联起来。在l i b r a r y数据库中,l o a n表中m e m b e r _ n o列将记录所描述的借书信息和它所借的书联系起来, m e m b e r _ n o必须是包含在m e m b e r表的m e m b e r _ n o列中的有效值,否则,借书的人根本就不存在。
    SQL Server提供了外键/主键值约束。即满足以下2点:
    • 存在外键时,被参照表中这一行不能删除,主键值不变。也即:删除父表中的记录或更
    新父表中的主关键值,必须保证没有相同的外键值存在,否则,不允许删除或修改。
    如:在p u b s数据库中,加到t i t l e s表中的每本书,必须由合法的出版社出版。如果在t i t l e s表
    中有某一出版社出版的书存在,就不能从p u b l i s h e r s表中删除这个出版社的信息或更改这个出版社的标志p u b _ i d。
    • 若在被参照表中不存在包含相应主键的行时,一个外键值不能插入到参照表中。也即:
    向子表插入记录或更新子表中外键值的前提是,必须保证这个外键值与主表中主键的某
    个值相等或者该外键值为空,否则不允许插入或修改。
    如:在p u b s数据库中,添加到t i t l e s表中的每本书,必须由合法的出版社出版。如果插入到t i t l e s表的数据中的出版社在p u b l i s h e r s表中不存在,那么就不能往t i t l e s表添加这行记录。
    3. 域完整性
    即为某列有效值的集合,是对业务管理或是对数据库数据的限制,他们反映业务的规则。
    域完整性也叫作商业规则( business rule)。如:在定单系统中,禁止接受库存中没有足够数
    量的产品定单。SQL Server能够检查每个添加到定单表中的新记录,以确信o t y列中的值不违
    反这个商业规则。又如,规定定单的最小金额不低于2 0 0元。
    除了上述的3个完整性要求外,其实还存在1个数据完整性约束:
    强制数据( required data):数据库中的某些列在每个记录上必须存在有效值,不允许有
    空值出现。如:l o a n表中的m e m b e r _ n o必须非空,这是因为每份借书记录都必须有与之相关的借书人。这是最简单的数据完整性约束。可在建表时将该列声明为NOT NULL即可。
    在SQL Server中,在已存在的表中无法增加NOT NULL约束。这是由实现空值的内部机
    制决定的。一般而言, SQL Server为所有记录上允许空值的列都保留了一个额外的字节,作
    为空值指示器,当列为空值时,该额外字节被设定为某个特定值;当列被指定为NOT NULL
    特性时,SQL Server不为此列分配空值指示字节,以节省磁盘空间。
    8.2 实施方法
    共有以下两种方法实现数据完整性。
    • 过程型数据完整性:由缺省、规则和触发器实现。由视图和存储过程支持。
    • 声明型数据完整性:作为数据库说明的一部分在语法中实现,是在C R E ATE TA B L E和
    A LTER TA B L E定义中使用c o n s t r a i n t和d e f a u l t语句限制表中的值。使用这种方法实现数
    据完整性简单且不容易出错,系统直接将实现数据完整性的要求定义在表和列上。
    在create table和alter table语句中,约束子句有:
    缺省约束(default constraints):当向数据库中的表插入数据时,如果用户没有明确给出
    某列的值, SQL Server自动为该列输入指定值。
    检查约束( check constraints):限制插入列中的值。
    唯一约束( unique constraints):要求表中在指定的列上没有两行具有相同的值。
    主键约束( primary key constraints):要求主键的列上没有两行具有相同值,也没有空值。
    参照约束( reference constraints)/外键约束( foreign key constraints ):要求指定的列
    (外键)中正被插入或更新的新值,必须在被参照表(主表)的相应列(主键)中已经存在。
    约束又分为列级约束和表级约束。如果约束只对一列起作用,应定义为列级约束,如果
    约束对多列起作用,则应定义为表级约束