当前位置:  开发笔记 > 数据库 > 正文

生成必须遵循某些规则的唯一数字的最佳方法是什么?

如何解决《生成必须遵循某些规则的唯一数字的最佳方法是什么?》经验,为你挑选了1个好方法。

一些背景:在德国(至少)发票号码必须遵循一定的规则:

    必须订购

    它们必须是连续的(可能没有间隙)

几个月后,他们被允许包含字符.有些客户希望使用这种可能性,客户不知道或害怕,他们坚持使用仅限数字的发票号码.

此外,客户不希望在零处启动它们.

我能想出很多方法来产生这样一个数字吗?我想知道:最好的方法是什么?



1> Frode Liller..:

为了避免从0开始 - 只需从10000开始.忘记零填充.

您必须考虑何时分配号码.

如果您在首次打开发票进行编辑时分配号码,例如分配号码10014,并且用户取消发票,那么您就有差距,因为您必须记住其他人可能已经开始创建ID为10015的发票,因此您不能只回滚该号码.

如果您在完全写入发票并保存发票后分配号码,那么您将避免该方案,并且您将避免出现间隙,但在保存发票之前您将无法知道发票将具有哪个发票号码.

此外,您需要确保它是线程安全的,以便两个用户无法创建相同的发票号.

static object _invoiceNumberLock = new object();
public static string GetInvoiceNumber()
{
    lock(_invoiceNumberLock)
    {
        //Connect to database and get MAX(invoicenumber)+1
        //Increase the invoicenumber in SQL database by one
        //Perhaps also add characters
    }
}

还要考虑通过在SQL数据库中的invoicenumber列上使用UNIQUE INDEX来备份唯一性.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有