2012-04-05 26 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