规范化传递依赖性

时间:2016-09-19 05:40:55

标签: sql relational-database database-normalization

我需要帮助进行规范化。我无法理解如何在我的数据库项目中完成3NF。这里是 的 1NF

规范化表

Donut ID(PK)
Donut Name
Description
Unit Price
Donut Order ID
Qty
CustomerID
Last Name
First Name 
Last Name 
Street Address
Apt
City
State
Zip
Home Phone
Mobile Phone
Other Phone
Order Date 
Special Notes

2NF 甜甜圈表

DonutID (PK)
Donut Name
Description
Unit Price

销售订单表

Sales OrderID (PK)
CustomerID
Last Name
First Name 
Last Name 
Street Address
Apt
City
State
Zip
Home Phone
Mobile Phone
Other Phone
Order Date
Special Notes 

销售订单行项目表

Sales Order (PK)(FK)
Dount ID (PK)(FK)
Qty

我的问题是摆脱3NF中的传递依赖。我将在第四个表中使用什么属性,以便在没有主键的情况下没有任何冗余或依赖于彼此?任何方向将不胜感激。

1 个答案:

答案 0 :(得分:1)

Sales Order表格对客户的姓名和地址具有传递依赖性。如果仔细观察,您会看到每个订单都包含给定客户的完整地址和名称信息,即使该信息可能不会从一个订单更改为下一个订单。要解决此问题,您可以将此信息移动到具有以下字段的新Customer表中:

客户表

CustomerID (PK)
Last Name
First Name 
Last Name 
Street Address
Apt
City
State
Zip
Home Phone
Mobile Phone
Other Phone

Sales Order表将成为:

销售订单表

Sales OrderID (PK)
Order Date
CustomerID (FK)
Special Notes

请注意,订单日期可以保留在Sales Order表中,因为从概念上讲,它代表每个订单发生时的时间戳,对于该特定订单而言是唯一的。