【问题标题】:Try to find Partial and transitive dependencies尝试找到部分依赖和传递依赖
【发布时间】:2018-04-05 03:40:54
【问题描述】:
Cust_id| Name |Ord_no|Ord_Date     |PROD-ID|Descr |Qty_ord|
C001   | Pink | O81  |    15-Apr   |P005   |Chisel|6      |
C001   | Pink | O81  |    15-Apr   |P004   |Jane  |14     |
C0075  | Red  | O99  |    16-Apr   |P015   |Saw   |3      |
C009   | Black| O56  |    16-Apr   |P033   |Punch |24     |
C009   | Black| O56  |    16-Apr   |P004   |Jane  |9      |
C001   | Pink | O88  |    17-Apr   |P015   |Saw   |10     |    

从这个表格示例中,我试图了解这两种依赖关系。据我说,部分依赖有一个主复合键,而传递没有。

我认为主键是 Ord_no 和 Prod_id。不确定 Cust_id

唯一依赖于整个键的非键列是数量。其余的都是部分依赖。不确定此表中是否存在传递依赖

表中的部分依赖有: • Cust_id 和名称 • Prod_id 和 Decr

表中的传递依赖关系如下: • Ord no_ 和 Ord_date 可以是?

更新 1-我试图弄清楚但不确定我的答案。 我只是想澄清一下 order no 是唯一的,并确定客户 那么两个不同的 order_no 81 & 88 怎么能有相同的客户 ID C001 . 因此我认为没有传递依赖。

【问题讨论】:

  • 请谷歌“stackexchange 作业”。提供和/或引用您的教科书并展示和证明您的工作遵循它。解释你被卡住的地方和原因。这只是一堆与任何定义或算法无关的陈述。
  • 部分和传递 FD 的定义不参考 CK。 NF 与传递的 FD 和 CK 有关。

标签: sql database database-normalization functional-dependencies


【解决方案1】:

我在您当前的表中看到了许多可以重构的依赖项:

  • Cust_id 最有可能确定客户名称
  • Ord_no 确定该订单中包含的产品集
  • PROD-ID 确定该产品的描述

我建议使用以下架构,涉及四个表:

Customers

Cust_id (PK) | Name
C001         | Pink
C009         | Black
C0075        | Red

Products

PROD-ID (PK) | Descr
P004         | Jane
P005         | Chisel
P015         | Saw
P033         | Punch

Orders

Ord_no (PK) | Ord_Date | Cust_id
056         | 16-APR   | C009
081         | 15-APR   | C001
088         | 18-APR   | C001
099         | 16-APR   | C0075

OrdersDetails

Ord_no | PROD-ID | Qty-ord   (primary key is Ord_no, PROD-ID)
O56    | P004    | 9
O56    | P033    | 24
O81    | P004    | 14
O81    | P005    | 6
O88    | P015    | 10
O99    | P015    | 3

现在,如果您想要当前的输出,您可以通过连接查询获得它:

SELECT
    c.Cust_id,
    c.Name,
    o.Ord_no,
    o.Ord_Date,
    od.PROD-ID,
    p.Descr,
    od.Qty-ord
FROM Customers c
INNER JOIN Orders o
    ON c.Cust_id = o.Cust_id
INNER JOIN OrdersDetails od
    ON o.Ord_no = od.Ord_no
INNER JOIN Products p
    ON od.PROD-ID = p.PROD-ID;

【讨论】:

  • 那么哪些是主键?
  • @RohanKapoor 我已经标记了主键列。我的方法可能不是 100% 正确,但它走在正确的轨道上,而且比你开始的方法要好得多。
  • 对不起,我的表中有一个错误,我忘了添加一列。
  • 客户 ID、Ord_no 和 Prod_id?是我认为的主键
  • 退后一步。您甚至还没有规范化的表,并且您正在询问主键是什么。首先,是否清楚我生成上述表格的原因?如果是这样,那么我们可以讨论主键。
猜你喜欢
  • 2022-06-25
  • 2018-07-06
  • 2014-12-20
  • 2019-08-23
  • 2019-10-29
  • 2021-07-26
  • 1970-01-01
  • 2017-12-09
相关资源
最近更新 更多