数据库关系异常

时间:2015-10-15 07:21:40

标签: sql database entity relational-database relationship

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

enter image description here

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. 您如何更改当前设计以及新设计如何解决您使用当前设计确定的问题。
  2. 我目前的设计是将它分为3个关系: Salesperson(salespersonNumber, salespersonName, commissionPercentage, YearOfHire, deparetmentNumber)

    Product(productNumber, productName, unitPrice)

    Manager(managerNumber, managerName, departmentNumber)

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

    Quantity(productNumber, salespersonNumber)

1 个答案:

答案 0 :(得分:1)

  1. 异常
  2. 在识别识别(潜在)异常时,您需要列出受异常影响的相关属性(您忘记了Salesperson Name,顺便说一句)。具体而言,您列出了依赖于密钥(Salesperson Number, Product Number)的子集的属性,从而违反了2NF。你正走在正确的轨道上。

    但是,请注意不要将属性与异常混淆。如果Bilstein的3个实例中有1个发生了更改,则更新异常将会更新。 (假设的)功能依赖Salesperson Name depends on Salesperson Number将被破坏,数据将不一致(销售员编号437将与多个名称相关联)。请记住,规范化旨在消除多余的关联

    1. 身份
    2. 通过名称识别经理的问题表明建模决策不佳。正如您所说,公司的一组管理人员并不是通过名称进行唯一标识,因此逻辑数据模型与其建模的世界之间存在不匹配。只要我们为不同的管理者使用不同的值,这就不会导致插入,更新或删除异常,但这会妨碍管理员的方便识别。可能的改进是使用多个属性(抽象域通常可以通过属性的组合轻松识别,但像人们通常不是自然域,例如Manager Name, Birthdate将更具识别性,但仍然不是一个好的解决方案) ,将Manager Name转换为代理键(例如Scott1Scott2),或引入新的代理键(例如数字ID)。

      1. 提议的改进
      2. 您提出的设计会对原始表进行规范化,并解决识别问题。除了两个问题之外,它是一个很好的答案:它不包括销售人员和经理之间的关联,并且在您的Quantity关系中,您忘记将数量包括为依赖属性。

        到目前为止工作很好,希望这有帮助。