物料清单数据库模型

时间:2013-07-15 09:55:28

标签: database-design

我目前正在开展一个项目,该项目可以帮助我们完成库存控制以及购买我们的最终产品。

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

我已阅读this thread并找到了BOM的示例数据模型:

conceptual data modelphysical data model

enter image description here

但我不确定我完全理解。

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

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

  1. 一个单独的部分是product_hierarchy中的一行,它永远不会是一个'父'(不再需要表tpart)
  2. product_hierarchytpart之间的N:M关系:每个单元有几个部分;每个部分都可以属于几个单位
  3. 我倾向于第二种选择,因为一部分基本上是一个完全不同的实体(有价格,几个可能的供应商,......)而一个组合实体没有外部(如:在我们公司外)属性

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

2 个答案:

答案 0 :(得分:21)

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

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

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

enter image description here

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

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

在这个模型之上,您可以相当自然地添加诸如“绘图位置”或“度量单位”之类的内容(例如,绘画可以是BOM的一部分,但是以“千克”而不是“碎片”来衡量。)< / p>


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

例如:

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

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

答案 1 :(得分:1)

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

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

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

所以一般来说,这个数据库方案功能强大且灵活,但我认为它不够完整,或者灵活,无法满足您的需求。