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