如何在多客户端单服务器应用程序中保持主键列的唯一性
How to maintain uniqueness of primary key column in multiple client single server application
我发现了很多关于生成UID的不同问题,但是不能满足我的要求,请在下面找到我的业务需求。
我们的应用程序的主数据库驻留在服务器上的 SQL 服务器上。我们在客户端计算机上托管了相同的应用程序,该计算机具有与服务器上可用的相同数据库结构。客户端应用程序在本地计算机上运行,现在每 15 分钟客户端计算机数据库与服务器计算机数据库同步并更新服务器数据库上的数据后,更新本地计算机数据库上的数据。
目前,我已经将 int 实现为主键,自动标识为 true。现在假设客户端 1 和客户端 2 正在生成相同的主键,例如“1,2,3.. 所以
on" 在他们的本地数据库上 所以,现在当数据与服务器数据库同步时,它将与主要唯一约束冲突。
所以,现在我的问题是如何从这个场景中过来。如何生成全局唯一且没有任何重复的唯一密钥。根据我对 GUID 的了解。在这种情况下,GUID 将从不同的机器生成,因此可能会出现 GUID 重复的情况。
请帮我找出我可以实施的最佳解决方案,以实现不同机器的唯一性。
解决方案:
知道 SQL 服务器类型是什么会有所帮助,但几乎所有 SQL 服务器都有一个称为自动增量的功能,可以应用于列并将自动 select 基于先前 ID 的列值。您还可以在您的应用程序中拥有一个可供所有线程访问的私有整数,其中包含最后使用的 ID。两者都应该有效。
如果您使用.Net GUID 生成器,您将没有问题。
Guid.NewGuid();
基本上如 here 所述,GUID 部分基于计算机 MAC 地址,该地址通常是唯一的,除非有人一直在复制地址。所以两台不同的计算机永远不会生成相同的 GUID。
您似乎认为源数据库中的所有数据都需要很好地(且唯一地)插入目标数据库。你还没有解释这是为什么。
只需使用目标 table 中的身份作为主键,并将来自本地系统的键保存在 table 中作为属性(显然不是唯一的)。
还包括您要从源系统中用作标识符的任何内容(主机名?mac 地址?)
现在您在中央数据库中有了一个唯一的密钥,以及一种将记录追溯到原始系统的方法。
如有其他需求请说明
我发现了很多关于生成UID的不同问题,但是不能满足我的要求,请在下面找到我的业务需求。
我们的应用程序的主数据库驻留在服务器上的 SQL 服务器上。我们在客户端计算机上托管了相同的应用程序,该计算机具有与服务器上可用的相同数据库结构。客户端应用程序在本地计算机上运行,现在每 15 分钟客户端计算机数据库与服务器计算机数据库同步并更新服务器数据库上的数据后,更新本地计算机数据库上的数据。
目前,我已经将 int 实现为主键,自动标识为 true。现在假设客户端 1 和客户端 2 正在生成相同的主键,例如“1,2,3.. 所以 on" 在他们的本地数据库上 所以,现在当数据与服务器数据库同步时,它将与主要唯一约束冲突。
所以,现在我的问题是如何从这个场景中过来。如何生成全局唯一且没有任何重复的唯一密钥。根据我对 GUID 的了解。在这种情况下,GUID 将从不同的机器生成,因此可能会出现 GUID 重复的情况。
请帮我找出我可以实施的最佳解决方案,以实现不同机器的唯一性。
解决方案:
知道 SQL 服务器类型是什么会有所帮助,但几乎所有 SQL 服务器都有一个称为自动增量的功能,可以应用于列并将自动 select 基于先前 ID 的列值。您还可以在您的应用程序中拥有一个可供所有线程访问的私有整数,其中包含最后使用的 ID。两者都应该有效。
如果您使用.Net GUID 生成器,您将没有问题。
Guid.NewGuid();
基本上如 here 所述,GUID 部分基于计算机 MAC 地址,该地址通常是唯一的,除非有人一直在复制地址。所以两台不同的计算机永远不会生成相同的 GUID。
您似乎认为源数据库中的所有数据都需要很好地(且唯一地)插入目标数据库。你还没有解释这是为什么。
只需使用目标 table 中的身份作为主键,并将来自本地系统的键保存在 table 中作为属性(显然不是唯一的)。
还包括您要从源系统中用作标识符的任何内容(主机名?mac 地址?)
现在您在中央数据库中有了一个唯一的密钥,以及一种将记录追溯到原始系统的方法。
如有其他需求请说明