0

DDLUtilsを使用しようとすると、常に自動インクリメントに設定されている列の ID 値を引き継ぐように見えます。どうすればこれを防ぐことができますか?

たとえば、所有者 ID という列を持つ Dogs テーブルがあります。列 ownerID は自動インクリメントに設定されています。ただし、所有者のリストは連続しておらず、ギャップがあります (たとえば、所有者 ID の 2、4、5、6、7、10 は存在しますが、1、3、8、9 は削除されたため存在しません)。問題は、DdlToDatabase の復元時に、所有者 ID が 1、2、3、4 などにリセットされることです。これは、所有者 ID を介した Dogs テーブルのリンクがすべて正しくないことを意味します。

自動インクリメント フィールドの値を正しくインポートするように DDlUtils を取得するにはどうすればよいですか?

4

3 に答える 3

0

自動インクリメント行から値をインポートできないようです。つまり、他のテーブルで参照されている場合は、問題が発生しています。代わりに、このルートを使用する場合はUUIDを使用する必要があります。

于 2010-02-09T19:09:16.440 に答える
0

DDLUtils についてはよくわかりませんが、この種の ETL (エクスポート、変換、読み込み) 操作については、もう少し作業を行う必要があります。私は一般的な2つの方法を知っています

  • 新しい Dog レコードを挿入します。古い ID から新しい ID へのマップを保持します。ownerID への FK を持つ別のテーブルに挿入する場合は、マップを使用して新しい ID を選択します。
    元の犬 新しい犬  
    [ID] [名前] [ID] [名前]
    2 ヘンリー 1 ヘンリー
    5 オリバー 2 オリバー

両方のレコードを挿入すると、[ 2 => 1, 5 => 2 ] の古いものから新しいものへのマップになります。次に、ID 2 を使用するレコードを挿入するときは、代わりに 1 を使用します。

  • もう 1 つの方法は、データをロードするときにテーブルの自動インクリメント機能を無効にすることです。これは DB 固有です。

たとえば、SQL Server では、次を使用できます。 set identity_insert Dogs on

MySQL では、レコードを簡単に挿入して、必要な ID を指定できます。

于 2009-12-04T04:55:04.590 に答える