如题:
    我现在数据库里有若干表,要求表中数据的每次更新都要有记录,并能还原记录。数据库如何设计, 有没有什么好的建议?我考虑了两个方案 1:每次更新数据的时候把原数据作为新记录插入表中;2:为每个表创建一个备份表存储备份的数据;个人感觉都不是很理想。欢迎大家一起来讨论。

解决方案 »

  1.   

    create table 表1
    (
      id int 
    )
    create table 表1_BAK
    (
      id int,
      type varchar(10) //操作类型
    )
    然后表1只保留最新的数据,建立触发器,增加更新删除都将数据放到表1_BAK
      

  2.   

    最简单的做法,把程序执行过的每条SQL记录下来,再加上定时备份。例如每10分钟备份一次,你要还原为23:45的数据库,只需要先还原到23:40的镜像,然后把23:40~23:45执行过的所有SQL按顺序再执行一遍,就可以了。当然,这是很老的思想了。甚至你镜像都可以不做,把所有SQL记录了,你完全可以从第一条SQL开始重做。Oracle能够做到快速还原至任何一个时刻,这是很复杂的事情,当然你可以选择直接用Oracle。