Fremdschlüssel hinzufügen oder entfernen
Ein Fremdschlüssel ist ein Feld in einer Datenbanktabelle, das den Primärschlüssel in einer anderen Tabelle referenziert. Der Fremdschlüssel wird als Beschränkung für die zugehörige Spalte in der Datenbanktabelle definiert.
Wenn die Fremdschlüssel-Beschränkung aktiviert ist, muss das Feld leer sein oder der Wert muss auf einen vorhandenen Wert für den Primärschlüssel in der referenzierten Tabelle verweisen. Das Feld SiteUID in einer Schicht ist beispielsweise ein Fremdschlüssel, der die UID eines Standorts referenziert. Daher muss der Wert für die SiteUID einer Schicht entweder leer sein oder mit einem vorhandenen UID-Wert für einen Standort übereinstimmen.
Die Fremdschlüssel-Beschränkung verhindert auch, dass Zeilen, die von Fremdschlüssel-Feldern referenziert werden, aus der Datenbanktabelle gelöscht werden können. Wenn beispielsweise eine Schicht den SiteUID-Wert 5 hat, kann aufgrund der Fremdschlüssel-Beschränkung für das Feld SiteUID, das die UID eines Standorts referenziert, der Standort mit dem UID-Wert 5 nicht gelöscht werden.
Fremdschlüssel hinzufügen
So fügen Sie einer vorhandenen Datenbanktabelle einen Fremdschlüssel hinzu:
1. Navigieren Sie zu dem entsprechenden Manager für die ThingWorx Entität, die der Datenbanktabelle zugehörig ist. Diese Manager werden in der Tabelle ManagerConfigurationSettings auf der Seite Konfiguration des Startpunkt-Konfigurationsdings (PTC.Factory.C_LaunchPointConfigurationThing_[Release-Version]) festgelegt. Der Manager für die Operator Advisor Entitäten ist z.B. PTC.SCA.SCO.DefaultProductionOrderManager.
2. Suchen Sie unter Dienste den Dienst Get<entity>DBInfo für die Entität, der Sie den Fremdschlüssel hinzufügen möchten, und überschreiben Sie ihn. Um z.B. Datenbanktabelle für Projektaufträge einen Fremdschlüssel hinzuzufügen, suchen Sie den Dienst GetJobOrderDBInfo und überschreiben Sie ihn.
3. Scrollen Sie im Skripteditor nach unten zu dem Eintrag für den Data Shape, dem Sie den Fremdschlüssel hinzufügen möchten.
4. Fügen Sie für den Data Shape ein Array foreignKeys mit den folgenden Eigenschaften hinzu:
identifier – Der Name der Entität in der Datenbank. Wenn kein Name festgelegt wird, generiert das System den Wert automatisch im Format <Tabellenname>_<Spaltenname>_fk. Wenn der Name festgelegt wird, muss dieser sowohl gegenüber festgelegten Werten als auch gegenüber automatisch generierten Werten eindeutig sein. Die maximale Länge für den Wert entspricht der in der Datenbank zulässigen maximalen Länge von IDs.
name – Name des Feldes im aktuellen Data Shape, bei dem es sich um einen Fremdschlüssel handeln soll. Der Basistyp des Fremdschlüsselfeldes sollte dem Basistyp des referenzierten Feldes entsprechen. Wenn das referenzierte Feld z.B. den Basistyp STRING aufweist, sollte das Fremdschlüsselfeld ebenfalls den Basistyp STRING aufweisen.
referenceDataShapeName – Der Data Shape der referenzierten Datenbanktabelle
referenceFieldName – Der Name des Felds mit dem referenzierten Wert
onDelete – Auswirkungen auf Instanzen des aktuellen Data Shape, wenn Instanzen des referenzierten Data Shape gelöscht werden
deleteReference – Auswirkungen auf Instanzen des aktuellen Data Shape, wenn Instanzen des aktuellen Data Shape gelöscht werden
Weitere Informationen zum Verhalten bei Löschvorgängen finden Sie unter Löschverhalten für Fremdschlüssel festlegen.
5. Klicken Sie auf Speichern, um die Änderungen an dem Dienst zu speichern.
6. Navigieren Sie zum Ding PTC.SCA.SCO.DatabaseManager.
7. Synchronisieren Sie die Datenbankinformationen in Operator Advisor mit dem Datenbankschema. Weitere Informationen finden Sie unter Datenbankinformationen mit Datenbankschema synchronisieren.
Fremdschlüssel entfernen
So entfernen Sie einen Fremdschlüssel:
* 
Entfernen Sie keine Fremdschlüssel, die standardmäßig definiert sind. Entfernen Sie nur Fremdschlüssel, die zuvor von Ihnen hinzugefügt wurden, z.B. durch Operator Advisor Entitäten benutzerdefinierte Eigenschaften hinzufügen oder Dem Operator Advisor Datenmodell benutzerdefinierte Entitäten hinzufügen.
1. Navigieren Sie zu dem Datenbankding, das für Ihr System konfiguriert ist, z.B. PTC.SCA.SCO.PostgresDatabase oder PTC.SCA.SCO.MSSQLDatabase.
2. Führen Sie unter Dienste den Dienst RemoveForeignKey mit den folgenden Eingaben aus:
dataShapeName – Der Data Shape für die Datenbanktabelle, aus der Sie die Fremdschlüssel-Beschränkung entfernen.
fieldName – Das Feld auf dem Data Shape, auf dem Sie die Fremdschlüssel-Beschränkung entfernen.
dbInfo – Die JSON-Beschreibung des zu entfernenden Fremdschlüssels Es müssen dieselben Informationen angegeben werden für identifier (falls erforderlich), name, referenceDataShapeName und refereceFieldName, die auch im Dienst Get<entity>DBInfo, in dem der Fremdschlüssel definiert ist, angegeben sind. Werte für onDelete oder deleteReference werden vom Dienst ignoriert, sollten Sie eingeschlossen sein.
3. Klicken Sie auf Ausführen.
4. Navigieren Sie zum Dienst Get<entity>DBInfo, in dem der Fremdschlüssel definiert ist, und entfernen Sie die Fremdschlüsseldefinition aus den Diensten. Wird die Fremdschlüsseldefinition nicht entfernt, wird der Fremdschlüssel der Datenbank beim der nächsten Ausführung der Synchronisationsdienste wieder hinzugefügt.
Beispiel: Geben Folgendes für die Eingabeparameter an, um eine Fremdschlüssel-Beschränkung ohne Angabe von identifier aus einem Feld mit dem Namen WorkDefinitionUID auf dem Data Shape MyObject zu entfernen:
dataShapeNameMyObject
fieldNameWorkDefinitionUID
dbInfo
{
"name":"WorkDefinitionUID",
"referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition",
"referenceFieldName":"UID"
}