我需要为文档分配一个数字 - 一个RFQ,报价,订单,作业等。保存此编号的表具有一个整数类型的主键字段,标记为标识,因此它将自动递增。我应该使用此字段的值作为我的序列号,还是更好地使用不同类型为整数的字段SN并为新记录分配值max(SN)+ 1?或者有比这些更好的方法吗?
答案 0 :(得分:1)
我经常使用这样的东西。假设MyIDValues
表只有一行,因此IDColumn
始终保留最近分配的ID值:
DECLARE @NewID Int
UPDATE MyDB.dbo.MyIDValues SET @NewID = IDColumn = IDColumn + 1
SELECT @NewID
它同时(即作为原子语句)更新表以设置递增的值并返回该值。
在我看来,这比取当前的最高值更好,因为它总是避免冲突(即如果你的软件错误 取得最高值)先增加,然后再增加值。
答案 1 :(得分:1)
使用项目的某些特殊属性的哈希(即md5,大多数语言本身支持)。
例如,如果MySQL数据库中有一个项目表,则每个项目可能都有一个唯一的ID号,但不能用作序列号。但是哈希总是会给你一个设置长度的字符串也是唯一的,所以在php中,例如$code = md5($id);
(电子邮件地址也可以,但你应该salt远程个人的任何东西)
另一个技巧是通过将非敏感数据(如数据,时间,产品项目)串联到“20140101183263-006”中,在代码中携带有意义的数据。