2014-12-28 121 views
3

TL; DR:將「庫存」數據表與產品表分開存放的原因是什麼?將庫存數據與產品數據保存在單獨的表中

我已經構建了一個應用程序,它存儲了一個零售產品目錄。它包含標準屬性,如大小平坦的表格中的大小,顏色,圖像鏈接,描述等。這只是Magento產品的索引數據,因爲應用程序在單獨的服務器上運行。它也有一列數量,它沒有任何用途;我只是把它放在那裏思考「以防將來」。

現在,我需要在此應用程序上實施某種庫存管理。我一直在研究如何更新/設置數據庫結構,而且似乎系統更喜歡在主要產品表中有單獨的「庫存」表。 Magento也是如此。這是爲什麼? (請注意,我的應用程序不需要爲給定產品分開庫存水平的能力。)

有幾件事發生在我這方面(基本上,庫存將是它自己的對象除了產品對象)

  • 給定產品的多個庫存池。

  • 能力來跟蹤庫存變化(例如誰/什麼負責改變股票等)

  • 能夠從報表或統計不同來源的分離股票。

  • 還有什麼?

更新:

Hazzit,誰回答我的問題,指出了MySQL表高速緩存的一個潛在的非常有用的事實,如果你有很多針對特定表的查詢。讀到這裏HERE,但它指出..

如果表中的更改,使用該表的所有緩存的查詢變得 無效,並從緩存中被移除。

所以,我肯定會從單獨的庫存表中受益匪淺,因爲主產品表並沒有改變很多,但庫存卻是如此。

DB模型參考: http://www.databaseanswers.org/data_models/

+0

我覺得這是在節日期間發佈這個錯誤,哈。 – musicliftsme

+1

這裏沒有那麼多的數據庫專家。 :-)保持庫存數據表與產品數據表分開的原因。 1)庫存水平保持在一個以上的位置。可能是倉庫或銷售點的垃圾箱。 2)有些產品可能沒有庫存。它們可能可用於特殊訂單,可能不再可用,或可能在未來的日期提供。 3)股票可能是更具體的產品版本(尺寸,顏色等)。我希望這有幫助。 –

回答

2

•還有什麼?

TL/DR:是的,緩存。

你已經列出了爲什麼你需要從規範化的角度來看另一個表的大多數原因,可能有幾個更類似的理由有一個單獨的表(甚至兩個)。但還有其他要考慮的因素:庫存量比其他大多數產品信息的變化量要大得多。根據數據庫系統的更新,只有一列可能會或可能不會帶來主要的性能損失。例如:MySQL無效全部查詢緩存任何更新基礎表。因此,如果您更新quantity_in_stock,那麼該表上的任何查詢都會使其緩存失效 - 即使是簡單的select name from products甚至不會使用quantity_in_stock列。

現實生活中的例子:Joomla的文章列表中有一個hits列。每次查看文章時,都會更新該列,導致......您猜對了!清除的查詢緩存。意思是:每當任何人訪問任何在Joomla網站上的文章,那麼可憐的數據庫服務器將不得不清除其通常是整個數據庫中最大的表的查詢緩存。您可能只需在此停用查詢緩存即可。

回到您的問題:除非您希望您的系統承受沉重的負擔(例如面向公衆的網站),否則您應該只是自己的一個問題:任何產品的庫存量是否超過一個?任何數量的庫存都會與多個產品相關嗎?如果您的答案在兩種情況下均爲「否」,請將該列放入主產品表格中。

+0

緩存機制非常好的一點。我沒有意識到它!我會在其他人的OP中發佈一個鏈接。謝謝! – musicliftsme

相關問題