在FD中,我不明白: X->Y,为什么X可以是不同的,只要Y是相同的?
X Y
-- --
1 10
2 10
3 10有人告诉我,这仍然是X->Y,只有Y变了才有关系.我不明白..。
发布于 2014-05-03 21:17:48
当关系“是函数”时,函数依赖发生在关系中。形式上,这意味着如果您有像X -> Y这样的FD,那么X的每个值都必须与Y的确切值1相关联。如果我们颠倒了这一说法,我们就会得到一个关于FD失败的“测试”:
If there exists a value `x` in `X` such that there are two values
of `Y`, `y1` and `y2`, where both
(x, y1) and (x, y2)
are in the relation, if `NOT (y1 == y2)` then `Y` is not
functionally dependent on `X`经过一点思考,很容易看出这个测试通过了您所写的关系。
X -> Y的一个更直观的概念来自于对数学函数的直觉。函数可以看作是一台机器,它消耗输入并产生输出,其规则是,无论运行多少次,特定输入的输出总是相同的。关系模型在具有函数依赖时起作用。函数依赖只表示关系中的元组可以具有以下形式
(x, f(x))对于一些数学函数,f。
就您的关系而言,该函数f很简单:
f(x) = 10 "constant function"
Examples:
f(1) = 10
f(2) = 10
f(10) = 10FD的另一个概念来自于“绘图图”。为此,请将X的所有值都放在Y值旁边的一行中。
x1 y1
x2 y2
x3 y3
x4 y4
x5 y5
...当我们将两个值从X列绘制到连接两个值的Y列时,就会发生关系。每一行对应一个元组。
x1----y1 is the relation { (x1, y1), (x2, y2) }
x2----y2如果X -> Y的每个值都有0行或1行关联,那么关系就是函数式的X。
x1----y1 is the relation { (x1, y1)
x2----y2 , (x2, y2)
x3--| y3 , (x3, y4)
x4--+-y4 , (x4, y4) }在这种情况下,我们可以将这些行转换为“箭头”。
x1---->y1
x2---->y2
x3--| y3
x4--+->y4如果我们沿着箭头从一个基地到另一个点,我们总是有一条独特的前进路径--我们不需要“分裂”。在非函数关系中,我们“拆分”;例如,如果我们翻转关系,看看Y是否在X上起作用,我们就会翻转箭头。
x1<----y1
x2<----y2
x3<--| y3
x4<--+-y4现在,当我们离开y4离开的时候,我们必须“拆分”,沿着箭头走到x3和x4。这意味着Y -> X不起作用。
发布于 2014-05-03 21:10:09
您可能应该阅读维基百科关于功能依赖的页面:前三行可能足以澄清您的疑虑:
在关系数据库理论中,函数依赖是数据库关系中两组属性之间的约束。给定关系R,称R中的一组属性X在函数上确定另一组属性Y,也是在R中,(写X→Y)当且仅当每个X值与一个Y值精确相关联,则称R满足函数依赖X→Y。
但是,在您的示例中,X 必须有不同的值,因为它是关键,而Y可以是任何值,而它恰好总是10。
https://stackoverflow.com/questions/23447395
复制相似问题