Aggiunta o rimozione di chiavi esterne
Una chiave esterna è un campo in una tabella di database che fa riferimento alla chiave principale in un'altra tabella. La chiave esterna è definita come un vincolo nella colonna correlata della tabella di database.
Con il vincolo della chiave esterna in posizione, il campo deve essere vuoto o il valore deve puntare a un valore esistente per la chiave principale nella tabella di riferimento. Ad esempio, il campo SiteUID in un turno è una chiave esterna che fa riferimento all'UID di un sito. Di conseguenza, il valore di SiteUID in un turno deve essere vuoto oppure corrispondere a un valore UID esistente per un sito.
Il vincolo della chiave esterna impedisce inoltre l'eliminazione di righe dalla tabella del database che sono referenziate dai campi chiave esterna. Ad esempio, se un turno ha un valore SiteUID pari a 5, a causa del vincolo della chiave esterna sul campo SiteUID che fa riferimento all'UID di un sito, il sito con il valore UID uguale a 5 non potrà essere eliminato.
Aggiunta di una chiave esterna
Per aggiungere una chiave esterna a una tabella di database esistente, attenersi alla procedura riportata di seguito.
1. Creare un nuovo building block che si estende dal building block PTC contenente il manager per l'entità correlata alla tabella di database. Questi manager sono specificati nella tabella DefaultGlobalManagerConfiguration della pagina Configurazione dell'oggetto PTC.Base.Manager. Ad esempio, per aggiungere una chiave esterna a una commessa, passare all'oggetto PTC.JobOrderImpl.Manager.
Per ulteriori informazioni, vedere Creare un nuovo building block.
2. Passare all'oggetto manager per il nuovo building block.
3. In Servizi, sostituire il servizio GetDBInfo per l'entità a cui si aggiunge la chiave esterna. Ad esempio, per aggiungere una chiave esterna alla tabella di database per le commesse, sostituire il servizio GetDBInfo nell'oggetto PTC.JobOrderImpl.Manager.
4. Nell'editor dello script, scorrere verso il basso fino alla voce per la data shape a cui si desidera aggiungere la chiave esterna.
5. Aggiungere una matrice foreignKeys per la data shape, con le seguenti proprietà:
identifier - Nome dell'entità nel database. Se non viene specificato, il sistema genera automaticamente il valore nel formato <nome_tabella>_<nome_colonna>_fk. Se specificato, il valore deve essere univoco sia per i valori specificati che per tutti i valori generati automaticamente. La lunghezza massima per il valore è la lunghezza massima consentita dal database per gli identificatori.
name - Nome del campo sulla data shape corrente che fungerà da chiave esterna. Il tipo di base del campo chiave esterna deve coincidere con il tipo di base del campo referenziato. Ad esempio, se il tipo di base del campo referenziato è STRING, anche il tipo di base del campo chiave esterna deve essere STRING.
referenceDataShapeName - Data shape della tabella di database referenziata.
referenceFieldName - Nome del campo contenente il valore da referenziare.
onDelete - Impatto sulle istanze della data shape corrente quando vengono eliminate le istanze della data shape referenziata.
deleteReference - Impatto sulle istanze della data shape referenziata quando vengono eliminate le istanze della data shape corrente.
Per ulteriori informazioni sui comportamenti di eliminazione, vedere Impostazione del comportamento di eliminazione con chiavi esterne.
6. Fare clic su Salva per salvare le modifiche al servizio.
7. Passare all'oggetto PTC.DBConnection.Manager.
8. Sincronizzare le informazioni del database con lo schema del database. Per ulteriori informazioni, vedere Sincronizzazione delle informazioni del database e dello schema del database.
Rimozione di una chiave esterna
Per rimuovere una chiave esterna, attenersi alla procedura di riportata seguito.
* 
Non rimuovere le chiavi esterne predefinite. Rimuovere solo le chiavi esterne precedentemente aggiunte, ad esempio tramite Aggiunta di proprietà personalizzate alle entità del modello di dati o Aggiunta di entità personalizzate al modello di dati.
1. Creare un nuovo building block che si estende dal building block PTC contenente il manager per l'entità correlata alla tabella di database. Questi manager sono specificati nella tabella DefaultGlobalManagerConfiguration della pagina Configurazione dell'oggetto PTC.Base.Manager. Ad esempio, per rimuovere una chiave esterna da una commessa, passare all'oggetto PTC.JobOrderImpl.Manager.
Per ulteriori informazioni, vedere Creare un nuovo building block.
2. Passare all'oggetto database configurato per il sistema, ad esempio PTC.DBConnection.MSSQLDatabase.
3. In Servizi, eseguire il servizio RemoveForeignKey con i seguenti input:
dataShapeName - La data shape per la tabella di database da cui si sta rimuovendo il vincolo della chiave esterna.
fieldName - Il campo della data shape in cui si sta rimuovendo il vincolo della chiave esterna.
dbInfo - La descrizione JSON della chiave esterna da rimuovere. È necessario fornire le stesse informazioni relative a identifier (se presente), name, referenceDataShapeName e refereceFieldName specificate nel servizio GetDBInfo in cui è definita la chiave esterna. I valori di onDelete o deleteReference, se inclusi, vengono ignorati dal servizio.
4. Fare clic su Esegui.
5. Nell'oggetto manager del building block creato al passo 1, passare al servizio GetDBInfo in cui è definita la chiave esterna e rimuovere la definizione di chiave esterna dai servizi. Se non viene rimossa, la chiave esterna viene nuovamente aggiunta al database alla successiva esecuzione dei servizi di sincronizzazione.
Ad esempio, per rimuovere un vincolo della chiave esterna senza identifier specificato da un campo denominato WorkDefinitionUID nella data shape MyObject, specificare quanto segue per i parametri di input:
dataShapeName - MyObject
fieldName - WorkDefinitionUID
dbInfo -
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}
È stato utile?