我有一个通过网络运行的简单客户注册系统。该系统应该生成唯一的三位ID(主键),其中当前年份连接在一起(例如001-2013)。但是,我遇到的问题是,当来自不同计算机的两个用户(通过LAN)尝试注册不同的客户端时,会生成相同的主键。
如果用户在已生成ID后取消注册,该怎么办?我要为另一个客户重用该ID。我已经读过静态变量,但它没有解决我的问题。我非常感谢你的想法。
答案 0 :(得分:2)
难以实现唯一ID和顺序ID。要完全实现它,你必须序列化提交客户信息的提交,这样才能在实际存储数据时生成ID,否则在提交期间发生错误时你最终会出现漏洞。
如果您不需要严格的序号 - 给每个系统ID(1-22,23-44,...)的范围是常用的方法。如果您需要使用尽可能多的ID,则可以提供要使用的ID列表({1,3,233,234},{235,236,237})而不是范围。
答案 1 :(得分:2)
问题:
如何处理ID -001?
最简单的解决方案是在明确存储项目之前不要分配ID。
另一种方法是,在最终保存项目时,您会查找第一个免费ID。如果步骤2(#2)中的项目在步骤1之前保存,则#2获得ID -001。当#1然后被保存时,保存逻辑会看到其声明的ID(-001)正在使用中,因此它将分配-002。所以ID被重新分配。
最后,您可以在创建新项目时找到下一个免费ID。在上面描述的三个步骤中,这意味着你最初有一个-001应该是的差距。如果您现在创建一个新项目,您的代码将看到-001未使用,并将其分配给新项目。
但是,这完全取决于你没有指定的要求,现在-001是在-002之后的时间创建的,我不知道是否允许这样做。此外,在任何特定时刻,您的编号中的项目已被取消。如果它在报告期结束时发生,则会导致错误(-033,-034,-036)。
您可能还想包含一个自动递增的主键,而不是此发票号或其他任何内容。