你好
我想提出建议,因为我开发了一个生成报价和发票(在PHP / MariaDB中)的CRM。
什么是生成发票号码(以便有没有在数据库中的冲突 - 永不重复的号码等)的最佳方式?
PS: 我希望每年的每个年初(1月1日)都将发票号重新设置为零。 和CRM将由几个商店中使用,我要为每个商店的单独的编号。
起初,我认为我应该在订单表( order_invoices )中放置一个 number 列(int)。和在PHP创建一个新的发票时做这样的(例如具有锋德Laravel):
$lastNumber = OrderInvoice::whereRaw(
'number = (
SELECT MAX(number) FROM order_invoices
)'
)
->first()
->number;
$orderInvoice = new OrderInvoice();
$orderInvoice->number = $lastNumber + 1;
// other... assigne values to others columns
$orderInvoice->save();
但反射后,我不知道这是最好的解决办法(我用的事务,以便高流量的CRM和几名成员在同一时间验证命令冲突的风险计费号码的增量?)。
我认识的一位开发人员曾建议我创建一个 counters 表。并且在该表中:
_add为列:的 ID 下,的号(该列将被递增以知道我们在编号)
_在此表中,为每个商店放置一行(行)。
_And在我的程序(我的控制器的动作),用于建立一个新的发票:
_在发票生成之初锁定行(在商店行);
_To检索的号在计数器表,并且这个值将其插入(具有1)插入的号的发票表格( order_invoices );
您怎么看?和你有什么其他的想法和建议吗?
非常感谢您。
答案 0 :(得分:2)
仅架构:
数据库成员:
进度:
答案 1 :(得分:0)
NEXT VALUE FOR invoice_number
创建年度活动:
CREATE EVENT reset_invoice_number
ON SCHEDULE EVERY 1 YEAR
DO
ALTER SEQUENCE invoice_number RESTART 0