2012-03-28 89 views
0

如何如下表正常化:我将如何规范化此表

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

Qty1,Qty2,Qty3字段代表什么? – liquorvicar 2012-03-28 15:31:42

+0

@liquorvicar S/B为给定订单编号订购的每件商品的数量。 – Yuck 2012-03-28 15:32:58

+2

@Yuck但他有一个项目ID和二十个数字字段?更别说标准化它,只是不起作用。我想知道是否有其他事情发生在这里... – liquorvicar 2012-03-28 15:37:14

回答

3

你会希望有三个表:ItemOrder,并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字段中再次使用。我在OrderShipment表中包含Quantity,以便您可以支持部分订单履行。

可以通过加入OrderDetailItem表找到物品描述。您可以通过加入Order表获取订单头信息。

在本设计中,你可能有二十记录,而不是很多列:

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

我已经更新了我的问题。 – Bruno 2012-03-28 18:04:41

+0

@布鲁诺答案仍然是一样的,通过我的次要修改装运日期。 – Yuck 2012-03-28 18:10:05

0

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

我还发现这个问题有点模棱两可,因为数量是重复的,但项目不是。