MySQL:使用DB触发器还是只使用PHP?

MySQL:使用DB触发器还是只使用PHP?,php,mysql,amazon-mws,Php,Mysql,Amazon Mws,我正在为在亚马逊市场上销售的卖家创建一个web应用程序。该应用程序使用亚马逊的API下载他们的订单,然后计算他们向亚马逊支付的费用。这是应用程序的主要功能。它用于根据这些数据生成易于理解的报告。每个订单中有一个或多个订单项,每个订单项都有特定属性,如重量、尺寸等 亚马逊向其卖家收取了大量不同的费用,如每份订单的费用、每份订单项目的费用、使用“亚马逊履行”计划时的订单项目履行费用、基于订单项目重量的重量费用等,我计算了大约30个不同的变量,这些变量与卖家支付某种费用的不同场景有关 对于DB,我目前

我正在为在亚马逊市场上销售的卖家创建一个web应用程序。该应用程序使用亚马逊的API下载他们的订单,然后计算他们向亚马逊支付的费用。这是应用程序的主要功能。它用于根据这些数据生成易于理解的报告。每个订单中有一个或多个订单项,每个订单项都有特定属性,如重量、尺寸等

亚马逊向其卖家收取了大量不同的费用,如每份订单的费用、每份订单项目的费用、使用“亚马逊履行”计划时的订单项目履行费用、基于订单项目重量的重量费用等,我计算了大约30个不同的变量,这些变量与卖家支付某种费用的不同场景有关

对于DB,我目前有6个与我的问题相关的表:amazon_order_items表,其中包含每个订单和该订单中的每个订单项目,以及计算费用所需的所有属性。我还有另外4个专门为存储费用而创建的表。由于费用类型不同,我为所有这些费用创建了单独的表格

目前,我有一个INSERT触发器设置,每当在amazon_order_items表中插入一个新的order item行时,就会触发该设置。然后,它从这4个其他费用表中提取,并在amazon_order_items_fees表中插入一个匹配的行。有一段时间,它工作得很好,尽管这是一个极其丑陋的触发器。我选择了一个触发器,因为我认为在插入订单项目时自动将费用插入DB是非常有益的。这正在变成一场灾难


亚马逊不断地改变他们的收费结构,用我使用的触发器来保持准确的收费数字是非常困难的。我的问题是,,我应该继续使用DB触发器计算费用并将其插入DB表中,还是应该将设计全部废弃,只需使用PHP插入订单项和相应的费用?

触发器更适合于应用程序不一定知道数据库中的更改/事件的情况。如果您将逻辑保持在实际应用程序中,那么应用程序级别上发生的事情总是更加透明的

一般来说,触发器更难维护,如果某个事物的行为不符合其应有的要求,则更难调试。仅出于这些原因,我建议在应用程序中插入amazon_order_items_fees表,特别是因为您已经提到他们经常更改其费用结构


希望这能帮助你做出决定

谢谢你的帮助!我通过应用程序的一部分插入amazon_order_项目。这是从这些插入计算的费用是有问题的。我只是不知道这里最好的设计。我应该在插入触发器时通过触发器计算费用,还是应该将该逻辑放入应用程序并通过应用程序插入费用?如果所有插入db的操作都发生在应用程序内部(没有外部或其他应用程序),那么最好将其挂接在应用程序中。您将费用存储在数据库表中的想法仍然是最好的选择,尽管您可能不想使用触发器来应用它们。谢谢。这也是我的想法。