2010-02-19 88 views
2

這不是與特定語言相關的問題,而是與處理庫存架構的正確方法有關。數據庫中的庫存架構

考慮用於存儲軟件的結構如下:

platforms (platformID*, platformName) 
titles (titleID*, titleName) 

而下面的是獨特的產品

products (platformID*, titleID*, releaseDate, notes) 

一個木匠表,下面是一個表,我想保持跟蹤我庫存

inventory (platformID*, titleID*, quantityAvailable) 

在我看到的例子中,其他人已經創建其中,軟件的每一個獨特的副本存儲在一個單獨的行作爲這樣一個表:

software(softwareID*, softwareTitle) 
inventory(inventoryID*, softwareID*) 

我想知道哪種方法最好?我應該創建一個inventoryID,從而爲每一個獨特的軟件拷貝中的一行:

inventory(inventoryID*, platformID*(fk), titleID*(fk)) 

或使用存儲量而不是表,因爲這樣的:

inventory(platformID*(fk), titleID*(fk), quantityAvailable) 
+0

我省略了我的問題中的一個重要細節;也就是說,我打算跟蹤已借出的庫存。我不確定這將如何影響我的計劃。 – Mohamad 2010-02-19 13:51:16

回答

1

我也會從quantityAvailable開始,而不是所有項目的行。 但是我仍然會選擇inventoryId,因爲可能會發生案例,您必須使用相同的平臺/標題組合對條目進行剖析 - 使用inventoryId,您將來可以進一步增強其功能。

我還建議添加更多列:versionNo ---軟件產品的版本號。有時你可能會有相同產品的不同版本。當你有這個時,把信息放入標題並不是一個好主意(例如,你想要搜索所有「Microsoft Office」產品,而不管版本是什麼......)。

+0

Juergan,謝謝你的迴應。我在上面添加了一條評論,我忽略了一個重要的事實:我想跟蹤庫存項目的位置(例如,如果是遊戲或電影,例如,我想追蹤它目前是哪個客戶)和我我不確定這會如何影響我的計劃。 – Mohamad 2010-02-19 13:53:01

+1

嗨梅爾,我聽起來這樣的信息屬於庫存實體。這是其中一個原因,inventoryId會有幫助(當然是主鍵) - 因爲您可以獲得具有不同屬性的多個庫存條目。當然,您仍然可以選擇每件商品的一行 - 因爲當您的商品庫存經常被拆分時,單一條目更容易處理爲彙總條目,您每次需要將一件商品分拆給客戶。 – Juergen 2010-02-19 14:07:52

+1

另一個想法:您可能希望爲自己的廣告資源可以投放的地點(或客戶)擁有自己的表格(不僅僅是文本字段)。 – Juergen 2010-02-19 14:09:45

1

我應該創建一個inventoryID和 從而爲每一個獨特的軟件 複製一行?

沒有理由這樣做,除非您想在每個獨特的軟件副本上存儲一些信息,例如每個副本的購買日期。這在軟件清單中很少具有政治意義。

或者使用存儲數量爲 的表格代替?

您也可以考慮在你的產品表中新增quantityAvailable列,除非你認爲最終你會想爲每個標題許多庫存,爲了能夠分配的股票數量是下特別優惠,即將到期等。

+0

謝謝,丹尼爾,我在問題的底部添加了一個額外的評論,我完全改變了問題的膚色:基於客戶的庫存跟蹤庫存。 – Mohamad 2010-02-19 13:53:47

2

對於每件庫存都有一個獨特的行的優點是,如果您想跟蹤庫存停滯,庫存處於預訂狀態,已經售出但仍可退貨的庫存等。

我沒有看到任何實際的缺點除了這可能是更多的工作,如果這些東西不是真的需要的話,這些工作可能無法得到回報。

+0

謝謝,佩斯。您可能會注意到,當我問我的問題時,我無意中忽略了一個重要細節:我打算根據借用客戶來跟蹤庫存。例如,我想跟蹤庫存項目在哪個客戶的哪個位置。 – Mohamad 2010-02-19 13:55:09