添加或移除外键
外键是数据库表中引用另一表中主键的字段。外键被定义为数据库表中相关列的约束。
在有外键约束的情况下,字段必须为空,或者其值必须指向所引用的表中主键的现有值。例如,某一班次上的 SiteUID 字段为引用某一站点 UID 的外键。因此,班次上的 SiteUID 值必须为空,或者必须与站点的现有 UID 值相匹配。
外键约束还可防止从数据库表中删除外键字段所引用的行。例如,如果某一班次的 SiteUID 值为 5,那么由于 SiteUID 字段上的外键约束引用了站点上的 UID,因此无法删除 UID 值为 5 的站点。
添加外键
要将外键添加至现有数据库表:
1. 浏览至与数据库表相关的 ThingWorx 实体的相应管理器。这些管理器在启动点配置事物 (PTC.Factory.C_LaunchPointConfigurationThing_[发布版本]) 的“配置”页面上的 ManagerConfigurationSettings 表中指定。例如,Operator Advisor 实体的管理器为 PTC.SCA.SCO.DefaultProductionOrderManager
2. “服务”下,针对要添加外键的实体,查找并覆盖 Get<entity>DBInfo 服务。例如,要向作业单的数据库表中添加外键,请查找并覆盖 GetJobOrderDBInfo 服务。
3. 在脚本编辑器中,向下滚动至要向其添加外键的数据形状的条目。
4. 添加具有以下属性的数据形状的 foreignKeys 数组:
identifier - 数据库中实体的名称。如果尚未指定,则系统会自动以 <表名>_<列名>_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,若要删除该外键约束,请为输入参数指定以下内容:
dataShapeName - MyObject
fieldName - WorkDefinitionUID
dbInfo -
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}