【问题标题】:MySQL: Use a DB trigger or just use PHP?MySQL:使用数据库触发器还是只使用 PHP?
【发布时间】:2013-09-10 07:07:30
【问题描述】:

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

亚马逊会向卖家收取大量不同的费用,例如每笔订单的费用、每笔订单商品的费用、使用亚马逊物流计划的订单商品履行费用、基于订单商品重量的重量费、等等。总的来说,我计算了大约 30 个不同的变量,涉及卖家支付某种费用的不同场景。

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

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

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

【问题讨论】:

    标签: php mysql amazon-mws


    【解决方案1】:

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

    一般来说,触发器更难维护,如果某些东西的行为不正常,则更难调试。仅出于这些原因,我建议将插入内容插入应用程序的 amazon_order_items_fees 表部分,尤其是因为您已经提到他们经常更改费用结构。

    希望能帮助您做出决定!

    【讨论】:

    • 感谢您的帮助!我通过应用程序的一部分将插入到 amazon_order_items 中。问题在于根据这些插入计算的费用。我根本不知道这里最好的设计。我应该在插入时通过触发器计算费用,还是应该将该逻辑放入应用程序并通过应用程序插入费用?
    • 如果对数据库的所有插入都发生在应用程序内部(没有外部或其他应用程序),那么将其挂接到应用程序中可能是个好主意。您将费用存储在数据库表中的想法仍然是最佳选择,尽管您可能只是不想使用触发器来应用它们。
    • 谢谢。我也是这么想的。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2015-03-21
    相关资源
    最近更新 更多