2017-08-15 49 views
0

我们有一个表格,它在我们的应用程序数据库中包含一些枚举值和应用程序参数值。这些记录使用标识列作为其主键。我们也有DEV,TEST和PROD数据库。每次发布更新时,我们都需要在TEST和PROD数据库之间同步主键。测试和产品之间的同步标识列

我想问的是,什么是同步标识列的首选方法?我们想到的一个选择是从主键列中移除标识属性并手动创建在DEV和PROD上都相同的ID。

你的想法是什么?

+0

听起来好像HTTPS的一个问题://softwareengineering.stackexchange .COM。 –

+0

@UweKeim引用其他网站时,通常会指出[交叉发帖被忽视](https://meta.stackexchange.com/tags/cross-posting/info) – gnat

回答

0

您需要有一个理由将Identity属性添加到PK。显然Identity自动生成PK的方式,并允许你忘记代码如MAX(id)+1。所以,如果它对你的情况没有意义(据我所知你的值是预先定义的,代码库期望具体值),那么删除标识列应该是一个很好的解决方案。

此外,一个好的做法是在数据脚本中添加consitency检查,并让它们失败或通知是否有任何冲突。随着无标识的方式它看起来像:

IF EXISTS (SELECT 1 from enum_table where id = @idToInsert) 
    --notify there is a conflict 
    -- else insert @idToInsert 

在我的项目之一,我们发现,测试和督促数据库套房最适合我们之间的每周刷新,因此考虑过调查这一变种。

优点:

  • 你将永远有新鲜/一致的数据/模式复制督促问题
  • 无需移除查找表标识列(如果它是有道理的 - 像枚举值可以出现不仅通过手动脚本)

缺点:

  • 可能不足以WH EN很多球队正在对同一测试ENV,但是我觉得这取决于过程是如何组织好

希望这有助于