3.4 KiB
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
- User - Ticket (1:N): Ein Benutzer kann viele Tickets erstellen. Ein Ticket gehört immer genau einem Benutzer (Ersteller).
- User - Comment (1:N): Ein Benutzer kann viele Kommentare verfassen.
- 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_roomsabgebildet. - Room - Ticket (1:N): Ein Ticket bezieht sich immer auf einen spezifischen Raum. In einem Raum können viele Tickets gemeldet werden.
- 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
Ticketspeichert Titel und Beschreibung sowohl in Deutsch (_de) als auch in Englisch (_en), um Mehrsprachigkeit direkt auf Datenbankebene zu unterstützen. - Sicherheit: Das Passwort im
UserObjekt wird gehasht gespeichert (BCrypt). - Zeitstempel:
createdAtFelder werden automatisch bei der Instanziierung (LocalDateTime.now()) gesetzt.