库存数据库的最佳结构

问题描述 投票:12回答:6

我想为我的库存创建一个小型数据库,但我在挑选结构时遇到了一些问题。库存将在每天结束时每天更新。

我面临的问题如下。

我有一张桌子供我的产品使用

id, name, price, quantity.

现在我有另一张桌子供我销售,但有我的问题。我需要什么样的领域。在一天结束时,我想存储这样的记录:

20       product_x       $ 5,00         $ 100,-
20       product_y       $ 5,00         $ 100,-
20       product_z       $ 5,00         $ 100,-
20       product_a       $ 5,00         $ 100,-
-------------------------------------------------
                                        $ 400,-

那么我该如何在销售记录中对此进行建模。我是否只使用产品ID的逗号分隔创建连接记录。

或者是否有另一种方式以正确的方式对此进行建模。

database structure
6个回答
8
投票

我有一个每天每件商品的表 - 存储日期,商品ID,销售数量和销售价格(即使它也在产品表中存储 - 如果更改,您需要你在保存时实际售出的价值)。您可以在查询中计算每个项目日的总计和每天的总计。

表:

create table product (
  id integer primary key,
  name varchar(100) not null,
  price decimal(6,2) not null,
  inventory integer not null
);

create table sale (
  saledate date not null,
  product_id integer not null references product,
  quantity integer not null,
  price decimal(6,2) not null,
  primary key (saledate, product_id)
);

报告一天:

select s.product_id, p.name, s.quantity, s.price, (s.quantity * s.price) as total
from product p, sale s
where p.id = s.product_id
and s.saledate = date '2010-12-5';

报告所有日子:

select saledate, sum(quantity * price) as total
from sale
group by saledate
order by saledate;

一个很好的主日历报告,带有摘要行:

select *
from (
    (select s.saledate, s.product_id, p.name, s.quantity, s.price, (s.quantity * s.price) as total
    from product p, sale s
    where p.id = s.product_id)
  union
    (select saledate, NULL, 'TOTAL', sum(quantity), NULL, sum(quantity * price) as total
    from sale group by saledate)
) as summedsales
order by saledate, product_id;

31
投票

这是一个支持许多方面的模型,

  1. 支持站点,位置和仓库等。
  2. 支持分类和分组
  3. 支持通用产品(例如“表时钟”和特定产品“Citizen C123多闹钟”)
  4. 还支持品牌变体(由各个制造商提供)
  5. 有CSM(颜色/尺寸/型号支持)Ex。 Bata Sandles(彩色45英寸蓝色)
  6. 系列产品实例(如电视,冰箱等)
  7. 批量控制/批量控制与序列号。
  8. 包大小/ UOM和UOM转换
  9. 制造商和品牌以及供应商
  10. 还包括示例事务表(采购订单)
  11. 还有许多其他交易类型,例如问题,转移,调整等。

希望这会有所帮助。如果您需要有关每张桌子的更多信息,请与我们联系。

干杯...!!!

Wajira Weerasinghe。

网站

  • ID
  • site_code
  • SITE_NAME

仓库

  • ID
  • SITE_ID
  • warehouse_code
  • warehouse_name

物品类别

  • ID
  • category_code
  • 分类名称

物品组

  • ID
  • group_code
  • 团队名字

通用产品

  • ID
  • 通用名

产品

  • ID
  • 产品代码
  • CATEGORY_ID
  • GROUP_ID
  • brand_id
  • generic_id
  • MODEL_ID / PART_ID
  • 产品名称
  • 产品描述
  • product_price(当前汇率)
  • has_instances(Y / N)
  • has_lots(y / n)
  • has_attributes
  • default_uom
  • 包装尺寸
  • AVERAGE_COST
  • single_unit_product_code(用于包)
  • dimension_group(指向维度)
  • lot_information
  • warranty_terms(一般不具体)
  • 活跃
  • 删除

产品属性类型(颜色/大小等)

  • ID
  • ATTRIBUTE_NAME

product_attribute

  • ID
  • PRODUCT_ID
  • attribute_id

