gpt4 book ai didi

mysql - Material list : One table for everything, 或每个子级别的表格?

转载 作者:行者123 更新时间:2023-11-30 21:52:00 25 4
gpt4 key购买 nike

我正在与一位制造业客户合作,他的产品是同一组零件的配置。我正在创建一个包含所有有效产品及其 Material list 的数据库。我需要帮助来确定要实现的 Material list 计划。

明显的解决方案是使用联结表的多对多关系:

Table 1: Products
Table 2: Parts
Junction Table: products, parts, part quantities

但是,我客户的产品中有多个级别;

-Assembly
-Sub-Assembly
-Component
-Part

并且允许来自较低级别的项目与任何较高级别的项目相关联;

Assembly     |Sub-assembly
Assembly |Component
Assembly |Part
Sub-Assembly |Component
Sub-Assembly |Part
Component |Part

而且我怀疑客户将来会希望在添加新产品线时添加更多级别。

如果我错了请纠正我,但我相信上述关系表将需要一个不断增长的整数序列的联结表和查询 (0+1+1+2+3...) 来显示和导出完整的 Bill of最终可能影响性能的 Material 。

有人建议将所有内容放在一张表中:

Table 1: Assemblies, sub-assemblies, components, parts, etc...
Junction table: Children and Parents

这只需要一个联结表就可以创建无限多层次的多对多关系。我不知道我是否相信这个解决方案,但除了不小心使一个项目成为它自己的父项并创建一个无限循环并且听起来杂乱无章之外,我想不出任何问题。

我缺乏经验来确定这些模型是否适合我的客户。我正在 MS Access 中绘制这些模型,但如果有必要,我愿意将这个项目转移到更强大的平台上。任何输入表示赞赏。谢谢。

-M

最佳答案

您所描述的是层次结构。因此它应该采用以下形式:

部分层次结构:

part_id | parent_part_id | other | attributes | of | this | relationship

所以 part_id 1 可能有一个父 part_id 10“组件”,它可能有一个 parent_part_id(当在这个表中查找它自己时)12“组件。它看起来像:

part_id | parent_part_id
1 | 10
10 | 12

和零件表:

part_id | description
1 | widget
10 | widget component
12 | aircraft carrier

这有点简化,因为它没有考虑您的产品/部件关系,但使用这种方法它们将全部组合在一起。

漂亮又简单。现在,层次结构有多深并不重要。它仍然只有两列(以及此关系的属性所需的任何额外列,例如...create_datelast_changed_by_user 等。

我会建议一些比 Access 更强大的东西,因为它缺乏使用递归 CTE 选择部分层次结构的能力,这是 SQL Server、Postgres、Oracle 等附带的东西。

随着层次结构变得更深、更复杂,我会 100% 避免任何需要您添加更多字段或表格的架构。那是一条通往痛苦和遗憾的道路。

关于mysql - Material list : One table for everything, 或每个子级别的表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46817286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com