1

古いバージョン

私はPersonテーブルとテーブルを持っていますCompany

両方のテーブルに列がありますId(ID)

表の会社の ID は 1 から 165 です 表の個人の ID は 2029 年まで 1 です

新しいバージョン

システムの新しいバージョンでは、テーブルが作成されましたEntityCompaniesこのテーブルには、とのレコードが含まれています。People

CompanyPersonテーブルは、テーブルを参照して維持さEntityれます。
テーブル内の ID は、またはテーブルEntity内で同じになりますCompanyPerson

質問

両方のテーブルには、他のテーブルとの複数の関係があります。テーブルEntity(およびその他) には列ID(ID) があります。問題は、2 つのテーブルが一緒にあるときに Id が繰り返されたことです (これは予想されていたことです)。

関係を失うことなくインポートする方法は?

試み

2030年から始まるテーブルのIDの値を変更することを考えましCompanyた。したがって、2つのテーブルを結合するときにIDが重複しません。

しかし、これは別の問題を引き起こします。

  1. 既存の関係を失うことなくこれを行うには?
  2. テーブル内の行の ID を変更する方法は、関連するすべてのテーブルに反映されますか?

DDL(SQL Server)のみを使用してこれを行いたい

4

2 に答える 2

1

I thought of changing the value of Ids in Company table, starts from 2030. Thus the Ids would not duplicate when joining the two tables.

Create foreign key constraints on the Person table to all related tables (or alter the existing foreign key constraints) with ON UPDATE CASCADE. Then update the Person table and change the values if the id columns - these changes will cascade to the related tables.

To stop further problems, maybe change the identity columns in Person and Company to something like identity( 1000, 3 ) and identity (1001, 3) respectively.

However, I think the best idea is to have a different EntityID column in the Entity table, unrelated to PersonID and CompanyID. The Entity table would also have a column called AltEntityID or BusinessKey that contains the id from the other table and that does not have a unique constraint or a foreign key constraint.

于 2013-03-11T22:01:03.763 に答える
0

And if you make small modification to your attempt - add new column, say newId, to Company and to Person to manage relation with Entity and leave id columns as is. Why this is the simpliest way? Because new columns shouldnot be identity columns, from one side. From the other side, you can leave all logic of relating other tables with Company and Person intact.

于 2013-03-11T21:36:43.953 に答える