产品属性值(此产品 - >红色)

  • ID
  • product_attribute_id

product_instance

  • ID
  • PRODUCT_ID
  • instance_name(由制造商提供)
  • 序列号
  • brand_id(这个品牌)
  • stock_id(指向qih,位置等的股票记录)
  • lot_information(lot_id)
  • 保修条款
  • 产品属性值id(如果适用)

产品很多

  • ID
  • lot_code / batch_code
  • date_manufactured
  • date_expiry
  • 产品属性值id(如果适用)

  • ID
  • MANUFACTURER_ID
  • brand_code
  • 品牌

品牌制造商

  • ID
  • 生产商名称

股票

  • ID
  • PRODUCT_ID
  • warehouse_id,zone_id,level_id,rack_id等
  • 手中的数量
  • 产品属性值id(如果适用)[我们有4个红色项目等]

产品价格记录

  • PRODUCT_ID
  • 从日期
  • PRODUCT_PRICE

采购订单表头

  • ID
  • supplier_id
  • 购买日期
  • 总金额

采购订单行

  • ID
  • po_id
  • PRODUCT_ID
  • 单价
  • 数量

供应商

  • ID
  • 供应商代码
  • 供应商名称
  • supplier_type

product_uom

  • ID
  • uom_name

product_uom_conversion

  • ID
  • from_uom_id
  • to_uom_id
  • conversion_rule

1
投票

尝试将您的销售建模为交易 - 使用“标题”,即销售时出售的人,发票#(如果适用)等,以及“行项目”,即20 * product_x @ $ 5 = $ 100。最安全的方法是避免依赖产品表中的价格等 - 因为这些可能会随着时间的推移而改变,而是将大部分产品信息(如果不是全部)复制到您的订单项中 - 所以即使价格,商品描述等。更改,交易信息保持在交易发生时。


1
投票

模型的库存变得非常复杂。首先,您需要了解您需要能够根据您为其支付的费用来预测库存的价值。这意味着您不能依赖更新为当前价格的产品表。虽然您可能希望这样的表格可以帮助您找出要销售的内容,但是您需要知道为什么需要知道您为仓库中的每个项目支付的实际价值。

所以首先你需要产品表(你可能想确保你有一个更新的日期列,这可以很方便地知道你的价格是否过时)。

然后,您需要一个表格,用于存储每个零件的实际仓库位置和购买时的价格。如果物品足够大,您需要一种方法来单独标记每个项目,以便您知道取出的是什么。通常人们会使用条形码。需要更新此表以记录出售时该部件不再存在。我更倾向于使记录无效并且将我的销售数据链接到该记录,因此我确切地知道我支付的费用以及我为每个部分销售的产品。

销售应该至少有两个表。一个用于销售的一般信息,客户名(大部分时间也应该有客户表来获取此数据),日期,运送到的地方等。

然后是销售明细表,其中包含订单中每个订单项的记录。包括您需要的有关零件,颜色,尺寸,数量,价格的所有数据。这不是非规范化,而是存储历史数据。您不想做的一件事是依赖于产品表中的价格,除了此表的初始条目。由于产品价格在前一天发生变化,您不希望进行销售报告并且数字出错。

如果不咨询会计师或税务专家,请不要设计库存数据库。您还应该阅读内部控制。很容易从未检测到的公司窃取,而该公司尚未完成数据库内部控制的工作。


0
投票

我认为您需要一个表格,其中的字段显示每个客户的交易属性,或者表格中包含字段 - 日期,产品(国外),数量 - 这样您对新产品没有任何问题


0
投票

尝试使用链接的多个表

table_products
id
name

table_product_sales
id
product_id
quantity
price_per
transaction_time AS DATETIME

SELECT table_product_sales.*, table_product.name 
FROM table_product_sales
JOIN table_product_sales
ON table_product_sales.product_id = table_product.id
GROUP BY DATE(transaction_time)

没有尝试过但会有类似的工作吗?这样您就可以将每笔交易分开,这样您就可以查询每笔销售的平均销售数量,每个日期的总销售额,每天的总销售额等。

热门问题
推荐问题
最新问题