数据库的integrity (完整性)
数据库的integrity是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据; 数据库的security是保护数据库,防止其被恶意破坏和非法存取;
这里解释一下什么是数据库的integrity:
首先明确:
数据库的完整性 = data correctness(数据正确性) + data compat-ability(数据相容性).
其次要知道数据库的完整性包括实体完整性,参照完整性和用户自定义完整性.
先说data correctness和data compat-ability:
例如如学生的学号必须唯一(unique),性别只能是男或女,这是指的是数据的正确性(Correctness)即指data是符合现实世界语义,反应当前实际状况的; 又如有一张选课表(table)中包括学号,课程号,分数三个字段,现在有个新转来的学生要选课, 打算用DDL向选课表中insert一行数据,('0010', '01', null), 但他的学号0010只是教务处提前告诉他的,教务处还没来得及录入他的信息至教务系统,那这个向选课表中的insert操作就不应该执行成功,因为不能允许一个''不存在''的学生选课,这就是数据的相容性(data compat-ability),即指数据库同一对象在不同关系表中的数据是符合逻辑的。
再说实体完整性,参照完整性和用户自定义完整性:
实体完整性就是一张表的主键/主码; 参照完整性就是定义外键; 用户定义的完整性就是用not null, unique, check短语修饰字段;
(怎么定义实体完整性呢,比如在create table中用 primary key修饰一个字段,这种属于在列级定义约束条件(Constraint),还有一种是在声明完字段后写,primary key(Sno),primary key(Sno, Cno)这种定义属于在表级定义约束条件。多属性构成的码(码就是候选码的意思)只有一种说明方法,即定义表级约束条件;)
为了维护数据库的integrity,DBMS必须能实现如下功能:
1. 提供定义完整性约束条件的机制;
2.提供完整性检查的方法;
3.进行违约处理;
1. 怎么定义完整性约束(Integrity Constraint)条件?
如在create table的时候,你用unique, not null, primary key, 或者 foreign key去修饰某个字段,这就是Integrity Constraint, 也就是说一般Integrity Constraint都是相对某个字段/属性来说的,如性别字段只能为男或女,学号唯一,这都是完整性约束条件。
2. 什么是提供完整性检查的方法?
DBMS中检查data是否满足Integrity Constraint条件的机制称为完整性检查,一般在DML语句执行后开始检查,也可以在事务提交(transaction commit)时检查。检查这些操作执行后DB中的data是否违背了完整性约束条件。你可能好奇什么是transaction,这个将在后面中讲述.
3. 什么是进行违约处理?
进行完整性检查的时候,若DBMS发现用户的操作违背了完整性约束条件(Integrity Constraint),DBMS将采取一定的动作,如拒绝执行操作(no action)或cascade执行其他操作.
以上