FD X-> Y,各种X无所谓?

时间:2014-05-03 17:04:13

标签: database functional-dependencies

在FD中,我不明白以下内容:X-> Y,只要Y相同,X怎么会有所不同?

X   Y
--  --
1   10
2   10
3   10

有人告诉我,这仍然是X-> Y,只有Y改变才有意义。我不明白..

2 个答案:

答案 0 :(得分:0)

你应该阅读关于functional dependencies的维基百科页面:前三行可能足以澄清你的疑问:

  

在关系数据库理论中,函数依赖是数据库关系中两组属性之间的约束。   给定关系R,如果并且仅当每个X值恰好与一个Y值相关联时,R中的一组属性X被称为在功能上确定另一组属性Y,也在R中(写成X→Y);然后说R满足函数依赖性X→Y。

但是,在您的示例中,X 必须具有不同的值,因为它是关键,而Y可以是任何值,它恰好总是10。 / p>

答案 1 :(得分:0)

当关系"是函数"时,函数依赖发生在关系中。形式上,这意味着,如果您有类似X -> Y的FD,则X的每个值必须与Y的正好值相关。如果我们颠倒那个陈述,我们会得到一个"测试"因为没有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) = 10

FD的另一个概念来自"绘制图表"。要做到这一点,请将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

并拥有如果我们从基点到点跟随箭头我们总是有一条独特的前进道路的属性 - 我们不必分裂"在非功能性关系中,我们分开了#34 ;;例如,如果我们翻转关系并查看Y是否在X上起作用,我们会翻转箭头

x1<----y1
x2<----y2
x3<--| y3
x4<--+-y4

现在看到,当我们离开y4向左行驶时,我们必须&#34;拆分&#34;按箭头指向x3x4。这意味着Y -> X 持有。