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 |
桑达尔·皮查伊 | 46 | |
Apple | 蒂姆·库克 | 57 |
示例
(公司} -> {首席执行官} (如果我们知道公司,我们就知道首席执行官的名字)
但是首席执行官不是公司的子集,因此它是非平凡函数依赖。
DBMS 中的传递依赖
传递依赖是一种函数依赖,当“t”由两个函数依赖间接形成时发生。让我们通过以下传递依赖示例来理解。
示例
公司 | 首席执行官 | 年龄 |
---|---|---|
微软 | 萨蒂亚·纳德拉 | 51 |
桑达尔·皮查伊 | 46 | |
阿里巴巴 | 马云 | 54 |
{公司} -> {首席执行官} (如果我们知道公司,我们就知道其首席执行官的名字)
{首席执行官} -> {年龄} 如果我们知道首席执行官,我们就知道年龄
因此,根据传递依赖的规则
{公司} -> {年龄} 应该成立,这是有道理的,因为如果我们知道公司名称,我们就可以知道他的年龄。
注意:您需要记住,传递依赖只能在具有三个或更多属性的关系中发生。
什么是范式化?
范式化是组织数据库中数据的一种方法,有助于避免数据冗余、插入、更新和删除异常。它是基于不同函数依赖和主键分析关系模式的过程。
范式化是关系数据库理论固有的。它可能导致数据库中复制相同数据,这可能导致创建额外的表。
函数依赖的优点
- 函数依赖避免了数据冗余。因此,在 数据库 的多个位置不会重复相同的数据
- 它有助于您维护数据库中数据的质量
- 它有助于您定义数据库的含义和约束
- 它有助于您识别不良设计
- 它有助于您查找有关数据库设计的事实
摘要
- 函数依赖是指一个属性在 DBMS 系统 中确定另一个属性。
- 公理、分解、依赖项、决定因素、并集是函数依赖的关键术语
- 函数依赖的四种类型是:1)多值 2)平凡 3)非平凡 4)传递
- 当一个表中存在多个独立的多值属性时,就会发生多值依赖
- 平凡依赖是指属性集,当属性集包含在该属性中时,称为平凡
- 当 A->B 成立且 B 不是 A 的子集时,就会发生非平凡依赖
- 传递是函数依赖的一种类型,当它由两个函数依赖间接形成时发生
- 范式化是组织数据库中数据的一种方法,有助于避免数据冗余