我提出了一个定义,即部分依赖是指字段间接依赖于主键或部分依赖于主键,但也依赖于其他依赖于主键的键。如果另一个字段所依赖的字段被删除,则由于其对主键的依赖,该字段仍将存在。我不确定这是否正确。我已经进行了研究,发现每个定义都很容易误导。我的定义是否正确,如果不正确,那么正确的定义是什么?
我提出了一个定义,即部分依赖是指字段间接依赖于主键或部分依赖于主键,但也依赖于其他依赖于主键的键。如果另一个字段所依赖的字段被删除,则由于其对主键的依赖,该字段仍将存在。我不确定这是否正确。我已经进行了研究,发现每个定义都很容易误导。我的定义是否正确,如果不正确,那么正确的定义是什么?
当从一个决定属性中删除一个属性后,关系中仍存在一个FD(函数依赖)时,该FD在该关系中是部分的。如果一个FD不是部分的,则为完全的。
例如:假设 {A,B} → {C} 但也有 {A} → {C}。那么 {A,B} → {C} 是部分的;{C} 对 {A,B} 部分地函数依赖;{C} 在 {A,B} 的一部分上有函数依赖,而不是全部。因此 ,产生的部分 FD 不是 {A} → {C}。是否是部分的取决于(根据部分FD的定义)是否有一个子集 {A} 确定 {C},即 {} → {C}。
例如:这里有一个关系 value,其中满足该示例条件。(当一个FD在每个可能出现的值中都成立时,它才在关系 variable 中成立。)
A B C
1 1 1
1 2 1
2 1 1
非平凡的函数依赖包括:{A,B}决定{C},{B,C},{A,C}和{A,B,C};{A},{B}和{}也决定{C}。其中:{A,B}→{C}是关于{A}→{C},{B}→{C}和{}→{C}的部分依赖;{A}→{C}和{B}→{C}是关于{}→{C}的部分依赖;其余的是全依赖。
X → Y是完全依赖,如果从X中移除任何属性A意味着该依赖不再存在;也就是说,对于任何属性A ε X,(X - {A})不能功能上确定Y。如果在X中某些属性AεX被移除并且依赖仍然存在,则函数依赖X→Y是部分依赖;也就是说,对于某些AεX,(X-{A})→Y。
--数据库系统基础第6版,Ramez Elmasri & Navathe
注意,FD是完全还是部分取决于CK(候选键),更不用说您可能称为PK(主键)的一个CK。
2NF的定义是每个非CK属性都由每个CK完全确定。请注意,唯一的CK是{A,B},唯一的非CK属性C部分依赖于它,因此此值不符合2NF,并且它是组件/投影的无损连接到{A,B}和{A,C},{A,B}和{B,C}和{A,B}和{C}上。)
(请注意,该教科书对“传递FD”的定义并没有定义与“传递FD”的标准定义相同的内容。)
部分依赖是指非主属性在一个候选键的一部分上存在函数依赖关系。(非主属性指的是不属于任何一个候选键的属性)
例如,我们从R{ABCD}开始,并有以下函数依赖关系AB->CD和A->C。
R的唯一候选键是AB。 C和D是非主属性。C对A有函数依赖关系。A是一个候选键的一部分。这就是一个部分依赖性。
部分依赖是指一个非主属性(不是决定因素(主键/候选键)的一部分)函数依赖于主键/候选键的一部分/部分。
部分依赖是一种函数依赖的类型,当主键必须是候选键,并且非主属性依赖于候选键的子集/部分(多个主键)时发生。
通过以下示例尝试理解部分依赖关系:
Seller(Id, Product, Price)
候选键:Id,Product
非主属性:Price
Price属性仅取决于Product属性,这是候选键的子集,而不是整个候选键(Id,Product)。这被称为部分依赖。
因此,我们可以说Product->Price是部分依赖。
部分函数依赖仅在复合键关系中发生。当一个或多个非键属性取决于主键的一部分时,就会发生部分函数依赖。
例如:
表: Stud_id,Course_id,Stud_name,Course_Name
其中: 主键= Stud_id + Course_id
然后: 为确定学生的姓名,我们仅使用Stud_id,这是主键的一部分。
{Stud_id} -> {Stud_Name}
因此,Stud_name部分依赖于Stud_id。这被称为部分依赖。
如果候选键确定非主属性:
i.e cidsid--->location (---->=determining)
then, it is fully functional dependent
如果候选键的真子集决定了非主属性:
i.e sid--->location (proper subset are sid and cid)
then it is term as partial dependency
为了消除部分依赖,我们相应地划分表格。
-----------
|A | B | C |
-----------
|a | 1 | x |
|b | 1 | x |
|c | 1 | x |
|d | 2 | y |
|e | 2 | y |
|f | 3 | z |
|g | 3 | z |
----------
Given,
F1: A --> B
F2: B --> C
主键和候选键是: A
由于A+ = {ABC}或R的闭包 --- 因此只有属性A就足以找到关系R。
DEF-1: 来自某些定义(来源未知) - 部分依赖是指当主属性(即是候选键的一部分(或真子集)的属性)决定了非主属性(即不是候选键的一部分(或子集)的属性)的依赖关系。
因此,A是一个主(P)属性,而B、C是非主(NP)属性。
所以,从上述DEF-1得出,
CONSIDERATION-1:: F1: A --> B (P determines NP) --- 这必须是部分依赖。
CONSIDERATION-2:: F2: B --> C (NP determines NP) --- 这是传递依赖。
我从 @philipxy 的回答中理解到的是(https://dev59.com/VF8e5IYBdhLWcg3wcKAq#25827210)...
考虑因素-1:F1: A --> B;应该是完全功能依赖,因为B完全依赖于A。如果我们去除A,则没有任何一个子集(为了完全澄清,请将L.H.S.视为X,而不是单个属性)能够确定B。
例如:如果我考虑F1:X --> Y,其中X = {A},Y = {B},那么如果我们从X中移除A;即X - {A} = {}; 并且一般不会使用空集来定义功能依赖关系(或者根本不使用),所以X的任何一个子集都不能满足依赖关系F1:X --> Y;因此,它是完全的功能依赖。
F1:A --> B 如果我们去掉A,则没有任何属性能够保持功能依赖F1。 因此,F1是完全的功能依赖而不是部分依赖。
If F1 were, F1: AC --> B;
and F2 were, F2: C --> B;
then on the removal of A;
C --> B that means B is still dependent on C;
we can say F1 is partial dependecy.
因此,@philipxy的答案与DEF-1和CONSIDERATION-1相矛盾,而这是正确且清晰明了的。
因此,F1:A --> B是完全功能依赖而不是部分依赖。
我考虑使用X来显示功能依赖的左侧,因为单个属性无法具有属性的适当子集。在当前情况下,我将X视为一组属性,而X是{A}。
-- 有关DEF-1的来源,请在Google上搜索,您可能能够找到类似的定义。(请考虑DEF-1在上述示例中不正确或不起作用)。