完整性

完整性与安全性的异同点

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

实体完整性规则

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

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

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

约束条件的范围由码的定义位置确定,如果在创建表的最后确定那么就是表级约束条件,如果在定义列的同时设定为码那么就是列级。

而对于多个属性一起构成码的,只能作为表级的约束条件。

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

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

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

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

或者为主码创建索引,提高扫描的效率。

参照完整性

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

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

  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应采取的动作
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/tanknee/p/14278281.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!