PlantUML ER-Modell

This commit is contained in:
stefan 2025-05-14 14:18:50 +02:00
parent 0cebc711cf
commit c738d9952b
2 changed files with 298 additions and 58 deletions

View File

@ -1,131 +1,371 @@
@startuml @startuml
' Allgemeines Layout ' Diagramm-Optionen
skinparam linetype ortho skinparam linetype ortho
hide empty members hide empty members
skinparam shadowing false
skinparam defaultFontName "Segoe UI"
skinparam defaultFontSize 11
skinparam roundCorner 10
allow_mixing
' Entitäten ' --- Enums (Auswahl, können bei Bedarf erweitert werden) ---
entity "Event" as Event { enum SparteEnum {
DRESSUR
SPRINGEN
VIELSEITIGKEIT
FAHREN
VOLTIGIEREN
WESTERN
DISTANZ
ISLAND
PFERDESPORT_SPIEL
SONDERPRUEFUNG
SONSTIGE
UNBEKANNT
}
enum RegelwerkTypEnum {
OETO
FEI
SONSTIGE
}
enum PruefungsaufgabeNationEnum {
NATIONAL_OEPS
FEI
SONSTIGE
}
enum PruefungsaufgabeRichtverfahrenModusEnum {
GM
GT
NICHT_SPEZIFIZIERT
}
enum PruefungsaufgabeViereckEnum {
VIERECK_20x40
VIERECK_20x60
ANDERE
UNBEKANNT
}
enum ArtDesStechensEnum {
KEIN_STECHEN
FEHLER_ZEIT_NORMAL
FEHLER_ZEIT_AM3
SIEGERUNDE_SR1_MIT_UEBERNAHME_GP
SIEGERUNDE_SR2_OHNE_UEBERNAHME_GP
ZWEI_STECHEN_AM4
ZWEI_STECHEN_AM6
SONDERREGELUNG_AUSSCHREIBUNG
}
enum FunktionaerRolleEnum {
RICHTER
PARCOURS_BAUER
PARCOURSBAU_ASSISTENT
STEWARD
TURNIERLEITER
TURNIERBEAUFTRAGTER
TIERARZT
HUFSCHMIED
SPRECHER
REITERSPRECHER
SONSTIGE
}
enum RichterPositionEnum {
C
E
H
B
M
VORSITZ
SONSTIGE
}
enum DatenQuelleEnum {
OEPS_ZNS
MANUELL_NATIONAL
MANUELL_INTERNATIONAL
SYSTEM_GENERIERTR
}
enum NennungStatusEnum {
GEMELDET
MANUELL_ERFASST
BESTAETIGT
NACHGENANNT
BEZAHLT
STARTBERECHTIGT
ABGEMELDET_REITER
ABGEMELDET_VERANSTALTER
STORNIERT_SYSTEM
}
enum BeginnzeitTypEnum {
FIX_UM
ANSCHLIESSEND
CA_UM
NACH_VORHERIGEM_BEWERB_ABTEILUNG
}
enum EventStatusEnum {
IN_PLANUNG
GENEHMIGT_VERANSTALTER
OEFFENTLICH_SICHTBAR
AKTIV
ABGESCHLOSSEN
ABGESAGT
}
enum PlatzTypEnum {
AUSTRAGUNG
VORBEREITUNG
LONGIEREN
SONSTIGES
} ' Hinzugefügt für die Platz-Entität
' --- Entitäten für verwaltbare Auswahllisten (Lookup Tables / Master Data) ---
entity "Pruefungsaufgabe" {
+ id: UUID (PK)
--
kuerzel: String
nameLang: String
sparte: SparteEnum
nation: PruefungsaufgabeNationEnum
richtverfahrenModusDefault: PruefungsaufgabeRichtverfahrenModusEnum?
viereckGroesseDefault: PruefungsaufgabeViereckEnum?
istAktiv: Boolean
}
entity "Richtverfahren" {
+ id: UUID (PK)
--
code: String
bezeichnung: String
sparte: SparteEnum
oetoParagraphVerweis: String?
istAktiv: Boolean
}
entity "BewerbsKlasseDefinition" as BewerbsKlasseDef {
+ id: UUID (PK)
--
kuerzel: String
bezeichnung: String
sparte: SparteEnum
istAktiv: Boolean
}
entity "BewerbsKategorieOetoDefinition" as BewerbsKatOetoDef {
+ id: UUID (PK)
--
kuerzel: String
bezeichnung: String
sparte: SparteEnum
istAktiv: Boolean
}
' --- Kern-Entitäten ---
entity "Event" {
+ id: UUID (PK) + id: UUID (PK)
-- --
bezeichnung: String bezeichnung: String
datumVon: LocalDate datumVon: LocalDate
datumBis: LocalDate datumBis: LocalDate
ortName: String veranstalterVereinId: UUID (FK)?
veranstalterVereinId: UUID (FK)
} }
entity "Turnier" as Turnier { entity "Turnier" {
+ id: UUID (PK) + id: UUID (PK)
-- --
eventId: UUID (FK) eventId: UUID (FK)
oepsTurnierNr: String oepsTurnierNr: String
titel: String titel: String
sparte: SparteEnum sparte: SparteEnum
oetoKategorien: List<String> oetoKategorieIds: List<UUID> ' FKs zu BewerbsKatOetoDef
nennschluss: LocalDateTime regelwerkTyp: RegelwerkTypEnum
datumVon: LocalDate
datumBis: LocalDate
} }
entity "Bewerb" as Bewerb { entity "BewerbBasis" {
+ id: UUID (PK) + id: UUID (PK)
-- --
turnierId: UUID (FK) turnierId: UUID (FK)
nummer: String nummerInAusschreibung: String
bezeichnung: String uebergeordneteBezeichnung: String
klasseText: String sparte: SparteEnum
richtverfahren: String klasseId: UUID (FK zu BewerbsKlasseDef.id)?
startgeld: BigDecimal oetoKategorieId: UUID (FK zu BewerbsKatOetoDef.id)
dressurDetailsId: UUID (FK, optional)
springDetailsId: UUID (FK, optional)
} }
entity "Abteilung" as Abteilung { entity "DressurBewerbDetails" {
+ bewerbBasisId: UUID (PK, FK)
--
pruefungsaufgabeId: UUID (FK)
richtverfahrenId: UUID (FK)
viereckGroesse: PruefungsaufgabeViereckEnum
}
entity "SpringBewerbDetails" {
+ bewerbBasisId: UUID (PK, FK)
--
richtverfahrenId: UUID (FK)
artDesStechens: ArtDesStechensEnum?
parcoursskizzeUrl: String?
}
entity "Abteilung" {
+ id: UUID (PK) + id: UUID (PK)
-- --
bewerbId: UUID (FK) bewerbBasisId: UUID (FK)
abteilungsKennzeichen: String abteilungsKennzeichen: String
bezeichnung: String bezeichnungOeffentlich: String?
} }
entity "Person" as Person { entity "Person" {
+ id: UUID (PK) + id: UUID (PK)
-- --
oepsSatzNr: String
nachname: String nachname: String
vorname: String vorname: String
stammVereinId: UUID (FK) oepsSatzNr: String?
datenQuelle: PersonDatenQuelleEnum datenQuelle: DatenQuelleEnum
stammVereinId: UUID (FK)?
} }
entity "Pferd" as Pferd { entity "Pferd" {
+ id: UUID (PK) + id: UUID (PK)
-- --
oepsKopfNr: String
name: String name: String
geburtsjahr: Int oepsKopfNr: String?
besitzerPersonId: UUID (FK) datenQuelle: DatenQuelleEnum
datenQuelle: PferdDatenQuelleEnum besitzerPersonId: UUID (FK)?
} }
entity "Verein" as Verein { entity "Verein" {
+ id: UUID (PK) + id: UUID (PK)
-- --
oepsVereinsNr: String oepsVereinsNr: String
name: String name: String
} }
entity "Lizenz" as Lizenz { entity "Lizenz" {
+ id: UUID (PK) + id: UUID (PK)
-- --
personId: UUID (FK) personId: UUID (FK)
lizenzTypOepsCode: String lizenzTypOepsCode: String
gueltigBisJahr: Int bezeichnung: String
} }
entity "Nennung" as Nennung { entity "Nennung" {
+ id: UUID (PK) + id: UUID (PK)
-- --
turnierId: UUID (FK) turnierId: UUID (FK)
bewerbId: UUID (FK) abteilungId: UUID (FK)
abteilungId: UUID (FK) ?
personId: UUID (FK) personId: UUID (FK)
pferdId: UUID (FK) pferdId: UUID (FK)
status: NennungsStatusEnum status: NennungStatusEnum
} }
entity "Startfolge" as Startfolge { entity "Startfolge" {
+ id: UUID (PK) + id: UUID (PK)
-- --
nennungId: UUID (FK) nennungId: UUID (FK)
abteilungId: UUID (FK)
startNummer: Int startNummer: Int
startZeitGeplant: LocalDateTime startZeitGeplant: LocalDateTime?
pferdepassKontrolliert: Boolean
} }
entity "Ergebnis" as Ergebnis { entity "Ergebnis" {
+ id: UUID (PK) + id: UUID (PK)
-- --
startfolgeId: UUID (FK) startfolgeId: UUID (FK)
platzierung: Int platzierung: Int?
wertnote: Double
fehler: Double
zeitSekunden: Double
} }
' Beziehungen entity "Platz" {
Event "1" -- "0..*" Turnier : beinhaltet + id: UUID (PK)
Turnier "1" -- "0..*" Bewerb : hat --
Bewerb "1" -- "0..*" Abteilung : wird geteilt in name: String
Turnier "1" -- "0..*" Nennung : hat typ: PlatzTypEnum
Bewerb "1" -- "0..*" Nennung : ist Ziel von }
Abteilung "1" -- "0..*" Nennung : ist Ziel von (optional)
Person "1" -- "0..*" Nennung : nennt als Reiter
Pferd "1" -- "0..*" Nennung : wird genannt mit
Nennung "1" -- "0..1" Startfolge : führt zu
Startfolge "1" -- "0..1" Ergebnis : erzielt
Person "1" -- "0..*" Lizenz : besitzt
Verein "1" -- "0..*" Person : hat als Mitglied (Stammverein)
Verein "1" -- "0..*" Event : veranstaltet
Person "1" -- "0..*" Pferd : besitzt (als Besitzer)
Person "1" -- "0..*" Pferd : ist verantwortlich für (als Verantwortlicher)
entity "PlatzZuordnungTurnier" as PlatzZuordnung {
turnierId: UUID (FK)
platzId: UUID (FK)
(PK: turnierId, platzId)
}
entity "Artikel" {
+ id: UUID (PK)
--
bezeichnung: String
standardPreis: BigDecimal?
}
entity "TurnierArtikel" {
+ id: UUID (PK)
--
turnierId: UUID (FK)
artikelId: UUID (FK)
preis: BigDecimal
}
entity "FunktionaerEinsatz" {
+ id: UUID (PK)
--
personId: UUID (FK)
eventId: UUID (FK)
turnierId: UUID (FK)?
abteilungId: UUID (FK)?
rolle: FunktionaerRolleEnum
positionRichter: RichterPositionEnum?
geplanterStart: LocalDateTime
geplantesEnde: LocalDateTime
}
' --- Beziehungen ---
Event "1" -- "0..*" Turnier
Turnier "1" -- "0..*" BewerbBasis
BewerbBasis "1" -- "0..1" DressurDetails
BewerbBasis "1" -- "0..1" SpringDetails
BewerbBasis "1" -- "1..*" Abteilung
Turnier "1" -- "0..*" Nennung
Abteilung "1" -- "0..*" Nennung
Person "1" -- "0..*" Nennung
Pferd "1" -- "0..*" Nennung
Nennung "1" -- "0..1" Startfolge
Startfolge "1" -- "0..1" Ergebnis
Person "1" -- "0..*" Lizenz
Verein "1" -- "0..*" Person : Stammverein
Person "1" -- "0..*" Pferd : Besitzer
Turnier "1" -- "0..*" TurnierArtikel
Artikel "1" -- "0..*" TurnierArtikel
Turnier "1" -- "0..*" PlatzZuordnung
Platz "1" -- "0..*" PlatzZuordnung
Event "1" -- "0..*" FunktionaerEinsatz
Person "1" -- "0..*" FunktionaerEinsatz
Turnier -- FunktionaerEinsatz
Abteilung -- FunktionaerEinsatz
DressurDetails "1" -- "1" Pruefungsaufgabe
DressurDetails "1" -- "1" Richtverfahren
SpringDetails "1" -- "1" Richtverfahren
BewerbBasis "1" -- "1" BewerbsKlasseDef
BewerbBasis "1" -- "1" BewerbsKatOetoDef
Turnier "1" -- "0..*" BewerbsKatOetoDef : "verwendet ÖTO Kategorien"
' TODO: Weitere Entitäten und Beziehungen hinzufügen (Platz, Artikel, FunktionaerZuordnung etc.)
' TODO: Attribute detaillierter ausarbeiten
@enduml @enduml

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB