1

旧版

我有一张Person桌子和桌子Company

两个表都有一列Id(身份)

表公司的 ID 为 1 到 165 在表中人的 ID 为 1 到 2029

新版本

在新版本的系统中,创建了一个表Entity。该表包含CompaniesPeople

CompanyPerson表将被维护引用Entity表。
表中的 IdEntity将在Companyor中相同Person

问题

两个表都与其他表有多重关系。表Entity(以及其他)有一个列ID(身份)。问题是当两个表放在一起时,Id 重复了(这是意料之中的)。

如何在不丢失关系的情况下导入?

尝试

我想改变Company表中Ids的值,从2030年开始。因此连接两个表时Ids不会重复。

但这又产生了另一个问题。

  1. 如何在不失去现有关系的情况下做到这一点?
  2. 如何更改表中行的 ID,这会反映在与之相关的所有表中?

我想只使用 DDL (SQL Server) 来做到这一点

4

2 回答 2

1

我想改变 Company 表中 Ids 的值,从 2030 年开始。因此连接两个表时 Ids 不会重复。

使用 ON UPDATE CASCADE 在 Person 表上为所有相关表创建外键约束(或更改现有外键约束)。然后更新 Person 表并更改 id 列的值 - 这些更改将级联到相关表。

为了阻止进一步的问题,可以将 Person 和 Company 中的身份列分别更改为 identity(1000, 3) 和 identity (1001, 3) 之类的东西。

但是,我认为最好的办法是在 Entity 表中有一个不同的 EntityID 列,与 PersonID 和 CompanyID 无关。Entity 表还将有一个名为 AltEntityID 或 BusinessKey 的列,其中包含来自另一个表的 id,并且没有唯一约束或外键约束。

于 2013-03-11T22:01:03.763 回答
0

如果您对您的尝试进行小修改 - 添加新列,例如和 tonewId以管理与列的关系并保持列不变。为什么这是最简单的方法?因为从一侧看,新列不应该是标识列。另一方面,您可以保留与其他表相关联的所有逻辑并保持不变。CompanyPersonEntityidCompanyPerson

于 2013-03-11T21:36:43.953 回答