現在有一張表user
裡面字段如下
userid 使用者帳號(唯一不可修改)
username 使用者名稱
phone 手機號
email 郵箱
createtime 建立時間
updatetime 更新時間
比較low的方式是建立乙個記錄表user_record
同樣包含以上字段,每次修改插入一條修改之前的記錄,這樣有兩個弊端
1.資料冗餘,及時至修改了乙個欄位也要插入一整條記錄
2.不利於擴充套件,如果主表新增字段,記錄表user_record也要相應增加,違背了dry原則
所以,在此提出乙個相對優秀的解決方案
新建乙個updateevent表,有如下字段
event_id 自增id
version 版本號
object_type 源資料的表名或者能唯一對應的源資料表的標識均可(可以看到此表支援多表進行擴充套件)
當然,也可根據業務需求自行定義類別
object_id 源資料表主鍵
field_name 修改的源資料表的欄位名
object_code 源資料表主鍵對應的code(可以忽略)
field_old_value 該欄位原來的值
field_new_value 該欄位最新的值
每次我們進行更新操作的時候,首先獲取修改之前的實體olduser和修改之後的newuser
然後通過反射進行兩個版本的比較,獲得auditdata列表插入到資料庫
publicclass auditdata
public
string version
public
string object_type
public
string object_id
public
string object_code
public
string field_name
public
string field_old_value
public
string field_new_value
listauditdatalist =newlist();
propertyinfo userpropertys = newuser.gettype().getproperties();
for(inti = 0; i < userpropertys.length; i++)
}else}}
}
檢視資料修改歷史記錄
create table tzy test name varchar2 10 addr varchar2 20 insert into tzy test values 張三 廣東 insert into tzy test values 李四 上海 insert into tzy test value...
你無法修改 Git 的歷史記錄
有時候使用git工作得小心翼翼,特別是涉及到一些高階操作,例如 reset,rebase 和 merge。甚至一些很小的操作,例如刪除乙個分支,我都擔心資料丟失。不久之前,我在做一些大動作 rebasing 之前,我總是備份整個版本庫,以防萬一。直到最近我才發現git的歷史記錄是不可修改的,也就是說...
將歷史記錄移到歷史表中
用一配製表存需要轉移資料的大表名稱 每次都查表名與tab name相匹配且is used 1的 說明是當前的歷史表 create table config table configid int,id tab name varchar 64 需要轉移資料大表名稱 condition col varch...