尝试查找部分和传递依赖项

时间:2018-04-05 03:40:54

标签: sql database database-normalization functional-dependencies

npm run

从这个表示例中,我试图理解这两个依赖项。根据我的说法,部分依赖关系有一个主要的复合键,而且传递不具备。

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

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

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

表中的传递依赖性如下: •Ord no_和Ord_date可以吗?

Diagram ,sorry cant put this in the post.

更新1 - 我试图找出但不确定我的答案。  我只想澄清像订单号是否唯一,并确定客户所以两个不同的 order_no 81& 88 可以拥有相同的客户ID C001 。 因此,我认为没有传递依赖。

1 个答案:

答案 0 :(得分: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;
相关问题