Database design 用于合并数据库的复合主键或guid

Database design 用于合并数据库的复合主键或guid,database-design,relational-database,replication,Database Design,Relational Database,Replication,我有这样的场景: 我有许多机器,每台机器上都有数据库。还有一台客户机可以从所有机器中提取数据并添加到其本地数据库中(可能有以前下载的数据)。因此,“许多”数据库上的表需要一些唯一标识符 每台机器上有许多数据库 合并-客户端计算机上的数据库,从多个数据库中提取数据 我的两个想法: GUID主键位于多个数据库中,也位于合并数据库中的GUID。 这里我还需要机器的列id来区分机器之间的行 多个数据库中的整数主键和合并数据库中的复合键(机器的GUID id+来自多个数据库的整数主键) 在这里,我假设许

我有这样的场景:

我有许多机器,每台机器上都有数据库。还有一台客户机可以从所有机器中提取数据并添加到其本地数据库中(可能有以前下载的数据)。因此,“许多”数据库上的表需要一些唯一标识符

每台机器上有许多数据库

合并
-客户端计算机上的数据库,从
多个
数据库中提取数据

我的两个想法:

  • GUID
    主键位于
    多个
    数据库中,也位于合并数据库中的
    GUID
    。 这里我还需要机器的列id来区分机器之间的行

  • 多个
    数据库中的整数主键和合并数据库中的复合键(机器的GUID id+来自
    多个
    数据库的整数主键)

    在这里,我假设
    许多
    数据库中的每个数据库本身不需要GUID,而只需要
    合并的
    一个数据库,因此GUID只在
    合并的
    中需要,并且它是一个复合键


  • 对于这种情况,什么是更好的选择?也许我遗漏了什么。

    GUID
    非常适合这样的系统-它实际上确保不会发生主键冲突。由于您正在设计它,因此可以在
    多个
    数据库中使用guid作为临时标识符,并在
    合并的
    数据库中用整数键替换它们


    另一个选项是在
    多个
    数据库之间划分ID,这样每个数据库只能使用非其他数据库可以使用的ID范围。要做好这一点并不容易(即,如果不估计这些数据库在没有重新同步的情况下可以存在多长时间,您可能会“溢出”,您需要能够在数据库“用完”后提供额外的范围等等)而且可能不适合您的特殊需要。

    GUID
    非常适合这种系统-它实际上确保不会发生主键冲突。由于您正在设计它,因此可以在
    多个
    数据库中使用guid作为临时标识符,并在
    合并的
    数据库中用整数键替换它们


    另一个选项是在
    多个
    数据库之间划分ID,这样每个数据库只能使用非其他数据库可以使用的ID范围。要做好这一点并不容易(即,如果不估计这些数据库在没有重新同步的情况下可以存在多长时间,您可能会“溢出”,您需要能够在数据库“用完”后提供额外的范围等等)并且可能不适合您的特殊需要。

    不清楚这些数据库是否是现有数据库,您是否需要整合它们,或者您是为断开连接的系统设计的。请详细说明要求。您的编辑没有为我澄清问题。我现在正在设计这些数据库。不清楚这些是现有数据库,您需要合并它们,还是为断开连接的系统设计。请详细说明要求。您的编辑没有为我澄清问题。我现在正在设计数据库。