我有一个集中托管的数据库(MS SQL Server),分布式客户端通过Internet将数据保存到它。当Internet连接断开时,客户端开始将新数据本地存储到SQLite实例中。当Internet连接重新联机时,累积的本地数据将移动到中央数据库(已插入)。
在这种情况下处理唯一ID的最佳方法是什么?其他重要信息:
本地客户端可以在离线时记住其本地数据库ID以进行链接;因此,必须生成全局唯一的本地ID。
当合并回中央数据库时,不应更改本地数据库中的唯一ID。
将来可能会选择不同类型的数据库用于本地操作,具体取决于设备 - 例如一个JavaDb,一个TextFileDb等;因此,我认为此解决方案不应使用任何单一的专有数据库功能。
对于此问题,假设一个名为MyTable
的简单表,其中包含字段:ID
(主要/唯一键,无论应该是哪种类型)和Field1
,Field2
,{ {1}}后者并不重要。
首先想到的是使用GUID。有没有比这更优秀的模式或做法,或者更好的方法来实现这一目标?
编辑: 使用Microsoft .NET和ADO.NET
答案 0 :(得分:1)
GUID有效。
除此之外,这在很大程度上解决了Microsoft Sync Framework的问题(你没有提到你的开发平台,因此这里有一个假设)。它不依赖于任何数据库或数据类型或协议,并且可以配置为在各种离线方案中工作(好吧,这开始听起来像商业......)
答案 1 :(得分:0)
正如你所说,出于许多显而易见的原因,人们会想到GUID,其中一些内容已在此处介绍 Primary Keys: IDs versus GUIDs
您也可以阅读此答案 What's the best practice for primary keys in tables?