数据完整性的完整性的约束
完整性约束主要有实体完整性约束、参照完整性约束、函数依赖约束、统计约束四类。
实体完整性 实体完整性是指一个关系中所有主属性(即主码的属性)不能取空值。所谓“空值”就是“不知道”或“无意义”的值。如主属性取空值,就说明某个不可标识的实体,这与现实世界的应用环境相矛盾,因此这个实体一定不是完整的实体。
参照完整性约束 参照完整性约束是指参照关系中外码的取值或者是空值(外码的每个属性均为空值)或者是取被参照关系中某个元组的主码值。下面举例说明。现有两个关系模式:学生(学号,姓名,性别,专业号,年龄)和专业(专业号,专业名)。在实现参照完整性时要注意以下几个问题:①外码是否可以接受空值。因为外码能否为空是依赖于应用环境的,如有两个关系模式分别为选修(学号,课程好,成绩)学生(学号,姓名,性别,年龄,所在系),选修关系中的外码“学号”不能为空,如果为空,说明某个不知学号的学生选修了某门课程,这与学校的应用环境不符。②删除被参照关系的原组时的考虑。有时需要删除被参照关系的某个原组,而参照关系中又有若干原组的外码值与被删除的被参照关系中的主码值相对应,这时要进行级联删除,即将参照关系中的所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除,如果参照关系同时又是另一个关系的被参照关系则这种级联删除应该级联删除应该级联下去。③修改被参照关系中主码时的考虑。遇到这种情况时,做法同删除被参照关系的元组类似,要做级联修改,既修改被参照关系中主码值的同时,用相同的方法修改参照关系中相应的外码值。
函数依赖约束 大部分函数依赖约束都是隐含在关系模式结构中,特别是规范化程度较高的关系模式(如3NF或BCNS)都由模式来保持函数依赖。在实际应用中,为了不使信息过于分离,一般不能过分地追求规范化。这样在关系的字段间就可以存在一些函数要显式地表示出来。
系统约束 即某个字段值与一个关系多个元组的统计值之间的约束关系。如,本部门经理的工资不得高于本部门职工的平均工资的5倍。其中职工的平均工资值是一个统计计算值。在许多场合,统计数据往往可以公开,而个别数据却是保密的,但是个别数据值可以从统计数据推断出来,所以要采取一定的防范措施防止数据泄密。