【问题标题】:Relational Algebra (sanity check): branches whose customers include all Tulsa customers关系代数(健全性检查):客户包括所有 Tulsa 客户的分支机构
【发布时间】:2020-01-19 02:50:59
【问题描述】:

鉴于这些架构:

账户: bname, acct_no, balance
存款人: cname, acct_no
客户: cname, street, city 贷款: loan_no、amount、b_name
借款人: cname、loan_no
分行: bname,b_city,资产

问题:查找客户包括居住在塔尔萨的所有客户的分支机构

我的教授给出了这个解决方案:

Π cname, bname(账户⋈存款人) / Πcnamecity == 'Tulsa' (customers))

我认为 Π cname, bname(account ⋈ depositor) 部分不正确 因为这仅包括有账户的客户的 cname 和 bname,不包括所有客户(不包括有贷款的客户)。该问题并未具体说明“查找其客户拥有帐户的分支机构包括居住在塔尔萨的所有客户”。

我错过了什么?

【问题讨论】:

  • @philipxy 我没有意识到还有更多的信息需要假设。我的意思是这些问题会在考试中问到我提供的内容。 mb
  • 希望您让我们知道您的教授的回应。
  • @philipxy 在课堂上提出来,他说他错了。希望没有更多的错误

标签: relational-algebra relational-division


【解决方案1】:

我们可以猜测——根据名称、对称性和您提到的“贷款和账户客户”——有一个正确的查询涉及(投影的联合)(Account join Depositor)(Loan join Borrower)。因此,您对查询的看法似乎是合理的。但是你没有给出基表谓词(行出现的标准);你要靠我们来猜测。

在约束条件下,某些查询会返回与其他查询相同的结果,否则不会。也许您的教授认为(很明显)借款人必须有一个帐户。在这种约束下,如果你的看法是正确的,那么他们的看法也是正确的。没有像这样的某些限制,你是对的,他们是错的。但你也没有给出限制。

但是,您可能都错了:如果某个分店和 Tulsa 没有客户,那么结果应该保留该分店。但商不会。该规范仅类似于一个对应于一个部门的规范。您的部门返回“其客户包括居住在塔尔萨的所有客户的分支机构”并且至少拥有一位客户。这是规范和实施中涉及除法和几乎涉及除法的经典错误和歧义的案例。另一方面,也许存在没有银行没有客户的约束。那么你的查询是正确的——但不是你的推理。

Re relational querying.(您可以使用它来准确合理地证明您的查询和论点。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多