我正在尝试为客户创建订单号以供使用。我将拥有多台无法访问同一数据库的计算机(因此无法使用主键并生成唯一ID)。
我将拥有一个唯一的字符串,我可以将其用于某种算法的种子,该算法将为订单号生成一个独特的字母数字ID#。我不想将此唯一字符串用作订单#,因为其内容在外观上不适合客户用于订单#。
是否可以结合使用GUID&我的独特字符串用一些算法来创建一个独特的订单#? 接受任何建议。
答案 0 :(得分:1)
如果您的机器数量相对较少,并且每台机器都有自己的配置文件或设置,您可以为每台机器(A,B,C ......)分配一个字母,然后将该字母附加到订单上number,可以是每个DB中的自动递增整数。
即
Starting each database ID at 1000:
1001A // First order on database A
1001B // First order on database B
1001C // First order on database C
1002A // Second order on database A
1003A // Third order on database A
1004A // etc...
1002B
1002C
每个数据库中的订单表都有一个ID列(整数)和“机器”标识符(字符A,B,C ......),因此如果您需要将DB组合成一个,每个订单仍然是唯一的。
答案 1 :(得分:0)
只需使用直线guid / uuid。他们考虑了网络接口的mac地址,使其成为该机器的唯一。
答案 2 :(得分:0)
如果从存储过程(或者使用序列在Oracle中)生成id,则可以使用id作为主键。
您需要做的是让每台机器生成不同的范围,例如机器a从1到1百万,机器B从1000001到2000000等。
答案 3 :(得分:0)
您说您有一个独特的字符串,不适合向客户展示。
如果它只是不合适而且没有必要,即安全/隐私相关,你可以以某种方式改变它。一个简单的例子是Rot13
但通常我也会建议使用UUID(但版本4)来获取随机数。生成重复项的可能性非常低,并且可以使用许多编程语言的库。