数据库概论 (四)完整性

完整性

完整性与安全性的异同点

完整性:防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。防范对象:不合语义的、不正确的数据。
安全性:保护数据库防止恶意的破坏和非法的存取。防范对象:非法用户和非法操做。sql

实体完整性规则

若属性(一个或者一组)A是基本关系的主属性,则A不能取空值。在关系型数据库里的体现就是将数据表的某一个候选码设定为主键,PRIMARY KEY.数据库

单属性构成码有两种方式:安全

  • 成为列级约束条件
  • 成为表级约束条件

约束条件的范围由码的定义位置肯定,若是在建立表的最后肯定那么就是表级约束条件,若是在定义列的同时设定为码那么就是列级。code

而对于多个属性一块儿构成码的,只能做为表级的约束条件。对象

实体完整性的检查和违约处理

插入或对主码列进行更新操做时,DBMS按照实体完整性规则自动进行检查。包括:blog

  1. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改;
  2. 检查主码值是否惟一,若是不惟一则拒绝插入或修改

检查主码是否惟一的一种办法就是全表扫描,并一一比较是否相同。索引

或者为主码建立索引,提升扫描的效率。table

参照完整性

指的是关系模型中参照其余的表的属性,构成了当前表的参照完整性。在关系数据库中的体现就是将某一个属性定义为外键 FOREIGN KEY ... REFERENCE...class

参照完整性的检查和违约处理

  1. 拒绝(NO ACTION)执行
    默认策略
  2. 级联(CASCADE)操做
    如从Student表中删除Sno的值为201215121,则从sc表中级连删除 SC.Sno=201215121的全部元组
  3. 设置为空值(SET-NULL)
    对于参照完整性,除了应该定义外码,还应定义外码列是否容许空值,如:学生 (学号, 姓名, 年龄,专业号 ) 专业(专业号, 专业名)
    若是专业表中某个元组被删除,则能够把学生中的外码设置为空值

image-20210105160245864

用户自定义完整性

针对用户的特定应用而设定的完整性要求。例如性别只能为男,女,年龄必须为正数等。效率

用户定义的完整性分为

  • 属性上的完整性定义
    • 列值惟一
    • 列值不为NULL
    • 用CHECK短语指定列值应该知足的条件
  • 元组上的完整性定义
    • 在CREATE TABLE时能够用CHECK短语定义元组上的约束条件,即元组级的限制
    • 同属性值限制相比,元组级的限制能够设置不一样属性之间的取值的相互约束条件,便可以在同一个元组内进行不一样属性的判断处理。

完整性约束命名子句

QL还在Creat table语句中提供了完整性约束命名子句,用来对完整性约束条件命名,从而能够灵活地增长、删除一个完整性约束条件

CONSTRAINT <完整性约束条件名>[ NOT NULL  | UNIQUE | PRIMARY KEY短语| FOREIGN KEY短语 | CHECK短语  ]

断言

断言建立语句

CREATE ASSERTION  <断言名> <CHECK 子句>

能够定义涉及到多个表的复杂条件判断语句,数据库中全部涉及到断言中定义的操做都会触发断言判断。若是断言判断结果不为真,就会拒绝执行。

触发器

在指定的操做以前,或以后执行的一段SQL语句。

  • Before insert, update...
  • After insert, update...

数据库的完整性是为了保证数据库中存储的数据是正确的DBMS完整性实现的机制。

  • 完整性约束定义机制
  • 完整性检查机制
  • 违背完整性约束条件时RDBMS应采起的动做
相关文章
相关标签/搜索