我有这样的场景:
我有很多机器,每个都有数据库。还有一台客户端计算机可以从所有计算机中提取数据并添加到其本地数据库(它可能包含以前下载的数据)。因此,“许多”数据库上的表需要一些唯一的标识符。
many
- 每台计算机上的数据库
merged
- 客户端计算机上从many
数据库中提取数据的数据库。
我的两个想法:
GUID
many
数据库中的主键以及合并数据库中的GUID
。
在这里,我还需要机器的列ID来区分机器之间的行。
many
数据库中的整数主键和合并后的复合键(来自many
数据库的机器的GUID id +整数主键)
这里我假设每个many
数据库本身不需要GUID,但只需要merged
个数据库,所以只需要merged
中的GUID,它就是一个复合键
这种情况的最佳选择是什么?也许我想念一些东西。
答案 0 :(得分:0)
GUID
是这种系统的理想选择 - 它实际上确保不会发生主键冲突。由于您正在设计它,因此可以将GUID用作many
数据库中的临时标识符,并将其替换为merged
中的整数键。
另一种选择是在many
数据库之间对ID进行分区,因此每个数据库只能使用其他人不能使用的一系列ID。这样做并不容易(即没有估计这些数据库可以存在多长时间没有重新同步你可能会“溢出”,你需要能够在数据库“耗尽”等时提供额外的范围......)和可能不适合您的特殊需求。