防止多个数据库之间的重复键

Edw*_*win 1 database sybase primary-key

我正处于这样一种情况:我们将推出一个新版本的软件,它将使用一个独立的数据库(模式中的重大变化).将会有相当长的一段时间,新系统和旧系统都将投入生产,我们需要确保在两个数据库之间生成唯一ID(我们不希望在数据库A中有一行)与数据库B中的行具有相同的ID.数据库是Sybase.

我想出的可能的解决方案:

  1. 使用支持非常大数字的数据类型并为每个数据类型分配一个范围,希望它们永远不会溢出.
  2. 对一个数据库使用负值,对另一个数据库使用正值.
  3. 添加标识数据库的其他列,并使用该列和当前ID的组合作为键.
  4. 哭.

我还能做什么?是否有更优雅的解决方案,两个数据库一起工作?我相信这两个数据库将在同一台服务器上,如果这很重要的话.

cod*_*ike 6

在这种情况下,GUID或全局唯一ID可以是方便的主键.我相信Sybase支持他们.

编辑:虽然如果你的整个数据库已经基于整数主键,那么切换到GUID可能不太实际 - 在这种情况下,只需对数据库之间的整数空间进行分区,就像GWLlosa和其他人所建议的那样.


GWL*_*osa 5

我已经看过几次了.在我参与的那些中,我们只是为旧的ID空间分配了一个足够大的ID空间(因为它已经运行了一段时间,我们知道它使用了多少个键,我们可以计算出它有多少个键'需要一个指定的'寿命')并启动上面新数据库的"ID SEQUENCE".

我会建议不要使用任何其他技巧,只是因为它们都需要更改"遗留"应用程序,这是一种我认为不需要采取的风险.