时间:2022-11-18 20:30:01 | 来源:信息时代
时间:2022-11-18 20:30:01 来源:信息时代
数据库完整性类型 : 在不同级别的粒度上,数据库完整性的实现。由此,数据库完整性分为域完整性、实体完整性、参照完整性、用户定义完整性和其他完整性。域完整性定义了关系属性的值域: 实体完整性保证了各记录的可区分性: 参照完整性确保了维护关系之间的联系的必要性; 用户定义完整性是针对某一应用环境的完整性约束条件; 其他完整性包括函数依赖与多值依赖等主要用于规范化数据库设计。
1.域完整性
域完整性(domain integrity)要求属性值必须取自其对应的值域; 一个属性值能否为空值由其语义决定。域完整性约束是最基本的约束。一个域是一个给定属性的所有可能值的集合。域完整性约束是用来定义这些合法值的规则。
数据类型在数据模型中是一种比较便捷的实现方式,因此,在确定系统中的域约束时,选择一个合适的逻辑类型来定义域是第一步要做的事情。但要注意对一些需要精确定义域的地方,还要附加规则。 例如, 若选择一个Integer(取值范围-32768~32767)数据类型作为年龄域定义就不合适,因在实际情况中,年龄的取值范围在0~150之间已足够了。
域完整性还要考虑“一个域是否应当包含未知的或者不存在的值”。需要确定这些未知的或者不存在的值能否被系统所接受。
域完整性要尽可能具体地定义由一个域所描述的值的集合。最简单的描述一个域的方式是列举域的所有值。例如,Weekends 域可以由集合{“Saturday”,“Sunday”}来描述。当然大多数域不能预先列举其所有值,所以要按域的实际情况来定义。有时候列举一个或多个规则来约束域成员会更加容易一些。
域完整性往往也是用户定义完整性的不可或缺的一部分。
2. 实体完整性
实体完整性(entity integrity)指明主键值必须是唯一的,且其任何组成部分都不能是空值。
定义实体完整性的必要性是: 关系对应于现实世界中的实体,而现实世界中实体是可区分的,亦即每个实体应具有唯一性标志。在关系模型中,是以主键值作为唯一标志的。若主键值为空值,则说明这个实体无法标志,即不可区分,这显然是错误的。例如,在关系“项目成员(项目、部门、职员姓名)”中,“职员姓名”属性为主键(假设职员不会重名),则“职员姓名”不能取空值。
又如,职员销售关系“销售(工号、商品号、销量)”中,“工号、商品号”为主键,则“工号”和“商品号”两个属性都不能取空值。
3. 参照完整性
参照完整性(referential integrity)指关系之间的引用应该遵守的规则,它用于维持关系的元组之间的一致性。参照完整性规则定义参照关系的外键与被参照关系的主键之间的引用关系。
对于永久关系的相关表,在更新、插入或删除记录时,如果只改其中一个表的记录,而不改另外一个表的记录,就会影响数据的完整性。
在数据库设计中,实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的。这样就存在着关系与关系间的引用。例如,职员实体和部门实体可以用下面的关系表示,其中主键用“*”标识:
职员(工号*,姓名,性别,部门号,年龄)
部门(部门号*,部门名,部门负责人)
这两个关系之间存在着属性的引用,即职员关系引用了部门关系的主键“部门号”。显然,部门关系中的“部门号”值必须是确实存在的部门的部门号,即部门关系中有该部门的记录,亦即职员关系中的“部门号”属性的取值需要参照部门关系的“部门号”属性的取值。在这里,职员关系的“部门号”属性与部门关系的主键“部门号”相对应,因此“部门号”属性是职员关系的外键。这里部门关系是被参照关系,职员关系为参照关系,见图1(a)。
(a)
(b)
图1 关系的参照图