在功能依赖方面,主键,候选键和超级键之间有什么区别

时间:2017-10-23 14:41:19

标签: key primary-key functional-dependencies candidate-key

主键候选键 superkey functional dependency方面有什么区别?< / p>

我知道不同之处,但我不知道他们在功能依赖方面的差异。

2 个答案:

答案 0 :(得分:0)

给定关系R具有一组属性T和一组功能依赖F,任何一组属性KT的子集,确定T被称为R超级密钥。换句话说,如果依赖项K -> T属于F+(也就是说,可以从F派生),则KR的超级密钥。根据这个定义,因为T -> T总是如此,我们知道至少存在一个超级密钥(T)。

候选键CK是一个超级键,我们无法删除任何属性而不会导致它失去作为超级键的属性。换句话说,如果CK = A1,...,An,则没有适当的子集,这是一个超级密钥。当然,根据这个定义,我们可以推断出每个具有单个属性的超级键都会自动成为候选键。

主键与关系理论无关,但它是在实践中使用的概念,在关系数据库管理系统中。通常,它是在那些可用中选择的候选密钥,或者是在不考虑已经存在于关系中的候选密钥的情况下引入的“人工”唯一标识符(代理密钥)。

最后请注意,空值不是在关系理论中定义的,而是仅在实际的关系数据库管理系统中定义,并且通常在那些系统中主键不能具有空值。

答案 1 :(得分:0)

  

我知道不同之处,但我不知道它们在功能依赖性方面的区别。

如果你不记住&amp;应用定义然后你知道什么是东西或者在某种意义上相似的东西之间有什么区别。你只是有一些模糊的概念。如果你不强迫自己思考&amp;准确地写(并且要求你读的同一个作家)。

来自this answer

  

以下所有术语/概念是针对表变量并行定义的。表变量具有FD的实例(功能依赖),决定因素,超级密钥,CK(候选密钥)或PK(主键)(在可变意义上)当给定业务/应用程序中可能出现的每个表值具有该实例时(在表意义上)。

     

对于X和Y列,我们可以写X - &gt; Y. 我们说X是决定因素/确定集合,Y是确定的函数依赖性集合(FD)X - >收率

  

我们说X - &gt;当X的每个子行值仅出现Y的一个特定子行值时,Y 保持在表T中。或者我们说X - &gt; Y是/ T中的FD。

  

表T的超级密钥是一组功能上确定每列的列。 候选键 CK )是一个超级密钥,不包含任何较小的超级密钥。我们可以选择一个CK作为主键(< em> PK )然后调用其他CK 备用密钥 AKs )。

  

SQL表不是关系,SQL运算符不是它们的关系/数学对应物。除其他外,SQL有重复的行,空和&amp;一种3值逻辑。但是,虽然你可以借用术语并赋予它们SQL的含义,you can't just substitute those meanings into other RM definitions or theorems and get something sensible or true。所以我们必须convert an SQL design to a relational design, apply relational notions, then convert back to SQL。在某些特殊情况下,我们可以直接在SQL中执行某些操作,因为我们知道如果我们进行转换,应用和扩展会发生什么。转回来。