# Database Structure

> **Warning:** This page was automatically generated from the database schema dump and may be incomplete or incorrect.

This section documents the **database structure** of the enaio® system — which tables exist in the database schema, which columns they carry, and how the recurring patterns of the object, stamm and register tables relate to each other. The schema is database-independent — enaio® supports several relational database backends (e.g. Microsoft SQL Server, Oracle). Data types in this documentation are given in SQL Server notation (`int`, `nvarchar`, `datetime`, `bigint`, `smallint`, `real`, `image`); the Oracle equivalents are `NUMBER`, `NVARCHAR2`, `DATE`, `NUMBER(19)`, `NUMBER(5)`, `BINARY_FLOAT` and `BLOB` respectively.

The structures described here are the immediate physical storage form; they are generally **not modified directly** (except via [ado.ExecuteSQL](ado.md#ado.ExecuteSQL) scripts for administrative corrections), but through the DMS, Standard and Workflow engines. This documentation is intended as a reference for administrators, report developers and integration developers.

## Schema Conventions

The database uses a mix of fixed system tables and **type-specific tables per object type**. The following conventions are applied throughout:

### Suffix scheme

For every configured DMS object type, several tables exist whose names carry a sequential number `X`. **`X` corresponds to the main type (`haupttyp` column) + 1** — `object1` thus contains objects with `haupttyp = 0`, `object17` those with `haupttyp = 16`. The full object-type ID (`haupttyp * 65536 + untertyp`) is described in Object-type ID.

| Name | Content |
|---|---|
| `objectX` / `stammX` / `registerX` | Main object table. Holds one row per object of type X. Contains common system fields (id, timestamp, status, permission IDs, …) plus type-specific index fields. |
| `objectXr` / `stammXr` / `registerXr` | **Rights** table. Holds per-object permission entries (complementary to the global security system via `ossd`). Identical 4-column structure across all object types. |
| `objectXs` / `stammXs` / `registerXs` | **Shadow** table for index-data history. Holds the previous index-data state before each change. Only `osguid` is common (snapshot identifier); after it follow the type-specific index fields. |
| `objectXlistY` / `stammXlistY` / `registerXlistY` | **Table-field** data. One table per table-field Y defined on object type X (grid field); holds one row per grid row. Common fields: `id` (FK to the main object) and `line` (row number in the grid). |
| `objectXlistYs` / `stammXlistYs` / `registerXlistYs` | Shadow variant for table fields. Common: `osguid` and `line`. |

### Column-name convention

Index fields follow a historically grown, **type-dependent positional** notation (Hungarian style):

- `feld1`, `feld2`, … — text fields (`nvarchar`)
- `zahl1`, `zahl2`, … — integer fields (`int` / `smallint`)
- `datum1`, `datum2`, … — date fields (`datetime`)
- `real1`, `real2`, … — decimal / floating-point fields (`decimal` / `real`)

The mapping "column name → semantic index field" is configured per object type and accessible via the DMS object definition ([dms.GetObjDef](dms.md#dms.GetObjDef)).

System fields, on the other hand, use German-language descriptive names (`anleger`, `angelegt`, `archiviert`, `zeitstempel`, `medium_doc`, …) — a historical legacy.

## Hierarchical object types

The following three pages describe the pattern — common fields, rights, shadow and table-field variants — and **not** individual numbered tables.

* [Master files (`stammX`)](database/hierarchical_object_types.md#database.stamm) — top hierarchy level (folder / case / project).
* [Registers (`registerX`)](database/hierarchical_object_types.md#database.register) — subdivision within a master file.
* [Document objects (`objectX`)](database/hierarchical_object_types.md#database.object) — documents (carry file content, versions, annotations).
* [sdrel](database/hierarchical_object_types.md#database.sdrel) — structure-data relation table: master file → register → document.
* [osparregrel](database/hierarchical_object_types.md#database.osparregrel) — nesting of registers within a folder.

## Users and groups

* [benutzer](database/users_and_groups.md#database.benutzer) — user accounts.
* [gruppen](database/users_and_groups.md#database.gruppen) — user groups.
* [bgrel](database/users_and_groups.md#database.bgrel) — user/group assignment.

## Portfolios and document assignments

* [mappe](database/portfolios_and_document_assignments.md#database.mappe) — portfolios.
* [mdrel](database/portfolios_and_document_assignments.md#database.mdrel) — portfolio-document assignment.

## Media and archive

* [medien](database/media_and_archive.md#database.medien) — storage media (archive media).
* [medrel](database/media_and_archive.md#database.medrel) — media-set relations.
* [archex](database/media_and_archive.md#database.archex) — archive extensions / server assignment.

## Locks and links

* [doclock](database/locks_and_links.md#database.doclock) — document locks (checkout).
* [hyplnk](database/locks_and_links.md#database.hyplnk) — hyperlinks (cross-references between objects).
* [combined](database/locks_and_links.md#database.combined) — combined documents (parent/child relations).

## Annotations

* [annotations](database/annotations.md#database.annotations) — annotations (slides, notes).
* [ann_groups](database/annotations.md#database.ann_groups) — annotation group assignment.

## External systems

* [varcsystems](database/external_systems.md#database.varcsystems) — varc / connector configuration.

## Audit and history

* [osaccess](database/audit_and_history.md#database.osaccess)
* [osadminhist](database/audit_and_history.md#database.osadminhist)
* [oshistact](database/audit_and_history.md#database.oshistact)
* [osobjaccess](database/audit_and_history.md#database.osobjaccess)
* [osobjhist](database/audit_and_history.md#database.osobjhist)
* [osuseraccess](database/audit_and_history.md#database.osuseraccess)
* [osverhist](database/audit_and_history.md#database.osverhist)
* [protokoll](database/audit_and_history.md#database.protokoll)

## Sessions, devices and locks

* [ossession](database/sessions_devices_and_locks.md#database.ossession)
* [oswebsessions](database/sessions_devices_and_locks.md#database.oswebsessions)
* [osstations](database/sessions_devices_and_locks.md#database.osstations)
* [osstationnc](database/sessions_devices_and_locks.md#database.osstationnc)
* [osclienttypes](database/sessions_devices_and_locks.md#database.osclienttypes)
* [osmobilepns](database/sessions_devices_and_locks.md#database.osmobilepns)
* [oslockedres](database/sessions_devices_and_locks.md#database.oslockedres)
* [oslockedtabs](database/sessions_devices_and_locks.md#database.oslockedtabs)

## Permissions and profiles

* [osattribclasses](database/permissions_and_profiles.md#database.osattribclasses)
* [osdepartment](database/permissions_and_profiles.md#database.osdepartment)
* [osadmdeptrel](database/permissions_and_profiles.md#database.osadmdeptrel)
* [osprofile](database/permissions_and_profiles.md#database.osprofile)
* [osrights](database/permissions_and_profiles.md#database.osrights)
* [ossysroles](database/permissions_and_profiles.md#database.ossysroles)

> **Note:** The workflow organisation objects (`osorg*`) are documented under [Workflows](#workflows).

## System events

* [osevents](database/system_events.md#database.osevents)
* [oseventcodes](database/system_events.md#database.oseventcodes)
* [oseventaccess](database/system_events.md#database.oseventaccess)

## DMS object types, index fields and structures

* [objekte](database/dms_object_types_index_fields_and_structures.md#database.objekte)
* [osobjdef](database/dms_object_types_index_fields_and_structures.md#database.osobjdef)
* [osobjfields](database/dms_object_types_index_fields_and_structures.md#database.osobjfields)
* [osobjparrel](database/dms_object_types_index_fields_and_structures.md#database.osobjparrel)
* [osctrlpages](database/dms_object_types_index_fields_and_structures.md#database.osctrlpages) — page controls from the object definition.
* [oslistctrl](database/dms_object_types_index_fields_and_structures.md#database.oslistctrl) — allowed nesting of object types from the object definition.
* [oslanguages](database/dms_object_types_index_fields_and_structures.md#database.oslanguages) — configured languages from the object definition.
* [osalias](database/dms_object_types_index_fields_and_structures.md#database.osalias)

## Versions, hashes and signatures

* [osdocver](database/versions_hashes_and_signatures.md#database.osdocver)
* [osdochash](database/versions_hashes_and_signatures.md#database.osdochash)
* [osdigsigs](database/versions_hashes_and_signatures.md#database.osdigsigs)
* [ossigtext](database/versions_hashes_and_signatures.md#database.ossigtext)
* [osdias](database/versions_hashes_and_signatures.md#database.osdias)

## Annotations and collaboration

* [osannotations](database/annotations_and_collaboration.md#database.osannotations)
* [osdoccollaboration](database/annotations_and_collaboration.md#database.osdoccollaboration)

## Portfolios (OS variant)

* [portfolio](database/portfolios_os_variant.md#database.portfolio)
* [pfrel](database/portfolios_os_variant.md#database.pfrel)
* [osportobjects](database/portfolios_os_variant.md#database.osportobjects)
* [osportobjrel](database/portfolios_os_variant.md#database.osportobjrel)
* [osportobjright](database/portfolios_os_variant.md#database.osportobjright)
* [osportconfig](database/portfolios_os_variant.md#database.osportconfig)
* [osportfieldrel](database/portfolios_os_variant.md#database.osportfieldrel)
* [osportmedien](database/portfolios_os_variant.md#database.osportmedien)
* [osportbasisfields](database/portfolios_os_variant.md#database.osportbasisfields)

## Remarks and texts

* [remarks](database/remarks_and_texts.md#database.remarks)
* [osremarktext](database/remarks_and_texts.md#database.osremarktext)
* [osreltext](database/remarks_and_texts.md#database.osreltext)
* [osstringtable](database/remarks_and_texts.md#database.osstringtable)
* [ostemplate](database/remarks_and_texts.md#database.ostemplate)

## Full-text search

* [osfttab](database/full_text_search.md#database.osfttab)
* [osftcontent](database/full_text_search.md#database.osftcontent)
* [osftslog](database/full_text_search.md#database.osftslog)
* [oscatalogsearch](database/full_text_search.md#database.oscatalogsearch)
* [positivwords](database/full_text_search.md#database.positivwords)
* [negativwords](database/full_text_search.md#database.negativwords)

## Licenses and cryptography

* [oslicense](database/licenses_and_cryptography.md#database.oslicense)
* [oslicresources](database/licenses_and_cryptography.md#database.oslicresources)
* [oscryptokeys](database/licenses_and_cryptography.md#database.oscryptokeys)

## Localisation and icons

* [oslocalization](database/localisation_and_icons.md#database.oslocalization)
* [osicons](database/localisation_and_icons.md#database.osicons)
* [osicongroup](database/localisation_and_icons.md#database.osicongroup)

## Server cluster and configuration

* [server](database/server_cluster_and_configuration.md#database.server)
* [servergroup](database/server_cluster_and_configuration.md#database.servergroup)
* [osserverfamily](database/server_cluster_and_configuration.md#database.osserverfamily)
* [ossrvgrpprop](database/server_cluster_and_configuration.md#database.ossrvgrpprop)
* [osnamespace](database/server_cluster_and_configuration.md#database.osnamespace)
* [ospingtable](database/server_cluster_and_configuration.md#database.ospingtable)
* [osredirjobs](database/server_cluster_and_configuration.md#database.osredirjobs)
* [osredirtargets](database/server_cluster_and_configuration.md#database.osredirtargets)
* [osconf](database/server_cluster_and_configuration.md#database.osconf)
* [osproperties](database/server_cluster_and_configuration.md#database.osproperties)
* [path](database/server_cluster_and_configuration.md#database.path)
* [osresources](database/server_cluster_and_configuration.md#database.osresources)
* [osmimetypes](database/server_cluster_and_configuration.md#database.osmimetypes)
* [osmaintenance](database/server_cluster_and_configuration.md#database.osmaintenance)
* [osspooler](database/server_cluster_and_configuration.md#database.osspooler)
* [ospreparedjobs](database/server_cluster_and_configuration.md#database.ospreparedjobs)
* [oscpmqueue](database/server_cluster_and_configuration.md#database.oscpmqueue)
* [oscounters](database/server_cluster_and_configuration.md#database.oscounters)
* [osnextindex](database/server_cluster_and_configuration.md#database.osnextindex)
* [osapplication](database/server_cluster_and_configuration.md#database.osapplication)
* [sets](database/server_cluster_and_configuration.md#database.sets)

## Active editing and temporary state

* [osactivedoc](database/active_editing_and_temporary_state.md#database.osactivedoc)
* [ostempobj](database/active_editing_and_temporary_state.md#database.ostempobj)
* [ostempuser](database/active_editing_and_temporary_state.md#database.ostempuser)

## Subscriptions and revisits (OS backing)

* [osabonnement](database/subscriptions_and_revisits_os_backing.md#database.osabonnement)
* [osrevisit](database/subscriptions_and_revisits_os_backing.md#database.osrevisit)

## Workflows

The workflow engine stores models, running processes, history and management data in dedicated tables prefixed `oswf`. History tables additionally carry the prefix `oswfh`. The workflow **organisation** (users, roles, departments, classes and attributes) lives in the `osorg*` tables and is used both by the workflow engine and by the DMS security system.

### Models and definitions

* [oswfworkflows](database/workflows.md#database.oswfworkflows)
* [oswfpackages](database/workflows.md#database.oswfpackages)
* [oswfprojects](database/workflows.md#database.oswfprojects)
* [oswfprojectsrel](database/workflows.md#database.oswfprojectsrel)
* [oswfmodactivities](database/workflows.md#database.oswfmodactivities)
* [oswfmodctrel](database/workflows.md#database.oswfmodctrel)
* [oswfmodrolerel](database/workflows.md#database.oswfmodrolerel)
* [oswfdatatypes](database/workflows.md#database.oswfdatatypes)
* [oswfevents](database/workflows.md#database.oswfevents)
* [oswfeventtypes](database/workflows.md#database.oswfeventtypes)
* [oswfevtscrrel](database/workflows.md#database.oswfevtscrrel)
* [oswffieldvals](database/workflows.md#database.oswffieldvals)
* [oswfscripts](database/workflows.md#database.oswfscripts)

### Masks and list UI

* [oswfmasks](database/workflows.md#database.oswfmasks)
* [oswfmaskfields](database/workflows.md#database.oswfmaskfields)
* [oswfctrlpages](database/workflows.md#database.oswfctrlpages)
* [oswflistctrl](database/workflows.md#database.oswflistctrl)
* [oswflocalization](database/workflows.md#database.oswflocalization)

### Processes and activities (runtime)

* [oswfprocesses](database/workflows.md#database.oswfprocesses)
* [oswfactivities](database/workflows.md#database.oswfactivities)
* [oswftransitions](database/workflows.md#database.oswftransitions)
* [oswfloops](database/workflows.md#database.oswfloops)
* [oswfdatafields](database/workflows.md#database.oswfdatafields)
* [oswfworkitems](database/workflows.md#database.oswfworkitems)
* [oswfworkitemsrel](database/workflows.md#database.oswfworkitemsrel)
* [oswfworkerqueue](database/workflows.md#database.oswfworkerqueue)
* [oswflockedprocs](database/workflows.md#database.oswflockedprocs)
* [oswfdrel](database/workflows.md#database.oswfdrel)
* [oswftray](database/workflows.md#database.oswftray)

### Organisation and performers

Workflow-specific performer assignments:

* [oswfroles](database/workflows.md#database.oswfroles)
* [oswfrolesrel](database/workflows.md#database.oswfrolesrel)
* [oswfperformers](database/workflows.md#database.oswfperformers)
* [oswfmultiactivs](database/workflows.md#database.oswfmultiactivs)
* [oswfprocresp](database/workflows.md#database.oswfprocresp)
* [oswfabsence](database/workflows.md#database.oswfabsence)
* [oswfsubstitutes](database/workflows.md#database.oswfsubstitutes)

Organisation master data (`osorg*`) — users, roles, departments, classes, attributes:

* [osorganisations](database/workflows.md#database.osorganisations)
* [osorgobjects](database/workflows.md#database.osorgobjects)
* [osorgobjrel](database/workflows.md#database.osorgobjrel)
* [osorgobjattrib](database/workflows.md#database.osorgobjattrib)
* [osorgattribrel](database/workflows.md#database.osorgattribrel)
* [osorgclasses](database/workflows.md#database.osorgclasses)
* [osorgclassrel](database/workflows.md#database.osorgclassrel)

### Timers

* [oswftimerconfigs](database/workflows.md#database.oswftimerconfigs)
* [oswftimers](database/workflows.md#database.oswftimers)

### Routing lists

* [oswfroutinglists](database/workflows.md#database.oswfroutinglists)
* [oswfrltemplates](database/workflows.md#database.oswfrltemplates)
* [oswfrlitemusers](database/workflows.md#database.oswfrlitemusers)

### Reports

* [oswfrconfigs](database/workflows.md#database.oswfrconfigs)
* [oswfrconffamilies](database/workflows.md#database.oswfrconffamilies)
* [oswfreports](database/workflows.md#database.oswfreports)
* [oswfrrights](database/workflows.md#database.oswfrrights)

### History (`oswfh*`)

* [oswfhistory](database/workflows.md#database.oswfhistory)
* [oswfhactivities](database/workflows.md#database.oswfhactivities)
* [oswfhdatafields](database/workflows.md#database.oswfhdatafields)
* [oswfhentrydelayed](database/workflows.md#database.oswfhentrydelayed)
* [oswfhentryscripts](database/workflows.md#database.oswfhentryscripts)
* [oswfhentrytimer](database/workflows.md#database.oswfhentrytimer)
* [oswfhfile](database/workflows.md#database.oswfhfile)
* [oswfhlocalization](database/workflows.md#database.oswfhlocalization)
* [oswfhmodactivities](database/workflows.md#database.oswfhmodactivities)
* [oswfhmoddatafields](database/workflows.md#database.oswfhmoddatafields)
* [oswfhperformers](database/workflows.md#database.oswfhperformers)
* [oswfhprocesses](database/workflows.md#database.oswfhprocesses)
* [oswfhsentmails](database/workflows.md#database.oswfhsentmails)
* [oswfhtimers](database/workflows.md#database.oswfhtimers)
* [oswfhworkflows](database/workflows.md#database.oswfhworkflows)
* [oswfhworkitemsrel](database/workflows.md#database.oswfhworkitemsrel)
* [oswflockedhprocs](database/workflows.md#database.oswflockedhprocs)

## Laboratory (LIMS)

Tables of the laboratory-data integration (Laboratory Master/Transaction Tables):

* [lmt_obs_base](database/laboratory_lims.md#database.lmt_obs_base)
* [lmt_obs_set_rels](database/laboratory_lims.md#database.lmt_obs_set_rels)
* [lmt_sets](database/laboratory_lims.md#database.lmt_sets)
* [lmt_units](database/laboratory_lims.md#database.lmt_units)
* [ltt_obsrequests](database/laboratory_lims.md#database.ltt_obsrequests)
* [ltt_obsresults](database/laboratory_lims.md#database.ltt_obsresults)

## Medicine (HL7)

Tables of the medical-data integration (Medical Master/Transaction Tables):

* [mmt_admissiontypes](database/medicine_hl7.md#database.mmt_admissiontypes)
* [mmt_obsabnormflags](database/medicine_hl7.md#database.mmt_obsabnormflags)
* [mmt_observations](database/medicine_hl7.md#database.mmt_observations)
* [mmt_obsordersetdt](database/medicine_hl7.md#database.mmt_obsordersetdt)
* [mmt_obsordersets](database/medicine_hl7.md#database.mmt_obsordersets)
* [mmt_obsresltstates](database/medicine_hl7.md#database.mmt_obsresltstates)
* [mmt_obsvaluetypes](database/medicine_hl7.md#database.mmt_obsvaluetypes)
* [mmt_obsviewingsets](database/medicine_hl7.md#database.mmt_obsviewingsets)
* [mmt_obsviewsetdt](database/medicine_hl7.md#database.mmt_obsviewsetdt)
* [mmt_orderctrlcodes](database/medicine_hl7.md#database.mmt_orderctrlcodes)
* [mmt_patclasscodes](database/medicine_hl7.md#database.mmt_patclasscodes)
* [mmt_sexes](database/medicine_hl7.md#database.mmt_sexes)
* [mmt_unitconversion](database/medicine_hl7.md#database.mmt_unitconversion)
* [mmt_units](database/medicine_hl7.md#database.mmt_units)
* [mtt_commonorders](database/medicine_hl7.md#database.mtt_commonorders)
* [mtt_obsrequests](database/medicine_hl7.md#database.mtt_obsrequests)
* [mtt_obsresults](database/medicine_hl7.md#database.mtt_obsresults)
