Datenbankstruktur
| Diese Seite wurde automatisch aus dem Datenbank-Schema-Dump generiert und kann unvollständig oder fehlerhaft sein. |
Dieser Bereich dokumentiert die Datenbankstruktur des enaio®-Systems — also welche Tabellen im Datenbankschema vorhanden sind, welche Spalten sie führen und wie die wiederkehrenden Muster der Objekt-, Stamm- und Register-Tabellen zusammenhängen. Das Schema ist datenbankunabhängig — enaio® unterstützt mehrere relationale Datenbankbackends (z. B. Microsoft SQL Server, Oracle). Datentypen werden in dieser Doku in der SQL-Server-Schreibweise (int, nvarchar, datetime, bigint, smallint, real, image) angegeben; bei Oracle entsprechen sie sinngemäß NUMBER, NVARCHAR2, DATE, NUMBER(19), NUMBER(5), BINARY_FLOAT und BLOB.
Die hier dokumentierten Strukturen sind die unmittelbare physische Speicherform; sie werden in der Regel nicht direkt modifiziert (außer durch ado.ExecuteSQL-Skripte für administrative Korrekturen), sondern über die DMS-, Standard- und Workflow-Engines bearbeitet. Diese Doku ist als Referenz für Administratoren, Reportentwickler und Integrationsentwickler gedacht.
1. Schema-Konventionen
Die Datenbank verwendet eine Mischung aus festen Systemtabellen und typspezifischen Tabellen pro Objekttyp. Folgende Konventionen sind durchgängig:
1.1. Suffix-Schema
Für jeden konfigurierten DMS-Objekttyp existieren mehrere Tabellen, deren Name eine fortlaufende Nummer X trägt. X entspricht dem Haupttyp (haupttyp-Spalte) + 1 — object1 enthält also Objekte mit haupttyp = 0, object17 solche mit haupttyp = 16. Die volle Objekttyp-ID (haupttyp * 65536 + untertyp) ist in Objekttyp-ID beschrieben.
| Name | Inhalt |
|---|---|
|
Hauptobjekttabelle. Hält je Datensatz ein Objekt vom Typ X. Enthält gemeinsame Systemfelder (id, zeitstempel, Status, Berechtigungs-IDs, …) plus typspezifische Indexfelder. |
|
Rights-Tabelle. Hält Berechtigungseinträge pro Objekt (komplementär zum globalen Sicherheitssystem via |
|
Shadow-Tabelle für Indexdaten-Historie. Hält die jeweils vorherigen Indexdatenstände vor jeder Änderung. Gemeinsam ist nur |
|
Tabellenfeld-Daten. Eine Tabelle pro auf dem Objekttyp X definierten Tabellenfeld Y (Grid-Feld); enthält pro Zeile des Grids einen Datensatz. Gemeinsame Felder: |
|
Shadow-Variante zu Tabellenfeldern. Gemeinsam: |
1.2. Spaltennamen-Konvention
Indexfelder folgen einer historisch gewachsenen, typabhängig-positionellen Notation (ungarische Schreibweise):
-
feld1,feld2, … — Textfelder (nvarchar) -
zahl1,zahl2, … — Ganzzahlfelder (int/smallint) -
datum1,datum2, … — Datumsfelder (datetime) -
real1,real2, … — Dezimal-/Fließkommafelder (decimal/real)
Die Zuordnung „Spaltenname → semantisches Indexfeld" ist pro Objekttyp unterschiedlich konfiguriert und über die DMS-Objektdefinition zugänglich (dms.GetObjDef).
Systemfelder hingegen verwenden sprechende deutsche Namen (anleger, angelegt, archiviert, zeitstempel, medium_doc, …) — ein historisches Erbe.
2. Hierarchische Objekttypen
Die folgenden drei Seiten beschreiben jeweils das Muster — gemeinsame Felder, Rights-, Shadow- und Tabellenfeld-Varianten — nicht einzelne nummerierte Tabellen.
-
Stammakten (
stammX) — oberste Hierarchieebene (Ordner / Fall / Projekt). -
Register (
registerX) — Untergliederung innerhalb einer Stammakte. -
Dokumentobjekte (
objectX) — Dokumente (tragen Dateiinhalte, Versionen, Annotationen). -
sdrel — Strukturdaten-Beziehungstabelle: Stammakte → Register → Dokument.
-
osparregrel — Verschachtelung von Registern innerhalb eines Ordners.
7. Annotationen
-
annotations — Annotationen (Slides, Anmerkungen).
-
ann_groups — Annotation-Gruppenzuordnung.
8. Externsysteme
-
varcsystems — Varc-/Konnektor-Konfiguration.
11. Berechtigungen und Profile
Die Workflow-Organisationsobjekte (osorg*) sind unter Workflows dokumentiert.
|
13. DMS-Objekttypen, Indexfelder und Strukturen
-
osctrlpages — Page-Controls aus der Objektdefinition.
-
oslistctrl — erlaubte Verschachtelung der Objekttypen aus der Objektdefinition.
-
oslanguages — konfigurierte Sprachen aus der Objektdefinition.
17. Bemerkungen und Texte
-
remarks — Kopfdaten der Textnotizen
-
osremarktext — Notiztexte bei Datenbankablage
17.1. Ablageart von Notizen
Notizen an DMS-Objekten treten in zwei Ausprägungen auf, die in verschiedenen Tabellen liegen:
-
Textnotiz — farbiger Freitext am Objekt, verwaltet in
remarks. -
Notizverknüpfung — Verweis auf ein anderes DMS-Objekt, verwaltet in hyplnk und nicht in
remarks.
Beide sind an Ordnern, Registern, Dokumenten und Mappen möglich. Ihre Anzahl je Objekt steht
zusätzlich in der Spalte links der jeweiligen Indextabelle; daraus speist sich das Notizsymbol
in Trefferlisten.
Der Text einer Textnotiz liegt je nach Serverkonfiguration im Dateisystem oder in der Datenbank.
Der Schalter steht in der AS.cfg im Abschnitt [System] unter NoteStorage: 0 = Dateisystem,
1 = Datenbank. Er liegt nicht in der Server-Registry und ist über
krn.REGetRegValue daher nicht erreichbar; lesbar ist er über
adm.GetSystemFile mit FileName = as.cfg, die Datei kommt in
UTF-16LE zurück.
| Merkmal | Dateisystem | Datenbank |
|---|---|---|
Ort des Textes |
je Notiz eine |
Spalte |
|
Medium-ID des Systemmediums |
|
|
dieselbe Medium-ID |
|
|
|
Schlüssel in |
|
leer |
die |
Längenbegrenzung |
keine |
8000 Zeichen; darüber bricht der Import mit |
Recherche über den Notizinhalt |
nicht möglich |
möglich |
zuständig |
nicht verwendbar, siehe die Warnung unten |
|
Anlegen, Ändern, Löschen über XML |
dms.XMLUpdate mit |
ebenso |
Die drei std-Remark-Jobs setzen die Ablage im Dateisystem voraus. Bei Datenbankablage
scheitern std.GetRemark und
std.DeleteRemark mit -1043201745, und
std.StoreRemark migriert die Notiz stillschweigend zurück ins
Dateisystem: der Job liefert 0, legt eine Notizdatei an, setzt remarks.medium auf die
Medium-ID und lässt die Zeile in osremarktext mit dem alten Text verwaisen.
|
Die Angaben dieses Abschnitts sind an enaio®-Server 12.0 gemessen (axsvckrn 12.0.799, DMS-Engine 12.0.769.25242, Datenbank Microsoft SQL Server 2022).
17.1.1. Ort der Notizdateien
Das Wurzelverzeichnis steht in path im Eintrag mit flag = 2, je
Servergruppe einer. Darunter
staffeln sich die Dateien nach Objekttyp und Notiz-ID. Alle vier Komponenten sind hexadezimal,
die Verzeichnisse zweistellig, der Dateiname achtstellig:
<Pfad>\NOTE\<Haupttyp>\<Untertyp>\<Notiz-ID mod 256>\<Notiz-ID>.txt
Beispiel für die Notiz-ID 146610 (0x00023CB2) an einem Objekt mit Haupttyp 4 und Untertyp 1:
C:\enaio\server\NOTE\04\01\B2\00023CB2.txt
Eine vom Server erzeugte Notizdatei beginnt mit der UTF-8-BOM und endet mit einem Nullbyte; elf Textzeichen ergeben so 15 Bytes. Eine über std.StoreRemark übergebene Datei wird dagegen unverändert abgelegt.
17.1.2. Umstellen der Ablageart
Eine automatische Migration gibt es nicht. Nach dem Umstellen auf Datenbank bleiben vorhandene
Textdateien unverändert lesbar und behalten ihre Medium-ID in medium.
Eine einzelne Notiz wandert erst, wenn ihr Text geändert wird, also bei
<RemarkText action="UPDATE_TEXT">. Dabei erhält sie eine neu vergebene textid, medium wird
auf NULL gesetzt und die alte .txt-Datei wird entfernt. UPDATE_COLOR löst den Wechsel
nicht aus: die Farbe ändert sich, die Notiz bleibt im Dateisystem.
Ein bestehender langer Text wird beim Wandern nicht gekürzt, weil es keinen Weg gibt, auf dem er
übernommen würde. UPDATE_TEXT ersetzt ihn, und ein neuer Text über 8000 Zeichen wird mit
-1028 abgewiesen.
24. Workflows
Die Workflow-Engine speichert Modelle, laufende Prozesse, Historien und Verwaltungsdaten in eigenen Tabellen mit Präfix oswf. Historien-Tabellen tragen zusätzlich das Präfix oswfh. Die Workflow-Organisation (Benutzer, Rollen, Abteilungen, Klassen und Attribute) liegt in den osorg*-Tabellen und wird sowohl von der Workflow-Engine als auch vom DMS-Sicherheitssystem genutzt.
Modelle und Definitionen
Masken und Listen-UI
Prozesse und Aktivitäten (Laufzeit)
Organisation und Bearbeiter
Workflow-spezifische Bearbeiter-Zuordnungen:
Organisations-Stammdaten (osorg*) — Benutzer, Rollen, Abteilungen, Klassen, Attribute: