为什么你不能加入粉丝圈?

时间:2017-06-24 08:31:28

标签: database database-design entity-relationship

我试图了解一个风扇陷阱到底是什么。

我不明白为什么你不知道销售代表处理的帐户?

您是否可以加入销售代表,分支机构和帐户表并找出答案?我错过了什么? enter image description here

1 个答案:

答案 0 :(得分:0)

您可以加入粉丝陷阱的表格/关系。如果您认为结果表/关系意味着它没有意义,那么它只是一个陷阱。当然,如果您需要表格/关系,那么认为就意味着您错过了它并需要添加它。

Works_for(rep,branch) -- (rows where) rep *rep* works for branch *branch*
Manages(branch,account) --(rows where) some branch *branch* rep manages account *account*

/* (rows where)
    rep *rep* works for branch *branch*
AND some branch *branch* rep manages account *account*
*/
Works_for NATURAL JOIN Manages

如果您认为该联接必须持有

/* (rows where)
    rep *rep* works for branch *branch*
AND rep *rep* manages account *account*
*/
Works_for_and_manages(rep, branch, account)
然后你陷入了陷阱。

两个连接谓词(语句模板)不等同(在每种情况下,每个行都没有相同的真值),当它"粉丝"基数约束的模式成立。因此,他们的表格并不总是保持相同的价值。

如果每个分支机构只有一名员工 - 他必须管理所有帐户,也许您可​​以看到它们是等效的。但是,那些红衣主教并不会成为粉丝。然而,更可能的是两个谓词不等同,所以你不能从另一个构造谓词/表/关系,而更好的设计有Works_for

Manager(rep, account) -- (rows where) rep *rep* manages account *account*`

然后ManagesSELECT branch, account FROM Works_for NATURAL JOIN Manager。即行for some *rep*, [rep *rep* works for branch *branch* AND rep *rep* manages account *account*]

(由关系运算符产生的表具有由某些相应逻辑运算符产生的谓词。JOIN对应于ANDUNION对应OR等。这就是我们如何能够证明查询表达式返回所需的行。)