【问题标题】:Find candidate key from functional dependancy从功能依赖中找到候选键
【发布时间】:2012-12-17 00:29:32
【问题描述】:

对于具有以下功能依赖关系的关系 {A,B,C,D} -

A -> BCD
B -> C
CD -> A

使用我在其中一个站点上找到的特定方法,我将候选键作为 ABCD。那正确吗 ?什么是正确的候选键?

【问题讨论】:

  • 不,这是不对的。首先,{ABCD} 是整个 relvar,所以 {ABCD} 是一个平凡的超级键。你遵循什么方法和网站?你的教科书是什么方法?
  • @Catcall :这是链接..techvyom.com/forum/Thread-How-to-find-Candidate-Keys.. ABCD 是否正确?还是我错过了什么??
  • ABCD 是一个微不足道的超级键。每个算法都必须生成 ABCD。但是 ABCD 不是这种关系中的候选键。 (根据定义,候选键是 minimal 超键。)您可以通过简单的检查来判断链接中的算法是不合适的。它不会生成 A 作为候选键,但您是 given A -> BCD。除了 A 之外,还有两个候选键。
  • @Catcall:哦..!! :/ 你知道我在哪里可以找到正确的算法吗?
  • 你的教科书。你用的是哪一个?

标签: functional-dependencies candidate-key


【解决方案1】:

ABCD 是一个微不足道的超级键。每个算法都必须生成 ABCD。但是 ABCD 不是这种关系中的候选键。根据定义,候选键是最小超键。

你可以通过简单的检查来判断你的链接中的算法是不够的。它不会生成 A 作为候选键,但您会得到 A -> BCD,因此 A 显然是候选键。除了 A 之外,还有两个候选键。

This SO answer by @ErwinSmout 描述了一种适用于铅笔和纸的算法。大多数教科书都包含适用于自动化的算法。

【讨论】:

  • 感谢 TON 的帮助!这很有帮助..:)
【解决方案2】:

让我们让它变得简单: 这是Super,candidate键的定义

超级键

超级键代表键的超集。

超级键是一组一个或多个属性,这些属性可以共同使用,并且可以唯一地标识所有其他属性。

候选键

候选键是超级键,没有适当的子集是超级键。

换句话说,候选键是最小的超级键。

通过闭包属性, 我们得到

A+=ABCD

因为

A->BCD 给定

A->一个反身性规则

因此 A 是候选键。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多