唯一标识符更改时如何更新表?

Posted

技术标签:

【中文标题】唯一标识符更改时如何更新表?【英文标题】:How to update tables when the unique identifier changes? 【发布时间】:2020-06-27 14:52:04 【问题描述】:

我一直在我的大多数应用程序和数据库表中使用工资单员工 ID 作为唯一标识符。

最近我们公司切换到了新的工资系统,现在为所有员工分配了一个新的员工ID。

现有员工将拥有两个 ID,但新员工将只有新 ID。

我正在为如何更新现有应用程序以适应这种变化而苦恼(例如,如何使用新 ID 向现有表中添加新条目:我应该创建新列吗?使用现有列?)。

我有几百个表/应用程序,其中嵌入了旧 ID,因此更新它们并非易事。

新员工 ID 的数据类型也与旧 ID 不同(字符与整数)。

任何建议或想法将不胜感激!

【问题讨论】:

【参考方案1】:

这是一个不幸的结果,但它肯定会发生。你有我的哀悼。

我在一所大型大学工作,我们有一些系统喜欢为人们使用不同的唯一标识符。我们通常使用桥接表来处理这个问题。本质上,这是一个简单的表格,允许在两个或多个标识系统之间进行转换。

我们的主要 ERP 发布其自己的唯一标识符,所有其他标识符都使用桥接器来回转换。听起来您的系统没有生成自己的唯一标识符,而是依赖外部系统来生成。我认为这是一个错误。

也就是说,没有技术原因您不能像过去那样生成 ID 并在未来保持两者。即使您没有旧系统,您也知道格式并且可以轻松复制它。

运行此双 ID 系统会增加一点复杂性,但如果您添加另一个产品并尝试使用另一个 ID 系统......这可能是值得的。

很抱歉,我的回答含糊不清,但这里有很多边缘情况可能会影响这两个方向的事情。

【讨论】:

【参考方案2】:

我建议有一个employees 表,每个员工一行。

此表将有一个自动生成的 ID特定于您的数据库系统。此 id 将是 employees 的主键并用于所有外键引用。

任何其他 id 都只是employees 表上的属性。它们与任何其他表一样接近单个join

不幸的是,修改现有数据库以获得更安全的结构可能需要大量工作。

【讨论】:

以上是关于唯一标识符更改时如何更新表?的主要内容,如果未能解决你的问题,请参考以下文章

为 hive 表中新添加的记录更新唯一 id 列

sql2005中设置字段属性时,如何设标识列(自增1)和必须唯一

如何在 ibeacon 中使用唯一标识符?

Swift:如何以编程方式获取iOS设备的唯一标识符?

在联结表中,如果我需要一个单一的唯一标识符和一个单独的唯一复合标识符,它应该是主键?

如何每天为每个唯一标识符快速创建一行?