首页 > 数据库 >数据库完整性

数据库完整性

时间:2023-05-11 23:15:57浏览次数:39  
标签:关系 参照 断言 数据库 约束 完整性

完整性概述

数据库的完整性是指数据库的正确性、一致性、相容性
正确性:数据库的数据符合语义约束
一致性:数据间的逻辑关系是正确的,从一个一致性状态转移到另一个一致性状态
相容性:同一事物的两个数据应当是一致的
约束的分类

从约束的状态分类:
可以分为静态约束和动态约束
静态约束:数据库正确状态的约束
动态约束:数据库从一种正确状态转移到另一种状态的约束

实体完整性

关系的主码唯一并且不能取空值
会破坏实体完整性的几种操作
1、向表中插入新元组会破坏实体完整性
2、修改元组的主码可能破坏实体完整性
3、违约处理,DBMS自动检查并且拒绝所有导致破坏实体完整性的任何插入和修改

参照完整性

参照完整性是对外码取值的约束
外码的取值要么是其参照的表的主码的取值要么是空值(外码建立了不同关系的联系)
破坏参照完整性的几种情况
1、向参照关系中插入新元组
2、删除被参照关系中的元组
3、修改参照关系外码上的值
4、修改被参照关系上主码的值
违约处理:
1、拒绝
2、置空值
3、置默认值
4、级联
2.png

用户自定义的完整性

实体完整性和参照完整性是所有关系都必须遵守的,被称为关系的不变性
用户自定义的完整性可以分为属性级的、关系级的、数据库级的

属性级的

定义在列级上的属性约束CHECK约束、NULL约束、UNIQUE约束
3.png

关系级的

表级上的CHECK约束,涉及多个属性
4.png

数据库级的

涉及多个关系的约束被称为数据库级的约束
断言Assertion是一种命名约束,他表达了数据库必须满足的逻辑状态

断言的创建

CREATE ASSERTION <断言名> CHECK (<约束条件>) [<约束性质>]

约束条件可以是涉及数据库对象的布尔表达式也可以是SELECT语句
约束性质可以是NOT DEEDERRABLE(不可延迟的)或DEEDERRABLE(可延迟的),缺省时为不可延迟的(也就是说是约束立即检查)
eg:
5.png
约束“任何部门经理的工资不超过其所在部门平均工资的10倍”涉及上述两个关系,可以为它创建一个断言,该约束等价于不存在一个部门经理,他的工资高于他所在部门平均工资的10倍“

CREATE ASSERTION SalaryConstraint CHECK
(NOT EXISTS
(SELECT * Departments D, Employeess E
WHERE D.Mrgno = E.Eno AND
Salary > 10 *(SELECT AVG(Salary)
FROM Employees
WHERE Dno = D.Dno)))

断言被创建后,只有不违背断言的数据库更新才被允许,如果我们修改经理的工资,只有在满足上述断言,即工资不超过该部门平均工资的10倍的情况下才允许被更新

断言的删除

如果没有其他数据库对象的定义依赖断言可用

DROP ASSERTION <断言名>

触发器

标签:关系,参照,断言,数据库,约束,完整性
From: https://www.cnblogs.com/cxy8/p/17392509.html

相关文章

  • 数据库基础
    1.数据库mysql数据库使用和可视化关系型数据库mysql使用:开启服务:netstartmysql登录:mysql-uroot-p关闭服务:netstopmysql图形化MySQL数据库管理工具:SQLyog安装后的秘钥:cr1738d8120df-a5c3-4989-8f47-5afc79c56e7c2.操作数据库操作数据库>操作数据库表>操......
  • Python学习之二:不同数据库相同表是否相同的比较方法
    摘要昨天学习了使用python进行数据库主键异常的查看.当时想我们有跨数据库的数据同步场景.对应的我可以对不同数据库的相同表的核心字段进行对比.这样的话能够极大的提高工作效率.我之前写过很长时间的shell.昨天跟着同事开始学python.感觉的确用python能够节约大量的时间.......
  • Linux下安装MySQL数据库
    系统:Centos7安装MySQL版本:8.0.32安装方式:压缩包MySQL官网下载https://downloads.mysql.com/archives/community/ 一、检查是否安装过msyql和mariadb数据库rpm-qa|grepmysqlrpm-qa|grepmariadb如果存在的话使用命令卸载:rpm-e--nodeps  二、安装mys......
  • Java 远程连接 SQLite 数据库
    Java远程连接SQLite数据库 Java可以使用JDBCAPI来连接SQLite数据库。但是,SQLite不支持远程连接,因为它是一种文件数据库,需要直接访问数据库文件。如果您需要从远程位置访问SQLite数据库,可以将SQLite数据库文件放在共享文件夹中,并将该文件夹映射到本地计算机上。......
  • 数据库DDL和DML
    DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。而,DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。  命令上的区别:DDL中常用的命令有:create,drop,alter,truncate和rename等等。而,DML中常用的命令有:insert,update,delete和select等等。 1.......
  • 数据库基础(上)
    1.基础篇1.1MySQL概述1.1.1数据库相关概念主流的关系型数据库管理系统1.1.2MySQL数据库   要想在任意目录下执行MySQL指令,需要配置PATH环境变量  1.2SQL1.2.1SQL通用语法1.2.2SQL分类1.2.3DDL使用double要指定两个参数,一个参数是double的整......
  • Go语言(Golang)数据库编程
    Go数据库编程一、连接数据库准备连接到数据库要想连接到SQL数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。sql.Open()数据库驱动的名称数据源名称得到一个指向sql.DB这个struct的指针sql.DB是用来操作数据库的,它代表了0个或者多个......
  • 数据库连接池报错java.lang.NoClassDefFoundError
    第一次用c3p0,在连接时,发声如下报错java.lang.NoClassDefFoundError 经查看,发现它需要辅助包 mchange-commons-java.jar,下载放入后,即可 ......
  • java基于springboot+vue的房屋租赁租房系统、租房管理系统,附源码+数据库,免费包运行,适
    1、项目介绍java基于springboot+vue的房屋租赁租房系统、租房管理系统,分为管理员和用户。用户的功能有:登录、注册、房屋信息、交流论坛、房屋咨询、在线客服、个人中心、我的收藏、我的发布、预约看房管理、在线签约管理、租赁评价管理、管理员的功能有:登录、个人中心、用户管......
  • Web数据库程序设计
    实验项目名称:实验三Web数据库程序设计一、实验目的通过使用JSP技术设计一个简单的数据库管理系统,了解展示页面和编辑页面的区别,掌握Web服务器与MySQL数据库的连接和数据库操作的方法,掌握使用Java语言编写JSP文件的方法。二、实验内容和基本要求从以下列举的四个数据库中,任选......