订单发货数据库表

时间:2009-06-04 03:55:17

标签: database-design

我正在为我的朋友设计一个简单的汽车零件数据库,以了解有关数据库设计的更多信息。我坚持使用ORDERORDERITEMSHIPMENTPACKING LISTINVOICECONTAINER关系。

ORDER包含ORDERITEM,这是个别部分(一个条目的金额可以超过一个)。当全部或部分ORDERITEM可用时,将发生装运。对于每批货,可以使用多个包装清单。对于每个包装清单,需要一个INVOICE。包装清单将包含一个或多个CONTAINER,每个CONTAINER内至少有一个ORDERITEM。

我不知道将数据拆分成上表是否是一个好主意,将它们连接在一起的更好方法是什么?


编辑:

以下是我的数据库设计草案:http://www.flickr.com/photos/oldyoungguy88/3595283724/sizes/o/

有两个部分。一个是'库存'的PARTS表,一个是'文件'的CUSTOMER,ORDERS,INVOICES,SHIPMENTS表。

1 个答案:

答案 0 :(得分:1)

你所说的是标准化,你需要做的是外键。 Wikipedia article on Foreign Keys这是一种很好的方法,可以帮助您在数据库中有效地组织事物。

关于数据库规范化over here,还有一篇非常好的文章,似乎比我能做的更好。下面是我描述你想要做的事情。

如果您有一对多关系,则这些项目可以存储在不同的表格中。假设我们有以下ORDERTABKE。我已经为ORDERTABLE添加了一个主键,因此我为表中的每一行都有一个不同的标识符。 Wikipedia article on Primary Keys

OrderID - Primary Key
OrderDate
OrderStatus
etc...

您的OrderItems表可能看起来像

OrderItemID - Primary Key
OrderID - Foreign Key
PartDescription
Qty

ORDERITEM表链接到ORDERTABKE,因为它具有父行的OrderID的外键。因此,每个OrderTable都可以有一个或多个链接到它的OrderItem。您甚至可以将零件放在自己的表格中,例如PARTS。这样,您只需存储一次零件描述,就可以使您的OderItem表尽可能简单。

另外,仅仅因为表有外键,并不意味着它不能拥有另一个表通过它的外键引用的主键。它也可能会因为规范化而变得疯狂,因为它很难编写代码。当你应该而且不应该规范化你的数据时,你会通过反复试验来学习。

我建议阅读有关数据库设计和规范化的一些参考资料。关于这个主题有很多书。试着找到一个更注重实际例子,然后是你为什么要这样做的理论。

我希望这会有所帮助。