我们的客户希望我们开发基于网络的发票系统。生成的发票编号将是增量的,例如INV001,INV002,INV003等。此发票编号将在用户发出每次请求后即时生成。
我们面临的问题是,我们如何为每个用户生成一个完全唯一的增量数字?可能有100个用户访问该网站并同时请求发票。
关于使用数据库增量编号解决方案的建议,这是我的方案:
客户端同时组织多个事件,对于每个事件,发票号码应从1开始,并以1递增1.表格将包含来自各种事件的大量数据,所以显然我不能依赖在增量编号列上。以下是表格的示例(将列ID作为增量列)的示例:
id | eventName | guestName
1 | run for it | john doe
2 | run again | jane doe
3 | run again | the rock
4 | run for it | miow
5 | run again | hohoho
因此,对于上述情况,如何为事件“为它运行”生成发票号INV001,INV002,为事件“再次运行”生成发票号INV001,INV002,INV003?
感谢
答案 0 :(得分:1)
将您的活动与您的客人分开。有一个事件表,它将包含事件ID和事件名称,以及一个guest表,它将包含事件ID,访客详细信息和访客ID(增量编号)。这样您就可以使用访客ID作为发票号码的基础(您仍然需要格式化它以获得INV001,INV002等)。这是一个例子:
TblEvents
---------
Event Id (int, incremental)
Event Name (string)
TblEventGuests
---------
Event Guest Id (int, incremental) -- This will be the base for your invoice number.
Event Id (int, FK to events)
Guest Name (string)
您可以使用ROW_NUMBER功能获得所需的结果:
SELECT EventGuest_Id, Event_Id, ROW_NUMBER() OVER
(PARTITION BY Event_Id ORDER BY EventGuest_Id) AS InvoiceNumberBase
FROM TblEventGuests
ORDER BY Event_Id, InvoiceNumberBase
下次,尽量不要过多地简化问题。如果你的问题更加准确,我相信你会早点得到答案。