发布网友 发布时间:2022-05-02 08:56
共1个回答
热心网友 时间:2022-04-10 15:04
实现完整性约束的方法依类别不同而不同。完整性约束可以分为两大类:静态约束和动态约束。
静态约束 静态约束是对数据库状态的约束,有可分为固定约束、隐含约束和显示约束。
固定约束 是数据模型固有的约束,如关系的属性是原子的,即满足INF的约束。固有约束在DBMS实现时已经考虑。
隐含约束 指隐含于数据模式中的约束,一般用数据定义语言(DDL)语句说明,并存于数据目录中。例如,域完整性约束、实体完整性以及参照完整性约束,都由相应的DDL语句说明。
显示约束 固有约束、隐含约束是最基本的约束,但概括不了所有的约束。数据完整性是多种多样的,且依赖于数据的语义与应用,这些约束只有显式地说明,故称显式约束。显式约束的说明一般有三种方法:①用过程说明约束。这种方法不约束的说明和检验交给应用程序,应用程序中可以插入一些过程,以检验数据库更新是否违反给定的约束,如果违反约束,则回滚事务。检验约束的过程一般用通用高级程序语言编写,可以表达各式各样的约束。这是一种普遍方法。②用语言说明约束。断言指数据库状态必须满足的逻辑条件。数据库完整性约束可以看成一系列断言的集合。为了表示约束,DBMS须提供断言说明语言。③用触发子表示约束。触发子是一个软件机制,其功能相当于WHENEVERTHEN,即一旦给定条件成立,系统就引发相应的动作。利用触发子可以表示约束,以违反约束作为条件,以违反约束的处理作为动作。动作不限于回滚事务,也可以给用户一个消息或过程。在系统中定义一批触发之后,就会监督数据库状态,一旦出现违反约束的更新,就会引发相应的动作。
动态约束 动态约束不是对数据库状态的约束,而是数据库从一个状态变为另一个状态时应遵守的约束,例如在更新职工表时,工资、工龄这些属性值一般只会增加,不会减少。动态约束一般也是显式说明的。在上述约束中,固有约束必然实施,隐含约束在大部分现代DBMS中基本实施或部分实施,显式和动态约束只在个别DBMS中实施。