数据库系统概论 | 您所在的位置:网站首页 › 数据完整性约束的作用对象有哪些 › 数据库系统概论 |
文章目录
第五章 -- 数据库完整性5.1 实体完整性5.1.1 定义实体完整性5.1.2 实体完整性检查和违约处理
5.2 参照完整性5.2.2 参照完整性检查和违约处理
5.3 用户定义的完整性5.3.1 属性上的约束条件1.属性上约束条件的定义义返发(1)不允许取空值(2)列值唯一(3)用CHECK短语指定列值应该满足的条件
2.属性上约束条件的检查和违约处理
5.3.2 元组上的约束条件1. 元组上约束条件的定义2. 元组上约束条件的检查和违约处理
5.4 完整性约束命名子句1.完整性约束命名子句2.修改表中的完整性限制
5.5 域中完整性限制
第五章 – 数据库完整性
数据库的完整性是指数据的正确性和相容性。 数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。数据库的完整性与安全性的区别: 数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。 完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。数据的安全性是保护数据库防止恶意破坏和非法存取。 安全性控制的防范对象是非法用户和非法操作,防止他们对数据库数据的非法存取。为维护数据库的完整性,数据库管理系统必须能够实现如下功能: 提供定义完整性约束条件的机制 完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。提供完整性检查的方法进行违约处理 5.1 实体完整性 5.1.1 定义实体完整性关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。 对单属性构成的码有两种说明方法: 一种是定义为列级约束条件, CREATE TABLE Student( Sno CHAR(9) PRIMARY KEY , Sname CHAR(20) NOT NULL , Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );另一种是定义为表级约束条件(表级完整性定义在所有字段后面)。 CREATE TABLE Student( Sno CHAR(9) , Sname CHAR(20) NOT NULL , Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY ( Sno ) );对多个属性构成的码只有一种说明方法,即定义为表级约束条件。 CREATE TABLE SC( Sno CHAR(9) NOT NULL , Cno CHAR(4) NOT NULL , Grade SMALLINT, PRIMARY KEY ( Sno, Cno ) ); 5.1.2 实体完整性检查和违约处理用 PRIMARY KEY 短语定义了关系的主码后,每当用户程序对基本表插入一条记录或对主码列进行更新操作时,关系数据库管理系统将按照实体完整性规则自动进行检查。 包括: (1)检查主码值是否唯一,如果不唯一则拒绝插入或修改。(主码唯一)(2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。(主码不能为空)从而保证了实体完整性。 检查记录中主码值是否唯一的一种方法是进行全表扫描,全表扫描是十分耗时的,为了避免对基本表进行全表扫描,关系数据库管理系统一般都在主码上自动建立一个索引。使用索引检查主码是否唯一。 5.2 参照完整性关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY 短语定义哪些列为外码,用REFERENCES 短语指明这些外码参照哪些表的主码。 在表级定义参照完整性 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 ) ); 5.2.2 参照完整性检查和违约处理参照完整性将两个表中的相应元组联系起来了。 对被参照表和参照表进行增、删、改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。
对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值。 [例5.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 # 删除Student中的元组时,级联删除SC中对应的元组 ON UPDATE CASCADE, FOREIGN KEY ( Cno ) REFERENCES Course( Con ) ON DELETE NO ACTION # 删除Course中的元组时,造成与SC表不一致,拒绝删除 ON UPDATE CASCADE ); 5.3 用户定义的完整性 5.3.1 属性上的约束条件 1.属性上约束条件的定义义返发在 CREATE TABLE 中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制,包括: 列值非空(NOT NULL)。列值唯一(UNIQUE)。检查列值是否满足一个条件表达式(CHECK 短语)。 (1)不允许取空值[例5.5] 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。 CREATE TABLE SC( Sno CHAR(9) NOT NULL , Cno CHAR(4) NOT NULL , Grade SMALLINT NOT NULL , ... ); (2)列值唯一[例5.6]建立部门表 DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码。 CREATE TABLE DEPT( Deptno NUMERIC(2), Dname CHAR(9) UNICODE NOT NULL , Location CHAR(10), PRIMARY KEY (Deptno) ); (3)用CHECK短语指定列值应该满足的条件[例5.7] Student表的Ssex只允许取“男”或“女”。 CREATE TABLE Student( Sno CHAR(9) PRIMARY KEY , Sname CHAR(20) NOT NULL , Ssex CHAR(2) CHECK ( Ssex IN ('男', '女') ), Sage SMALLINT, Sdept CHAR(20) );[例5.8] SC表的 Grade的值应该在0和100之间。 CREATE TABLE SC( Sno CHAR(9) NOT NULL , Cno CHAR(4) NOT NULL , Grade SMALLINT CHECK ( Grade>=0 AND Grade |
CopyRight 2018-2019 实验室设备网 版权所有 |