我目前正在开展一个项目,该项目可以帮助我们完成库存控制以及购买我们的最终产品。
我们正处于建模数据库的阶段,其中一个要求是生成BOM(物料清单)。
我已阅读this thread并找到了BOM的示例数据模型:
conceptual data model和 physical data model
但我不确定我完全理解。
我们的最终产品包含几个子装配体,因此每个子装配体都是product_hierarchy
表中的一行,最终产品也是该表中的一行。每个子组件由单独的(原子)部件组成,每个部件在表tpart
中标识(每个部件都有制造商字段,最小重新订购数量和其他特定字段)。
生成BOM时,还应包含所有单独的部分,因此我不完全清楚如何建模数据库:
product_hierarchy
中的一行,它永远不会是一个'父'(不再需要表tpart)product_hierarchy
和tpart
之间的N:M关系:每个单元有几个部分;每个部分都可以属于几个单位我倾向于第二种选择,因为一部分基本上是一个完全不同的实体(有价格,几个可能的供应商,......)而一个组合实体没有外部(如:在我们公司外)属性
任何输入都表示赞赏!谢谢!
答案 0 :(得分:21)
您链接的模型无法解决BOM通常具有的一些主要属性:
这是一个解决这些问题的简单模型:
PART表是顶部装配或子装配或叶部分。它使用一个公知的“部件号”来标识它的行,它实际上根本不是一个数字,可以包含非数字字符。
BOM表模拟PART自身的多对多关系。它与任何其他联结表没有什么不同,除了“端点”表实际上是同一个表。这样,一个子组件或零件可以在多个父组件中重复使用。
在这个模型之上,您可以相当自然地添加诸如“绘图位置”或“度量单位”之类的内容(例如,绘画可以是BOM的一部分,但是以“千克”而不是“碎片”来衡量。)< / p>
您可能想要在现实中做更多事情,但超出了像这样的简单StackOverflow帖子的范围。
例如:
这些是真正的PDM系统往往复杂的一些原因。如果你确实需要所有这些功能,你应该考虑使用商业产品,而不是试图自己重新实现它......
答案 1 :(得分:1)
听起来你可能有两种产品。一个是'原子'部分,另一个是'复合'最终产品。我会将它们存储在两个单独的表中,因为它们都需要不同的信息。
CompoundProduct表还需要一个子表,用于将部件链接到最终产品。
如果您愿意,您仍然可以拥有一个包含所有产品的“抽象”产品表:零件和最终产品。在此表中,您可以存储代码和名称,并且可以方便地在订单或发票上购买和显示一个产品表。然后,作为CompoundProduct表的Part表都可以具有产品ID,该产品ID是抽象产品表的外键,但在Part和CompoundProduct中也是唯一的。
所以一般来说,这个数据库方案功能强大且灵活,但我认为它不够完整,或者太灵活,无法满足您的需求。