在MySQL数据库中记录主值?

时间:2019-01-24 17:59:45

标签: mysql sql database-design architecture master

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

在示例中,我对此进行了简化。假设我有一个表格,用于存储特定工厂在特定年份的特定产品的生产成本信息。

其中一些费用是针对产品的。 (塑料,成型成本,包装,人工等)

其中一些费用是相当通用的;我可能想为它们指定一个特定的值,但是对于大多数情况下,我希望它们在当年为工厂指定一个特定的值。我将这些称为“主”值。 (例如间接费用,诸如利息费用,电费,热费,财产税,行政劳动等)

然后,如果我更新我的主值,则这些值将自动进行调整;每年和工厂的情况可能都不同。 (所以我不能只使用默认值。)

所以我的专栏可能是:

table_example

这是如何定义的逻辑:

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

然后,从本质上讲,如果我想对该产品使用唯一成本,则可以在字段中输入成本金额,但是如果我希望其使用主值(如M所示,显示在第4行),则我可以在字段中插入$ MValue(column_id)。

关于使用MySQL如何实现此目标的任何想法?

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

1 个答案:

答案 0 :(得分: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 .:关于“主要”价值的术语,我已经习惯了“直接成本”和“间接成本”这两个术语。直接成本是很容易归因于产品的单位成本的那些,间接成本就像您的主成本,它们被归因于整个业务,并且通常不按生产的单位进行缩放。