proj/DATENMODELL.md
2026-02-10 08:22:29 +01:00

3.4 KiB

Datenmodell & Struktur

Entity-Relationship-Modell (ERM)

Das Datenmodell basiert auf vier Hauptentitäten: User, Ticket, Room und Comment.

erDiagram
    USER ||--o{ TICKET : "erstellt / own"
    USER ||--o{ COMMENT : "verfasst"
    USER }|--|{ ROOM : "betreut (supervises)"
    ROOM ||--o{ TICKET : "beinhaltet"
    TICKET ||--o{ COMMENT : "hat"

    USER {
        Long id PK
        String email
        String password
        String role
        String firstname
        String lastname
        String theme
    }

    ROOM {
        Long id PK
        String name
    }

    TICKET {
        Long id PK
        String title_de
        String title_en
        String description_de
        String description_en
        String status
        LocalDateTime createdAt
        Long user_id FK
        Long room_id FK
    }

    COMMENT {
        Long id PK
        String text
        LocalDateTime createdAt
        Long user_id FK
        Long ticket_id FK
    }

Beziehungen Erklärung

  1. User - Ticket (1:N): Ein Benutzer kann viele Tickets erstellen. Ein Ticket gehört immer genau einem Benutzer (Ersteller).
  2. User - Comment (1:N): Ein Benutzer kann viele Kommentare verfassen.
  3. User - Room (N:M): Ein Benutzer (z.B. Raumbetreuer) kann für mehrere Räume zuständig sein. Ein Raum kann von mehreren Benutzern betreut werden. Diese Beziehung wird über eine Join-Tabelle user_rooms abgebildet.
  4. Room - Ticket (1:N): Ein Ticket bezieht sich immer auf einen spezifischen Raum. In einem Raum können viele Tickets gemeldet werden.
  5. Ticket - Comment (1:N): Ein Ticket kann mehrere Kommentare enthalten (Diskussionsverlauf).

Klassendiagramm (Backend Entitäten)

Die Implementierung im Spring Boot Backend (de.itsolutions.ticketsystem.entity) spiegelt das ERM wider.

classDiagram
    class User {
        -Long id
        -String name_firstname
        -String name_lastname
        -String email
        -String password
        -String role
        -String theme
        -List~Room~ supervisedRooms
        +getId()
        +getName()
        +getEmail()
        +getRole()
    }

    class Ticket {
        -Long id
        -String title_de
        -String title_en
        -String description_de
        -String description_en
        -String status
        -LocalDateTime createdAt
        -User owner
        -Room room
        +getTitle()
        +getDescription()
        +getStatus()
        +getOwner()
    }

    class Room {
        -Long id
        -String name
        +getId()
        +getName()
    }

    class Comment {
        -Long id
        -String text
        -LocalDateTime createdAt
        -User author
        -Ticket ticket
        +getText()
        +getAuthor()
    }

    User "1" --> "*" Ticket : owner
    User "1" --> "*" Comment : author
    User "*" --> "*" Room : supervisedRooms
    Room "1" --> "*" Ticket : room
    Ticket "1" --> "*" Comment : comments

Anmerkungen zur Implementierung

  • Mehrsprachigkeit: Die Entität Ticket speichert Titel und Beschreibung sowohl in Deutsch (_de) als auch in Englisch (_en), um Mehrsprachigkeit direkt auf Datenbankebene zu unterstützen.
  • Sicherheit: Das Passwort im User Objekt wird gehasht gespeichert (BCrypt).
  • Zeitstempel: createdAt Felder werden automatisch bei der Instanziierung (LocalDateTime.now()) gesetzt.