数据库的完整性

数据的正确性和相容性

数据的完整性和安全性是两个不同概念
数据的完整性
防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
防范对象:不合语义的、不正确的数据
数据的安全性
保护数据库防止恶意的破坏和非法的存取
防范对象:非法用户和非法操作
为维护数据库的完整性,DBMS必须:
1.提供定义完整性约束条件的机制
2.提供完整性检查的方法
3.违约处理

实体完整性

实体完整性定义
关系模型的实体完整性
CREATE TABLE中用PRIMARY KEY定义
单属性构成的码有两种说明方法
定义为列级约束条件
定义为表级约束条件
对多个属性构成的码只有一种说明方法
定义为表级约束条件

[例1]  将Student表中的Sno属性定义为码(1)在列级定义主码CREATE TABLE Student(Sno  CHAR(9)  PRIMARY KEY,Sname  CHAR(20) NOT NULL,     Ssex  CHAR(2) ,Sage  SMALLINT,Sdept  CHAR(20));
(2)在表级定义主码CREATE TABLE Student(Sno  CHAR(9),  Sname  CHAR(20) NOT NULL,Ssex  CHAR(2) ,Sage  SMALLINT,Sdept  CHAR(20),PRIMARY KEY (Sno));
[例2]将SC表中的Sno,Cno属性组定义为码CREATE TABLE SC(Sno   CHAR(9)  NOT NULL, Cno  CHAR(4)  NOT NULL,  Grade    SMALLINT,PRIMARY KEY (Sno,Cno)     /*只能在表级定义主码*/);

实体完整性检查和违约处理
插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:
1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改
2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

参照完整性

参照完整性定义
关系模型的参照完整性定义
在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
用REFERENCES短语指明这些外码参照哪些表的主码

例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码
[例3]  定义SC中的参照完整性CREATE TABLE SC(Sno    CHAR(9)  NOT NULL, Cno     CHAR(4)  NOT NULL,  Grade    SMALLINT,PRIMARY KEY (Sno, Cno),   /*在表级定义实体完整性*/FOREIGN KEY (Sno) REFERENCES Student(Sno),  /*在表级定义参照完整性*/FOREIGN KEY (Cno) REFERENCES Course(Cno)    /*在表级定义参照完整性*/);

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

  1. 拒绝(NO ACTION)执行
    默认策略

  2. 级联(CASCADE)操作

  3. 设置为空值(SET-NULL)
    对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值

[例4]  显式说明参照完整性的违约处理示例CREATE TABLE SC(Sno   CHAR(9)  NOT NULL,Cno   CHAR(4)  NOT NULL,Grade  SMALLINT,PRIMARY KEY(Sno,Cno),              FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE     /*级联删除SC表中相应的元组*/ON UPDATE CASCADE, /*级联更新SC表中相应的元组*/FOREIGN KEY (Cno) REFERENCES Course(Cno)                       ON DELETE NO ACTION  /*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/ON UPDATE CASCADE   /*当更新course表中的cno时,级联更新SC表中相应的元组*/);

用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求
RDBMS提供,而不必由应用程序承担

属性上的约束条件的定义

CREATE TABLE时定义
列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个布尔表达式(CHECK)
1.不允许取空值 [例5]  在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。CREATE TABLE SC(Sno  CHAR(9)  NOT NULL,  Cno  CHAR(4)  NOT NULL,   Grade  SMALLINT NOT NULL, PRIMARY KEY (Sno, Cno),  /* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了 * /);
2.列值唯一 [例6]  建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码CREATE TABLE DEPT(Deptno  NUMERIC(2),Dname  CHAR(9)  UNIQUE,/*要求Dname列值唯一*/Location  CHAR(10),PRIMARY KEY (Deptno));
3. 用CHECK短语指定列值应该满足的条件[例7]  Student表的Ssex只允许取“男”或“女”。CREATE TABLE Student(Sno  CHAR(9) PRIMARY KEY,Sname CHAR(8) NOT NULL,                     Ssex  CHAR(2)  CHECK (Ssex IN (‘男’,‘女’) ) ,                /*性别属性Ssex只允许取'男'或'女' */Sage  SMALLINT,Sdept  CHAR(20));

属性上的约束条件检查和违约处理

插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足
如果不满足则操作被拒绝执行

元组上的约束条件的定义

在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件

[例9]  当学生的性别是男时,其名字不能以Ms.打头。CREATE TABLE Student(Sno    CHAR(9), Sname  CHAR(8) NOT NULL,Ssex    CHAR(2),Sage   SMALLINT,Sdept  CHAR(20),PRIMARY KEY (Sno),CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')/*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/);
性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立;
当性别是男性时,要通过检查则名字一定不能以Ms.打头
CONSTRAINT 约束CONSTRAINT <完整性约束条件名>
[PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语]
[例10]  建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。CREATE TABLE Student(Sno  NUMERIC(6)CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),Sname  CHAR(20)  CONSTRAINT C2 NOT NULL,Sage  NUMERIC(3)CONSTRAINT C3 CHECK (Sage < 30),Ssex  CHAR(2)CONSTRAINT C4 CHECK (Ssex IN ( '男','女')),CONSTRAINT StudentKey PRIMARY KEY(Sno));
在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。
[例13]  修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40
可以先删除原来的约束条件,再增加新的约束条件ALTER TABLE StudentDROP CONSTRAINT C1;ALTER TABLE StudentADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999),ALTER TABLE StudentDROP CONSTRAINT C3;ALTER TABLE StudentADD CONSTRAINT C3 CHECK (Sage < 40);

