Database design 我如何规范化这个表

Database design 我如何规范化这个表,database-design,Database Design,如何规范化下表: Table Order Detail: ------------------- Order# Item# Desc ShipDate1 Qty1 ShipDate2 Qty2 ShipDate3 Qty3 ShipDate4 Qty4 ShipDate5 Qty5 .... ShipDate20 Qty20 您需要有三个表:Item、Order和OrderDetail: OrderDetail: OrderId, ItemId, Quantity, ShipmentDate

如何规范化下表:

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

您需要有三个表:
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
是表的代理键。它在
orderShipping.OrderDetailId
字段中再次使用。我在
ordershipping
表中包含了
Quantity
,因此您可以支持部分订单履行

可通过连接
OrderDetail
item
表找到项目说明。您可以通过加入
order
表来获取订单标题信息

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

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

您需要有三个表:
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
是表的代理键。它在
orderShipping.OrderDetailId
字段中再次使用。我在
ordershipping
表中包含了
Quantity
,因此您可以支持部分订单履行

可通过连接
OrderDetail
item
表找到项目说明。您可以通过加入
order
表来获取订单标题信息

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

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

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


我还发现这个问题有点模棱两可,因为数量是重复的,但项目不是。我会为订单详细信息添加一个Id,以防同一项目需要在订单上出现多次(例如,为了适应价格差异、交付选项、雕刻等)


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

Qty1、Qty2、Qty3字段代表什么?@LiquiorVicar S/B针对给定订单号订购的每个项目的数量。@是的,但他有一个项目id和二十个数量字段?更不用说正常化了,这根本不起作用。我想知道这里是否发生了其他事情……Qty1、Qty2、Qty3字段代表什么?@LiqorVicar S/B给定订单号下的每件商品的订购数量。@是的,但他有一个商品id和二十个数量字段?更不用说正常化了,这根本不起作用。我想知道这里是否发生了其他事情…@Bruno答案仍然相同,只是我对装运日期进行了小编辑。@Bruno答案仍然相同,只是我对装运日期进行了小编辑。