📜  DBMS中的域键范式

📅  最后修改于: 2021-09-28 10:17:37             🧑  作者: Mango

先决条件 – 范式,第 4 和第 5 范式,找到关系的最高范式
它基本上是数据库中有效组织数据的过程。基本上,进行规范化有两个目标,如下所示:

  1. 删除重复数据或简单地说,我们可以说删除冗余数据。
  2. 第二个是确保会有数据依赖。

可以通过以下步骤来实现标准化:

  1. 删除重复组或消除重复组。
  2. 消除或删除重复数据。
  3. 删除那些不依赖于 Key 的列。
  4. 多重关系应该独立隔离。
  5. 隔离语义相关的多重关系

有几种类型的范式,编号较低的范式总是比编号较高的范式更弱。例如,第一范式比第二范式弱。它们是:第 1、第 2、第 3、Boyce 代码范式、第 4、第 5 和域密钥范式。但是,在本文中,我们将仅讨论域键范式。

域密钥范式 (DKNF) –
没有硬性规则来定义高达 5NF 的范式。从历史上看,规范化过程和发现不良依赖关系的过程是通过 5NF 进行的,但已经可以定义更严格的规范形式,将附加类型的依赖关系和约束考虑在内。

DKNF背后的基本思想是指定将所有可能的依赖项和约束都考虑在内的范式。
简单来说,我们可以说 DKNF 是一种用于数据库规范化的范式,它要求数据库不包含除域约束和键约束之外的任何约束。

换句话说,只有当所有应该保持有效关系状态的约束和依赖可以简单地通过对关系强制执行域约束和关键约束时,才说关系模式在 DKNF 中。对于 DKNF 中的关系,通过简单地检查每个属性值是一个元组是否属于适当的域以及每个键约束都被强制执行,就可以非常直接地强制执行所有数据库约束。

使用DKNF的原因如下:

  1. 避免数据库中的一般约束不是明确的关键约束。
  2. 大多数数据库可以轻松测试或检查属性的关键约束。

然而,由于在 DKNF 关系中包含复杂约束的困难,其实际效用是有限的,这意味着它们没有实际使用,因为指定一般完整性约束可能非常困难。

让我们通过一个例子来理解这一点:

例子 –
考虑关系 CAR (MAKE, vin#) 和 MANUFACTURE (vin#, country),
其中 vin# 代表车辆识别号,“country”代表制造国的名称。

一般约束可能具有以下形式:

如果 MAKE 是“HONDA”或“MARUTI”,则 vin# 的第一个字符是“B” 如果制造国是“印度”
如果 MAKE 是“福特”或“ACCURA”,如果制造国是“印度”,则 vin# 的第二个字符是“B”。

除了编写程序或一般断言来测试它们之外,没有任何简化的方法来表示这些约束。因此,这样的程序需要强制执行适当的完整性约束。然而,将高级范式转换为域/键范式并不总是保持依赖关系的转换,而且这些并不总是可能的。