【问题标题】:SQL save different versions of same product in tableSQL将同一产品的不同版本保存在表中
【发布时间】:2014-03-31 22:32:12
【问题描述】:

我在 postgres 中有一个产品表,用于存储我需要的所有数据。我需要找出最好的方法:

每个产品在完成的过程中都有不同的状态 - 加工、涂漆、组装等。对于每个状态,产品 ID 中都有一个字母变化。

保存数据最有效的方法是什么?对于产品的每个状态,表中是否应该有“另一个产品”?或者在某个地方做连接表会起作用吗?

例子:

111a1 for machined
111b1 for painted

然而,这些都是相同的最终产品,只是处于不同的阶段......

【问题讨论】:

    标签: database postgresql database-design


    【解决方案1】:

    这取决于您想要提高效率:存储、摄取、查询、可维护性...

    加入会起作用 - 您可以加入产品 id 的某些子字符串,因此您不需要为每个生产阶段使用单独的产品。

    但是代码的可维护性确实很重要。业务发生变化 - 可能包括子组件。

    您可能需要重新考虑这种更改产品 ID 以显示状态的方案。产品 ID 和工作流程状态是正交概念。因此,您可能希望将它们放在单独的字段中。你可能会用这种方式编写更少的代码。替代方案将非常熟悉substr()(取决于您的 SQL 方言),以及其他地方的各种重复。

    【讨论】:

    • 是的,不幸的是,它在纸上完成的方式是因为我负责将系统组合在一起以替换纸张,但每个阶段都有不同的产品 ID,尽管只有 1 个字母。据我了解,您的说法是在 1 列中查看产品 ID,在另一列中查看状态?整个 pk 问题如何,因为那将是我的主要选择...
    • 您可以有一个复合主键,其中部件号和状态是键的两个部分。您对不同的部分有不同的工作流程吗?如果工作流程是相同的(即零件经历的制造过程),那么有一个强有力的论据将其排除在外 - 将状态与零件分开。您的系统是否需要标记未按顺序执行流程的奇怪行为?将此逻辑与工作流关联起来会更容易设置。
    • 这些零件将有不同的工作流程,因为有些会被涂漆,有些会被阳极氧化。我们可能会储存一个经过加工的零件,然后等待一段时间,直到它完成并上漆。由于我们需要监控每个流程的库存,所以他们必须在表格中包含单独的零件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多