数据库设计方案

时间:2011-10-10 16:16:16

标签: database database-design erd

这样做的正确方法是什么:

我在实体RAW_MATERIAL_PRODUCT和FINISHED_PRODUCT之间存在以下关系:完成的产品必须由一种或多种原材料产品制成,而原材料产品可能是成品的一部分。(所以许多人)。我有一个交叉点实体,我称之为ASSEMBLY,它告诉我原料产品是由哪种原材料制成的。

好。现在我需要出售成品并计算生产成本。 PRODUCT_OUT实体自带,只能包含一个成品,而成品可能是多个PRODUCT_OUT的一部分。

例如,如果成品A总是由 3件原料产品a1,2或者a2 等制成,那将是很容易的。问题是数量可能会改变。

原材料产品的库存计算为

      TotalIn - TotalOut

所以我不能把数量属性放在ASSEMBLY中,因为我在计算股票时会得到不正确的数据。 (如果数量有变化)

我唯一的想法是放弃FINISHED_PRODUCT实体,并使用包含数量属性的交集实体在PRODUCT_OUT和RAW_MATERIAL_PRODUCT之间建立联接。但这似乎有点愚蠢,因为几乎所有的时间FINISHED_PRODUCT都是由相同的RAW_MATER实体产生的。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我不是百分百肯定我理解,但听起来基本上配方可以改变,你的模型需要考虑到这个吗?

  

但这似乎有点愚蠢,因为几乎所有的时间都是   FINISHED_PRODUCT由相同的RAW_MATER实体产生。

几乎所有时间,或所有时间?我认为这是一个非常关键的问题。

在我看来,当你更改配方时,你应该创建一个新的FINISHED_PRODUCT行,它根据ASSEMBLY表中的关联有一组不同的RAW_MATERIAL_PRODUCTS。

如果要将同一个FINISHED_PRODUCT的不同收件人组合在一起(有点像版本控制!),请创建一个FINISHED_PRODUCT_TYPE表,其与FINISHED_PRODUCT表的关系为1:m。

修改(引自评论):

  

我完全同意你应该是一个不同的产品,但如果我添加   一个螺丝到产品我不能真正命名它产品A额外1   拧。似乎这可能发生。我没有得到充分利用   创建FINISHED_PRODUCT_TYPE表。你能解释一下吗?

不确定。因此,您的FINISHED_PRODUCT_TYPE定义了产品的名称,以及可能的其他一些数据(描述,类别等)。然后,FINISHED_PRODUCT中的每一行基本上都是该产品的“版本”。所以“产品A”只存在于一个地方,FINISHED_PRODUCT_TYPE表中的一行,但FINISHED_PRODUCT表中可能有一个或多个版本。