Blocs de construction > 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.
* 
Lorsqu'un service de suppression en cascade est utilisé pour supprimer une entité, le paramètre d'entrée deleteReference du service détermine si les paramètres deleteReference des informations de la base de données concernant l'entité sont suivis. Lorsque le paramètre d'entrée deleteReference est défini sur vrai, toutes les entités référencées par des clés étrangères dont le paramètre deleteReference est vrai sont supprimées. Lorsque le paramètre d'entrée deleteReference est défini sur faux, les entités référencées ne sont pas supprimées.
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"
}]
Etant donné qu'onDelete est défini sur CASCADE pour la clé étrangère calendarUid, si le calendrier référencé est supprimé, le jour du calendrier récurrent est également supprimé. Cela garantit l'intégrité référentielle ; le jour du calendrier récurrent ne peut pas exister tant que le calendrier est absent.
Comme deleteReference est défini sur vrai pour la clé étrangère sur le champ shiftScheduleUid, si le jour du calendrier récurrent lui-même est supprimé, la planification d'équipe référencée par le champ shiftScheduleUid est également supprimée. Ce comportement est déterminé par une décision de l'entreprise spécifiant que si le jour du calendrier récurrent est supprimé, la planification d'équipe à laquelle il se rapporte doit être supprimée.
* 
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.
Comportement de la suppression des services et des clés étrangères
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). Les services de suppression en cascade sont les suivants : 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 en savoir plus, consultez le manuel anglais 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 ?