我知道区别,但我不知道它们在功能依赖方面的区别。
2 回答
给定R
具有一组属性T
和一组功能依赖关系的关系,确定的F
任何属性K
集、 的子集称为 的超键。换句话说,如果依赖属于(即可以从 派生),则是 的超键。从这个定义来看,由于 总是正确的,我们知道至少存在一个超键()。T
T
R
K -> T
F+
F
K
R
T -> T
T
候选键CK
是一个超级键,我们不能从中删除任何属性,而不会导致它失去作为超级键的属性。换句话说,如果CK = A1,...,An
,则它的真子集不存在超键。当然,从这个定义我们可以推断出每个具有单个属性的超级键都自动成为候选键。
主键与关系理论无关,但它是关系数据库管理系统内部实践中使用的概念。一般而言,它要么是从那些可用密钥中选择的候选密钥,要么是在不考虑关系中已经存在的候选密钥的情况下引入的“人工”唯一标识符(代理密钥)。
最后请注意,空值在关系理论中没有定义,而仅在实际的关系数据库管理系统中定义,并且通常在那些系统中,主键不能有空值。
我知道区别,但我不知道它们在功能依赖方面的区别。
如果您不记住并应用定义,那么您将不知道事物是什么或在某种意义上相似的事物之间有什么区别。你只是有一些模糊的概念。另外,如果您不强迫自己准确地思考和写作(并且需要与您阅读的作家相同)。
从这个答案:
以下所有术语/概念都是针对表值和变量并行定义的。当给定业务/应用程序中可能出现的每个表值时,表变量具有 FD(功能依赖)、行列式、超键、CK(候选键)或 PK(主键)(在变量意义上)的实例有那个实例(在表格意义上)。
对于 X 和 Y 列的集合,我们可以写为 X -> Y。我们说 X 是行列式/决定集,Y 是函数依赖 (FD) X -> Y 的确定集。
当 X 的每个子行值仅与 Y 的一个特定子行值一起出现时,我们说 X -> Y在表 T 中成立。或者我们说 X -> Y 是 T 的/在 T 中的 FD。
表 T的超键是一组在功能上确定每一列的列。候选键( CK ) 是一个不包含更小的超键的超键。我们可以选择一个 CK 作为主键( PK ),然后调用其他 CK 的备用键( AKs )。
SQL 表不是关系,SQL 运算符不是它们的关系/数学对应物。除其他外,SQL 具有重复行、空值和一种 3 值逻辑。但是,尽管您可以借用术语并赋予它们 SQL 含义,但您不能仅将这些含义替换为其他 RM 定义或定理并得到一些合理或真实的东西。因此,我们必须将 SQL 设计转换为关系设计,应用关系概念,然后再转换回 SQL。在某些特殊情况下,我们可以直接在 SQL 中执行某些操作,因为我们知道如果进行转换、应用和转换回会发生什么。