我完全知道这绝不应该发生。永远。但是,我最近开始在一家没有最大数据库设计或输入验证的公司工作,这种情况已经出现。
有一张桌子,我们称之为“工作”*。乔布斯有一个主键“ID”。 ID为1的作业具有与之关联的大量数据;然而,愚蠢的是有人将这份工作复制为id 2(到目前为止已发生约500次)。两者的所有信息都需要合并为id 1(或2,无所谓)。
列由外键与UPDATE链接:CASCADE和DELETE:RESTRICT。它们并非都被称为jobs_id。
这是我唯一的(看似明智的)选择:
由于没有任何代码实际执行删除(限制就像故障安全(有人直接在DB中编辑)),并且更新:级联保留,数据不应该不同步。这看起来确实很乱。
这将包含在交易中。
我可以编写一些内容来遍历每个表(~180)和每列以查找某些名称/条件,然后从1更新为2,但是当新表/列出现时需要维护。
由于这已经发生了很多,我没有看到重写以防止它很快发生,“解决方案”(贴膏药)需要半自动化。
感谢任何输入。
答案 0 :(得分:0)
假设您知道如何识别重复记录,为什么不创建具有相同结构的新表(可能没有FK),然后在将值复制到新表时循环原始表。当您复制时,请在写入新表时修复该值。然后放下原件并将temp重命名为原件。
这将清理表格,但如果进程仍在制作重复的条目,您可以使用唯一的密钥来限制未来的损害。