Allgemeine Bausteine > Datenbankverbindungsbaustein > Datenbankaktivitäten > Fremdschlüssel hinzufügen oder entfernen
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. Erstellen Sie einen neuen Baustein, der den PTC Baustein erweitert, der den Manager für die Entität enthält, die mit der Datenbanktabelle verknüpft ist. Diese Manager sind in der Tabelle DefaultGlobalManagerConfiguration auf der Seite Konfiguration des Dings PTC.Base.Manager angegeben. Navigieren Sie zum Ding PTC.JobOrderImpl.Manager, um beispielsweise einen Fremdschlüssel zu einem Projektauftrag hinzuzufügen.
Weitere Informationen finden Sie unter Neue Bausteine erstellen.
2. Navigieren Sie zum Manager-Ding für Ihren neuen Baustein.
3. Überschreiben Sie unter Dienste den Dienst GetDBInfo für die Entität, der Sie den Fremdschlüssel hinzufügen möchten. Überschreiben Sie den Dienst GetDBInfo für das Ding PTC.JobOrderImpl.Manager, um z.B. der Datenbanktabelle für Projektaufträge einen Fremdschlüssel hinzuzufügen.
4. Scrollen Sie im Skripteditor nach unten zu dem Eintrag für den Data Shape, dem Sie den Fremdschlüssel hinzufügen möchten.
5. 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.
6. Klicken Sie auf Speichern, um die Änderungen an dem Dienst zu speichern.
7. Navigieren Sie zum Ding PTC.DBConnection.Manager.
8. Synchronisieren Sie die Datenbankinformationen 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 Datenmodell-Entitäten benutzerdefinierte Eigenschaften hinzufügen oder Dem Datenmodell benutzerdefinierte Entitäten hinzufügen.
1. Erstellen Sie einen neuen Baustein, der den PTC Baustein erweitert, der den Manager für die Entität enthält, die mit der Datenbanktabelle verknüpft ist. Diese Manager sind in der Tabelle DefaultGlobalManagerConfiguration auf der Seite Konfiguration des Dings PTC.Base.Manager angegeben. Navigieren Sie zum Ding PTC.JobOrderImpl.Manager, um beispielsweise einen Fremdschlüssel aus einem Projektauftrag zu entfernen.
Weitere Informationen finden Sie unter Neue Bausteine erstellen.
2. Navigieren Sie zum Datenbankding, welches für Ihr System konfiguriert ist, z.B. PTC.DBConnection.MSSQLDatabase.
3. 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 GetDBInfo, in dem der Fremdschlüssel definiert ist, angegeben sind. Werte für onDelete oder deleteReference werden vom Dienst ignoriert, sollten Sie eingeschlossen sein.
4. Klicken Sie auf Ausführen.
5. Navigieren Sie im Manager-Ding des in Schritt 1 erstellten Bausteins zum Dienst GetDBInfo, 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"
}
War dies hilfreich?