对于具有多个单位,成本价格和有效期的产品的数据库,这是一种好习惯吗?

时间:2019-05-04 23:05:58

标签: sql-server database database-design

我正在一个数据库上工作,该产品将具有多个到期日期,多个成本价格,因此同一产品将有多个库存条目,为此我进行了初始数据库设计,我想问一下你们这是否是一个好习惯如果没有,请告诉我如何正确执行操作。

这是我到目前为止所想的。

创建3个表(1. Product_info-2.Product_Stock-3.units) 下面是详细结构:

    Units Table
--------------------------
id Name 
  |------|
1 |Piece |
2 |Pack  |
3 |Kilos |

在这里,我将列出所有将用作基本产品单位的单位。


                Product Information Table
----------------------------------------------------------------------------------------------------------------------- 
id Name   AvgCostPrice AvgPrice AvgPackCostPrice AvgPackPrice totalQuantity BaseUnitID  multiplier PackBarcode  Barcode
  |------|------------|--------|----------------|------------|-------------|----------|----------|------------|--------|
1 |Soda  |            |        |                |            |  108        | 1        | 12       |   111111   | 111222 |
2 |Water |            |        |                |            |  50         | 1        | 6        |   222222   | 222111 |


  1. 在上表中,包装和单件的平均成本价和售价将根据我为该产品所拥有的不同库存来计算。
  2. 乘数列将显示一个产品包可容纳多少件物品。
  3. “总数量”将保存我在(产品库存表)中具有的不同库存数量的总和,而且它将仅对产品基本单位的数量求和。 例如:如果苏打水的基本单位是包装,那么它将对(产品库存表)中的(包装数量)列求和。否则它将在该表中求和(数量)。
                Product Stock Table
---------------------------------------------------------------------------------------------------------------------------
id ProdID UnitID  CustomBarcode  Quantity      PackQTY  CostPrice Price   PackCostPrice  PackPrice expDate        Enabled
  |------|-------|--------------|-------------|-------|----------|-------|--------------|---------|--------------|---------
1 |1     |   1   |              |     84      | 7     | 2.0      | 2.4   | 24.0         | 29      |  20/may/2019 |  1
2 |1     |   1   |              |     24      | 2     | 1.5      | 1.9   | 18.0         | 23      |  10/aug/2019 |  1
2 |2     |   3   |              |     50      | 0     | 3.0      | 5.0   | 0.0          | 0       |  10/Feb/2019 |  1

1。enabled列将用作(布尔值)确定是否在出售时使用此库存。 例如:如果我想出售一个汽水罐,我有两个库存。如果第一个库存为0,则enable列为false,因此它将仅从第二个库存中减去已售出的数量,并在(SalesDetails表)中使用其价格和成本价

  1. 当即将过期的库存有折扣时,将使用“自定义条形码”列来分离库存。

我还考虑了将(库存表)中每种产品库存的不同单位分开

因此,当我要出售24件苏打水和3包苏打水时,它将根据其(启用列值= True)选择最旧的库存,并从中减去该数量,如果数量达到零,则(启用列) )值将变为false。

此后它将再次执行相同的操作,但是这次它将PackQtY的值从7更改为4,并且数量列值将通过此[Product_Stock.Quantity = Product_Stock.Quantity-(QtySold * Prodcut_info .multiplier Column Value)],它将为84-(3 * 12)= 48

销售明细结构输出如下:

                Sale Details Table
----------------------------------------------------------
id ProdID UnitID    Quantity   CostPrice    Price   total  CostTotal
  |------|-------|-----------|-------------|-------|------|---------| 
1 |1     |   1   |    24     |     2.0     | 2.4   | 57.6 | 48.0    |
2 |1     |   2   |    3      |     18.0    | 23.0  | 69.0 | 54.0    |

                Product Stock Table (After Selling 24 pieces of Soda and 3 packs of Soda)
---------------------------------------------------------------------------------------------------------------------------
id ProdID UnitID  CustomBarcode  Quantity      PackQTY  CostPrice Price   PackCostPrice  PackPrice expDate        Enabled
  |------|-------|--------------|-------------|-------|----------|-------|--------------|---------|--------------|---------
1 |1     |   1   |              |     48      | 4     | 2.0      | 2.4   | 24.0         | 29      |  20/may/2019 |  1
2 |1     |   1   |              |     0       | 0     | 1.5      | 1.9   | 18.0         | 23      |  10/aug/2019 |  0

对不起,如果我不能很好地解释它。 预先非常感谢。

1 个答案:

答案 0 :(得分:1)

首先,您需要谨慎使用名词。 例如:“价格”与“成本”的含义不同,“成本价格”听起来像是矛盾的词。我建议您限制自己使用“成本”或“价格”。

吴万杰(Van Ng)询问您是否完成了实体关系图。好吧,在您似乎处在的阶段,从ER图开始可能是不明智的,因为ER图作为您已经定义的模型的摘要很有用-而且您还没有进入该阶段。 / p>

平均值:如果正确设计数据库模式,则可以计算平均值。您不需要将平均值作为基本表。

我建议您考虑使用称为“ object-role modeling”(ORM)的基于事实的建模方法,因为在考虑绘制ER图之前,您可以从“事实”开始。

示例: 我使用NORMA ORM工具创建了以下示例:

首先,我阅读了您的文字,提取了事实,然后使用这些事实来设计对象角色模型。 然后,我使用NORMA工具生成了对象角色模型的“逻辑视图”。 (以毫秒为单位)

我没有添加您提到的所有内容,但我希望这足以帮助您取得进步。

该示例包含两个伪像:

1:由NORMA工具 生成 的逻辑模型。

2:生成逻辑模型的事实。

[The automatically generated logical model[2]

The facts from which the logical model was generated