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.