【发布时间】:2013-07-15 09:55:28
【问题描述】:
我目前正在开展一个项目,该项目应有助于我们控制库存以及采购以组装最终产品。
我们正处于对数据库进行建模的阶段,其中一项要求是生成 BOM(物料清单)。
我已阅读 this thread 并找到了 BOM 的示例数据模型:
conceptual data model 和 physical data model
但我不确定我是否完全理解。
我们的最终产品由几个子组件组成,因此每个子组件是product_hierarchytable 中的一行,最终产品也是该表中的一行。每个子组件由单独的(原子)零件组成,每个零件在表格tpart 中标识(每个零件都有制造商字段、最小再订购数量和其他特定字段)。
在生成 BOM 时,所有单独的部分也应该包括在内,所以我不清楚如何为我们的数据库建模:
- 单独的部分是
product_hierarchy中的一行,它永远不会是一个人的“父”(不再需要表格 tpart) -
product_hierarchy和tpart之间的N:M关系:每个单元有几个部分;每个部分可以属于多个单元
我倾向于第二种选择,因为零件基本上是一个完全不同的实体(有价格,几个可能的供应商,...),而组装实体没有外部(如:在我们公司之外)属性.
感谢任何输入!谢谢!
【问题讨论】:
-
我的第一个想法是这可能缺乏抽象层次。例如,在浴室中,您可能知道您将要提供浴缸、脸盆和 WC,而不必指定这些物品是什么 - 并允许它们可能会改变。
-
您是否已经知道这将在哪个 RDBMS(Oracle、SQLServer、MySQL 等)上实现? (MySQL 中的 BOM 样式数据存在问题,而许多其他 RDBMS 则没有。)
-
@MarkBannister 最有可能是 MySQL,那可能是什么问题?
-
问题是 MySQL 不支持递归公用表表达式或任何类似的东西(例如 Oracle 的
connect by语法) - 所以如果您尝试通过拥有父产品代码来建模层次结构在与产品代码相同的表中(称为 en.wikipedia.org/wiki/Adjacency_list_model ),您将无法在单个查询中查询完整的表层次结构。如果您致力于使用 MySQL,那么您应该调查 en.wikipedia.org/wiki/Nested_set_model,但我强烈建议您考虑使用其他 RDBMS,例如 PostgreSQL。
标签: database-design