Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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
Java 更新';创建';和';更新';柱?通过触发器还是通过软件?_Java_Database_Triggers - Fatal编程技术网

Java 更新';创建';和';更新';柱?通过触发器还是通过软件?

Java 更新';创建';和';更新';柱?通过触发器还是通过软件?,java,database,triggers,Java,Database,Triggers,我想知道当“创建”和“修改”等字段必须更改时,人们更喜欢什么?它更喜欢在应用程序代码中这样做,还是使用触发器 这两种方法都是有效的,但我的经验是,更常见的方法是使用代码。我倾向于把它放在应用程序代码中 通常,您希望能够将这些时间戳与各种日志信息交叉引用。在代码中这样做可以确保时间戳对齐。否则,您将添加额外的维护负载,以始终确保db服务器和应用程序服务器上的系统时间同步 如今,逻辑往往更多地出现在应用程序中,而不是数据库中。存储过程等的利用率越来越低,尤其是在从头构建的系统中。因此,对数据库的关

我想知道当“创建”和“修改”等字段必须更改时,人们更喜欢什么?它更喜欢在应用程序代码中这样做,还是使用触发器

这两种方法都是有效的,但我的经验是,更常见的方法是使用代码。我倾向于把它放在应用程序代码中

  • 通常,您希望能够将这些时间戳与各种日志信息交叉引用。在代码中这样做可以确保时间戳对齐。否则,您将添加额外的维护负载,以始终确保db服务器和应用程序服务器上的系统时间同步
  • 如今,逻辑往往更多地出现在应用程序中,而不是数据库中。存储过程等的利用率越来越低,尤其是在从头构建的系统中。因此,对数据库的关注越来越少,所以在触发器中放置逻辑往往会随着时间的推移而被遗忘,这使得调试应用程序变得更加困难,因为逻辑将跨越流程(和技术)边界
  • 有时触发器不会触发。许多人会说他们是傻瓜,但我见过他们不止一次失败。这永远玷污了我对他们的看法

AOP和框架支持的正确设计和使用将使您能够相当不引人注目地使用最少的复制/粘贴代码来完成这项工作

这两种方法都是有效的,但我的经验是,更常见的方法是使用代码。我倾向于把它放在应用程序代码中

  • 通常,您希望能够将这些时间戳与各种日志信息交叉引用。在代码中这样做可以确保时间戳对齐。否则,您将添加额外的维护负载,以始终确保db服务器和应用程序服务器上的系统时间同步
  • 如今,逻辑往往更多地出现在应用程序中,而不是数据库中。存储过程等的利用率越来越低,尤其是在从头构建的系统中。因此,对数据库的关注越来越少,所以在触发器中放置逻辑往往会随着时间的推移而被遗忘,这使得调试应用程序变得更加困难,因为逻辑将跨越流程(和技术)边界
  • 有时触发器不会触发。许多人会说他们是傻瓜,但我见过他们不止一次失败。这永远玷污了我对他们的看法

AOP和框架支持的正确设计和使用将使您能够相当不引人注目地使用最少的复制/粘贴代码来完成这项工作

如果每个数据库都支持Insert和Update时的触发器,则最好通过触发器执行。但并非所有数据库都是如此。您的Java代码应该尽可能与数据库无关,并且代码不应该假定依赖于特定的数据库,因此最好在应用程序代码和数据库之间有一个层/拦截器来为您做到这一点。通过这种方式,您可以避免重复代码,并保持业务逻辑不受这些更新调用的影响。

如果每个数据库都支持Insert和update上的触发器,则最好通过触发器来执行。但并非所有数据库都是如此。您的Java代码应该尽可能与数据库无关,并且代码不应该假定依赖于特定的数据库,因此最好在应用程序代码和数据库之间有一个层/拦截器来为您做到这一点。通过这种方式,您可以避免重复的代码,并保持业务逻辑不受这些更新调用的影响。

+1对于许多数据库中缺乏支持的情况,请参见。通常,您会为dev和prod运行不同的数据库(prod中的Oracle、dev和integrationtest中的HSQLDB)。如果您获得了一些特性并降低了复杂性,那么有时候放弃对某些数据库的支持是划算的。降低复杂性的事实确实是我提出这个主题的原因之一。我们使用MyBatis作为映射框架,这是一个基于Spring的应用程序。因此,它们应该或多或少是一种类似AOP的方式,让应用程序来管理它。但这确实引入了另一层复杂性。Is有一个很大的优势,我不必在应用程序级别担心它。我们计划使用MySQL作为数据库。我们也在触发器中生成GUID。因此,当保存记录时,会生成并存储GUID和时间戳。通常,我会在应用程序中处理此问题,但如上所述,我们希望降低复杂性。我们还不确定是否需要迁移到另一个数据库。我也已经开始了我的答案,我更喜欢通过触发器来完成。但我也经历过一些需要数据库独立性的情况,以及后端数据库发生更改的情况,因此根据您的情况接听电话。+1提到许多数据库中缺乏支持。通常,您会为dev和prod运行不同的数据库(prod中的Oracle、dev和integrationtest中的HSQLDB)。如果您获得了一些特性并降低了复杂性,那么有时候放弃对某些数据库的支持是划算的。降低复杂性的事实确实是我提出这个主题的原因之一。我们使用MyBatis作为映射框架,这是一个基于Spring的应用程序。因此,它们应该或多或少是一种类似AOP的方式,让应用程序来管理它。但这确实引入了另一层复杂性。Is有一个很大的优势,我不必在应用程序级别担心它。我们计划使用MySQL作为数据库。我们也在触发器中生成GUID。因此,当保存记录时,会生成并存储GUID和时间戳。通常,我会在应用程序中处理此问题,但如上所述,我们希望降低复杂性。我们还不确定