Generische Speicherung
TopLogic leitet aus der Daten-Modellierung eine generische Speicherabbildung für die Datenbank ab. Die generische Form der Speicherung ist während der Entwicklung und für kleine Anwendungen vollkommen ausreichend. Stellt sich im Laufe der Entwicklung heraus, dass eine Optimierung der Speicherabbildung notwendig ist, kann dies über eine explizite Definition von Datenbanktabellen (Schema-Deklaration) und eine Abbildung von Modellelementen auf diese Tabellen (Datenbankabbildung) erfolgen. Die folgenden Abschnitte beschreiben die generische Datenbank-Abbildung.
Objekte
Standardmäßig werden Objekte von benutzerdefinierten Klassen in der Tabelle GenericObject
gespeichert. Diese Tabelle enthält neben den technischen Spalten lediglich einen Fremdschlüssel tType
auf die konkrete Klasse des in der Zeile gespeicherten Objekts.
Attribute
Bei der generischen Speicherung werden alle Werte von benutzerdefinierten Attributen in einzelnen Zeilen der Tabelle FlexData
abgelegt. Über die Kombination der Spalten type
, branch
und identifier
wird das Objekt identifiziert, für welches ein Wert gespeichert wird. Dabei enthält die Spalte type
den plattformunabhängigen Tabellennamen der Objekttabelle, in der das Objekt gespeichert ist. Die Kombination der Werte in den Spalten branch
und identifier
identifizieren das Objekt über seinen Mandanten und seine technische ID. Schließlich geben die Werte in den technischen Spalten revMin
und revMax
die Gültigkeit der Wertzuordnung an.
Je nach Datentyp des zu speichernden Attributs, wird der eigentliche Wert in einer der Spalten longData
, doubleData
, varcharData
, clobData
, oder blobData
abgelegt. Der Datentyp des Attributs wird in der Spalte dataType
kodiert. Mögliche Werte sind:
Wert | Datentyp | Beschreibung |
---|---|---|
1 | Boolean | Der Wert true . |
2 | Boolean | Der Wert false . |
10 | Long | Der Wert befindet sich in der Spalte longData . |
11 | Integer | Der Wert befindet sich in der Spalte longData . Der Wert darf sich nur im Bereich -231 bis 231-1 bewegen. |
12 | Date | Der Wert befindet sich in der Spalte longData . Er gibt die Millisekunden an, die seit dem 1. Januar 1970 um 00:00 Uhr vergangen sind. |
20 | Double | Der Wert befindet sich in der Spalte doubleData . |
21 | Float | Der Wert befindet sich in der Spalte doubleData . Beim Einlesen wird die Genauigkeit auf einen Java float-Wert reduziert. |
30 | String | Benutzt für kurze String-Werte. Der Wert befindet sich in der Spalte varcharData . |
31 | String | Der leere String. |
40 | String | Benutzt für lange String-Werte. Der Wert befindet sich in der Spalte clobData . |
50 | BinaryData | Der Wert befindet sich in der Spalte blobData . |
60 | TLID | Ein Objekt-Identifier. Der Wert befindet sich in der Spalte longData . |
70 | ExtIdD | Eine Fremdsystem-Referenz. Der Wert befindet sich in den Spalten longData (der System-Identifier) und varcharData (der Objekt-Identifier). |
Referenzen
Referenzen im Modell werden bei der generischen Speicherung immer über Assoziationstabellen abgebildet. Dabei wird zwischen normalen Referenzen und Kompositionen unterschieden.
Normale Referenzen werden über die Assoziationstabelle hasWrapperAttValue
abgebildet. Kompositionsreferenzen werden in der Tabelle hasStructureChild
gespeichert. Alle Assoziationstabellen sind gleichartig aufgebaut. Sie haben dieselben technischen Spalten wie die Objekttabellen. Jedes Link-Objekt in einer Assoziationstabelle gehört zu einem Mandanten (branch
) und hat eine eigene Identität (identifier
). Ebenso ist es über die Spalten revMin
, revMax
und revCreate
unabhängig versioniert.
Das Quellobjekt, für welches ein Referenzwert gespeichert wird, wird über die Spalten sourceType
und sourceId
identifiziert. Der Wert in sourceType
enthält wieder den plattformunabhängigen Tabellennamen der Objekttabelle und sourceId
die Objekt-Identität.
Die Referenz, für welche ein Wert gespeichert wird, wird über den Fremdschlüssel in der Spalte metaAttributeId
referenziert. Dieser Fremdschlüssel zeigt in die Modell-Tabelle MetaAttribute
welche alle Eigenschaften und Referenzen von Klassen des Anwendungsmodells enthält.
Der eigentliche Referenzwert wird über die Spalten destType
und destId
referenziert. Die Semantik ist äquivalent zu sourceType
und sourceId
.