如何规范化下表:
Table Order Detail:
-------------------
Order#
Item#
Desc
ShipDate1
Qty1
ShipDate2
Qty2
ShipDate3
Qty3
ShipDate4
Qty4
ShipDate5
Qty5
....
ShipDate20
Qty20
答案 0 :(得分:3)
您希望有三个表:Item
,Order
和OrderDetail
:
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
,以便您可以支持部分订单履行。
通过加入OrderDetail
和Item
表可以找到项目描述。您可以通过加入Order
表来获取订单标题信息。
在此设计中,您可能有20条记录而不是那么多列:
OrderId ItemId Quantity
10 123 5
10 489 20
10 238 39
答案 1 :(得分:0)
Yuck的定义是一个开始。如果同一项目需要多次出现在订单上,我会为订单明细添加一个Id(例如,为了适应价格差异,交付选项,雕刻等)。
我还发现这个问题有点含糊不清,因为重复数量,但项目不是。