Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 数据记录:触发器还是特殊设计模式?_Design Patterns_Logging_Triggers - Fatal编程技术网

Design patterns 数据记录:触发器还是特殊设计模式?

Design patterns 数据记录:触发器还是特殊设计模式?,design-patterns,logging,triggers,Design Patterns,Logging,Triggers,我目前正在为我们的一个web项目开发一个日志解决方案 服务器端语言:PHP5.2.3 数据库:MySQL 5.0 阿帕奇2 与此处所述类似 我们希望记录现有记录的更改列、插入新记录和删除记录。对于更新,我必须以某种方式比较旧值 在数据库记录和数据库记录中,用户保存了。对于insert,日志记录很容易,对于delete,我必须先将旧值存储,然后再将其删除到日志记录表中 我现在面临的问题是。你认为什么是更好的解决方案 在DB级别通过触发器进行日志记录,或者在应用程序级别使用合适的设计模式 关于

我目前正在为我们的一个web项目开发一个日志解决方案

  • 服务器端语言:PHP5.2.3
  • 数据库:MySQL 5.0
  • 阿帕奇2
与此处所述类似

我们希望记录现有记录的更改列、插入新记录和删除记录。对于更新,我必须以某种方式比较旧值 在数据库记录和数据库记录中,用户保存了。对于insert,日志记录很容易,对于delete,我必须先将旧值存储,然后再将其删除到日志记录表中

我现在面临的问题是。你认为什么是更好的解决方案

在DB级别通过触发器进行日志记录,或者在应用程序级别使用合适的设计模式

关于它已经存在一些线程,但是没有考虑什么更好,一个(触发器)还是另一个(应用程序级)

在另一个线程中,建议使用AOP

我将使用这里建议的用于日志记录的DB设计#1

其中,我有一个单独的表,用于记录每个观察到的表。结构如下所示

ID : Integer
COLUMN: String, the column name of the column that changed
OLD_VAL: String
NEW_VAL: String
SOURCE: String, the source which changed the data, currently user and an agent are possible as sources
create_at: DATETIME, then the change occurred
你们这些人怎么想。考虑到性能与干净的代码和信息隐藏,实现这样的日志系统的更好解决方案是什么


任何想法都值得赞赏。

FWIW我更喜欢使用to。

如果您不在触发器中这样做,您不记录所需信息的可能性接近100%。并非所有数据都是通过应用程序更改的。即使开发人员认为会这样。有时需要修复或更新大量数据(比如价格上涨10%),这些查询将直接在数据库上进行。仅通过应用程序建立日志将意味着您将错过这些更改。有时,这些是恶意用户或员工所做的更改,是最重要的审计内容。

感谢@MarkSeemann的输入,我个人更喜欢设计模式方法,但正如@HLGEM所说,如果没有其他人直接访问您的数据库,您永远也不知道。尽管如此,还是感谢您分享您的想法。。触发器是一个装饰器,所以你是安全的;)