自訂資訊內容與存取 > 資料庫活動 > 新增或移除外部索引鍵
新增或移除外部索引鍵
外部索引鍵是一個資料庫表格中的欄位,它參考另一個表格中的主索引鍵。外部索引鍵定義為資料庫表格中相關欄上的條件約束。
在外部索引鍵條件約束到位的情況下,欄位必須為空,或者值必須指向所參考表格中主索引鍵的現有值。例如,班次上的 SiteUID 欄位是參考站台 UID 的外部索引鍵。因此,班次的 SiteUID 值必須為空或與站台現有的 UID 值相符。
此外部索引鍵條件約束也可防止從資料庫表格中刪除由外部索引鍵欄位參照的列。例如,如果班次的 SiteUID 值為 5,則由於 SiteUID 欄位的外部索引鍵條件約束參考站台上的 UID,因此無法刪除 UID 值為 5 的站台。
新增外部索引鍵
如需將外部索引鍵新增至現有資料庫表格︰
1. 導覽至與資料庫表格相關的適當 ThingWorx 實體管理員。這些管理員在以下位置進行指定︰啟動點組態項目 (PTC.Factory.C_LaunchPointConfigurationThing_[ReleaseVersion]) 之「組態」頁面的 ManagerConfigurationSettings 表格中。例如,Operator Advisor 實體的管理員是 PTC.SCA.SCO.DefaultProductionOrderManager
2. 「服務」下,尋找並取代要新增外部索引鍵之實體的 Get<entity>DBInfo 服務。例如,欲將外部索引鍵新增至工作訂單的資料庫表格,請尋找並取代 GetJobOrderDBInfo 服務。
3. 在指令集編輯器中,向下捲動至要新增外部索引鍵之資料形式的項目。
4. 為資料形式新增 foreignKeys 陣列,使其包含下列內容:
identifier - 資料庫中實體的名稱。如果未指定,則系統會以 <table_name>_<column_name>_fk 格式自動產生值。如果已指定,則該值必須具唯一性,無論對於指定值還是任何自動產生的值。值的最大長度是資料庫所允許的識別元最大長度。
name - 目前資料形式上要成為外部索引鍵的欄位的名稱。外部索引鍵欄位的基礎類型應該與所參考欄位的基礎類型相匹配。例如,如果所參考欄位使用 STRING 基礎類型,則外部索引鍵欄位也應該使用 STRING 基礎類型。
referenceDataShapeName - 參考資料庫表格的資料形式。
referenceFieldName - 包含所參考值的欄位名稱。
onDelete - 刪除所參考資料形式的實例時對目前資料形式的實例所產生的影響。
deleteReference - 刪除目前資料形式的實例時對所參考資料形式的實例所產生的影響。
如需有關刪除行為的詳細資訊,請參閱 使用外部索引鍵設定刪除行為
5. 按一下「儲存」,儲存服務組態的變更。
6. 導覽至 PTC.SCA.SCO.DatabaseManager 物件。
7. 同步處理 Operator Advisor 中的資料庫資訊與資料庫結構描述。如需詳細資訊,請參閱 同步處理資料庫資訊與資料庫結構描述
移除外部索引鍵
如需移除外部索引鍵︰
* 
請勿移除任何現成定義的外部索引鍵。僅移除先前已新增的外部索引鍵,例如透過 將自訂內容新增至 Operator Advisor 實體將自訂實體新增至 Operator Advisor 資料模型
1. 導覽至為您系統設定的資料庫物件,例如 PTC.SCA.SCO.PostgresDatabasePTC.SCA.SCO.MSSQLDatabase
2. 「服務」下方,以下列輸入執行 RemoveForeignKey 服務︰
dataShapeName - 您要從中移除外部索引鍵條件約束之資料庫表格的資料形式。
fieldName - 您要在其中移除外部索引鍵條件約束之資料形式的欄位。
dbInfo - 要移除之外部索引鍵的 JSON 描述。必須提供在定義外部索引鍵的 Get<entity>DBInfo 服務中指定的相同 identifier (若有)、namereferenceDataShapeNamerefereceFieldName 資訊。服務會略過任何 onDeletedeleteReference 值 (若包含)。
3. 按一下「執行」
4. 導覽至定義外部索引鍵的 Get<entity>DBInfo 服務,並從服務中移除外部索引鍵定義。如果未移除,則在下次 執行同步處理服務時,會將外部索引鍵新增回資料庫。
例如,要從 MyObject 資料形式上名為 WorkDefinitionUID 的欄位中移除未指定 identifier 的外部索引鍵條件約束,請針對輸入參數指定下列內容:
dataShapeNameMyObject
fieldNameWorkDefinitionUID
dbInfo
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}