Blocs de construction communs > Bloc de construction de connexion de base de données > Activités de base de données > Définition du comportement de l'action Supprimer avec des clés étrangères
Définition du comportement de l'action Supprimer avec des clés étrangères
Lorsque l'entité d'un côté de la relation de clé étrangère est supprimée, vous devez spécifier l'impact sur l'entité de l'autre côté de la relation. Cela permet de préserver l'intégrité référentielle et le respect des décisions basées sur une logique métier.
Le comportement de suppression est spécifié dans les informations de base de données des formes de données, dans le même tableau qui spécifie les clés étrangères. Le cas échéant, le comportement de suppression est spécifié pour chaque clé étrangère individuelle. Pour plus d'informations, consultez la rubrique Ajout ou suppression de clés étrangères.
Dans les descriptions ci-après, A représente l'entité avec la clé étrangère et B représente l'entité avec le champ référencé par la clé étrangère.
onDelete : détermine l'effet sur A lorsque B est supprimé.
CASCADE : lorsque B est supprimé, A est également supprimé. On parle alors de suppression en cascade.
SET_NULL : lorsque B est supprimé, la valeur du champ de clé étrangère sur A est définie sur nulle.
Si onDelete n'est pas spécifié, la suppression de B n'a aucun effet sur A.
deleteReference : détermine l'effet sur B lorsque A est supprimé.
Si vrai, lorsque A est supprimé, B est également supprimé.
Si faux ou non spécifié, la suppression de A n'a aucun effet sur B.
Par exemple, un jour calendaire récurrent (PTC.Shift.CalendarDayRepeating) est une relation entre un calendrier et une planification d'équipe. Cela est défini sur le jour calendaire récurrent avec des champs de clé étrangère qui référencent les UID du calendrier (CalendarUID) et de la planification d'équipe (ShiftScheduleUID). Le code ci-après est issu des informations de base de données spécifiées pour la forme de données de jour calendaire récurrent (PTC.Shift.CalendarDayRepeating) dans le service GetDBInfo sur l'objet 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"
}]
Comme onDelete est défini sur CASCADE pour les deux clés étrangères, si l'une des définitions de travail référencées est supprimée, le lien de définition de travail est également supprimé. L'intégrité référentielle est ainsi préservée ; le lien de définition de travail ne peut exister que si la définition de travail est présente de chaque côté de la relation.
Comme deleteReference est défini sur vrai pour la clé étrangère sur le champ ChildUID, si le lien de définition de travail lui-même est supprimé, la définition de travail référencée par le champ ChildUID est également supprimée. Ce comportement est déterminé par une logique applicative selon laquelle la suppression du lien entre les définitions de travail parent et enfant doit entraîner la suppression de la définition de travail enfant.
* 
Les comportements de suppression n'ont pas besoin d'être spécifiés avant la synchronisation avec la base de données pour ajouter une nouvelle forme de données ou une clé étrangère au schéma de base de données. Il est recommandé de spécifier le comportement de la suppression avant de supprimer les instances des formes de données d'un côte ou de l'autre de la relation de clé étrangère.
Les services utilisés pour effectuer des suppressions, tout en respectant les paramètres onDelete et deleteReference de chaque clé étrangère, se trouvent sur la forme d'objet de gestion de base de données (PTC.DBConnection.DBManagementThingShape). Il s'agit des services BatchCascadeDelete, CascadeDelete et CollectActionForCascadeDelete. Tous les gestionnaires s'étendent à partir de cette forme d'objet, de sorte qu'ils héritent de ces services. Pour plus d'informations, consultez la rubrique Services de forme d'objet de gestion de base de données
Les actions de suppression standard pour les objets de modèle de données individuels, telles que DeleteShift ou DeleteJobOrder suppriment uniquement l'entité spécifiée. Si la suppression de cette entité ne respecte pas l'intégrité référentielle, le service échoue. Dans ce cas, utilisez les services de suppression en cascade. La seule exception dans ce domaine est le service DeleteSite sur l'objet PTC.MfgModelImpl.Manager qui appelle le service CascadeDeleteModel.
Est-ce que cela a été utile ?