维护客户资金明细的数据库设计

database design for maintaining customer money detail

我必须为客户维护账户余额

为此我创建了 table customer(id,name,address,mobno,balance);

balance字段是存放金额的。

然后是存取款金额 我正在创建 table 交易 transaction(id,amount,type,adddate); type 是 deposit/withdrawl,

adddatetimestamp,数量是 deposited/withdrawl。

我正在对金额 deposited/withdrawl 金额进行计算,并再次将其与余额一起存储。

有数据 顾客 (1,'Ajay'.'India',23324,400);

交易

(1,400,d);  balance 400
(2,300,w);  balance 100
(3,700,d);  balance 800
(4,200,w);  balance 600

如果有人想更新他的交易,我会遇到问题。 (3,500,天); balance 600 //新余额 那么在此之后其他数据将不会显示正确的值。

我想知道存储金额和交易的正确方法还是有什么更好的方法。

看起来像这样的 AFTER UPDATE 触发器可以完成这项工作:

CREATE TRIGGER balanceUpdate AFTER UPDATE on transaction
FOR EACH ROW
BEGIN
  SET @diff = NEW.amount - OLD.amount;
  IF(NEW.type = "withdrawal") THEN
    SET @diff = -@diff;
  END IF;
  UPDATE customer SET balance = balance + @diff WHERE id = NEW.customer_id;
END

根据您的实际table结构,这会稍有变化,但这个想法是正确的。它会比较更新前的值和更新后的值,然后通过差值向正确的方向调整平衡。

下面是一些测试数据的快速演示:http://sqlfiddle.com/#!9/3a43b/2

如果交易类型从取款更改为存款,则需要进行更多调整,反之亦然,但以上内容应该足以让您在必要时到达那里。