【数据库系统概论】第5章-数据库完整性

文章目录

    • 引言
    • 5.1 实体完整性
    • 5.2 参照完整性
    • 5.3 用户定义的完整性
    • 5.4 完整性约束命名子句
    • 5.6 触发器

引言

  • 数据库的完整性是指数据的正确性相容性
    正确性:符合现实语义、反映当前实际情况。性别必须为男或女。
    相容性:数据库同一对象在不同关系表中的数据是符合逻辑的。学生所在院系必须是已成立的。
  • 数据库完整性和安全性的区别
    完整性防止数据库中存在不符合语义的数据;安全性防止数据库被恶意破坏和非法存取。
  • 为了维护完整性,DBMS必须实现如下功能

1.提供定义完整性约束的机制
2. 提供完整性检查的方法
3. 进行违约处理

5.1 实体完整性

  1. 定义方法
create table student(
	sno char(9) primary key, // 在列级定义主码
	...
);
create table student(
	sno char(9) 
	...
	primary key(sno) // 在表级定义主码
);
create table sc(
	sno char(9) 
	cno char(10)
	...
	primary key(sno,cno) // 多属性主码只能在表级定义主码
);
// 非创建表时创建主码
alter table student 
add constraint PK_STU 
primary key clustered (sno asc)
  1. 完整性检查
    时机:执行insert,或对主码列update时
    方法:全表扫描,一一检查;可建立索引减少时间
  2. 违约处理
    (1)主码值是否唯一,不唯一则拒绝insert或update
    (2)主码的各个属性是否为NULL,有一个为空就拒绝insert或update

5.2 参照完整性

  1. 定义
    Foreign key(cno) references course(cno)
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINTPRIMARY KEY (Sno, Cno)/*表级实体完整性*/
FOREIGN KEY (Sno) REFERENCES Student(Sno)/*表级定义参照完整性*/
FOREIGN KEY (Cno) REFERENCES Course(Cno) 
/*表级定义参照完整性*/
);
  1. 完整性检查
    【数据库系统概论】第5章-数据库完整性_第1张图片
  2. 违约处理
    【数据库系统概论】第5章-数据库完整性_第2张图片
    【数据库系统概论】第5章-数据库完整性_第3张图片
    【数据库系统概论】第5章-数据库完整性_第4张图片
    【数据库系统概论】第5章-数据库完整性_第5张图片
    on delete/update 是对被参照表的属性说明的,也就是主键表(被参照表)的主键列值更新后如何影响外键表的对应记录。
    特别的:NO ACTION是指如果外键表存在对应记录,主键表不能执行动作。

5.3 用户定义的完整性

  1. 定义
    (1)属性上的约束(列级)

    // not null
    CREATE TABLE SC
    (Sno CHAR(9) NOT NULL,
    Cno CHAR(4) NOT NULL,
    Grade SMALLINT NOT NULLPRIMARY KEY (Sno, Cno);
    // unique + not null
    CREATE TABLE DEPT
    (Deptno NUMERIC(2),
    Dname CHAR(9) UNIQUE NOT NULL,
    Location CHAR(10)PRIMARY KEY (Deptno)
    );
    // check
    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)
    );
    

    (2)元组上的约束
    元组级的限制(表级约束)可以设置不同属性之间的取值的相互约束条件

    CREATE TABLE Student
    (Sno CHAR(9),
    Sname CHAR(8) NOT NULL,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20) default 18// 列默认
    PRIMARY KEY (Sno)CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')
    /*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/
    )
  2. 检查时机
    INSERT元组或UPDATE属性值时,
    RDBMS自动检查

  3. 违约处理
    不满足则拒绝执行

5.4 完整性约束命名子句

给约束命名之后,方便删除等

  1. 命名约束
    【数据库系统概论】第5章-数据库完整性_第6张图片
    【数据库系统概论】第5章-数据库完整性_第7张图片
    【数据库系统概论】第5章-数据库完整性_第8张图片

  2. 修改约束
    【数据库系统概论】第5章-数据库完整性_第9张图片

    alter table student add constraint df_sex default ('男') for sex
    

5.6 触发器

  • 格式
    【数据库系统概论】第5章-数据库完整性_第10张图片
    【数据库系统概论】第5章-数据库完整性_第11张图片
    【数据库系统概论】第5章-数据库完整性_第12张图片
    【数据库系统概论】第5章-数据库完整性_第13张图片
    【数据库系统概论】第5章-数据库完整性_第14张图片
    【数据库系统概论】第5章-数据库完整性_第15张图片
    【数据库系统概论】第5章-数据库完整性_第16张图片
  • 两个内置临时表,很关键
    【数据库系统概论】第5章-数据库完整性_第17张图片
    【数据库系统概论】第5章-数据库完整性_第18张图片
    注意书上代码和实际数据库软件的实现不一样。

你可能感兴趣的:(数据库,数据库,oracle)