MySQL:使用数据库触发器还是只使用PHP?

时间:2013-09-09 22:48:24

标签: php mysql amazon-mws

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

亚马逊向其卖家收取一系列不同的费用,例如每笔订单的费用,每个订单项目的费用,如果使用亚马逊计划的订单项目履行费用,根据订单项目的重量计算的重量费用,总的来说,对于卖方支付某种费用的不同情况,我计算了大约30个不同的变量。

对于数据库,我目前有6个与我的问题相关的表:amazon_order_items表,其中包含该订单中的每个订单和每个订单商品以及计算费用的所有必要属性。我还有4个专门为存储费用而创建的其他表。由于它们的类型不同,我为所有这些费用创建了单独的表格。

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

亚马逊经常改变他们的费用结构,并且使用我使用过的触发器证明保持准确的费用数字非常困难。我的问题是,我是否应该继续沿着使用数据库触发器来计算费用并将它们插入数据库表的路径,还是应该将设计全部废弃,只需使用PHP插入订单项和相应的费用?

1 个答案:

答案 0 :(得分:2)

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

一般来说,触发器难以维护,如果某些行为不符合要求,则难以调试。仅仅由于这些原因,我建议在应用程序的amazon_order_items_fees表部分插入,特别是因为你已经提到他们经常改变他们的费用结构。

希望能帮助你做出决定!