2012-04-05 63 views
1

当你在网上购物时,你可以将它们添加到你的购物篮中,当你添加了一些东西到你的购物篮时,你可以创建一个订单。从本质上讲,我试图想到允许将多个项目放入一个订单的最佳方式。这更多的是不知道如何将数据存储在Access数据库中的情况。我无法弄清楚这些字段应该被调用。我的当前的尝试是这样的:为库存管理程序创建“购物篮”?

tblOrders 
OrderID (Primary Key) 
CustomerID (Foreign Key) 
OrderDetailsID 


tblOrderDetails 
OrderDetailsID 
PartID (Foreign Key) 
Quantity 

This是所述第一表的与实施例数据的图像和this是所述第二表的一个例子。我很可能错过了一些非常明显的事情。

提前谢谢。

回答

1

我想构建这样的:

OrderHeader 
    ID (Primary Key) 
    CustomerID (Foreign Key) 

OrderDetail 
    ID (Primary Key) 
    OrderHeaderID (Foreign Key) 
    PartID (Foreign Key) 
    Quantity 
  • 阅读上Hungarian Notation作为命名规则,并考虑删除您tbl前缀。这只是您可能会选择忽略的偏好。
  • OrderDetailIDOrderHeader将不起作用,因为您将无法生成必需的1:M关系,其中订单可以有多个明细行。
  • 为主键使用代理ID字段。他们使JOIN更容易工作。如果您想强制执行条件,即订单只能使用一次,那么您应该在列OrderHeaderIDPartID上使用唯一的数据库约束。

这里的评论样本查询...

SELECT H.ID OrderID, D.PartID, D.Quantity 
FROM OrderHeader AS H INNER JOIN 
    OrderDetail AS D ON H.ID = D.OrderHeaderID 
WHERE H.ID = 1234; 
+0

好吧,我想我明白了这一点,并感谢有趣的读物上匈牙利命名法!我在编程方面有点初学,这可能听起来很愚蠢,但是对于上面的结构,我会使用[this](http://www.w3schools.com/sql/sql_join.asp)吗?我可以看到,这将是解决方案,但我有问题可视化。 在上面的链接中使用你的例子意味着我们的相关字段将是OrderHeaderID,我相信会使用INNER JOIN。我似乎无法将我的案例整合到网站上提供的示例中... – Paul 2012-04-05 13:47:21

+1

@ user1305482是的,您正确使用'INNER JOIN'。我用一个例子更新了答案。 – Yuck 2012-04-05 13:57:25

+0

好的,谢谢,Yuck。我会给它一个去,希望它能解决我的问题! :) – Paul 2012-04-05 14:20:47