先决条件:功能依赖性和属性关闭
功能依赖性是一种约束,它指定两组属性之间的关系,其中一组可以准确确定其他一组的值。它表示为X→Y ,其中X是能够确定Y值的一组属性。在箭头左侧设置的属性X称为行列式,而在右侧设置的属性Y称为受抚养人。功能依赖关系用于数学表达数据库实体之间的关系,对于理解关系数据库系统中的高级概念以及理解诸如Gate之类的竞争性考试中的问题非常重要。
例子:
roll_no | name | dept_name | dept_building |
---|---|---|---|
42 | abc | CO | A4 |
43 | pqr | IT | A3the |
44 | xyz | CO | A4 |
45 | xyz | IT | A3 |
46 | mno | EC | B2 |
47 | jkl | ME | B2 |
从上表中,我们可以得出一些有效的功能依赖关系:
- roll_no→{name,dept_name,dept_building},→在这里,roll_no可以确定字段name,dept_name和dept_building的值,因此是有效的功能依赖性
- roll_no→dept_name,因为roll_no可以确定{name,dept_name,dept_building}的整个集合,所以它也可以确定其子集dept_name。
- dept_name→dept_building,Dept_name可以准确识别dept_building,因为具有不同dept_name的部门也将具有不同的dept_building
- 更有效的功能依赖性:roll_no→名称,{roll_no,name}⇢{dept_name,dept_building}等。
以下是一些无效的功能依赖项:
- 名称→dept_name具有相同名称的学生可以具有不同的dept_name,因此这不是有效的功能依赖性。
- dept_building→dept_name同一建筑物中可以有多个部门,例如,在上表中,部门ME和EC在同一建筑物B2中,因此dept_building→dept_name是无效的功能依赖关系。
- 更多无效的功能依赖性:名称→roll_no,{name,dept_name}→roll_no,dept_building→roll_no等。
阿姆斯特朗的功能依赖公理/属性:
- 自反性:如果Y是X的子集,则X→Y根据自反性规则成立
例如,{roll_no,名称}→名称有效。 - 增强:如果X→Y是有效的依存关系,则XZ→YZ根据增强规则也是有效的。
例如,如果{roll_no,name}→dept_building有效,因此{roll_no,name,dept_name}→{dept_building,dept_name}也有效。→ - 传递性:如果X→Y和Y→Z都是有效的依存关系,则X→Z的传递性规则也有效。
例如,roll_no→dept_name和dept_name→dept_building,则roll_no→dept_building也有效。
DBMS中的功能依赖项类型:
- 琐碎的功能依赖
- 非竞争性功能依赖
- 多值功能依赖
- 传递功能依赖
1.琐碎的功能依赖
在琐碎的功能性依存关系中,依存关系始终是行列式的子集。
例如,如果X→Y并且Y是X的子集,则称为琐碎函数依赖
例如,
roll_no | name | age |
---|---|---|
42 | abc | 17 |
43 | pqr | 18 |
44 | xyz | 18 |
这里, {roll_no,name}→name是一个琐碎的功能依赖项,因为从属名称是行列式集{roll_no,name}的子集
类似地, roll_no→roll_no也是琐碎的功能依赖项的一个示例。
2.非平凡的功能依赖
在非平凡函数依赖中,从属严格不是行列式的子集。
即,如果X→Y并且Y不是X的子集,则称为非平凡函数依赖。
例如,
roll_no | name | age |
---|---|---|
42 | abc | 17 |
43 | pqr | 18 |
44 | xyz | 18 |
在这里, roll_no→name是一个非平凡的函数依赖项,因为从属名称不是行列式roll_no的子集
同样, {roll_no,name}→age也是一个不重要的函数依赖项,因为age不是{roll_no,name}的子集
3.多值功能依赖
在多值功能依赖项中,依赖集的实体彼此不依赖。
即,如果a→{b,c}并且b和c之间不存在功能依赖关系,则称为多值功能依赖关系。
例如,
roll_no | name | agethe |
---|---|---|
42 | abc | 17the |
43 | pqr | 18 |
44 | xyz | 18 |
45 | abc | 19 |
在这里, roll_no→{name,age}是一个多值函数依赖项,因为依赖项的名称和年龄互不依赖(即name→age或age→name不存在! )
4.传递功能依赖
在传递函数依赖性中,依赖性间接取决于行列式。
即如果a→b & b→c ,则根据传递性公理, a→c 。这是一个传递函数的依赖关系
例如,
enrol_no | name | dept | building_no |
---|---|---|---|
42 | abc | CO | 4 |
43 | pqr | EC | 2 |
44 | xyz | IT | 1 |
45 | abc | EC | 2 |
在这里, enrol_no→部门和部门→building_no ,
因此,根据传递性公理, enrol_no→building_no是有效的函数依赖项。这是一种间接功能依赖性,因此称为传递功能依赖性。