我对教授在研究候选人钥匙时给出的想法感到非常困惑(但我觉得很难问他:p)
"在不破坏的情况下,不能消除K的任何成分 唯一性属性---极简性"
我在wiki上搜索它说
"这些属性没有适当的子集(1)成立(这意味着该集合是最小的)。"它也举了一个例子,但我不明白。
所以我的问题是"消除"这意味着什么如果它意味着删除整行数据,那么它应该始终保持数据的唯一性(因为你不能通过删除一行数据来失去唯一性)。如果它意味着只删除K的单个属性并留下一个空的"块",它看起来很傻,会破坏数据。那么有人可以给我一些简单的例子来说明这个属性是什么意思吗?(可能一个是好的,一个是坏的)谢谢〜
答案 0 :(得分:2)
“消除”这里根本不接触数据。它只是意味着您从密钥中删除一个属性/列。如果减少的列集仍然是一个键(即唯一标识任何数据行),那么前一个键不是最小的。
示例:
name id amount
A 1 1000
B 2 2000
C 3 1000
您可以使用name
或id
作为最小密钥。
您还可以使用[name, id]
作为(复合,多列)键。但是这个键并不是最小的(因为你可以从中删除一个列并且仍然有一个键)。
列amount
本身并不构成关键字。
[amount, id]
将是一个关键,但同样,它并不是最小的。