Personalización del contenido y el acceso a la información > Actividades de base de datos > Definición del comportamiento de borrado con claves externas
Definición del comportamiento de borrado con claves externas
Cuando se borra la entidad en cualquiera de los lados de una relación de clave externa, se debe especificar lo que sucede con la entidad en el otro lado de la relación. De este modo, se garantiza que se mantiene la integridad referencial y que se siguen las decisiones basadas en la lógica de negocio.
El comportamiento de eliminación se especifica en la información de la base de datos para una definición de datos, en la misma matriz en la que se especifican las claves externas. El comportamiento de borrado, si existe, se especifica para cada clave externa individual. En las descripciones siguientes, A es la entidad con la clave externa y B es la entidad con el campo al que hace referencia la clave externa.
onDelete: permite determinar qué sucede con A cuando se borra B.
CASCADE: si se borra B, también se borra A. Esto se conoce como borrado en cascada.
SET_NULL: cuando se borra B, el valor del campo de la clave externa en A se define en nulo.
Si onDelete no se especifica, no le sucede nada a A cuando se borra B.
deleteReference: permite determinar lo que le sucede a B cuando se borra A.
Si es verdadero, cuando se borra A, también se borra B.
Si es falso o no se especifica, no le sucede nada a B cuando se borra A.
Por ejemplo, un vínculo de definición de trabajo es una relación entre una definición de trabajo padre y una definición de trabajo hija. Esto se define en el vínculo de definición de trabajo con campos de clave externa que hacen referencia a los UID de las dos definiciones de trabajo (ParentUID y ChildUID). El siguiente código procede de la información de la base de datos especificada para la definición de datos del vínculo de definición de trabajo (PTC.SCA.SCO.WorkDefinitionLink) en el servicio GetWorkDefinitionDBInfo de PTC.SCA.SCO.DefaultProductionOrderManager.
"foreignKeys": [{
"name": "ChildUID",
"referenceDataShapeName": "PTC.SCA.SCO.WorkDefinition",
"referenceFieldName": "UID",
"onDelete": "CASCADE",
"deleteReference": true
}, {
"name": "ParentUID",
"referenceDataShapeName": "PTC.SCA.SCO.WorkDefinition",
"referenceFieldName": "UID",
"onDelete": "CASCADE"
}]
Dado que onDelete está definido como CASCADE para las dos claves externas, si se borra una de las definiciones de trabajo a las que se hace referencia, también se borra el vínculo de definición de trabajo. De este modo, se garantiza la integridad referencial; el vínculo de definición de trabajo no puede existir a no ser que la definición de trabajo de cada lado de la relación esté presente.
Dado que deleteReference está definido como verdadero para la clave externa en el campo ChildUID, si se borra el vínculo de definición de trabajo, también se borra la definición de trabajo a la que hace referencia el campo ChildUID. Este comportamiento viene determinado por la decisión de negocios que especifica que si se borra el vínculo entre una definición de trabajo padre e hija, también se debe borrar la definición de trabajo hija.
* 
No es necesario especificar los comportamientos de borrado antes de sincronizar con la base de datos para añadir una nueva definición de datos o una clave externa al esquema de base de datos. Como práctica recomendada, se deben especificar los comportamientos de borrado antes de que se borren las instancias de las definiciones de datos de cualquiera de los lados de la relación de clave externa.
Los servicios que se utilizan para realizar borrados, satisfaciendo las configuraciones onDelete y deleteReference de cada clave externa, se encuentran en la definición de cosa de la gestión de bases de datos (PTC.SCA.SCO.DBManagementThingShape). Estos servicios son BatchCascadeDelete, CascadeDelete y CollectActionForCascadeDelete. Todos los administradores se extienden desde esta definición de cosa, por lo que heredan estos servicios. Para obtener más información, consulte Servicios de definición de cosa de administración de base de datos.
Algunas entidades del modelo de datos de Operator Advisor ( documentos relacionados con la definición de trabajo e ilustraciones de definición de trabajo) también hacen referencia a ficheros que se almacenan en el almacén de ficheros de ThingWorx. El servicio BatchCascadeDelete de la plantilla de cosa del administrador de órdenes de trabajo (PTC.SCA.SCO.JobOrderManagerThingTemplate) se ha reemplazado para que los ficheros a los que se hace referencia también se borren del almacén de ficheros cuando se borran las entidades que hacen referencia a ellos.
Las acciones de borrado estándar para objetos de modelo de datos individuales, como DeleteShift o DeleteJobOrder solo borran la entidad especificada. Si el hecho de borrar solo esa entidad infringe la integridad referencial, el servicio fallará. En estos casos, utilice los servicios de borrado en cascada.