我正在为中型企业设计一个 Intranet 系统。我应该为所有模块保留一个日志表还是分开?
审计日志保留所有管理员/员工活动(创建、更新、删除对象),并且日志结构对于任何类型的模块都是通用的。
如果我根据日志记录提取报告也是一个好主意吗?我的日志表保留了对象类型和对象 ID,因此我可以随时根据事件、对象名称和对象 ID 获取任何对象的数据。
在这种情况下报告的最佳方法是什么?
我会说一张桌子。
例如,您可能希望在所有模块中查找用户活动(如果我理解正确的话)。这适合一张桌子。
报告您的日志表就可以了。您可以卸载到单独的报告数据库以减少日志记录表上的争用和负载。
最后,我将明确存储对象名称和类型(数据库对象)。如果你 DROP 和 CREATE 那么 ID 将会改变。或者一个表可能会变成一个视图,例如,它的类型和 objectid 都会改变。
好吧,当你去查看你的日志时,你更愿意在一个可以看到所有内容的地方查看,还是必须检查几个不同的地方,每个地方都只显示一个孤立的系统?
请记住,对于单个表,过滤掉不相关或用户无权查看的条目是微不足道的。将多个单独的日志组合成一个单一的综合视图有点棘手,而且它还有一个额外的缺点,即在大多数设计下,每次添加新的日志表时都需要重新访问执行组合的代码。
我肯定说单个日志更可取。我能想到的唯一适合多个隔离日志的情况是,如果安全问题足够强大,以至于必须对具有不同可见性的日志条目进行物理隔离 - 在这种情况下,您可能会单独查看日志服务器,而不仅仅是单独的表。
We use single table and it proved to be the best solution, particularly in performance. And especially with large data sets. If you're interested in off-the-shelf solution - try this.