维护客户资金明细的数据库设计
database design for maintaining customer money detail
我必须为客户维护账户余额
为此我创建了 table
customer(id,name,address,mobno,balance);
balance字段是存放金额的。
然后是存取款金额
我正在创建 table 交易
transaction(id,amount,type,adddate);
type
是 deposit/withdrawl,
adddate
是 timestamp
,数量是 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
如果交易类型从取款更改为存款,则需要进行更多调整,反之亦然,但以上内容应该足以让您在必要时到达那里。
我必须为客户维护账户余额
为此我创建了 table
customer(id,name,address,mobno,balance);
balance字段是存放金额的。
然后是存取款金额
我正在创建 table 交易
transaction(id,amount,type,adddate);
type
是 deposit/withdrawl,
adddate
是 timestamp
,数量是 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
如果交易类型从取款更改为存款,则需要进行更多调整,反之亦然,但以上内容应该足以让您在必要时到达那里。