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