库存数据库的最佳结构

时间:2010-12-07 18:15:13

标签: database structure

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

我面临的问题如下:

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

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的逗号分隔创建连接记录。

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

6 个答案:

答案 0 :(得分:33)

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

  1. 支持网站,地点和仓库等。
  2. 支持分类和分组
  3. 支持通用产品(例如"表时钟"以及特定产品" Citizen C123多闹钟")
  4. 也支持品牌变体(各种制造商)
  5. 有CSM(颜色/尺寸/型号支持)Ex。 Bata Sandles(彩色45英寸蓝色)
  6. 产品实例与连续出版物(如电视,冰箱等)
  7. 批次控制/批次控制与序列号。
  8. 包装尺寸/ UOM和UOM转换
  9. 制造商和品牌以及供应商
  10. 还包括示例交易表(采购订单)
  11. 还有许多其他交易类型,例如问题,转移,调整等。
  12. 希望这会有所帮助。如果您需要有关每张桌子的更多信息,请与我们联系。

    干杯... !!!

    Wajira Weerasinghe。

    网站

    • ID
    • site_code
    • SITE_NAME

    仓库

    • ID
    • SITE_ID
    • warehouse_code
    • warehouse_name

    项目类别

    • ID
    • category_code
    • CATEGORY_NAME

    项目组

    • ID
    • group_code
    • 组名

    通用产品

    • ID
    • generic_name

    产品

    • ID
    • PRODUCT_CODE
    • CATEGORY_ID
    • GROUP_ID
    • brand_id
    • generic_id
    • MODEL_ID / PART_ID
    • PRODUCT_NAME
    • PRODUCT_DESCRIPTION
    • product_price(当前费率)
    • has_instances(Y / N)
    • has_lots(y / n)
    • has_attributes
    • default_uom
    • pack_size
    • AVERAGE_COST
    • single_unit_product_code(for packs)
    • dimension_group(指向维度)
    • lot_information
    • warranty_terms(一般不具体)
    • IS_ACTIVE
    • 删除

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

    • ID
    • 属性名称

    product_attribute

    • ID
    • PRODUCT_ID
    • attribute_id

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

    • ID
    • product_attribute_id

    product_instance

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

    产品批次

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

    品牌

    • ID
    • MANUFACTURER_ID
    • brand_code
    • BRAND_NAME

    品牌制造商

    • ID
    • MANUFACTURER_NAME

    库存

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

    产品价格记录

    • PRODUCT_ID
    • FROM_DATE
    • PRODUCT_PRICE

    采购订单标题

    • ID
    • supplier_id
    • PURCHASE_DATE
    • TOTAL_AMOUNT

    采购订单行

    • ID
    • po_id
    • PRODUCT_ID
    • UNIT_PRICE

    供应商

    • ID
    • supplier_code
    • supplier_name
    • supplier_type

    product_uom

    • ID
    • uom_name

    product_uom_conversion

    • ID
    • from_uom_id
    • to_uom_id
    • conversion_rule

答案 1 :(得分: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;

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

首先,您需要产品表(您可能希望确保在此处有更新的日期列,了解您的价格是否过时可能很方便。)

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

销售应该至少有两个表。一个是关于销售的一般信息,客户名(大部分时间也应该有一个客户表来获取这些数据),日期,运往哪里等等。

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

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

答案 4 :(得分:0)

我认为您需要一个包含显示每个客户的交易属性的字段的表格 要么 带有字段的表 - 日期,产品(外国),数量 - 这样您就可以使用新产品

答案 5 :(得分: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)

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