数据库设计,用于维护客户资金细节

时间:2015-04-08 07:18:06

标签: mysql database-design

我必须为客户维持帐户余额

因为我有创建表 customer(id,name,address,mobno,balance);

余额字段是存储金额。

然后存入和取出的金额 我正在创建表事务 transaction(id,amount,type,adddate); type是存款/取款,

adddatetimestamp,金额已存入/取出。

我正在计算存款/取款金额并再次存储余额。

有数据 顾客 (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

如果有人想要更新他的交易,我将面临问题。 (3500,d);余额600 //新余额 之后,其他数据将无法显示正确的值。

我想知道这是存储金额和交易的正确方法,还是有任何重击方式。

1 个答案:

答案 0 :(得分:0)

看起来像这样的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

根据您的真实表结构,这会有所改变,但这个想法是正确的。它会将更新前的值与更新后的值进行比较,然后通过差异在正确的方向上调整余额。

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

如果交易类型从提款变为存款,则需要稍微调整一下,反之亦然,但如果有必要,上述内容应该足以让您到达那里。