唯一标识符更改时如何更新表?
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
。
不幸的是,修改现有数据库以获得更安全的结构可能需要大量工作。
【讨论】:
以上是关于唯一标识符更改时如何更新表?的主要内容,如果未能解决你的问题,请参考以下文章
sql2005中设置字段属性时,如何设标识列(自增1)和必须唯一