外部キーの追加または除去
外部キーは、1 つのデータベーステーブル上のフィールドであり、別のテーブル内のプライマリキーを参照します。外部キーは、データベーステーブル内の関連した列の制約として定義されます。
外部キーの制約が定義されたフィールドの値は、空白であるか、参照テーブル内のプライマリキーが持つ既存の値を指すかのどちらかでなければなりません。たとえば、シフトの SiteUID フィールドは、サイトの UID を参照する外部キーです。このため、シフトの SiteUID の値は空白であるか、またはサイトの既存の UID 値と一致する必要があります。
外部キーの制約によって、外部キーフィールドによって参照されるデータベーステーブルから行が削除されることもなくなります。たとえば、シフトの SiteUID の値が 5 である場合、SiteUID フィールド上の外部キーの制約がサイトの UID を参照しているため、UID の値が 5 であるサイトは削除できません。
外部キーの追加
既存のデータベーステーブルに外部キーを追加するには、次の手順を実行します。
1. 新しい構築ブロックを作成します。このブロックはデータベーステーブルに関連するエンティティのマネージャを含んでいる PTC 構築ブロックから拡張されます。これらのマネージャは、PTC.Base.Manager「コンフィギュレーション」ページにある DefaultGlobalManagerConfiguration テーブルで指定されています。たとえば、ジョブオーダーに外部キーを追加するには、PTC.JobOrderImpl.Manager Thing に移動します。
詳細については、新規構築ブロックの作成を参照してください。
2. 新しい構築ブロック用のマネージャ Thing に移動します。
3. 「サービス」で、外部キーを追加するエンティティの GetDBInfo サービスをオーバーライドします。たとえば、ジョブオーダーのデータベーステーブルに外部キーを追加するには、PTC.JobOrderImpl.Manager Thing で、GetDBInfo サービスをオーバーライドします。
4. スクリプトエディタで、外部キーを追加するデータシェイプのエントリまで下にスクロールします。
5. 次のプロパティを持つデータシェイプの foreignKeys 配列を追加します。
identifier - データベース内でのエンティティの名前。指定されない場合、システムは <テーブル名>_<列名>_fk のフォーマットで値を自動的に生成します。指定された場合、値は指定した値と自動的に生成された任意の値の両方に対して一意でなければなりません。値の最大長は、データベースに許容されている識別子の最大長です。
name - 外部キーとなる現在のデータシェイプでのフィールドの名前。外部キーフィールドのベースタイプは、参照フィールドのベースタイプと一致する必要があります。たとえば、参照フィールドに STRING ベースタイプがある場合、外部キーフィールドにも STRING ベースタイプがなければなりません。
referenceDataShapeName - 参照データベーステーブルのデータシェイプ。
referenceFieldName - 参照されている値を含むフィールドの名前。
onDelete - 参照データシェイプのインスタンスが削除されるときの、現在のデータシェイプのインスタンスの影響。
deleteReference - 現在のデータシェイプのインスタンスが削除されるときの、参照データシェイプのインスタンスの影響。
削除動作の詳細情報については、外部キーによる削除動作の設定を参照してください。
6. 「保存」をクリックして、変更をサービスに保存します。
7. PTC.DBConnection.Manager Thing に移動します。
8. データベース情報をデータベーススキーマと同期化します。詳細については、データベース情報とデータベーススキーマの同期化を参照してください。
外部キーの除去
外部キーを除去するには、次の手順を実行します。
* 
既成で定義されている任意の外部キーを除去しないでください。データモデルエンティティへのカスタムプロパティの追加またはデータモデルへのカスタムエンティティの追加などにより、以前に追加した外部キーのみを除去します。
1. 新しい構築ブロックを作成します。このブロックはデータベーステーブルに関連するエンティティのマネージャを含んでいる PTC 構築ブロックから拡張されます。これらのマネージャは、PTC.Base.Manager「コンフィギュレーション」ページにある DefaultGlobalManagerConfiguration テーブルで指定されています。たとえば、ジョブオーダーから外部キーを除去するには、PTC.JobOrderImpl.Manager Thing に移動します。
詳細については、新規構築ブロックの作成を参照してください。
2. システムに設定されているデータベース Thing (PTC.DBConnection.MSSQLDatabase など) に移動します。
3. 「サービス」で、次の入力を指定して「RemoveForeignKey」サービスを実行します。
dataShapeName - 外部キーの制約を除去するデータベーステーブルのデータシェイプ。
fieldName - 外部キーの制約を除去するデータシェイプのフィールド。
dbInfo - 除去する外部キーの JSON の説明。外部キーが定義されている GetDBInfo サービスで指定されているものと同じ identifier (存在する場合)、namereferenceDataShapeName、および refereceFieldName の情報を指定する必要があります。これらが含まれている場合、onDelete または deleteReference の値はすべて、サービスによって無視されます。
4. 「実行」をクリックします。
5. 手順 1 で作成した構築ブロックのマネージャ Thing で、外部キーが定義されている GetDBInfo サービスに移動し、そのサービスから外部キー定義を除去します。これが除去されていない場合、次に同期化サービスが実行されたときに、外部キーがデータベースに再び追加されます。
たとえば、MyObject データシェイプの WorkDefinitionUID という名前のフィールドから、identifier が指定されていない外部キーの制約を削除するには、入力パラメータに対して次のように指定します。
dataShapeName - MyObject
fieldName - WorkDefinitionUID
dbInfo -
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}
これは役に立ちましたか?