Anhang: Aufbau einer dbdeclare-Ini-Datei für ADBInit
Hier wird die Struktur der Stammdatenbank hinterlegt.
Es ist eine Textdatei, in der gruppenweise die Felder der Relationen
(und ggf. Verknüpfungen) beschrieben sind.
Eingeleitet wird die Datei mit der Angabe des Typs des
Datenbank-Managementsystems (TYPE=DBF, MySQL oder
UVS=UniverSQL):
[DBSYSTEM]
TYPE=dbmstyp
Darauf folgend können verschiedene Arten von Relationen definiert werden,
die jeweils unterschiedlich eingeleitet werden: [DB_ Tabellenname]
für normale Relationen, [MAINDB_ Tabellenname] für
Hauptrelationen (Kerndaten) und [USERDB_ Tabellenname] für die
Relation mit Benutzerrechten (üblicherweise [USERDB_BENUTZER]).
Auf die Kopfzeile folgen die Felddefinitionen der Relation. Eine
Felddefinition besteht aus mindestens dem Feldnamen, gefolgt von
= und dem Feldtyp (Beispiel: BEZEICH=40S). Es gibt
die Feldtypen:
- [nS] String, mit vorangestellter Längenangabe
- [S] Memofeld
- [nN] Zahl mit n Stellen
- [n.mN] Zahl mit n Stellen, davon m
Nachkommastellen
- [B] Bool
- [D] Datum (Jahr, Monat, Tag)
- [T] Zeit (Stunde, Minute, Sekunde)
- [Q] Zeitpunkt (Jahr, Monat, Tag, Stunde, Minute, Sekunde)
Dahinter können nach einem Komma weitere Angaben folgen. Dies sind
- [KEY] das Feld ist ein Schlüsselfeld (identifizierendes Feld)
- [FILL] das Feld muss @ ausgefüllt sein
- [SUPERKEY]
Format: SUPERKEY= Fremdfeld@ Relation.
Das Feld enthält den Schlüssel
der hierarchisch übergeordneten Relation. Beispiel:
AID=6S,SUPERKEY=ID@ANLAGEN. Das Feld AID
enthält den Schlüssel zur Anlage, die der Relation
übergeordnet ist. Der Schlüssel findet sich dort im
Feld ID.
- [TOPOTO]
Format: TOPOTO=Relation.
Das Feld enthält den Schlüssel eines Tupels einer
anderen Relation. Beispiel:
MZNR=20S,TOPOTO=ZAEHLER. Das Feld MZNR
enthält den Schlüssel zum Zähler, der einem Tupel
aus der eigenen Relation zugeordnet ist. Der Schlüssel
findet sich dort im Schlüsselfeld.
- [CODE]
Format: CODE= Klartextfeld@ Code-Relation.
Das Feld enthält einen Code, der
auf der Oberfläche durch den Inhalt des zugehörigen
Felds in der Code-Relation ersetzt werden soll.
Gesucht wird der Code im ersten Feld der
Code-Relation. Beispiel:
GEMEINDE=8N,CODE=NAME@GEMEINDE und die
Relation gemeinde habe den Aufbau
KENNZAHL=8N,TYP=2S,NAME=30S. Dann wird der
Inhalt des Feldes GEMEINDE in der Relation im Feld
KENNZAHL der Code-Relation gesucht und dann durch
den Inhalt des Feldes NAME ersetzt.
- [ZRORT] das Feld enthält den Ort der zugehörigen Zeitreihen
- [NAME] das Feld enthält einen Klartextnamen
- [BEZEICHNUNG] das Feld enthält eine ausführliche Bezeichnung
- [SEARCH] das Feld wird beim Suchen herangezogen. Hinter SEARCH
kann mit @ ein Rang angegeben, der festlegt, in
welcher Reihenfolge die Suchfelder ausgewertet werden.
Multikeys können durch +buchstabe definiert werden.
Der Buchstabe gibt an, an welcher Stelle im Key das
Feld steht. Ggf. werden diese Angaben durch Kommas
getrennt. Für die Definition mehrerer Keys ist
die jeweilige Angabe eines Rangs zwingend. Beispiel:
Es gebe die Felder NAME,VORNAME,STRASSE,ORT .
Gesucht werden soll hintereinander in VORNAME+NAME,
NAME+VORNAME und NAME. Es soll also zwei Multikeys
und einen Einfachkey geben. Dies wird angegeben mit
NAME=30S,SEARCH@1+b,@2+a,@3
VORNAME=30S,SEARCH@1+a,@2+b
(n.b.: wer diese Notation zu kompliziert findet, soll
es mal selbst versuchen zu definieren.)
Optional können vor den Feldnamen mit einem _ getrennt Zahlen stehen.
Diese werden ignoriert.
Ein # in der Zeile leitet einen Kommentar ein. Alle Zeichen ab
diesem werden ignoriert.
In den Gruppen, die mit DATABASE_CONTEXT beginnen, sind die
Verknüpfungen der Relationen abgelegt. Hier gibt es folgende Gruppen
- [DATABASE_CONTEXT_CODES:]
Hier können die Codetabellen konfiguriert werden.
(Welches Feld wird im Hauptdatensatz durch
welches ersetzt?)
- [DATABASE_CONTEXT_ERWEITERUNG:]
Hier werden die Erweiterungstabellen deklariert.
- [DATABASE_CONTEXT_ZUORDNUNG:]
Die Zuordnungsfelder und ihre Auflösung sind hier
niedergelegt.
- [DATABASE_CONTEXT_SPEZ:]
Diese Gruppe ist etwas komplizierter und definiert, wie die
spezifischen Erweiterungen eingebunden werden.