参照整合性を持つテーブルのコピーについて - Teradata Data Mover

Teradata® Data Mover ユーザー ガイド

Product
Teradata Data Mover
Release Number
17.10
Published
2021年6月
Language
日本語
Last Update
2021-07-16
dita:mapPath
ja-JP/fcu1619423186706.ditamap
dita:ditavalPath
ja-JP/fcu1619423186706.ditaval
dita:id
B035-4101
Product Category
Analytical Ecosystem

ほとんどの場合は、Teradata PT API、Teradata JDBC、およびTerada DSAを使用して、参照整合性を持つテーブルをソースからターゲットにコピーできます。

テーブルの任意の外部キー(FK)列が別のテーブルのプライマリ キー(PK)列を参照する場合、このテーブルは参照整合性を持ちます。参照整合性は、PK列とFK列の間でデータの整合性および一貫性を保つのに役立ちます。

CREATE TABLE文またはALTER TABLE文を使用すると、テーブルに参照整合性の制約を追加できます。Teradata Databaseでは、標準、バッチ、およびソフトの参照整合性を宣言できます。次の異なる種類の参照整合性の例では、複合外部キーの列セット (Name, Deptid) が、親テーブルdb.employee_PKのプライマリ キー列(Name, Deptid)を参照しています。
参照整合性 説明
標準
FOREIGN KEY ( Name , Deptid ) REFERENCES 
db.employee_PK ( Name , Deptid ))

行レベルの参照整合性が保たれます。

バッチ
FOREIGN KEY ( Name , Deptid ) REFERENCES WITH 
CHECK OPTION db.employee_PK ( Name , Deptid ))

暗黙のトランザクション全体に対して参照整合性が保たれます。単一文がテーブルに複数の行を挿入する場合に役立ちます。

ソフト
FOREIGN KEY ( Name , Deptid ) REFERENCES WITH 
NO CHECK OPTION db.employee_PK ( Name , Deptid ))

PKとFKの関係に参照整合性を保つことで、Teradata Databaseがシステムのオーバーヘッドを発生させないように明示的に指示します。

次のシナリオで、Data Moverが外部キーを持つテーブルのコピーを処理する方法について説明します。
ソース テーブル ターゲット テーブル Data Moverの結果
FK定義が存在する テーブルが存在しない。 ソース テーブルが、ソースのFK定義と共にターゲットにコピーされます。
FK定義が存在する FK定義がありません。 ソース テーブルが、参照整合性を伴わずにターゲットにコピーされます。そのためターゲット テーブルはFK定義を持ちません。
col1およびcol2にFK定義あり col3およびcol4にFK定義があります。 ソース テーブルがターゲットにコピーされますが、ターゲット テーブルの元のFK定義(col3およびcol4のFK)が維持されます。ターゲット テーブルでは、ソース テーブルのFK定義 (col1およびcol2のFK) は使用されません。
次の制限が、参照整合性を持つテーブルのコピーに適用されます。
  • 親テーブルをターゲットにコピーする場合、次の2つの条件のいずれかに当てはまる場合、子テーブルがジョブの一環としてコピーされないターゲット上に、親テーブルは存在できません。
    状態 エラー情報
    子テーブルに親テーブルに対する ハード参照整合性がある。 ソース テーブルAおよびBがあり、AはBおよびCの親である。 Cはターゲット上にAに対するハード参照がある一方でCはコピーされない場合に、ソース テーブルAおよびBをコピーすると、エラーが発生します。BはAをソフト参照整合性で参照しているため、AおよびCのみを移動する場合にジョブを作成する必要があります。
    ターゲット テーブルA、B、およびCがあり、AはBならびにCの親です。BはAをソフト参照整合性で参照していて、CはAをハード参照整合性で参照しています。
  • 子テーブルをコピーするときに、親テーブルを名前変更または再配置できるのは、子テーブルがすでにターゲット データベースに存在する場合、または親テーブルの存在するデータベースがターゲットとソースで同じである場合のみです。
  • ターゲットにテーブルが存在しない場合は、ソース テーブルの定義がターゲット テーブルを作成するために使用されます。Teradata Databaseは、テーブル定義においてプライマリ キーを固有インデックスとして表わすため、PKの代わりに固有インデックスを使用してターゲット テーブルが作成されます。子テーブルは、固有プライマリ インデックスまたは固有セカンダリ インデックスを持つテーブルを参照できます。
  • ジョブがTeradata DSAを使用してデータベース全体をコピーするときに、このデータベースに外部キーを持つテーブルがある場合、ターゲット テーブルは外部キーなしで作成されます。
  • ソース テーブルおよびターゲット テーブルが異なるFKを持つ場合は、テーブルのコピー後、ターゲット テーブルのFKが維持されます。
  • 親テーブルをコピーせずに子テーブルをコピーできるのは、子テーブルがすでにターゲット データベースに存在する場合、または親テーブルの存在するデータベースがターゲットとソースで同じである場合のみです。
  • テーブルを移動するときに、親テーブルにIDキーGENERATE ALWAYSがあり、そのキーが子テーブルの外部キーとして使用されている場合、それらのテーブルはTeradata DSAでのみ移動することができます。DSA、TPT、またはJDBCでは、このタイプのRIテーブルの部分コピーはサポートされません。

親テーブル(PT1)のプライマリ キーが子テーブル(CT1)の外部キーを参照するのと同時に、CT1のプライマリ キーがPT1の外部キーを参照する場合、この2つのテーブルは循環参照を持つと言います。つまり、両方のテーブル間にPKとFKの相互関係が存在します。循環参照を持つソーステーブルをコピーする場合、ターゲット テーブルにPKとFKの相互関係がなければ、Data Moverはターゲットにのみコピーできます。ターゲット テーブル間に循環参照があってはなりません。Data Moverが循環参照を持つソース テーブルをコピーしようとしたときに、ターゲット上にテーブルがない場合は、エラーが発生します。