2017-01-20 40 views
0

我正在爲使用Sql服務器作爲後端的零售業務設計一個數據庫。有一些產品可以以多種單位出售,例如,鉛筆可以以ea和十幾種方式銷售,紙張可以以單張,鉸鏈和廣告形式出售。基本上,每個產品都可以以多個單位銷售。具有多個單元的產品的數據庫設計

應用程序需要支持

  • 可以接收來自供應商的產品在衆多單元。有時候我們可能會訂購1支鉛筆,下次我們訂購2盒鉛筆時,我們可能會訂購 。
  • 可以以多個單位銷售產品,例如,我們必須能夠在同一帳單中銷售1盒和2支鉛筆。
  • 應用程序還需要FIFO或LIFO
  • 支持

下面是我最初的設計

Table: Products 
ProductId | Barcode | Name | BaseUnitId 
1   | XXXX | Pencil | 1 

Table: Units 
UnitId | Name 
1  | Each/Pieces 
2  | Box 

Table: UnitConversion 
ProductId | BaseUnitId | Multiplier | ToUnitId | 
1   | 1   | 24   | 2  | // 24 pencils in a box 

Table: Inventories 
Id | ProductId | UnitId | Quantity 
1 | 1   | 1   | 48    //In pieces 

Table Invoices 
Id | ProductId | UnitId | Quantity 
1 | 1   | 2  | 1.5     //Sold/Purchased 1.5 boxes that means 18 pieces 

有沒有在我的設計任何瑕疵?有什麼我想念的嗎?這不是一個新問題。有沒有人有任何想法(或例子)?

+0

我刪除了無關的數據庫標記。 –

回答

3

我有幾個建議:

  1. 好像你可以刪除UnitConversion表,只存儲對單位記錄(乘數值所以你存儲1對每一/件,24人反對框)。那麼轉換就是'From'單位的數量除以'To'單位的數量。

  2. 不同單位可能有不同的條形碼嗎?如果是這樣,則可以將條形碼存儲在單元記錄中。

  3. 在您的庫存和發票表中,ProductId列可能是不必要的,因爲您可以通過加入Units表來獲得該列。

  4. 爲了支持FIFO或LIFO,您需要存儲更多關於您股票的特定信息,因此您可以通過某種方式瞭解預訂日期,剩餘數量,以及可能的某種方式來識別特定項目(或項目組)。

希望這有助於!

編輯:您的庫存表可能看起來像這樣:

Id | UnitId | [identifier] | CurrentQuantity | DateAdded 
1 | 1  | ABC123  | 20    | 2017-01-10 
2 | 1  | ABC124  | 96    | 2017-01-12 

的[符]列(!名字的由你),將存儲識別物理股票的一些方法,這可能是東西的用戶在收到物品時進行分配,或者他們的供應商可能已經添加了一些可以使用的物品。

要在某人想要購買24支鉛筆的情況下實施FIFO,您需要從標記爲「ABC123」的項目組和標記爲「ABC124」的項目組中選取20項。

+0

Thanks @ sam..Can你可以提供庫存表的粗略圖表。所以我可以理解LIFO或不同的條形碼? – Ljt

+0

非常感謝你@sam – Ljt

相關問題