1 / 21

10. 数据库完整性

10. 数据库完整性. 数据库是否具备完整性关系到数据库系统能否真实地反映现实世界。完整性措施地防范对象是不合语义的数据存入数据库中。 例: 以上两个表的数据库是否完整?. 10.1 完整性约束条件. 完整性约束条件分类. 对象状态. 动态列级约束. 动态元组约束. 动态关系约束. 动态. ⑷. ⑸. ⑹. 静态. ⑴. ⑵. ⑶. 静态列级约束. 静态元组约束. 静态关系约束. 对象粒度. 列. 元组. 关系. 10.1 完整性约束条件. 静态列级约束(最常用的约束) 对数据类型的约束

larya
Download Presentation

10. 数据库完整性

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 《数据库系统概论》讲义 10. 数据库完整性 • 数据库是否具备完整性关系到数据库系统能否真实地反映现实世界。完整性措施地防范对象是不合语义的数据存入数据库中。 • 例: • 以上两个表的数据库是否完整?

  2. 《数据库系统概论》讲义 10.1 完整性约束条件 • 完整性约束条件分类 对象状态 动态列级约束 动态元组约束 动态关系约束 动态 ⑷ ⑸ ⑹ 静态 ⑴ ⑵ ⑶ 静态列级约束 静态元组约束 静态关系约束 对象粒度 列 元组 关系

  3. 《数据库系统概论》讲义 10.1 完整性约束条件 • 静态列级约束(最常用的约束) • 对数据类型的约束 • 数据类型(字符型、数值型、日期型、布尔型) • 长度(不同DBMS对某一类型的长度约束不同) • 单位(数据库中同一列上的数据的单位应当一致) • 精度(长整型、短整型、单精度型、双精度型) • 对数据格式约束 • 日期格式(YY.MM.DD、MM.DD.YY) • 编码格式(学号:022704、郭项亮,课程号:315.22507、数据库技术) • 对取值范围或取值集合的约束 • 年龄(14-100)、性别(男或女)

  4. 《数据库系统概论》讲义 10.1 完整性约束条件 • 静态列级约束(最常用的约束) • 对空值的约束 • 允许还是不允许在某一字段上取空值; • 其他约束 • 该列上的值唯一 • 例:create table student (sno char(5) not null like “02%”, sname char(8) not null, sbirth date, ssex char(2) check(ssex=‘男’ or ssex=‘女’ ))

  5. 《数据库系统概论》讲义 10.1 完整性约束条件 • 静态元组约束 • 规定元组各个列之间的约束关系 • 可在表级约束中进行 • 例:create table student (sno char(5) not null like “02%”, sname char(8) not null, sbirth date, ssex char(2) check(ssex=‘男’ or ssex=‘女’ ), gkkm1cj int,gkkm2cj int, gkkm3cj int,gkkm4cj int, check (gkkm1cj+gkkm2cj+gkkm3cj+gkkm4cj>=500) )

  6. 《数据库系统概论》讲义 10.1 完整性约束条件 • 静态关系约束 • 实体完整性 • 定义主键 • 主键上的值非空且唯一 • 参照完整性 • 定义外键 • 外键要参照其他表(参照的表名和列名) • 函数依赖约束 • 哪些数据项归结为一张表 • 统计约束 • 某些字段的统计关系

  7. 《数据库系统概论》讲义 10.1 完整性约束条件 • 静态关系约束 • 例:create table student (sno char(5) not null like “02%” , sname char(8) not null, sbirth date, ssex char(2) check(ssex=‘男’ or ssex=‘女’ ), gkkm1cj int,gkkm2cj int,gkkm3cj int,gkkm4cj int, sdeptno char(2), primary key (sno), foreign key (sdeptno) references depts(deptno), check (gkkm1cj+gkkm2cj+gkkm3cj+gkkm4cj>=500) )

  8. 《数据库系统概论》讲义 10.1 完整性约束条件 • 动态列级约束 • 修改列定义时的约束 • 修改某一列的类型时的处理规则(字符型修改为数值型的转换) • 修改某一列的约束时的处理规则(允许空值修改为不允许空值,空值的转换规则) • 修改列值时的约束 • 修改列值时需要参照其旧值,新旧值之间满足某种关系 • 动态列级约束系统支持程度有限,要靠编写程序来维护。 • 编写导入导出程序进行 • 靠触发器完成

  9. 《数据库系统概论》讲义 10.1 完整性约束条件 • 动态元组约束 • 修改元组值时的约束 • 修改元组值时需要参照其旧值,新旧值之间满足某种关系 • 动态元组约束系统支持程度有限,要靠编写程序来维护。 • 编写导入导出程序进行 • 靠触发器完成

  10. 《数据库系统概论》讲义 10.1 完整性约束条件 • 动态关系约束 • 关系变化前后的约束 • 修改某关系或关系集合要符合业务的一致 • 动态关系约束要靠事务机制来维护。 • 事务 • 并发 • 恢复

  11. 《数据库系统概论》讲义 10.2 完整性控制 • DBMS的完整性控制机制具有三个方面功能 • 定义功能 • 由create table时定义 • 由触发器定义 • 由事务定义 • 检查功能 • 立即执行约束(create table、触发器) • 延迟执行约束(事务) • 动作功能 • 拒绝执行(create table、事务回退) • 自定义动作(触发器)

  12. 《数据库系统概论》讲义 10.2 完整性控制 • 一条完整性规则的五个方面 • D(Data):约束作用的数据对象; • O(Operation):触发完整性检查,立即检查还是延迟检查; • A(Assertion):必须满足的断言或语义约束,这是规则的主体; • C(Condition):选择A作用的数据对象值的谓词; • P(Procedure):违反完整性规则触发的过程。

  13. 《数据库系统概论》讲义 10.2 完整性控制 • 例:学号不能空约束 • D:约束作用的数据对象为sno; • O:立即检查还是延迟检查,插入或修改student 元组时; • A:sno 不能空; • C:作用于所有元组上,没有对象值的谓词; • P:违反完整性规则触发的过程,拒绝执行。 • 例:教授工资不低于1000元约束 • D:约束作用的数据对象为sal; • O:插入或修改职工 元组时; • A:sal >=1000; • C:职称=“教授”; • P:违反完整性规则触发的过程,拒绝执行。

  14. 《数据库系统概论》讲义 10.2 完整性控制 • 关系系统中的三类完整性 • 实体完整性 • 参照完整性 • 用户自定义完整性 关于参照完整性可以继续探讨

  15. 《数据库系统概论》讲义 10.2 完整性控制 • 实现参照完整性的几个问题 • 外码能否接受空值(某些情况下,外码取空值能对应实际语义,如学生的系别取空值表示没有分配系); • 被参照关系中删除元组时的问题 • 级联删除(cascades) • 受限删除(restricted) • 置空值删除(nullifies) • 被参照关系中修改元组时的问题 • 级联修改 • 拒绝修改 • 置空值修改

  16. 《数据库系统概论》讲义 10.2 完整性控制 • 实现参照完整性的几个问题 • 在参照关系中插入元组时的问题 • 受限插入 • 递归插入 • 在参照关系中修改元组时的问题 • 受限修改 • 递归插入 • 修改关系中主码 • 不允许修改主码 • 允许修改主码

  17. 《数据库系统概论》讲义 10.2 完整性控制 • CREATE TABLE [schema.]tablename (colname dadatype [DEFAULT 值|NULL] [列级约束|表级约束][,colname…]); 列级约束:NOT NULL 或[CONSTRAINT 约束名] UNIQUE|PRIMARY KEY|CHECK(条件) |REFRENCES 表[(col,…)][ON DELETE CASCADE]] 表级约束:[CONSTRAINT 约束名] UNIQUE(col,col…) |PRAMARY KEY (col,col…)|CHECK(条件) |FOREIGN KEY (col,col…) REFRENCES 表 [(col,…)] [ON DELETE CASCADE]

  18. 《数据库系统概论》讲义 10.3 触发器和存储过程 • 非过程的SQL不具备计算的完整性。ORACLE引入PL/SQL,INFORMIX引入SPL,SQLSERVER引入T-SQL.过程SQL支持内存驻留变量、条件和循环结构、过程和函数等。 • 一个用过程SQL编写的函数在服务器上执行时被称为存储过程,由Create Function语句记录在服务器上的数据库目录表中。 • 触发器是可以在任意事件发生时执行的过程性SQL语句块。触发器用于实现定制的约束或缺省行为。 • 用户定义函数(UDF)是用过程性SQL(或C、Java)写的函数,可以像交互式SQL中的内部函数一样被调用。

  19. 《数据库系统概论》讲义 10.3 触发器和存储过程 • 触发器类似于过程和函数,是一个程序块,但过程是被显式调用,而触发器是当事件发生时,被自动调用(触发),且触发器不接受参数。 • 触发器能引起一个动作的执行,它可以用来实现过程性约束.建表时创建的约束称为非过程性约束。 • Sybase数据库最早支持触发器,现在Oracle、DB2 UDB、Informix、SQL Server都支持,但Core SQL-99不支持。 • 定义触发器动作时,各个产品用自己的过程性语言。Oracle使用pl/sql、c、java,DB2使用c、java。

  20. 《数据库系统概论》讲义 10.3 触发器和存储过程 • 例:create or replace trgger t_c after update on coustomers for each row when (new.discnt>15.0) declare v1 number; v2 number; begin v1 :=:old.discnt; v2 :=:new.discnt; dbms_output.put_line(‘old:’||to_char(v1) ||’new:’||to_char(v2)); end; 说明:对表coustomers的修改操作发生后,把折扣率大于15的旧折扣率和新折扣率列出.

  21. 《数据库系统概论》讲义 10.作业 • P-313 • 3. • 4. • 5. • 6.

More Related