确定关系及其正常形式的功能依赖性

时间:2011-07-24 19:27:36

标签: database normalization functional-dependencies third-normal-form

我正在学习数据库测试,而且学习指南中有一些(很多)DB正常化的练习和功能依赖,但老师没有做过任何类似的练习,所以我想有人帮我理解这可以解决其他16个问题。

1)给出以下逻辑架构: 关系product_sales

POS     Zone     Agent   Product_Code   Qualification   Quantity_Sold
123-A   Zone-1   A-1     P1             8               80
123-A   Zone-1   A-1     P1             3               30
123-A   Zone-1   A-2     P2             3               30
456-B   Zona-1   A-3     P1             2               20
456-B   Zone-1   A-3     P3             5               50
789-C   Zone-2   A-4     P4             2               20

假设: •销售点分为区域。 •每个销售点都有代理商。 •每个代理在单个POS中运行。 •同一销售点的两个代理商不能销售同一产品。 •对于代理商销售的每种产品,根据产品和产品分配资格 销售数量。

a)表明存在4种功能依赖性 b)这种结构的正常形式是什么。

2 个答案:

答案 0 :(得分:1)

为了让您开始找到4个功能依赖项,请考虑依赖在另一个属性上的哪些属性:

例如:Zone是否依赖于POS? (如果是, POS - >分区)或POS是否依赖于区域? (在这种情况下区域 - > POS )。

五个语句中的四个告诉您某些属性之间的依赖关系(或几个属性的组合)。


至于规范化,有一个(相对)清晰的教程here。短语"the key, the whole key, and nothing but the key"也是记住第1,第2和第3范式的好方法。

答案 1 :(得分:1)

在你的评论中,你说

  嗯,根据我读过的理论,我认为它可能是,但我有   很多疑惑:POS→Zone,{POS,Agent}→Zone,Agent→POS,{Agent,   Product_code,Quantity_Sold}→资格认证 -

我认为这是一项很好的努力。

  1. 我认为POS-> Zone是对的。
  2. 我不认为{POS,Agent}→Zone是对的。如果您查看示例数据,并考虑一下,我认为您会发现Agent-> POS,即Agent-> Zone。
  3. 我不认为{Agent,Product_code,Quantity_Sold}→资格认证是对的。该要求规定“对于代理商销售的每种产品,根据产品和销售数量分配资格。”其中重要的部分是“取决于产品和销售数量的资格”。资格取决于产品和数量,因此{Product_code,Quantity} - > Qualification。 (要求中没有任何内容告诉我,来自两个不同代理商的相同订单的资格可能不同。)
  4. 因此,基于您的评论,我认为您目前已具备这些功能依赖

    • POS->区
    • 剂 - > POS
    • 剂 - >区
    • Product_code,Quantity-> Qualification

    但是至少缺少一个对确定密钥有重大影响的东西。这是要求。

      

    同一销售点的两个代理商不能销售相同的产品。

    您如何表达该要求中隐含的功能依赖性?