数据库管理系统中的依赖类型
DBMS中的依赖是两个或多个属性之间的关系。它在DBMS中具有以下类型:
- 函数依赖
- 完全函数依赖
- 传递依赖
- 多值依赖
- 部分依赖
让我们从函数依赖开始:
函数依赖
如果存储在表中的信息可以唯一地确定同一表中的其他信息,则称为函数依赖。可以将其视为同一关系的两个属性之间的关联。
如果P函数决定Q,则
P -> Q |
让我们看一个例子:
<员工>
员工ID(EmpID) | 员工姓名(EmpName) | 员工年龄(EmpAge) |
E01 | Amit | 28 |
E02 | Rohit | 31 |
在上表中,**员工姓名(EmpName)** 函数依赖于 **员工ID(EmpID)**,因为对于给定的**员工ID(EmpID)** 值,**员工姓名(EmpName)** 只能取一个值:
EmpID -> EmpName |
如下所示:
完全函数依赖
如果一个属性函数依赖于另一个属性,并且不依赖于它的任何真子集,则该属性完全函数依赖于另一个属性。
例如,如果属性Q函数依赖于属性P,并且不依赖于P的任何真子集,则属性Q完全函数依赖于属性P。
让我们看一个例子:
<项目成本>
项目ID(ProjectID) | 项目成本(ProjectCost) |
001 | 1000 |
002 | 5000 |
<员工项目>
员工ID(EmpID) | 项目ID(ProjectID) | **天数**(在项目上花费) |
E099 | 001 | 320 |
E056 | 002 | 190 |
上述关系表明
EmpID, ProjectID, ProjectCost -> Days |
然而,它不是完全函数依赖的。
而子集**{EmpID, ProjectID}** 可以很容易地确定员工在项目上花费的**{Days}**。
这总结并给出了我们的完全函数依赖:
{EmpID, ProjectID} -> (Days) |
传递依赖
当间接关系导致函数依赖时,称为传递依赖。
如果 P -> Q 和 Q -> R 为真,则 P-> R 是传递依赖。
多值依赖
当表中一行或多行的存在意味着同一表中的一行或多行其他行时,就会发生多值依赖。
如果一个表具有属性P、Q和R,则Q和R是P的多值事实。
它用双箭头表示:
->-> |
例如
P->->Q Q->->R |
在上述情况下,只有当Q和R是独立属性时,才存在多值依赖。
部分依赖
部分依赖发生在非主属性函数依赖于候选键的一部分时。
第二范式(2NF) 消除了部分依赖。让我们看一个例子:
<学生项目>
学生ID(StudentID) | 项目编号(ProjectNo) | 学生姓名(StudentName) | 项目名称(ProjectName) |
S01 | 199 | Katie | 地理位置(Geo Location) |
S02 | 120 | Ollie | 集群探索(Cluster Exploration) |
在上表中,我们有部分依赖;让我们看看如何:
主键属性是**学生ID(StudentID)** 和 **项目编号(ProjectNo)**。
如前所述,非主属性,即**学生姓名(StudentName)** 和 **项目名称(ProjectName)**,应该函数依赖于候选键的一部分,才能成为部分依赖。
**学生姓名(StudentName)** 可以由 **学生ID(StudentID)** 确定,这使得关系成为部分依赖的。
**项目名称(ProjectName)** 可以由 **项目ID(ProjectID)** 确定,这使得关系成为部分依赖的。