求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

数据完整性查看源代码讨论查看历史

跳转至: 导航搜索
  数据完整性

存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性

简介

数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。数据完整性因此而提出。本章将讲述数据完整性的概念及其在SQL Server 中的实现方法。数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为四类:实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)、用户自定义完整性(User-definedIntegrity)。数据库采用多种方法来保证数据完整性,包括外键、约束、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。(1)域完整性:是指一个列的输入有效性,是否允许为空值。强制域完整性的方法有:限制类型(通过设定列的数据类型)、格式(通过CHECK约束和规则)或可能值的范围(通过FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规则)。如:学生的考试成绩必须在0~100之间,性别只能是“男”或“女”。(2)实体完整性:是指保证表中所有的行唯一。实体完整性要求表中的所有行都有一个唯一标识符。这个唯一标识符可能是一列,也可能是几列的组合,称为主键。也就是说,表中的主键在所有行上必须取唯一值。强制实体完整性的方法有:索引、UNIQUE约束、PRIMARY KEY约束或IDENTITY属性。如:student表中sno(学号)的取值必须唯一,它唯一标识了相应记录所代表的学生,学号重复是非法的。学生的姓名不能作为主键,因为完全可能存在两个学生同名同姓的情况。(3)参照完整性:是指保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。外键值将引用表中包含此外键的记录和被引用表中主键与外键相匹配的记录关联起来。在输入、更改或删除记录时,参照完整性保持表之间已定义的关系,确保键值在所有表中一致。这样的一致性要求确保不会引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。参照完整性是基于外键与主键之间的关系。例如学生学习课程的课程号必须是有效的课程号,score表(成绩表)的外键cno(课程号)将参考course表(课程表)中主键cno(课程号)以实现数据完整性

评价

参照完整性约束 参照完整性约束是指参照关系中外码的取值或者是空值(外码的每个属性均为空值)或者是取被参照关系中某个元组的主码值。下面举例说明。现有两个关系模式:学生(学号,姓名,性别,专业号,年龄)和专业(专业号,专业名)。在实现参照完整性时要注意以下几个问题:①外码是否可以接受空值。因为外码能否为空是依赖于应用环境的,如有两个关系模式分别为选修(学号,课程好,成绩)学生(学号,姓名,性别,年龄,所在系),选修关系中的外码“学号”不能为空,如果为空,说明某个不知学号的学生选修了某门课程,这与学校的应用环境不符。②删除被参照关系的原组时的考虑。有时需要删除被参照关系的某个原组,而参照关系中又有若干原组的外码值与被删除的被参照关系中的主码值相对应,这时要进行级联删除,即将参照关系中的所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除,如果参照关系同时又是另一个关系的被参照关系则这种级联删除应该级联删除应该级联下去。③修改被参照关系中主码时的考虑。遇到这种情况时,做法同删除被参照关系的元组类似,要做级联修改,既修改被参照关系中主码值的同时,用相同的方法修改参照关系中相应的外码值。[1]

参考文献