Personalizzazione delle informazioni e del relativo accesso > Attività del database > Impostazione del comportamento di eliminazione con chiavi esterne
Impostazione del comportamento di eliminazione con chiavi esterne
Quando l'entità su un lato di una relazione di chiave esterna viene eliminata, è necessario specificare ciò che accade all'entità sull'altro lato della relazione. Ciò garantisce che l'integrità dei riferimenti venga mantenuta e che qualsiasi decisione basata sulla logica aziendale venga seguita.
Il comportamento di eliminazione viene specificato nelle informazioni del database per una data shape, nella stessa matrice in cui sono specificate le chiavi esterne. Il comportamento di eliminazione, se disponibile, è specificato per ogni singola chiave esterna. Nelle descrizioni riportate di seguito, A è l'entità con la chiave esterna e B è l'entità con il campo referenziato dalla chiave esterna.
onDelete - Determina cosa accade ad A quando viene eliminata B.
CASCADE - Quando viene eliminata B, viene eliminata anche A. Questo comportamento è noto come eliminazione a cascata.
SET_NULL - Quando viene eliminata B, il valore del campo chiave esterna su A viene impostato su null.
Se onDelete non è specificato, non viene eseguita alcuna operazione su A quando viene eliminata B.
deleteReference - Determina cosa accade a B quando viene eliminata A.
Se true, quando viene eliminata A, viene eliminata anche B.
Se false, o quando non è specificato, non viene eseguita alcuna operazione su B quando viene eliminata A.
Ad esempio, un link di definizioni di lavorazione è una relazione tra una definizione di lavorazione padre e una definizione di lavorazione figlio. Tale relazione è definita nel link di definizioni di lavorazione con i campi chiave esterna che fanno riferimento agli UID delle due definizioni di lavorazione (ParentUID e ChildUID). Il codice riportato di seguito è ricavato dalle informazioni del database specificate per la data shape del link di definizioni di lavorazione (PTC.SCA.SCO.WorkDefinitionLink) nel servizio GetWorkDefinitionDBInfo su 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"
}]
Poiché onDelete è impostato su CASCADE per entrambe le chiavi esterne, se una delle definizioni di lavorazione referenziate viene eliminata, viene eliminato anche il link di definizioni di lavorazione. Ciò garantisce l'integrità dei riferimenti. Il link di definizioni di lavorazione non può esistere a meno che non sia presente la definizione di lavorazione su ogni lato della relazione.
Poiché deleteReference è impostato su true per la chiave esterna sul campo ChildUID, se il link di definizioni di lavorazione viene eliminato, viene eliminata anche la definizione di lavorazione referenziata dal campo ChildUID. Questo comportamento è determinato da una decisione aziendale che specifica che, in caso di eliminazione del link tra una definizione di lavorazione padre e una definizione di lavorazione figlio, venga eliminata anche la definizione di lavoro figlio.
* 
Non è necessario specificare i comportamenti di eliminazione prima della sincronizzazione con il database per aggiungere una nuova data shape o una chiave esterna allo schema del database. Come best practice, i comportamenti di eliminazione devono essere specificati prima che vengano eliminate tutte le istanze delle data shape su uno dei lati della relazione di chiave esterna.
I servizi utilizzati per eseguire le eliminazioni, sebbene soddisfino le impostazioni onDelete e deleteReference per ogni chiave esterna, si trovano nella thing shape di gestione del database (PTC.SCA.SCO.DBManagementThingShape). Questi servizi sono BatchCascadeDelete, CascadeDelete e CollectActionForCascadeDelete. Tutti i manager si estendono da questa thing shape, pertanto ereditano questi servizi. Per ulteriori informazioni, vedere Servizi della thing shape di gestione del database.
Alcune entità nel modello di dati di Operator Advisor ( documenti correlati alla definizione di lavorazione e illustrazioni di definizione di lavorazione) fanno anche riferimento a file memorizzati nel repository di file ThingWorx. Il servizio BatchCascadeDelete nel modello di oggetto manager delle commesse (PTC.SCA.SCO.JobOrderManagerThingTemplate) è stato sostituito in modo che i file referenziati vengano eliminati anche dal repository di file quando vengono eliminate le entità che vi fanno riferimento.
Le azioni di eliminazione standard per singoli oggetti del modello di dati, ad esempio DeleteShift o DeleteJobOrder, eliminano solo l'entità specificata. Se eliminando solo tale entità si viola l'integrità dei riferimenti, il servizio non riesce. In questi casi, utilizzare i servizi di eliminazione a cascata.