数据库(BE)设计用于使用组件和产品层次结构进行制造

时间:2016-06-03 07:05:52

标签: mysql database database-design relational-database database-schema

我们公司生产鞋子,我的任务是生产FE&是为了它。我决定现在在MS Access中创建FE(一旦我变得更熟悉和舒适,将在1 - 2年内切换到Django Web应用程序),BE现在在MySQL中。

基本上,我们的客户可以订购一些产品,比如" shoeA"单个盒子中的x 1080(每对有一个盒子)和24个这样的盒子装在纸箱中。因此,物料清单(或组件......在此不确定术语)的结构如下所示:

Order1 
    - Carton (size 24) x 45
        - Box (1 pair) x 24     -- (45 * 24 = 1080)
            - Packing paper x 1
            - shoeA x 1
    ...

但是,如果我们看看鞋子是什么,它是更多的联产品和原材料。此外,每个物品可以来自不同的地方(即仓库),并且可以通过不同的组件组装(例如,鞋子A不会由与完成包装的组件相同的组件组装)。问题是,多个组件执行相同类型的工作(例如,多个包装组件),因此我们不知道哪个组件将在订单时执行 (例如,订单可以提前6​​个月来,我们将知道哪个组装会提前2个月完成。

为了进一步复杂化,2个相同'类型的组件' (例如包装组件)即使它们产生相同的结果,也可能需要不同的材料。例如,我们在土耳其的组装只需要我们的鞋子A,他们将自己提供其余的材料/联产品(即盒子/包装纸等)。当然,这将反映价格,但现在不是问题。关键是这两个组件最终都会产生相同的产品(即带有鞋和纸的盒子)。

如何在后端RDBMS中反映这一点?目前我有:

EER Schema

请忽略属性本身(除了PK / FK),因为他们只是占位符,直到我最终确定。

2 个答案:

答案 0 :(得分:1)

我认为您遇到的一个大问题是子装配的可能性。即你可能有三个部件被组合成一个组件,而那个组件加上另外两个部件被制成鞋子。

我通常看到这种处理的方式是这样的:

 CREATE TABLE part (
     id int autoincrement,
     is_assembly tinyint,
     ...
 );
 CREATE TABLE component (
     assembly_id int references part(id),
     component_id int references part(id),
     qty numeric, -- number used to make assembly
     equivalent_to int references part(id)
 );

请注意,这种结构允许您无限地嵌套程序集。

然后可以通过添加允许您处理它的equivalent_to部分来解决等价问题。

请注意,您需要单独跟踪和分析每个零件和子装配,因为零件和装配件之间不再有1:1的映射。

答案 1 :(得分:0)

您需要的是在您定义选项的地方拥有备用BOM(物料清单)。看起来您的采购会计有时会将一些商品发送给自动售货机,当然会存在成本差异。其他选项是为采购订单或工​​单(WO)提供零件清单。因此,您可以随时更改提供的零件。如果要支持ERP,则需要有首选的方法和切换的原因逻辑,例如内部人工CAP。如果是从多个供应商处购买的选件,则可以使用从属零件。在ERP中,您需要知道是否需要所有零件或仅某些零件。如果您的ERP项目既有零件供应,又有采购选择的零件供应商,那么您将预测供应过剩。 Alternet BOM也可以具有供应商标记,因此供应商A要求$$,而B不需要​​$$,则基于成本的逻辑可以工作。每个选项都可以提供相同的组件,但是成本和工作中心负载非常大。在任何情况下,您都需要一种逻辑,以使PO或WO可以即时运行,以真正满足实际需求,以防供应商缺货而仅在这次需要供应,或者WO将使用另一种选择时间。无论如何,您都需要跟踪使用了多少,产生了多少美元或时间的产品,因此知道了自动取款机的实际成本。

添加的字段:BOM需要选项编号,排名首选项,构建或购买

购买选项。 (供应商报价可以使BOM选项#显示给定BOM选项的成本)

构建选项:因为每个WC可能具有不同的人工成本,因此每个都需要Asm步骤/时间/机器或工作中心(制造选项的人工清单)。 购买成本选项。

在创建WO或PO时,需要将其作为默认的BOM选项。反吹不是一个好的选择,应该手动拉/记录以保持库存正确。