数据库 - 数据库完整性相关推荐

  1. 数据库系统-数据库的完整性

    数据库系统-数据库的完整性 数据库完整性指的是数据的正确性和相容性 数据的正确性:指数据是符合现实世界语义.反映当前实际状况的 数据的相容性:指数据库同一对象在不同关系表中的数据是符合逻辑的 数据库管 ...

  2. 数据库--MYSQL高级(多表),数据库的完整性,约束,数据类型,多表实现 CRUD 操作

    数据库的完整性 用来保证存放到数据库中的数据是有效的,即数据的有效性和准确性确保数据的完整性 = 在创建表时给表中添加约束. 完整性的分类: - 实体完整性(行完整性): - 域完整性(列完整性): ...

  3. 数据库安全性 完整性

    01.安全性 专有名词解释 1.数据库管理员:拥有所有对象的所有权限,根据实际情况不同的权限授予不同的用户 2.用户:拥有自己建立的对象的全部的操作权限,可以使用GRANT,把权限授予其他用户 3.角 ...

  4. 数据库实验六 数据库的完整性

    实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...

  5. 数据库-数据库完整性

    目录 数据库完整性 实体完整性 · 定义实体完整性 · 实体完整性检查和违约处理 参照完整性 · 定义参照完整性 · 参照完整性检查和违约处理 用户定义的完整性 · 属性上的约束条件 · 元祖上的约束 ...

  6. 数据库题目之数据库的完整性

    一.选择题: 1.在数据库系统中,保证数据及语义正确和有效的功能是 (  ) A.并发控制  B.存取控制  C.安全控制  D.完整性控制 [答案:]D 2.关于主键约束以下说法错误的是( ) A. ...

  7. 数据库的安全性和数据库的完整性

    数据库的安全性 掌握:(1)TCSEC和CC的标准的主要内容 (2)DBMS的安全措施(用户身份鉴别.自主存取控制.强制存取控制技术.视图技术和审计技术.数据加密和加密传输) 难点: 强制存取控制机制 ...

  8. 数据库——数据库完整性

    数据库的完整性指的是数据的正确性和相容性 正确性指的是数据是符合显示世界语义.反映当前实际状况的 相容性指的是数据库同一对象再不同关系表的数据是符合逻辑的 为了维护数据库的完整性,数据库系统必须能够实 ...

  9. 数据库-数据库的常用术语

    数据库-原理部分 常用的术语 数据模型 数据模型(Data model)是数据库结构的基础,是用来描述数据的一组概念和定 义,数据模型主要有三个要素:数据结构.数据操作.数据约束条件. 数据结构:对象 ...

最新文章

  1. 题解报告:hdu1219AC Me
  2. Linux疑难杂症解决方案100篇(六)-SHELL编程条件判断和流程控制
  3. 定义装运点(shipping point)
  4. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
  5. [蓝桥杯][算法提高VIP]盾神与积木游戏(贪心)
  6. 贪心算法 0-1背包c语言,贪心算法0-1背包问题(算法实验代码).pdf
  7. 计算机图形学E6——倒水问题emm和OpenGL没啥关系
  8. 安卓中的布局属性详解
  9. 行为主义心理学在游戏领域的10年发展
  10. 利用kali Linux破解WiFi密码
  11. 统计学基础12-秩和检验
  12. 数据库对三大范式简单易懂的理解
  13. 牛客网练习赛24B 凤凰
  14. Android系统定位获取经纬度
  15. Springboot Vue个人简历网站系统java项目源码
  16. 第三届“传智杯”全国大学生IT技能大赛(初赛)-Java B组题解
  17. cobar是什么? 能做什么?
  18. opencv VideoWriter保存摄像头视频、本地视频等
  19. 数字IC-1.10 手撕代码之整数乘法和二范数(Verilog HDL数字加减法练习好帮手)
  20. .Net开发 开发工具使用vs C盘占用空间不断增大

热门文章

  1. SolidWorks三维机械设计软件超实用操作技巧(七)
  2. Android混淆配置
  3. 丝瓜调和蜂蜜轻易“祛斑”
  4. 马尔可夫聚类算法(MCL)
  5. 怎样调试计算机组成局域网,如何让两台电脑建立局域网?只要一根网线就可以做到,看后明白...
  6. 解决 Docker 容器时间与本地时间不一致的问题
  7. 【网络协议】万文长篇,带你深入理解 TCP;场景复现,掌握鲜为人知的细节(下)
  8. Adobe Flash player是什么,是不是上网一定要安装?
  9. 联想小新Lenovo ideapad 700 – i7 6700HQ+GTX950M+HD530+ALC235 黑苹果OpenCore 引导安装Ventura13.2
  10. python调用手机浏览器_使用python调用浏览器并打开一个网址的例子