我遇到了一个有趣的问题。我已经继承了守护进程的数据库,用于轮询和接受来自远程嵌入式系统的报告。拥有其中一个系统的每个站点都可以监视十几个不同的油箱。 (实际上,大多数显示器2,3或4个坦克。)跟踪更改名称的对象的模型
当发生某些事情时,例如罐子被重新注满或罐子达到最低等级时,程序将该事件保存在Postgres数据库中。数据库最初的构建方式是将每个油箱的所有信息(燃料类型等)保存在事件记录中,即使有单独的“油箱”表。我在表中添加了一个外键字段,以将其与特定的嵌入式单元相关联,并将事件表的外键与特定的坦克相关联。
现在问题就出现了:坦克可以随时添加,移除或使其储存的燃料类型发生变化。添加坦克不应该是一个问题,但如果一个被删除,那些记录的事件将是“孤儿”。更糟糕的是,如果燃料的种类发生变化,从“喷射”到“火箭”,那么当有人搜索历史时,他们会认为所有这些旧事件都发生在“火箭”燃料上,事实上他们碰巧遇到了“喷气燃料。
我收到了一些离线建议:(1)制作坦克的第二个归档表格,当有任何变化时,将该坦克记录及其唯一ID移动到归档表格中,并创建一个新的用坦克的新状态记录新的身份,或者(2)和坦克桌上的“活跃”场,并且在规格改变时仍然创建新的行,但只标记坦克的当前状态为“活动”。
有没有人对这些建议的解决方案有任何意见,或有其他想法可行?
问问自己:问题是什么,为什么是问题。如果你这样做了几次,你很可能会明白为什么设计是原来的样子,否则你会发现你真正的问题。 – xQbert
我专注于应用程序的其他部分一段时间后,又回到了这个问题。我确实在事件中保留了原始信息 - 我只是想方设法避免在事件表上进行文本搜索,并将其推入坦克表的索引列。 – vanjwilson
我想我最终会在坦克表中添加一个活动标志,以查找作为管理功能的非活动(退役)坦克的历史记录。 – vanjwilson