日期:2014-05-17  浏览次数:20411 次

求一下新的思路或解决方案!!
需求:系统里所有涉及增删改操作 的 需要记录用户的操作信息,同时还要保存变更数据,要求比较通用,调用方便?
操作信息 和 变更数据都是存到新表 OpeLog表,大家有好的思路吗?
------最佳解决方案--------------------
看你记录的操作日志详细程度了,如果需要很详细的操作记录,工作量肯定不小,组装数据可以写一个通用的方法,遍历实体就可以。
------其他解决方案--------------------
这样的表,我只保留三个月的操作日志,不保留修改之前的信息,3个月的数据,也有2000W+了,这个功能,要慎重。
------其他解决方案--------------------
用LOG4.NET就可以达到你想要的要求,并且还很灵活,拓展性很高,保存到数据库和文档,XML都是可以的
------其他解决方案--------------------
新建一个表,记录信息就行了,就普通表一样,不过,这样的记录很快多,半年就能几十万,最好,想想清楚,要不要记录
------其他解决方案--------------------
楼主经验不够的时候,不要把问题定性。

相当于说“医生,我得胃病了,开点药给我。”。

像你这种要求保留以前修改的记录,实际上只有insert 没有update。

这样可以获得一个“快照”的效果。

如果是保留某个字段的修改记录,就是使用一个表来保存,比如价格修改。
------其他解决方案--------------------
这个设计不好,会拖累整个数据库,确实发生过,建议如果有条件的话,让dba规划一下。
------其他解决方案--------------------
引用:
引用:新建一个表,记录信息就行了,就普通表一样,不过,这样的记录很快多,半年就能几十万,最好,想想清楚,要不要记录

不仅需要记录信息,还需要保存变更数据

嗯,这样也新建一个表,储存数据,这么多数据,不用数据库不行,查询,管理方面,都要是数据库才好
------其他解决方案--------------------
先说一下我的思路:在增删改对应的方法里,把变更的数据用对应的数据实体存起来,然后序列化存入到OpeLog表的recordData字段里(xml结构),operLog表还有其他一些字段 如:

logid  主键
userId  操作人ID
opeTableName 操作对应的表明
recordData   变更数据 (xml)
opeMsg   操作信息 nvarchar(max)
opeType 操作类型(delete,update,add。。。)
。。。。

但这样在方法里调用的话,需要组装数据,不够通用,工作量较大。。。
------其他解决方案--------------------
引用:
新建一个表,记录信息就行了,就普通表一样,不过,这样的记录很快多,半年就能几十万,最好,想想清楚,要不要记录


不仅需要记录信息,还需要保存变更数据 
------其他解决方案--------------------
引用:
看你记录的操作日志详细程度了,如果需要很详细的操作记录,工作量肯定不小,组装数据可以写一个通用的方法,遍历实体就可以。


需要记录的信息 : 用户信息,  操作时间  ,操作的模块,做了什么事,变更数据 等等。。。。。 这是大概要记录的信息,不够后面可以扩展字段 ,我的这种思路逻辑全放在了调用方法里(比如AddDepartment。。。。),通用性稍差,

第二种方案:
添加前 创建一个数据库快照,添加完后,再调用一个方法(传入userId,公司ID,操作的表名,模块名,操作表的主键【如果有多张表,可能对应多个】。。。),方法对应的存储过程里,对变更前数据(存储在快照里)和变更后数据(通过传入的表主键)进行对比,把变更数据存入到opeLog表里,然后再删除 快照。。。。

这种方案,调用方便,但是 存储过程逻辑 很复杂。。。。
------其他解决方案--------------------
引用:
这个设计不好,会拖累整个数据库,确实发生过,建议如果有条件的话,让dba规划一下。


现在就把我当做DBA 使唤。。。。 ,我也不太赞同这个方案,存储过程里逻辑太过于复杂 ,很难搞定。。。

程序里控制可能更好 。。。。 
求新思路。。。。? 各位。。。
------其他解决方案--------------------
引用:
楼主经验不够的时候,不要把问题定性。

相当于说“医生,我得胃病了,开点药给我。”。

像你这种要求保留以前修改的记录,实际上只有insert 没有update。

这样可以获得一个“快照”的效果。

如果是保留某个字段的修改记录,就是使用一个表来保存,比如价格修改。

是记录变更数据,主要还是针对删除,修改操作(它修改的可能是一个或者多个字段,可能除主键外其他字段都会修改),这种变更数据 是通过 快照 和 传入的主键 做比较获取的,详见 方案2
------其他解决方案--------------------
结贴,最终还是通过存储过程处理。。。