在我正在开发的应用中,我们的用户会在应用中存款并成为他们的平衡点.
他们可以使用余额执行某些操作,也可以取消余额.什么是架构设计,确保用户永远不会撤回/或执行更多,即使在并发中也是如此.
例如:
CREATE TABLE user_transaction ( transaction_id SERIAL NOT NULL PRIMARY KEY, change_value BIGINT NOT NULL, user_id INT NOT NULL REFERENCES user )
上述模式可以跟踪平衡,(从user_transction中选择sum()); 但是,这并不适用于并发性.因为用户可以同时发布2个请求,并且可以在2个并发数据库连接中插入两个记录.
我也不能进行应用程序内锁定(确保一次只能写入一个transcation),因为我运行多个Web服务器.
是否有可以确保正确性的数据库架构设计?
PS在我的脑海中,我可以想象利用SQL中的唯一性约束.通过以后的事务引用先前的事务,并且由于每个早期的事务只能被引用一次,这确保了数据库级别的正确性.