【问题标题】:Record Master values in MySQL database?在 MySQL 数据库中记录主值?
【发布时间】:2019-01-25 02:11:04
【问题描述】:

我正在尝试找出一种严格使用 MySQL 来处理这种情况的好方法。 (使用生成的列、视图、逻辑语句、过程等)

我已经为示例进行了简化。假设我有一张表格,用于存储特定工厂特定年份特定产品的生产成本信息。

其中一些费用是特定于产品的。 (塑料、成型成本、包装、人工等)

其中一些成本相当普遍;我可能想为它们分配一个特定的值,但对于他们中的许多人来说,我只想让它们引用当年工厂的特定值。我将这些称为“主”值。 (例如间接费用,利息成本、电费、热力费、财产税、行政劳动力等)

然后,如果我更新我的 Master 值,这些成本将自动调整;并且它们可能因每年和工厂而异。 (所以我不能只使用默认值。)

所以我的专栏可能是:

这是如何定义的逻辑:

$MValue(var) = var WHERE product_id = M (Master) AND year = year AND factory_id = factory_id;

然后基本上,如果我想为该产品使用唯一成本,我可以将成本金额输入该字段,但如果我希望它使用主值(显示在第 4 行,由 M 指定),那么我可以在字段中插入 $MValue(column_id)。

对如何使用 MySQL 实现这一点有任何想法吗?

我应该补充一点,我已经在这些字段上使用生成(计算)的列和视图,因此我正在寻找一个严格的 MySQL 解决方案。

【问题讨论】:

    标签: mysql sql database-design architecture master


    【解决方案1】:

    我建议在您的产品行中将派生成本存储为 NULL,然后定义一个连接到主行的视图。

    CREATE VIEW finalcosts AS
      SELECT p.cost_id, p.product_id, p.factory_id, p.plastic_cost, p.molding_cost,
        COALESCE(p.interest_cost, m.interest_cost) AS interest_cost,
        COALESCE(p.tax_cost, m.tax_cost) AS tax_cost
      FROM costs AS p
      JOIN costs AS m ON p.year = m.year and m.product_id = 'M (Master)'
    

    无法使用默认列或生成的列从不同的行检索数据。这些表达式只能引用同一行中的值。

    P.S.:关于“主”价值观的术语,我已经习惯了“直接成本”和“间接成本”这两个术语。直接成本很容易归因于产品的单位成本,而间接成本就像您的主成本一样,它们归属于整个业务,并且通常不会按生产的单位进行扩展。

    【讨论】:

    • 太棒了!我没有想过使用 Coalesce。我喜欢。谢谢@Bill Karwin
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多