【问题标题】:What does the "minimality" mean in database candidate keys?数据库候选键中的“最小”是什么意思?
【发布时间】:2016-10-31 12:47:01
【问题描述】:

我对教授在研究候选键时给出的想法感到非常困惑(但我觉得问他很假:p)

"K的任何一个分量都不能在不破坏的情况下被消除 唯一性属性---极小”

我在维基上搜索它说

“没有这些属性的真子集(1)成立(这意味着集合是最小的)。”它也举了一个例子,但我不明白。

所以我的问题是这里的“消除”是什么意思?如果这意味着删除整行数据,那么它应该始终保持数据的唯一性(因为你不能通过删除一行数据而失去唯一性)。如果只删除K的单个属性并留下一个空“块”的行,它看起来很傻,并且会破坏数据。那么谁能给我一些简单的例子来说明这个属性是什么意思?(可能一个代表好,一个代表坏)谢谢~

【问题讨论】:

  • 您可以将所有功能相关的列添加到候选键,而不会丢失其唯一性属性。您的问题是关于相反的过程:从键中删除这些完全依赖的字段。

标签: sql candidate-key


【解决方案1】:

这里的“消除”根本不涉及数据。这只是意味着您从密钥中删除了一个属性/列。如果减少的列集仍然是键(即唯一标识任何数据行),则前一个键不是最小的。

例子:

name id amount
A    1  1000
B    2  2000
C    3  1000

您可以使用nameid 作为最小密钥。

您也可以将[name, id] 用作(复合、多列)键。但是那个键不是最小的(因为你可以从中删除一列并且仍然有一个键)。

amount 列本身根本不构成密钥。

[amount, id] 将是一个键,但同样,它不是最小的。

【讨论】:

  • 哦,非常感谢。我以前不知道复合键的概念。感谢您的帮助。我听说过一些想法,候选键非常接近主键,而主键是从候选键中选择的。所以在大多数情况下,它们具有相同的属性,但主键是程序员选择的,这是真的吗?
  • 是的,主键只是这样指定的可能键之一。任何其他键都可以提供该功能。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 2017-03-29
  • 2020-06-26
  • 2017-02-06
  • 2019-01-14
相关资源
最近更新 更多