数据完整性规则2025年4月6日 | 阅读 5 分钟 在本文中,我们将详细了解数据完整性规则的概念。 引言关系数据库完整性规则对于良好的数据库设计非常重要。数据完整性指的是数据库中数据的正确性和准确性。维护数据完整性尤为重要,因为共享多用户数据库可能包含数百万条数据记录,这些数据代表真实世界的一些有价值的信息。对于所有这些信息的拥有者来说,数据库是一项宝贵的资产。 数据完整性规则提供了一种机制,用于确保数据库中数据的正确性和准确性。这些规则限制授权用户执行导致数据一致性丢失或损坏的操作。 可能影响数据完整性的一些常见原因是无效数据输入、由于断电导致数据库部分更新等。 关系数据库提供了各种通用的完整性规则,这些规则适用于每个数据库,无论其内容或适用范围如何。它们是
需要注意的是,实体完整性规则应用于元组,而参照完整性规则应用于关系。 实体完整性规则为了解释这一点,我们以Bank_Account关系为例。
在上述关系中,Acc_No是Bank_Account关系的主键。一个人可以在一家银行拥有多个账户,余额不同。 现在假设我们银行有不同的客户,两个客户可能名字相同,但账号不同。 如果两个同名客户的主键Acc_No被设为null,那么就会产生问题。例如:假设客户Anjali的余额为10000卢比,另一个同名客户Anjali的余额为78000卢比。现在,如果作为此关系主键的Acc_No为null,那么这些客户进行的交易就会导致问题。 如果余额为78000卢比的Anjali想要取走15000卢比,那么交易可能会发生在余额为10000卢比的客户Anjali的余额上,因为两个客户Anjali的主键Acc_No都为Null。所以这个交易可能导致余额为(-5000)卢比。 某些未定义账户透支的部分信息并不能真实反映相关客户的信息,也无法进行正确的计算或与数据库中维护的其他关系进行链接。 现在考虑另一个例子,一个使用关系DIRECTORY表示的电话簿,该关系具有F_Name、L_Name、Address和Phone_No等属性。假设主键是F_Name、L_Name等属性的组合。 让我们考虑一个目录关系的例子
序号为2、3和4的三个元组都不能向用户表示任何有用的信息,也不能指代任何真实世界的元组出现。因为在关系中,我们无法获得这些元组的正确信息。 从上述两个例子可以清楚地看出,涉及空值的操作有时会导致不可预测的结果。因此,为了唯一标识一个元组,主键属性不能为空,这基本上就是实体完整性规则。 参照完整性规则参照完整性规则规定,如果一个关系中存在外键,则:
假设我们有两个关系 Department 和 Employee。Department 关系包含 Dept_id、D_Name、Mgr_Id,其中 Dept_Id 作为主键,Mgr_Id 作为参照 Employee 关系中 Emp_id 属性的外键。Emp_Id、Dept_Id 和 E_Name、Address 是 Employee 关系的属性,其中 Emp_Id 作为主键,Dept_Id 作为参照 Department 关系中 Dept_id 的外键。 让我们考虑一个Department关系的例子
让我们考虑一个Employee关系的例子
在Employee关系中,Dept_Id的属性是一个外键,因此其值必须与Department关系中的那些Dept_Id相对应,否则某些员工的信息将包含一个未识别的部门。例如:D105不存在,因此不允许在Employee关系中输入此元组。 同样,Mgr_Id属性是一个外键,因此公司中的每个经理都拥有一个个人Emp_Id,并且Employee关系中包含经理属性的相应记录条目必须与该人员的ID匹配,否则某些部门的经理将根本没有被雇用。 我们也可以在外键属性中分配空值,如Employee关系中员工E105所示,他刚被任命,尚未被分配任何部门。 因此,参照完整性规则用于在满足参照完整性所需的所有条件时,维护两个关系元组之间的一致性。 域完整性规则域是一组原子值。原子意味着域中的每个值都是不可分割的。此规则指定分配给每个属性的值必须是该属性域中的原子值。与域关联的数据类型包括实数和整数的数值数据类型、字符数据类型、日期数据类型、时间数据类型等。域类型的定义必须尽可能精确,以避免违反域完整性规则。 以下是域完整性规则的各种示例
域完整性规则的约束由数据库管理系统执行。然而,即使使用这些规则,某些类型的错误也无法检测到。例如:如果老师给学生分配了“G”而不是“H”等级,因为这两个键彼此相邻。域完整性规则不提供对这类错误的检查。因此,域完整性机制只能确保数据在指定的域中。 下一主题将ER模型转换为关系 |
我们请求您订阅我们的新闻通讯以获取最新更新。