2013-07-02 68 views
1

我有以下情形的命令:如何設計數據庫,用於跟蹤與設置最大的項目

在訂單跟蹤系統,其中銷售代表跟蹤他們的訂單: 每個訂單可以有共有4種產品類型(可委託的桶),每個桶可以有1個或者沒有該產品類型的產品。

因此,在最大的訂單可以有4個產品(每個可能的類型中的一種)

我需要跟蹤每個四類產品的信息是相同的:產品售出-ID(FK ),status,product-given-id(fk)

將12列添加到訂單表的優點是什麼:3對於每種產品類型(如product-type1-sold-id,product-type1-status) product-type1-given-id .....等等?

這將是最簡單的,但我的問題是,大多數訂單將只有2或3種產品類型銷售,這將導致每個產品類型3個空字段未出售。每天有100個訂單@ 10個訂單,這將導致很多空字段。

我傾向於訂單項目表與訂單id(fk)以減少所有空字段。 這種方法的問題在於,我必須爲我的客戶端代碼處理嵌套數據增加一層複雜度,否則我的服務器代碼在請求時不得不將數據變平,並且能夠解析和保存從客戶端修改發送的平面數據。此外,每100個代表每天10個訂單,每個訂單有1-4個產品類型,這會導致每天將1000-4000行添加到訂單商品表中。有什麼辦法可以克服嗎?

任何意見,將不勝感激。我使用extjs clientside,php serverside,以MySQL作爲我的db。

+0

通常最好有兩個獨立的表格。通過適當的索引,你不應該有任何問題的行數。 – Pitchinnate

回答

0

構建standard order data model,並把它屬於你的應用程序的邏輯,即,在應用層(或可能分貝存儲過程)。

如果您的訂單最多4個更改會怎麼樣?

0

您應該將訂單,產品和產品類型保留在自己的表格中。然後,在PHP中返回結果時,您將使用外鍵左鍵聯接表格。這將允許您以最小的努力擴展應用程序。例如,將最多五種類型添加到產品中將不需要更改數據庫結構。在限制每個訂單的產品類型和產品時,所有內容都將在PHP代碼中處理。

外鍵僅僅是一個指向另一個表的指針。例如,product_types表應該有一個名爲product_id的列用於相關產品的主鍵。訂單中的產品也是一樣的。這是表示一對多或多對多關係的非常常見的方式。

對於代碼示例,這是如何返回訂單的產品。

SELECT * FROM products AS p 
LEFT OUTER JOIN orders AS o ON o.id=p.order_id 
WHERE o.id=1234;