如何在多客户端单服务器应用程序中维护主键列的唯一性



我在生成UID时发现了许多不同的问题,但无法满足我的要求,请在下面找到我的业务需求。

我们的应用程序具有驻留在服务器上的 SQL Server 上的主数据库。我们在客户端计算机上托管了相同的应用程序,其数据库结构与服务器上可用的数据库结构相同。客户端应用程序在本地计算机上运行,现在每 15 分钟更新一次客户端计算机数据库与服务器计算机数据库同步并更新服务器数据库上的数据。

目前,我已经将 int 实现为主键,自动标识为 true。现在假设客户端 1 和客户端 2 正在生成相同的主键,例如"1,2,3..所以 on",因此,现在当数据与服务器数据库同步时,它将与主要的唯一约束冲突。

所以,现在我的问题是如何克服这种情况。 如何生成全局唯一且没有任何重复的唯一键。根据我与 GUID 相关的知识。在这种情况下,GUID 将从另一台计算机生成,因此可能会重复 GUID。

请帮助我提供最佳解决方案,我可以实施该解决方案,以实现不同机器的独特性。

如果使用 .Net GUID 生成器,则不会有任何问题。

Guid.NewGuid();

基本上,如此处所述,GUID 部分基于计算机 MAC 地址,该地址通常是唯一的,除非有人一直在复制地址。 因此,两台不同的计算机永远无法生成相同的 GUID。

解决方案:

了解SQL服务器类型会有所帮助,但无论如何,几乎所有SQL服务器都有一个称为自动增量的功能,该功能可以应用于列,并根据以前的ID自动为您选择列值。您还可以在应用程序中使用一个私有整数,该整数可由包含上次使用的 ID 的所有线程访问。

您似乎认为源数据库中的所有数据都需要很好地(且唯一地(插入目标数据库。你还没有解释为什么会这样。

只需使用目标表中的标识作为主键,并将表中本地系统中的键保留为属性(显然不是唯一的属性(。

还要包括要从源系统使用的任何内容作为标识符(主机名、mac 地址?(

现在,您的中央数据库中有一个唯一的键,以及一种将记录跟踪回原始系统的方法。

如果您有任何其他要求,请解释一下

最新更新