DBMS中的函数依赖:定义、类型和示例

什么是函数依赖?

函数依赖 (FD) 是在数据库管理系统 (DBMS) 中确定一个属性相对于另一个属性的关系的约束。函数依赖有助于维护数据库中数据的质量。它在区分好的和坏的数据库设计方面起着至关重要的作用。

函数依赖用箭头“→”表示。X 对 Y 的函数依赖表示为 X → Y。让我们通过示例在 DBMS 中理解函数依赖。

示例

员工编号 员工姓名 薪资 城市
1 达纳 50000 旧金山
2 弗朗西斯 38000 伦敦
3 安德鲁 25000 东京

在此示例中,如果我们知道员工编号的值,我们就可以获得员工姓名、城市、薪水等。通过此,我们可以说城市、员工姓名和薪水在功能上依赖于员工编号。

关键术语

以下是数据库中函数依赖的一些关键术语

关键术语 描述
公理 公理是一组用于推导关系数据库上所有函数依赖的推理规则。
分解 这是一条规则,它表明如果你有一个表似乎包含两个由相同主键确定的实体,那么你应该考虑将它们分解成两个不同的表。
依赖项 它显示在函数依赖图的右侧。
决定因素 它显示在函数依赖图的左侧。
联合 它表明,如果两个表是分开的,并且主键相同,您应该考虑将它们放在一起

函数依赖规则

以下是数据库中函数依赖的三个最重要的规则

  • 自反规则 –. 如果 X 是一个属性集,Y 是 X 的子集,那么 X 具有 Y 的值。
  • 增广规则:当 x -> y 成立时,c 是属性集,则 ac -> bc 也成立。也就是说,添加不改变基本依赖项的属性。
  • 传递规则:此规则与代数中的传递规则非常相似,如果 x -> y 成立且 y -> z 成立,则 x -> z 也成立。X -> y 称为函数式,它决定了 y。

DBMS 中的函数依赖类型

DBMS 中主要有四种类型的函数依赖。以下是 DBMS 中函数依赖的类型

  • 多值依赖
  • 平凡函数依赖
  • 非平凡函数依赖
  • 传递依赖

DBMS 中的多值依赖

当一个表中存在多个独立的多值属性时,就会发生多值依赖。多值依赖是关系中两个属性集之间的完整约束。它要求关系中存在某些元组。考虑以下多值依赖示例以供理解。

示例

汽车型号 制造年份 颜色
H001 2017 金属色
H001 2017 绿色
H005 2018 金属色
H005 2018 蓝色
H010 2015 金属色
H033 2012 灰色

在此示例中,制造年份和颜色彼此独立,但依赖于汽车型号。在此示例中,这两个列被认为多值依赖于汽车型号。

这种依赖可以这样表示

car_model -> maf_year

car_model-> colour

DBMS 中的平凡函数依赖

平凡依赖是属性集,当属性集包含在该属性中时,称为平凡。

因此,如果 Y 是 X 的子集,则 X -> Y 是平凡函数依赖。让我们通过平凡函数依赖示例来理解。

例如

员工 ID 员工姓名
AS555 哈利
AS811 乔治
AS999 凯文

考虑这个有两个列 Emp_id 和 Emp_name 的表。

{Emp_id, Emp_name} -> Emp_id 是平凡函数依赖,因为 Emp_id 是 {Emp_id,Emp_name} 的子集。

DBMS 中的非平凡函数依赖

函数依赖也称为非平凡依赖,当 A->B 成立且 B 不是 A 的子集时发生。在关系中,如果属性 B 不是属性 A 的子集,则它被认为是平凡依赖。

公司 首席执行官 年龄
微软 萨蒂亚·纳德拉 51
Google 桑达尔·皮查伊 46
Apple 蒂姆·库克 57

示例

(公司} -> {首席执行官} (如果我们知道公司,我们就知道首席执行官的名字)

但是首席执行官不是公司的子集,因此它是非平凡函数依赖。

DBMS 中的传递依赖

传递依赖是一种函数依赖,当“t”由两个函数依赖间接形成时发生。让我们通过以下传递依赖示例来理解。

示例

公司 首席执行官 年龄
微软 萨蒂亚·纳德拉 51
Google 桑达尔·皮查伊 46
阿里巴巴 马云 54

{公司} -> {首席执行官} (如果我们知道公司,我们就知道其首席执行官的名字)

{首席执行官} -> {年龄} 如果我们知道首席执行官,我们就知道年龄

因此,根据传递依赖的规则

{公司} -> {年龄} 应该成立,这是有道理的,因为如果我们知道公司名称,我们就可以知道他的年龄。

注意:您需要记住,传递依赖只能在具有三个或更多属性的关系中发生。

什么是范式化?

范式化是组织数据库中数据的一种方法,有助于避免数据冗余、插入、更新和删除异常。它是基于不同函数依赖和主键分析关系模式的过程。

范式化是关系数据库理论固有的。它可能导致数据库中复制相同数据,这可能导致创建额外的表。

函数依赖的优点

  • 函数依赖避免了数据冗余。因此,在 数据库 的多个位置不会重复相同的数据
  • 它有助于您维护数据库中数据的质量
  • 它有助于您定义数据库的含义和约束
  • 它有助于您识别不良设计
  • 它有助于您查找有关数据库设计的事实

摘要

  • 函数依赖是指一个属性在 DBMS 系统 中确定另一个属性。
  • 公理、分解、依赖项、决定因素、并集是函数依赖的关键术语
  • 函数依赖的四种类型是:1)多值 2)平凡 3)非平凡 4)传递
  • 当一个表中存在多个独立的多值属性时,就会发生多值依赖
  • 平凡依赖是指属性集,当属性集包含在该属性中时,称为平凡
  • 当 A->B 成立且 B 不是 A 的子集时,就会发生非平凡依赖
  • 传递是函数依赖的一种类型,当它由两个函数依赖间接形成时发生
  • 范式化是组织数据库中数据的一种方法,有助于避免数据冗余