1 Datenbankdiagramm
Benjamin Goisser edited this page 2026-02-04 18:44:28 +01:00
title
ER-Diagramm/Datenbankdiagramm

Das System funktioniert wie folgt:

  1. Delta-Tabelle (DOCUMENTDELTA):

    • Speichert alle inkrementellen Änderungen (Deltas), die an einem Dokument seit der letzten Vollversion vorgenommen wurden.
    • Jedes Delta repräsentiert eine kleine Aktualisierung des Dokumentzustands.
  2. Versionierung:

    • Vollversionen eines Dokuments werden in der Tabelle DOCUMENTVERSION gespeichert.
    • Wenn eine neue Vollversion erstellt wird, werden alle Deltas bis zu diesem Punkt auf das Dokument angewendet, und der resultierende Zustand wird als Vollversion gespeichert.
    • Nach der Erstellung einer Vollversion werden die Deltas, die zu dieser Version führten, gelöscht, um Speicherplatz zu sparen und Rollback-Operationen zu vereinfachen.
  3. Rollback:

    • Ein Rollback ist nur auf Vollversionen möglich, die in der Tabelle DOCUMENTVERSION gespeichert sind.
    • Deltas werden nicht für Rollbacks verwendet, da sie nur temporär existieren, bis die nächste Vollversion erstellt wird.
  4. Dokument-Tabelle (DOCUMENT):

    • Enthält statische Metadaten über das Dokument, wie den Titel, das Erstellungsdatum und den Besitzer.
    • Speichert keine Inhalte oder Versionsinformationen.
erDiagram
    USER {
        string userToken PK
    }
    DOCUMENT {
        string documentId PK
        string title
        datetime createdAt
        datetime lastModifiedAt
        string userToken FK
        string parentDocumentId FK
    }
    DOCUMENTVERSION {
        int versionId PK
        string documentId FK
        blob content
        datetime timestamp
    }
    DOCUMENTDELTA {
        int deltaId PK
        string documentId FK
        blob update
        blob stateVector
        datetime timestamp
    }
    LINKSHARE {
        string linkId PK
        string documentId FK
        string permission
        datetime expiresAt
    }
    MEDIAFILE {
        int fileId PK
        string fileName
        string mimeType
        blob fileContent
        datetime createdAt
        bigint fileSize
    }

    USER ||--o{ DOCUMENT : "owns"
    DOCUMENT ||--o{ DOCUMENTVERSION : "has versions"
    DOCUMENT ||--o{ DOCUMENTDELTA : "has deltas"
    DOCUMENT ||--o{ LINKSHARE : "can be shared by"
    DOCUMENT ||--o{ MEDIAFILE : "embeds"
    USER ||--o{ LINKSHARE : "creates"
     DOCUMENT ||--o{ DOCUMENT : "has parent"