【问题标题】:Database Relation Anomalies数据库关系异常
【发布时间】:2015-10-15 07:21:40
【问题描述】:

我的任务是找出这种关系中的异常情况。我发现了一些插入、删除和更新异常。

Commission Percentage: the percentage of the total sales made by a salesperson that is paid as commission to that salesperson.

Year of Hire: the year the salesperson was first hired

Department Number: the number of the department where the salesperson works Manager Name: name of the manager of the department

但是,我对我拉出的异常感到困惑。以下是声明:

公司中不能有同名的经理,因为除了姓名之外没有经理实体的主要标识符,该名称可以在公司内重复。

我可以知道我应该如何表达上述陈述以及我应该将它包含在哪个(更新/删除/插入)异常中?

谢谢


我还可以在下面请求其他帮助吗:

  1. 您将如何更改当前设计以及您的新设计如何解决您在当前设计中发现的问题。

我目前的设计是将其分为 3 个关系: Salesperson(salespersonNumber, salespersonName, commissionPercentage, YearOfHire, deparetmentNumber)

Product(productNumber, productName, unitPrice)

Manager(managerNumber, managerName, departmentNumber)

但是,我错过了数量实体。 数量需要 productNumber 和 salespersonNumber 的复合键。 我应该自己建立另一个关系吗?

Quantity(productNumber, salespersonNumber)

【问题讨论】:

  • 为您提供了哪些程序来识别和解决异常? PS:找一个填空(命名)语句(谓词),其中空格是按属性命名的,即一行值变成语句(命题)。正确命题的行进入表中,而错误的则留在外面。不要使用任何代词;而是重用属性。然后每当出现异常时,它是因为有问题的连接词与。我们删除 AND 并创建以谓词为连词的新表。
  • 您对“异常”的定义是什么?因为“不可能有经理……”可能是一个问题(非正式术语),但它不是一个异常(技术术语)..

标签: sql database entity relational-database relationship


【解决方案1】:
  1. 异常情况

识别(潜在)异常时,您会列出受异常影响的相关属性(您忘记了Salesperson Name,顺便说一句)。具体来说,您列出了依赖于键 (Salesperson Number, Product Number) 的子集的属性,因此违反了 2NF。你在正确的轨道上。

但是,请注意不要将属性与异常混淆。如果 Bilstein 的 3 个实例中的 1 个被更改,则会出现更新异常。 (假定的)函数依赖 Salesperson Name depends on Salesperson Number 将被破坏并且数据将不一致(销售人员编号 437 将与多个名称相关联)。请记住,标准化旨在消除冗余的关联

  1. 身份

按名称识别经理的问题表明建模决策不佳。正如您所说,公司的一组经理不是按名称唯一标识的,因此逻辑数据模型与其建模的世界之间存在不匹配。只要我们对不同的管理器使用不同的值,这不会导致插入、更新或删除异常,但是会妨碍对管理器的方便识别。可能的改进是使用多个属性(抽象域通常很容易通过属性组合来识别,但像人这样的自然域通常不会,例如Manager Name, Birthdate 会更具识别性,但仍然不是一个好的解决方案),转动@ 987654326@ 插入代理键(例如Scott1Scott2),或引入新的代理键(例如数字 ID)。

  1. 建议的改进

您提出的设计规范化了原始表格并解决了识别问题。这是一个很好的答案,除了两个问题:它不包括 Salesperson 和 Manager 之间的关联,并且在您的 Quantity 关系中,您忘记将数量作为依赖属性包含在内。

到目前为止做得很好,希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多