添加、编辑和删除元素并更新其他元素值的算法


Algorithm to add, edit and remove elements and update the value of the other ones

我目前正在开发一个系统,我需要一些帮助。我有一个数据库表,用于存储有关客户的一些信息。

每条记录都有一个付款日期和要支付的金额。例如:

Customer 1, 2015-06-15, $10
Customer 1, 2015-06-30, $10
Customer 1, 2015-07-15, $10
Customer 2, 2015-06-14, $15
Customer 2, 2015-06-20, $15
...

每个客户都有要支付的总金额(客户 1 需要支付 30 美元,客户 2 需要支付 30 美元,依此类推)。总金额存储在数据库的不同表中。现在,如果有人为客户 1 添加新付款,系统应更新其他付款(例如,如果新付款的金额为 6 美元,那么我们需要从其他 3 笔付款中减去 6 美元。在这种情况下,客户 1 的记录应更新为:

Customer 1, 2015-06-15, $8
Customer 1, 2015-06-30, $8
Customer 1, 2015-07-15, $8
Customer 1, 2015-07-30, $6
...

由于客户 1 需要支付 30 美元,并且由于我们要额外添加新的 6 美元,因此我们需要拆分所有现有记录的更改。

如果有人编辑或删除其中一条记录,情况也是如此。

这个想法是在用户执行添加/编辑/删除操作时通过更新所有记录来始终保持总金额相同。

有什么想法吗?

提前致谢

下面是一个触发器的示例,用于解决您的问题。您可以在特定表上插入/更新/删除之前或之后添加触发器。要将付款金额拆分为单个发票记录(我认为您描述的是发票),您必须计算 incoices,然后将付款金额除以该计数(sry for my eng.)。使用NEW.***您可以访问将插入或更新的数据。我认为你应该在删除之前使用OLD.***,但我不是舒尔。

CREATE TRIGGER on_new_payment BEFORE INSERT ON payments
FOR EACH ROW
BEGIN
DECLARE countpayment INT;
SET countpayment = (SELECT count(*) FROM table_invoices where customer=NEW.customer);
UPDATE table_invoices SET amount = amount - (NEW.amount / countpayment) where customer = NEW.customer;
END;