数据库完整性

确保输入至数据库中的数据,是准确、有效及一致的。数据库中任何数据改动,都必须乎合所有完整性限制及数据有效性检验。

一 数据完整性
数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。
分类:
(1) 实体完整性:规定表的每一行在表中是唯一的实体
(2) 域完整性:指表中的列必须满足某种特定的数据类型约束,包括取值范围,精度等
(3) 参照完整性:指两个表的主键和外键的数据应一致,保证了表之间的数据一致性,防止数据丢失或无意义的数据在数据库中扩散。

二 完整性约束
功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易

(一)分类 
(1) 与表有关的约束:是表中定义的一种约束。可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。(not null除外,not null只能用于定义列约束)

        共5种 非空(NOT NULL)约束、 唯一(UNIQUE)约束、主键(PRIMARY KEY)约束、外键       (FOREIGN KEY)约束、条件 (CHECK)约束

  1. 非空(NOT NULL)约束:所约束的列不能为NULL值,否则就会报错。只用于定义列约束。
  2. 唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。
  3. 主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。
  4. 外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。
  5. 条件(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。

(二)管理
(1)创建
       语法:
  1. not null: 只用于定义列约束
    Colunm_name datatype | domain not null
  2. unique
    Colunm_name datatype | domain unique
  3. primary key
    Colunm_name datatype | domain primary key:定义列约束
    或 primary key(Colunm_name):定义表约束
  4. foreign key
    Colunm_name datetype | domain references table_name(column)
    [match full|partial|simple] //注:sqlserver不支持。
    [referential triggered action]
    说明:table_name为父表的表名,column为父表中与外键对应的主键值。
    [match full|partial|simple]为可选子句,用于设置如何处理外键中的null值。
    [referential triggered action]也为可选子句,用于设置更新、删除外键列时的操作准则。
    可以为表的一列或多列创建foreign key 约束,如果为多列创建 foreign key约束,将分别与主表中的相应主键相对应。
    (注:foreign key 列上的取值可以取null)。
  5. check
    列定义语法:
    Column datetype | domain check(search condition)
    表约束语法:
    constraint constraint_name check(search condition)













参考资料:




posted @ 2013-10-09 17:18  tanhaiyuan  阅读(356)  评论(0编辑  收藏  举报