为将要合并的分布式数据创建唯一标识的最佳方法是什么?

时间:2010-01-27 03:43:30

标签: .net database-design ado.net distributed-computing primary-key-design

我有一个集中托管的数据库(MS SQL Server),分布式客户端通过Internet将数据保存到它。当Internet连接断开时,客户端开始将新数据本地存储到SQLite实例中。当Internet连接重新联机时,累积的本地数据将移动到中央数据库(已插入)。

在这种情况下处理唯一ID的最佳方法是什么?其他重要信息:

  • 本地客户端可以在离线时记住其本地数据库ID以进行链接;因此,必须生成全局唯一的本地ID。

  • 当合并回中央数据库时,不应更改本地数据库中的唯一ID。

  • 将来可能会选择不同类型的数据库用于本地操作,具体取决于设备 - 例如一个JavaDb,一个TextFileDb等;因此,我认为此解决方案不应使用任何单一的专有数据库功能。

  • 当更改合并回中央数据库时,所有记录都必须具有唯一ID。

对于此问题,假设一个名为MyTable的简单表,其中包含字段:ID(主要/唯一键,无论应该是哪种类型)和Field1Field2,{ {1}}后者并不重要。

首先想到的是使用GUID。有没有比这更优秀的模式或做法,或者更好的方法来实现这一目标?

编辑: 使用Microsoft .NET和ADO.NET

2 个答案:

答案 0 :(得分:1)

GUID有效。

除此之外,这在很大程度上解决了Microsoft Sync Framework的问题(你没有提到你的开发平台,因此这里有一个假设)。它不依赖于任何数据库或数据类型或协议,并且可以配置为在各种离线方案中工作(好吧,这开始听起来像商业......)

http://msdn.microsoft.com/en-us/sync/bb887625.aspx

答案 1 :(得分:0)

正如你所说,出于许多显而易见的原因,人们会想到GUID,其中一些内容已在此处介绍 Primary Keys: IDs versus GUIDs

您也可以阅读此答案 What's the best practice for primary keys in tables?