【问题标题】:Candidate keys SQL候选键 SQL
【发布时间】:2016-07-07 17:23:50
【问题描述】:

您好,我最近在学习 SQL 和键。

我想知道一个关系表是否有 n 个属性,有多少可能的候选键?

【问题讨论】:

    标签: sql key candidate-key


    【解决方案1】:

    关系属性的每个子集都可以是候选键。所以这个数等于一组n个元素的子集的个数,即2n

    已编辑

    最初的答案是 2n-1,但拥有空(或 niladic)键也很重要。这种类型的键意味着该关系只有一个元组。感谢@ErwinSmout 的澄清。

    【讨论】:

    • 不幸的是,我们不能排除空集。 SQL 不支持空键,但这仅仅意味着 SQL 不是完全关系型的。甚至可能某些 SQL 产品确实支持空(niladic)键。
    • 对于这个问题,候选键是否也是超级键的数量?我认为候选键只是属性本身的任何一个,因为这是识别行所需的最少键数。 (或者这是一个假设?)
    • @boredj,如果我们谈论潜在候选键的数量,根据评论,这等于 2^n-1 或 2^n。如果我们谈论的是可以在同一张表中同时出现的候选键的最大数量,这是一个不同的问题。在第一种情况下,候选键可以具有任意数量的属性。
    • @ErwinSmout ,在我看来,一个 niladic 键意味着与重复的关系,这在 SQL 中是允许的,但在关系数据模型中是不允许的。
    • 不,niladic 键不允许重复。你到底是怎么得出如此疯狂的结论的?
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多