Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 函数依赖的候选键?_Database_Database Design_Relational Database_Database Schema_Functional Dependencies - Fatal编程技术网

Database 函数依赖的候选键?

Database 函数依赖的候选键?,database,database-design,relational-database,database-schema,functional-dependencies,Database,Database Design,Relational Database,Database Schema,Functional Dependencies,关系R=(A,B,C,D,E)和函数依赖项F如下所示: F={A->BC,CD->E,B->D,E->A} E、 BC和CD可以是候选密钥,但B不能 谁能告诉我这个事实是如何计算的?我在谷歌上搜索了它,但不能像我以前所知道的那样理解更多。通过计算一组给定属性的函数依赖关系的闭包,可以找到该属性的所有依赖属性。让我示范一下: A -> ABC -> ABCD -> ABCDE A决定了BC(给定)以及它本身(微不足道),因此A->ABC。添加B->D以获取ABC->ABCD。

关系R=(A,B,C,D,E)和函数依赖项F如下所示:

F={A->BC,CD->E,B->D,E->A}

E、 BC和CD可以是候选密钥,但B不能



谁能告诉我这个事实是如何计算的?我在谷歌上搜索了它,但不能像我以前所知道的那样理解更多。

通过计算一组给定属性的函数依赖关系的闭包,可以找到该属性的所有依赖属性。让我示范一下:

A -> ABC -> ABCD -> ABCDE
A
决定了
BC
(给定)以及它本身(微不足道),因此
A->ABC
。添加
B->D
以获取
ABC->ABCD
。最后,添加
CD->E
以获得
ABCD->ABCDE
。我们停在这里是因为我们已经确定了整个关系,因此
A
是一个候选键

您应该验证,从
E
BC
CD
开始,您确实可以确定整个关系

B
开始,我们得到:

B -> BD
就这样。关系的其余部分无法通过
BD
确定,因此它不是候选键

更直观的方法是绘制函数依赖关系:

从任何一组属性开始,尝试按照箭头查找到每个其他属性的路径。只有从
E
开始或同时访问
C
D
时,才能访问
E


B
,您可以到达
D
,但是如果没有
C
,您就不能进入
E
,这也排除了
A
。所以
B
不能作为候选键。

那么它是如何从上面的图中计算出来的?请您在这里添加更多关于您建议的最短路径(即图)的信息?从给定的属性集开始,按照每个可用的箭头进行操作。如果你能到达所有其他节点,你就有了一个候选密钥。如果没有,那么就没有。它的意思是,如果你访问过
C
D
,你只能去
E
。哦,我明白了,谢谢。我认为函数依赖项的第一段有一个输入错误,请检查!