一、数据库的完整性约束 --- 数据的正确性和相容性
注:数据的完整性和安全性是两个不同的概念。数据库的完整性是为了防止数据库中含有不符合语义的的数据,也就是防止数据库中含有不正确的数据。数据库中的安全性是为了保护数据库防止恶意的破坏和非法的存取。
二、为维护数据库的完整性,DBMX必须能够
1、提供定义完整性约束条件的机制
完整性约束条件也称为完整性规则。sql使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。这些完整性一般有sql的ddl语句来实现。他们作为数据库模式的一部分存入数据字典。
2、提供完整性检查的方法
DBMS 中检查数据是否满足完整性约束条件的机制称为完整性检查。一般在insert,update,delete语句执行后开始检查,也可以在事务提交后检查。检查这些操作后数据库中的数据是否违背了完整性约束。
3、违约处理
DBMS若发现用户的操作违背了完整性约束条件,就会采取一定的动作,如拒绝(no action)执行该操作,或级联(cascade)执行其他操作,进行违约处理以保证数据的完整性。
三、实体完整性 --- 在create table 中用primary key定义。对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。对多个属性构成的码只有一种说法,即定义为表级约束条件。
1、若属性(一个或一组属性)A是基本关系R的主属性,则A不能取空值; 所谓空值 就是 不知道或不存在的值
2、对于实体完整性规则说明如下:
①实体完整性规则是针对基本关系而言的,一个基本表通常对应现实世界的一个实体集,如学生关系对应学生的集合
②现实中的实体是可区分的,即他们具有唯一标识;
③相应的,关系模型中以主码作为唯一标识,
④主码中的属性即主属性不能取空值,
四、参照完整性 --- 关系模型中的实体之间的联系用关系来表示
eg1:学生实体和专业实体可以用下面的关系来表示
学生(学号,姓名,年龄,性别,专业号);
专业(专业号,专业名称)
这两种关系存在属性的引用,学生关系中的“专业号”引用专业关系中的主码“专业号”。被参照的属性必须是确实存在的。即专业关系中又该专业的记录。
eg2:学生、课程、学生与课程之间的多对多联系
学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)
注:不仅两个和两个以上的关系间可以存在引用关系,同以关系内部属性间也可能存在引用关系。
eg:在学生(学号,姓名,性别,专业号,年龄,班长)关系中,班长参照主码学号
1、参照完整性规则 --- 若属性(或属性组)F是基本关系R的外码,它与基本关系s的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中的每个元组在F上的值必须:
或者取空值(F的每一个属性值为空)
或者等于S中某个元组的主码值
五、用户定义的完整性 --- 针对某一具体应用的数据必须满足的语已要求
注:任何关系数据库系统都应该支持实体完整性和参照完整性
1、属性上的约束条件定义
列值非空(not null)
列值唯一(unique短语)
检查列值是否满足一个布尔表达式(check 短语)