我遇到了一个有趣的问题。我继承了守护进程的数据库,该数据库轮询并接受来自远程嵌入式系统的报告。拥有其中一个系统的每个站点都可以监控十几个不同的油箱。 (实际上,大多数监视器有2,3或4个坦克。)
当某些事情发生时,例如坦克正在重新填充或坦克达到最低级别时,程序将该事件保存在Postgres数据库中。数据库最初构建的方式是,它保存了事件记录中每个油箱(燃料类型等)的所有信息,即使有一个单独的“坦克”表。我在表中添加了一个外键字段,将其与特定的嵌入式单元关联,并将事件表的外键与特定的容器相关联。
现在问题在于:可以随时添加,移除或更换储存的燃料类型。添加坦克不应该是一个问题,但如果删除一个坦克,那些记录的事件将是“孤儿”。更糟糕的是,如果改变燃料类型,从“喷射”到“火箭”,那么当有人搜索历史时,他们会认为所有那些旧事件都发生在“火箭”燃料上,而事实上他们恰好“喷射“燃料。
我已经离线收到了一些建议:(1)制作第二个坦克归档表,当有任何变化时,将该坦克记录及其唯一ID移至归档表,并创建新记录使用坦克新状态的新ID,或(2)坦克表的“活动”字段,并在规格更改时仍然创建新行,但仅将坦克的当前状态标记为“活动”。 / p>
有没有人对这些提议的解决方案有任何意见,或者其他可能有用的想法?
答案 0 :(得分:1)
添加坦克不应该是一个问题,但如果一个被删除,那些 记录的事件将是“孤儿”。更糟糕的是燃料类型 改变,从说“喷射”到“火箭”,然后当有人搜索时 通过历史,他们会认为所有那些旧事件都发生了 “火箭”燃料,实际上它们碰巧是“喷气式”燃料。
仅仅是因为有人在没有完全理解原始设计的情况下添加了外键约束。看看你是否能找到那个人,并严厉地与他交谈。你的手指摇了很多。
答案 1 :(得分:0)
问题出在哪里?所有相关信息都在事件记录中;或者当你创建坦克和事件之间的链接时,你没有坚持坦克信息? 。它是孤立的这一事实不是从事件表中删除燃料类型的问题是导致问题的原因。
有几个原因可以保持信息的发展。其中之一就是历史。通过将表链接回坦克实体很好,它会向您显示当前状态。如果“类型”与坦克表上的类型不同,事件表会显示历史记录。
我想我不能很好地理解这个问题:
即使油箱被删除,用户是否仍希望查看所有活动?
在坦克和坦克类型的事件之间添加一个关联表,以及开始和结束日期可以解决问题吗?
将一些坦克信息保存到活动中有什么问题?这样你知道事件发生时坦克的状态吗?