2013-03-10 63 views
0

我正在爲某些業務開發完整的解決方案。我有一個具體的要求:系統必須能夠按件登記銷售產品,讓我解釋一下:如果一盒香菸包含20件,該軟件必須能夠註冊整箱或兩支香菸的銷售。零售數據庫設計

但是由於軟件也必須能夠管理庫存,所以我很困惑如何設計一個數據庫來支持這個功能。

下面是幾秒鐘前生成的一個虛擬示例,所以我知道這太可怕了,我只是想演示一個簡單的示例。

dummy model

我打算在ProductInventory添加一條記錄在整個商店每個可用的產品,每當我的客戶希望銷售某種產品​​的一些作品,軟件將:通過條形碼篩選產品,訂單他們由PiecesLeft升序並從結果集的頂級產品中減去這些片段。

這是正確的方法嗎?我對這種方法感到不安,因爲我認爲它會在ProductInventory上產生太多記錄,你們覺得怎麼樣?你會怎麼做?

我想合併的產品具有相同的條碼和PiecesLeft有較少的記錄,但我不知道該怎麼做(也許使用觸發器?)

因此,要總結,我要的是什麼忠告你可以給我和我的方法意見。

謝謝你的時間。

回答

0

首先,我建議擺脫自然PK(條形碼)。它可能(也可能應該是)條碼字段的唯一約束,但不是PK。

關於您的香菸示例 - 我想說的是,盒子本身就是一種產品,就您的應用而言(它可能作爲產品表中的自我關係或作爲獨立的實體來實施 - 例如selable_product,它擁有自己的產品價格 - 我預計區塊會比10包便宜一些)

+0

條形碼只是懶惰的PK,它是我創建的虛擬圖表,甚至不會接近它會是什麼,你會建議作爲PK,一個自動增量int? 我絕對不會做自我關係,因爲大約有18K個完全不同的產品記錄,並且每個產品都有10-30個產品庫存,這將導致巨大的表格,我必須不斷地閱讀/寫 – Areks 2013-03-10 00:43:25

+0

@Areks:沒有必要的自我關係,它只是一個選項...身份(或序列生成的序列,如果你碰巧使用SQLServer 2012)是我選擇。 – a1ex07 2013-03-10 00:47:08

+0

在你的兩支香菸或一盒20支香菸的例子中,兩者都是在同一個條形碼下嗎? – 2013-03-10 00:55:03

0

你說你正在開發一個complete solution,所以我假設你也將銷售額存儲在數據庫中。

在您的Product表中,您可以跟蹤該產品的件數。 在你的OrderRow(或任何你會叫它),然後你跟蹤有多少件被出售。

要優化這一點並減少對連接的需求,您可以將計算後的持續列添加到Product,該列包含總件數 - 銷售件數。

這就是我所能想到的有限信息。

+0

是的,我也在儲存銷售。我主要關心的是保持庫存更新,而不是現在儲存銷售。 – Areks 2013-03-10 01:18:20

1

當您考慮庫存時,問題是您存儲的庫存不一定是您銷售的庫存。所以我認爲要做到這一點的正確方法需要一個能夠將一種「種類」庫存準確地轉換爲另一種庫存的業務流程。

假設您從存儲庫存中的100箱香菸開始。有人進來想要兩支香菸。要獲得準確的庫存,轉換必須如下所示。

First transformation 
100 cartons -> 99 cartons 
       10 packs 

Second transformation 
99 cartons 
10 packs ->  9 packs 
       20 cigarettes 

最後,銷售只是兩支香菸,所以您的交易結束庫存看起來像這樣。

99 cartons 
9 packs 
18 cigarettes 

在數據庫端處理並不是特別困難。除了一個普通的舊庫存模式之外,您還需要一些描述有效轉換的表格 - 您不能將包裝香菸變成瓶裝啤酒 - 並且您需要存儲過程或應用程序代碼以便轉變。

處理條形碼與應用程序有很大關係。在當地的苗圃(您購買植物和苗木),條碼標籤經常脫落或迷路。收銀員有一個包含所有條形碼的筆記本。當工廠缺少條形碼時,他們會掃描書中的條形碼。