我该如何规范化这个表格

时间:2012-03-28 15:28:30

标签: database-design

如何规范化下表:

Table Order Detail:
-------------------
Order#
Item#
Desc
ShipDate1
Qty1
ShipDate2
Qty2
ShipDate3
Qty3
ShipDate4
Qty4
ShipDate5
Qty5
....
ShipDate20
Qty20

2 个答案:

答案 0 :(得分:3)

您希望有三个表:ItemOrderOrderDetail

OrderDetail: OrderId, ItemId, Quantity, ShipmentDate
Order: Id, ...
Item: Id, Desc, ...

更好的方法是将订单明细与发货明细分开:

OrderDetail: Id, OrderId, ItemId, Quantity
Order: Id, ...
Item: Id, Desc, ...
OrderShipment: Id, OrderDetailId, ShipmentDate, Quantity

OrderDetail.Id是该表的代理键。它在OrderShipment.OrderDetailId字段中再次使用。我在Quantity表中添加了OrderShipment,以便您可以支持部分订单履行。

通过加入OrderDetailItem表可以找到项目描述。您可以通过加入Order表来获取订单标题信息。

在此设计中,您可能有20条记录而不是那么多列:

OrderId ItemId Quantity
10      123    5
10      489    20
10      238    39

答案 1 :(得分:0)

Yuck的定义是一个开始。如果同一项目需要多次出现在订单上,我会为订单明细添加一个Id(例如,为了适应价格差异,交付选项,雕刻等)。

我还发现这个问题有点含糊不清,因为重复数量,但项目不是。