添加或移除外键
外键是数据库表中引用另一表中主键的字段。外键被定义为数据库表中相关列的约束。
在有外键约束的情况下,字段必须为空,或者其值必须指向所引用的表中主键的现有值。例如,班次的 SiteUID 字段为引用了某一站点 UID 的外键。因此,班次的 SiteUID 值必须为空,或者必须与站点的现有 UID 值相匹配。
外键约束还可防止从数据库表中删除外键字段所引用的行。例如,如果某一班次的 SiteUID 值为 5,那么由于 SiteUID 字段上的外键约束引用了站点上的 UID,因此无法删除 UID 值为 5 的站点。
添加外键
要将外键添加至现有数据库表:
1. 创建一个新的构建基块,该构建基块从 PTC 构建基块扩展而来,所述 PTC 构建基块中包含与数据库表相关的实体的管理器。这些管理器在 PTC.Base.Manager 事物的“配置”页面上的 DefaultGlobalManagerConfiguration 配置表中指定。例如,要向作业单中添加外键,请导航至 PTC.JobOrderImpl.Manager 事物。
有关详细信息,请参阅创建新构建基块
2. 导航至此新构建基块的管理器事物。
3. “服务”下,针对要添加外键的实体,覆盖 GetDBInfo 服务。例如,要向作业单的数据库表中添加外键,请覆盖 PTC.JobOrderImpl.Manager 事物的 GetDBInfo 服务。
4. 在脚本编辑器中,向下滚动至要向其添加外键的数据形状的条目。
5. 为数据形状添加 foreignKeys 数组,其属性如下:
identifier - 数据库中实体的名称。如果尚未指定,则系统会自动以 <表名>_<列名>_fk 格式生成该值。如果已指定,则无论对于指定值,还是任何自动生成的值,该值都必须具备唯一性。该值的最大长度为数据库所允许的最大标识符长度。
name - 当前数据形状上要作为外键的字段的名称。外键字段的基本类型应与所引用字段的基本类型相匹配。例如,如果所引用字段具有 STRING 基本类型,则外键字段也应具有 STRING 基本类型。
referenceDataShapeName - 所引用的数据库表的数据形状。
referenceFieldName - 包含所引用值的字段的名称。
onDelete - 所引用数据形状的实例被删除时,对当前数据形状的实例的影响。
deleteReference - 当前数据形状的实例被删除时,对所引用数据形状的实例的影响。
有关删除行为的详细信息,请参阅使用外键设置删除行为
6. 单击“保存”以保存对服务所做的更改。
7. 导航至 PTC.DBConnection.Manager 事物。
8. 将数据库信息与数据库架构同步。有关详细信息,请参阅同步数据库信息和数据库架构
移除外键
要移除外键:
* 
切勿移除任何预设定义的外键。仅移除之前已添加的外键,例如,按照向数据模型实体添加自定义属性向数据模型添加自定义实体添加的外键。
1. 创建一个新的构建基块,该构建基块从 PTC 构建基块扩展而来,所述 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,若要删除该外键约束,请为输入参数指定以下内容:
dataShapeName - MyObject
fieldName - WorkDefinitionUID
dbInfo -
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}
这对您有帮助吗?