假设我们有一个包含3列A,B和C
的表A B C
..........
1 2 3
2 4 5
4 6 7
n 5 n
这里'n'表示空。
我们可以说A - > B和A - > C ?我知道函数依赖的定义,但只是在空值的情况下混淆。
答案 0 :(得分:1)
如果将null视为值,则答案为是。 A -> B, C
保留在给定的数据中。但是,要成为一个值,就会产生某些要求。适用于域的所有运算符(例如整数),如相等,加法,小于等,必须在存在空值时明确定义。
如果null不是值,则答案更复杂。严格地说,功能依赖性适用于关系。如果表表示关系,那么我们可以引用表中的函数依赖关系。但是,表示缺少值的符号是元数据,而不是数据。它允许多个联合不兼容的关系由单个表表示。在这种情况下,我们不能将函数依赖的概念应用于表,因为我们不清楚我们正在讨论哪种关系。
进一步令人困惑的是,SQL DBMS不能始终如一地处理空值。在某些情况下,它们的处理方式与价值观相似,而在其他情况下则缺乏价值。如果你想逻辑地理解和描述一个表,最好的选择是将它分解为一组无零关系,然后独立地分析每个部分。
对于示例表,如果null不是值,则会遇到问题。最后一行没有唯一标识符(它不能是B:4
,因为另一行也有B:4
),我们无法通过缺少信息来确定任何内容。该示例不能在不丢弃该行的情况下分解为一组关系。
如果我们将最后一行更改为B:5
,那么我们会将其分解为两个关系:R1 = {(A:1, B:2, C:3), (A:2, B:4, C:5), (A:4, B:6, C:7)}
和R2 = {(B:2), (B:4), (B:6), (B:5)}
。我们可以说A -> B, C
在R1中保留但在R2中不保留。