什么是函数依赖和传递依赖(DBMS)?
让我们首先了解数据库管理系统 (DBMS) 中的函数依赖是什么。
函数依赖
函数依赖指的是数据库中一个属性与另一个属性的关系。借助函数依赖,可以维护数据库中数据的质量。
表示函数依赖的符号是 ->(箭头)。
函数依赖示例
考虑下表。
员工编号 | 姓名 | 城市 | 薪资 |
---|---|---|---|
1 | bob | 班加罗尔 | 25000 |
2 | Lucky | 德里 | 40000 |
员工的姓名、薪资和城市信息可通过员工编号(或员工ID)获得。因此,可以说城市、薪资和姓名属性函数依赖于员工编号属性。
示例
SSN->ENAME read as SSN functionally dependent on ENAME or SSN determines ENAME. PNUMBER->{PNAME,PLOCATION} (PNUMBER determines PNAME and PLOCATION) {SSN,PNUMBER}->HOURS (SSN and PNUMBER combined determines HOURS)
传递依赖
传递依赖是通过使用三个以上属性的关系获得的。
这些依赖用于将数据库规范化到3NF。
传递依赖示例
考虑下表:
书籍 | 书籍作者 | 作者年龄 |
---|---|---|
ABC | Hari | 45 |
PQR | James | 60 |
依赖关系如下:
{Book} -> {Book_Author} {Book_Author} does not -> {Book} {Book_Author} -> {Age_of_Author}
因此,根据传递性,{书籍} -> {作者年龄}。因此,如果知道书籍,就必须知道作者的年龄。
问题
关系 R(ABCDEF) 和 F: {AB->C, C->A, B->DE, ABD->F}。找到传递依赖。
解答
AB+=ABCDE => AB是候选键
C+=CA
B+=BDE
ABD+=ABDFCE => ABD不是候选键[因为AB是候选键]。
=>键属性={A,B},非键属性={C,D,E}
AB->C 不是传递依赖。
C->A 不是传递依赖。
B->DE 是传递依赖[因为B不是候选键/超键,DE是非键属性]。
ABD->F 不是传递依赖[因为ABD是超键]。
广告