14

我目前正在开展一个项目,该项目应该可以帮助我们控制库存以及采购以组装最终产品。

我们正处于对数据库进行建模的阶段,其中一项要求是生成 BOM(物料清单)。

我已阅读此线程并找到了 BOM 的示例数据模型:

概念数据模型物理数据模型

在此处输入图像描述

但我不确定我是否完全理解。

我们的最终产品由几个子组件组成,因此每个子组件是表中的一行,product_hierarchy最终产品也是该表中的一行。每个子组件由单独的(原子)零件组成,每个零件都在表格中标识tpart(每个零件都有制造商字段、最小再订购数量和其他特定字段)。

生成 BOM 时,还应包含所有单独的部分,因此我并不完全清楚如何为我们的数据库建模:

  1. 单独的部分是product_hierarchy永远不会成为“父”的行(不再需要表 tpart)
  2. product_hierarchy和之间的 N:M 关系tpart:每个单元都有几个部分;每个部分可以属于几个单元

我倾向于第二种选择,因为零件基本上是一个完全不同的实体(有价格,几个可能的供应商,......),而组装实体没有外部(如:在我们公司之外)属性。

任何输入表示赞赏!谢谢!

4

2 回答 2

28

您链接的模型无法解决 BOM 通常具有的一些主要属性:

  • 零件和子组件可以重复使用。例如,在许多组件中使用同一种螺栓是很常见的。
  • 需要有特定于 BOM 的数量。例如,重要的是要知道一个组件需要(例如)50 个螺栓,但另一个组件可能只需要 30 个相同类型的螺栓。

这是一个解决这些问题的简单模型:

在此处输入图像描述

PART 表是顶部组件或子组件或叶零件。它使用一个公开的“部件号”来标识它的行,它实际上根本不是一个数字,并且可以包含非数字字符。

BOM 表自己建模 PART 的多对多关系。它实际上与任何其他联结表没有什么不同,除了两个“端点”表实际上是同一个表。这样,一个子装配体或零件可以在多个父装配体中重复使用。

在此模型之上,您可以很自然地添加诸如“绘图位置”或“测量单位”之类的内容(例如,油漆可以是 BOM 的一部分,但以“千克”而不是“件”为单位进行测量)。


在现实中你可能想做更多的事情,但超出了像这样的简单 StackOverflow 帖子的范围。

例如:

  • 你如何处理变化?你有部分版本控制吗?您是否对 BOM 本身进行版本控制?
  • 不同的供应商可能对基本相同的零件使用不同的零件编号。
  • 您可能想要跟踪存储或组装/生产零件的“站点”(仓库或工厂)。对于不同的站点,“相同”的装配甚至可能具有略微不同的 BOM。
  • 您可能想要区分“制造”和“购买”零件。
  • 您是否有生命周期工作流程(批准/发布/过时)?
  • 您可能想要存储用户定义的属性。属性通常包括诸如质量、体积和材料之类的东西,但可能还有许多其他无法预先预见的东西。
  • 您可能希望将物理 CAD 模型连接到数据库中的数据。
  • 您可能希望禁止某些用户对数据库进行某些更改(例如,采购部门不应该能够更改装配结构,至少在没有监督的情况下不能更改)。
  • 等等等等……

这些是实际 PDM 系统趋于复杂的一些原因。如果您确实需要所有这些功能,您可能应该考虑使用商业产品,而不是尝试自己重新实现它......

于 2013-07-15T10:45:15.213 回答
2

听起来你可能有两种产品。一个是“原子”部分,另一个是“复合”最终产品。我会将它们存储在两个单独的表中,因为它们都需要不同的信息。

CompoundProduct 表还需要一个子表,将部件链接到最终产品。

如果您愿意,您仍然可以拥有一个包含所有产品的“抽象”产品表:零件和最终产品。在此表中,您可以存储代码和名称,并且可以方便地拥有一张可以购买并显示在订单或发票上的产品表。Part 表和 CompoundProduct 表都可以有一个产品 id,它是抽象产品表的外键,但在 Part 和 CompoundProduct 中也是唯一的。

所以总的来说,这个数据库方案是强大而灵活的,但我认为它不够完整,或者可能过于灵活而无法满足您的需求。

于 2013-07-15T10:05:02.003 回答