Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我如何将旧的ID密钥前进到新的数据库结构中?_Sql_Database_Etl_Database Migration - Fatal编程技术网

Sql 我如何将旧的ID密钥前进到新的数据库结构中?

Sql 我如何将旧的ID密钥前进到新的数据库结构中?,sql,database,etl,database-migration,Sql,Database,Etl,Database Migration,鉴于我正在从事的一个项目,我们有一个旧的数据库结构,我们正在将数据从中迁移到一个新的数据库结构中,我们需要保留一些表的旧键,以便与一些现有的应用程序功能向后兼容 目前,我们正在考虑两种方法来满足这一需求: 为每个表创建一个额外的可为null的字段,并将旧键插入该新字段 创建包含新旧键映射的配套表 注意:新数据不会生成旧的ID密钥,因此在方法#1中,随着时间的推移,最终可空字段将包含新记录的空值 哪种方法更适合于更干净的数据库设计和长期的数据管理 您认为这两种方法都有问题吗?如果有,有什么问题

鉴于我正在从事的一个项目,我们有一个旧的数据库结构,我们正在将数据从中迁移到一个新的数据库结构中,我们需要保留一些表的旧键,以便与一些现有的应用程序功能向后兼容

目前,我们正在考虑两种方法来满足这一需求:

  • 为每个表创建一个额外的可为null的字段,并将旧键插入该新字段
  • 创建包含新旧键映射的配套表
  • 注意:新数据不会生成旧的ID密钥,因此在方法#1中,随着时间的推移,最终可空字段将包含新记录的空值

    • 哪种方法更适合于更干净的数据库设计和长期的数据管理
    • 您认为这两种方法都有问题吗?如果有,有什么问题
    • 有没有一种方法我还没有想到

      • 您提到sql,但它是sql Server吗

        如果是SQL Server,请查看。这允许您显式插入自动增量列的值,而不是该列处于保护模式


        但是,我相信如果在insert语句中显式地包含PK及其值,它将尊重这一点,并将原始密钥保存在您希望保留的原始列中,而不必为了向后兼容而强制另一列。

        根据您确切的向后可比性要求,我将使用您的#1(无双关语)或者使用
        #3
        :使用旧键创建不可为空的列,并在新系统中除了它们自己的列之外放置新ID。