我有一个关于功能依赖的问题。 我理解功能依赖意味着属性的值可以由另一个属性的值确定。 假设我们有这个表
这里A和B是主键。 说C和D在功能上都依赖于A和B两者是否正确?
答案 0 :(得分:2)
你说的是“A和B是主键”,但是这句话含糊不清:你的意思是:“ 主键是AB”或“是两个候选键,A和B” ? (并注意在关系数据库中的关系中,您只能拥有一个主键和许多候选键。)
给定(候选)键的定义,即它确定所有其他属性,并且在不丢失此属性的情况下不能删除任何属性,在第一种情况下,您可以这样说:
A B -> C D
或等同于:
A B -> C
A B -> D
(所以C e D取决于A和B的组合),而在第二种情况下,你有:
A -> C D
B -> C D
或等同于:
A -> C
A -> D
B -> C
B -> D
(即C和D在功能上依赖于A和B)。
答案 1 :(得分:1)
“S (功能上)确定 T”表示属性集 S的特定子元素值的所有外观都具有与属性集<相同的子元素值/ em> T.如果我们说属性 X正在确定或确定,则理解我们确实意味着集合{X}正在确定/确定。
超级密钥是一组确定每个属性的属性。 CK(候选键)是一个超级密钥,不包含任何较小的超级密钥。可以有很多CK。可以选择一个CK作为PK(主键)。 (PKs在关系理论中没有任何作用。)
由于只能有一个PK,所以你谈论一个关系值或变量多于一个的奇怪。也许你的意思是两个CK。也许你的意思是2属性PK。
如果一组属性的每个子元素值只出现一次,那么它就是超级密钥。 (每个单属性超级键都是CK,除非{}是CK,当关系限制为一个元组时会发生。)因此它确定所有属性。但总的来说,依赖关系告诉我们什么是超级密钥和&amp; CKs是。
因此,如果A和B中的每一个都是CK,那么每个都确定C和D,即{C}和{D}。如果{A,B}是PK,那么它确定C和D,即{C}和{D}。碰巧如果T1和T2都由S确定,则T1 U T2也是如此。无论哪种方式,这里的CK(s)也确定{C,D}。
PS英语中存在歧义,不清楚“C和D都是功能依赖的”是指C是依赖的还是D是依赖的还是{C,D}是依赖的。类似地,“在功能上依赖于A和B”。因此,更清楚地说“集合......”而不仅仅是使用“两者”和/或“和”。