Database 用于跟踪对象的数据库表

Database 用于跟踪对象的数据库表,database,database-design,erd,Database,Database Design,Erd,我有一个名为FoodMaker的表和另一个名为Settings的表。每个FoodMaker都有多个设置。我还需要第三个表来记录制作的内容、制作的时间和使用的设置。它可能有以下字段:id,food\u made,date\u time,settings\u used 这非常简单,因为我可以将FoodMaker和Settings的id'放在第三个表中引用它们。但问题是,设置以后可能会更改,但我想要的是制作食物时使用的设置,而不是更新后的设置。因此,每次插入第三个表时,我都需要拍摄设置的快照 一种简单

我有一个名为
FoodMaker
的表和另一个名为
Settings
的表。每个
FoodMaker
都有多个
设置。我还需要第三个表来记录制作的内容、制作的时间和使用的设置。它可能有以下字段:
id
food\u made
date\u time
settings\u used

这非常简单,因为我可以将
FoodMaker
Settings
的id'放在第三个表中引用它们。但问题是,
设置
以后可能会更改,但我想要的是制作食物时使用的
设置
,而不是更新后的设置。因此,每次插入第三个表时,我都需要拍摄
设置的快照


一种简单的方法是在每次插入时将所有
设置
字段添加到第三个表中。但这不是多余的和丑陋的吗?有更好的解决方案吗?

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

如果设置是一个菜谱,比如“我用Bob的菜谱做了汉堡id XX”。如果Bob的食谱是表中的一条记录,或者是汉堡的“设置”,那么您不应该只更新它而不保留某种版本控制

我认为,正确的建模方法是将“已制作”的内容与Bob的配方版本或“设置”联系起来

将所有可能更改的内容保留在与原始Bob配方相关的表格中。实现这一点的方法不止一种。下面是一个例子:

汉堡A:id 1,设置5,日期为2014年11月18日

设置5:配方鲍勃,德尔塔咖啡+5ml,德尔塔糖-1g;#(测量单位为毫升和克)

配方:奶油10毫升,咖啡10毫升,威士忌100毫升;糖3g;(测量单位为毫升和克)