Bloques de creación comunes > Bloque de creación de conexión de base de datos > 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 borrado 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. Para obtener más información, consulte Adición o eliminación de claves externas.
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.
* 
Cuando se utiliza un servicio de eliminación en cascada para borrar una entidad, el parámetro de entrada deleteReference del servicio determina si se siguen las configuraciones de deleteReference en la información de la base de datos para la entidad. Cuando el parámetro de entrada deleteReference se define en verdadero, se borran todas las entidades a las que hacen referencia las claves externas que tienen una configuración de deleteReference de verdadero. Cuando el parámetro de entrada deleteReference se define en falso, las entidades a las que se hace referencia no se borran.
Por ejemplo, un día del calendario de repetición (PTC.Shift.CalendarDayRepeating) es una relación entre un calendario y una programación de turnos. Esto se define en el día del calendario de repetición con campos de clave externa que hacen referencia a los UID del calendario (CalendarUID) y a la programación de turnos (ShiftScheduleUID). El siguiente código procede de la información de la base de datos especificada para la definición de datos del día del calendario de repetición (PTC.Shift.CalendarDayRepeating) en el servicio GetDBInfo de la cosa PTC.ShiftImpl.Manager.
foreignKeys: [{
name: "calendarUid",
referenceDataShapeName: "PTC.Shift.Calendar",
referenceFieldName: "uid",
onDelete: "CASCADE"
}, {
name: "shiftScheduleUid",
referenceDataShapeName: "PTC.Shift.ShiftSchedule",
referenceFieldName: "uid",
deleteReference: true
}, {
name: "siteUid",
referenceDataShapeName: "PTC.MfgModel.Site",
referenceFieldName: "uid"
}]
Puesto que onDelete se ha definido en CASCADE para la clave externa calendarUid, si se borra el calendario al que se hace referencia, el día del calendario repetido también se borra. De este modo, se garantiza la integridad referencial; el día del calendario repetido no puede existir a menos que esté presente el calendario.
Dado que deleteReference está definido como verdadero para la clave externa en el campo shiftScheduleUid, si se borra un día del calendario repetido, también se borra la programación de turnos a la que hace referencia el campo shiftScheduleUid. Este comportamiento viene determinado por una decisión empresarial que especifica que, si se borra el día del calendario repetido, se debe borrar la programación de turnos relacionada.
* 
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.
Borrar servicios y comportamiento de eliminació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.DBConnection.DBManagementThingShape). Estos servicios de eliminación en cascada 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 gestión de base de datos.
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. Una excepción a esto es el servicio DeleteSite en la cosa PTC.MfgModelImpl.Manager que llama al servicio CascadeDeleteModel.
¿Fue esto útil?