在多卖家平台类型的应用程序中,有一个数据库存储多个卖家的所有交易,每个卖家必须为每个销售发出连续收据编号,以保持记录,而收据编号顺序没有间隙。可以考虑采用哪种模式和方法来满足此要求?
我最初的想法是创建一个包含预先填充的顺序序列号的表(以及卖家指定的可选前缀)和一个状态列,其中的值包括“可用”,“待定”,“填充”以及'sale_id'将引用'sales'表:
table: serial_numbers
id | seller_id | sale_id | prefix | serial_number | status
1 1 NULL NULL 1 available
2 2 1 A 1000 filled
3 1 NULL NULL 2 available
4 2 NULL A 1001 pending
5 2 NULL A 1002 available
当一个序列号块变低(比如低于10个可用记录)时,我会在数据库中插入100个新的序列号记录并将状态设置为可用。购买时,我会开始新的数据库交易(如果流程被取消或终止,可以回滚),这会将卖方帐户的下一个可用序列号设置为待处理,如果销售完成,请设置填写状态并将'sale_id'与serial_number记录关联起来。
这是一种有效的设计吗?由于数据库上的多卖家约束,因此无法使用简单的自动增量。是否有其他类似的设计模式适用于多卖家数据库应用程序?
答案 0 :(得分:0)
最后,我选择遵循Marc B的评论,并创建了一个采用last_value + 1
方法的表格,并加入了“悲观锁定”,以确保数字序列继续无间隙。有很多方法可以解决这个问题,但这似乎符合我的要求。