用于跟踪对象的数据库表

时间:2014-11-18 23:15:00

标签: database database-design erd

我有一个名为FoodMaker的表和另一个名为Settings的表。每个FoodMaker都有多个Settings。我还需要一个第三个表来记录已经制作的内容,时间和Settings。它可能包含以下字段:idfood_madedate_timesettings_used

这非常简单,因为我可以在第3个表中放置FoodMakerSettings的ID来引用它们。但问题是,Settings可能会在以后发生变化,但我希望食物的Settings而不是更新的食物。因此,每次我插入第3个表时,我都需要拍摄Settings的快照。

一种简单的方法就是在每个INSERT上将所有Settings字段添加到第3个表。但这不是多余和丑陋的吗?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我认为问题在于您对实体“设置”的定义。

如果设置是食谱,例如“我使用Bob的食谱制作了汉堡包ID XX”。如果Bob的食谱是表中的记录,或汉堡包的“设置”,那么你不应该只是更新它而不保留某种版本控制。

我认为对此问题进行建模的正确方法是将“已制作”的内容与Bob的配方或“设置”相关联。

保留与原始Bob的配方相关的表格中可以更改的所有内容。有不止一种方法可以做到这一点。这是一个例子:

汉堡包A:身份1,设置5,日期11/18/2014;

设置5:配方Bob,delta-coffee + 5ml,delta-sugar -1g; #(计量单位ml和g)

食谱鲍勃:奶油:10毫升,咖啡10毫升,威士忌100毫升;糖3g; (计量单位ml和g)