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. Passare al manager appropriato per l'entità ThingWorx correlata alla tabella di database. I manager sono specificati nella tabella ManagerConfigurationSettings della pagina Configurazione dell'oggetto di configurazione dei punti di avvio (PTC.Factory.C_LaunchPointConfigurationThing_[VersioneRelease]). Ad esempio, il manager per le entità di Operator Advisor è PTC.SCA.SCO.DefaultProductionOrderManager.
2. In Servizi, individuare e sostituire il servizio Get<entity>DBInfo per l'entità a cui si aggiunge la chiave esterna. Ad esempio, per aggiungere una chiave esterna alla tabella di database per le commesse, individuare e sostituire il servizio GetJobOrderDBInfo.
3. Nell'editor dello script, scorrere verso il basso fino alla voce per la data shape a cui si desidera aggiungere la chiave esterna.
4. 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.
5. Fare clic su Salva per salvare le modifiche al servizio.
6. Accedere all'oggetto PTC.SCA.SCO.DatabaseManager.
Rimozione di una chiave esterna
Per rimuovere una chiave esterna, attenersi alla procedura di riportata seguito.
1. Passare all'oggetto database configurato per il sistema, ad esempio PTC.SCA.SCO.PostgresDatabase o PTC.SCA.SCO.MSSQLDatabase.
2. 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 Get<entity>DBInfo in cui è definita la chiave esterna. I valori di onDelete o deleteReference, se inclusi, vengono ignorati dal servizio.
3. Fare clic su Esegui.
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"
}