- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个函数依赖关系 A,B,C,D,E
1) A->BC
2) CD->E
3) B->D
4) E->A
使用 1 得到 A、D、E,然后使用 4 得到 D、E
使用 2 给出 A、B、C、D,然后使用 3 给出 A、B、C,使用 1 给出 A
使用 2 给出 A、B、C、D,使用 1 给出 A、D
使用 4 给出 B、C、D、E,使用 2 给出 B、C、D,使用 3 给出 B、C
使用 3 给出 A、B、C、E,使用 1 给出 A、E,使用 4 给出 E
所以我会有 5 个 super 键? (A、E、AD、BC、DE)。从我的 super key 中,我会选择独特的。
因为我可以从 E 得到 A,我可以删除 A 和 AD(因为 DE 是相同的)并且因为我可以从 A 得到 BC 我可以删除它所以我剩下
英语,德语
那会是我的 super key 吗?还是只是 E?
最佳答案
根据定义,关系的候选键 K 是一组决定所有其他属性的属性,因此我们不能在不丢失该属性的情况下从中删除任何属性。
要找到关系的所有键,如果您不遵循正式算法,那么您可以从检查 FD 的每个行列式开始,通过计算其闭包来查看这是否是( super 或候选)键.比如从A开始,你可以找到:
A+ = A
= ABC (by using 1)
= ABCD (by using 3)
= ABCDE (by using 2)
因此,A 确定所有属性,因此是候选键(而不是严格的 super 键,因为您不能从中删除任何属性!)
计算其他行列式的闭包,可以发现:
CD+ = ABCDE (candidate key, since C+ and D+ do not contain all the attributes)
B+ = BD (not a key)
E+ = ABCDE (candidate key)
现在您有了三个候选键,A、E 和 CD。由于 B 仅确定 D,我们可以尝试向其添加一些内容以查看它是否可以成为 key 的一部分。我们不添加 A 或 E,因为它们已经是键,我们不添加 D,因为它已经由 B 确定(因此拥有它肯定会产生一个 super 键)。所以我们试试 C:
BC+ = ABCDE (candidate key, since B+ and C+ do not contain all the attributes)
所以,最后,我们可以说这个关系有四个(而且只有四个)候选键:
A
BC
CD
E
关于database - 如何找到候选键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43465696/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!