OeTo-DB-Modell

This commit is contained in:
stefan 2025-05-16 14:38:16 +02:00
parent c738d9952b
commit 0ca73cbe60
6 changed files with 917 additions and 0 deletions

View File

@ -0,0 +1,154 @@
# Datenbankmodell ÖTO für Meldestellen
**Stand:** 16. Mai 2025
## 1. Einleitung und Überblick
Dieses Datenbankmodell wurde entwickelt, um die Anforderungen der Österreichischen Turnierordnung (ÖTO) für den Einsatz in einer Meldestelle abzubilden. Das Ziel ist eine umfassende Datenstruktur, die sowohl die Verwaltung von reitsportlichen Veranstaltungen als auch die Integration von Stammdaten des Österreichischen Pferdesportverbands (OEPS) über die ZNS-Schnittstelle (Zentrales Nennservice) ermöglicht.
Der architektonische Ansatz ist modular und service-orientiert, um eine klare Trennung der Verantwortlichkeiten und eine gute Wartbarkeit zu gewährleisten. Das Modell ist so konzipiert, dass es als Grundlage für die Entwicklung verschiedener Software-Services dienen kann, die spezifische Aufgaben im Meldestellenkontext übernehmen.
Die Datenstrukturen für den ZNS-Datenaustausch basieren maßgeblich auf dem **OEPS Pflichtenheft 2021 Datentransfer OEPS Meldestellen OEPS, Version 2.4 vom 28.07.2021**.
## 2. Hochrangige Struktur (Service-Pakete)
Das Datenbankmodell ist in logische Service-Pakete unterteilt, die jeweils einen spezifischen Aufgabenbereich abdecken:
* **`Service_OeTO_Verwaltung`**:
* **Verantwortlichkeit:** Zentralverwaltung von ÖTO-bezogenen Regeln, Definitionen und sportfachlichen Stammdaten. Dieser Service liefert die Grundlage für die Einhaltung von Regularien in anderen Services.
* **`Service_ZNS_Daten`**:
* **Verantwortlichkeit:** Abbildung und Verwaltung der vom OEPS über die ZNS-Schnittstelle bereitgestellten Stammdaten (z.B. aus `LIZENZ01.dat`, `PFERDE01.dat`, `VEREIN01.dat`, `RICHT01.dat`). Dient als Basis für Personen-, Pferde- und Vereinsinformationen.
* **`Service_Veranstaltungsplanung`**:
* **Verantwortlichkeit:** Planung, Strukturierung und Verwaltung von reitsportlichen Veranstaltungen, von übergeordneten Event-Rahmen bis hin zu detaillierten Prüfungen und deren spartenspezifischen Ausprägungen.
* **`Service_Nennungsabwicklung`**:
* **Verantwortlichkeit:** Abwicklung des gesamten Nennungs- und Ergebnisprozesses, inklusive der Erfassung von Nennungen, der Startberechtigungsprüfung (konzeptionell) und der Erfassung und Aufbereitung von Ergebnissen.
Innerhalb der `Service_Veranstaltungsplanung` und `Service_Nennungsabwicklung` existieren zudem Unterpakete (`Sportfachliche_Details_Pruefung` bzw. `Sportfachliche_Details_Ergebnis`), die spartenspezifische Erweiterungen für Prüfungs- und Ergebnisdaten enthalten.
## 3. Detaillierte Beschreibung der Entitäten (Auswahl)
Im Folgenden werden die Kernentitäten innerhalb der jeweiligen Service-Pakete beschrieben.
### 3.1. Service_OeTO_Verwaltung
#### `OETORegelReferenz`
* **Zweck:** Speichert Verweise auf spezifische Paragraphen, Absätze oder Anhänge der Österreichischen Turnierordnung (ÖTO). Ermöglicht die Nachvollziehbarkeit von Datenmodellentscheidungen und Regelgrundlagen.
* **Wichtige Attribute:** `oeto_regel_referenz_id` (**PK**), `paragraph_nummer`, `kapitel_titel`, `oeto_version_datum`.
#### `QualifikationsTyp`
* **Zweck:** Definition verschiedener Qualifikationen für Personen (z.B. Richter, Parcoursbauer) mit Spartenzuordnung.
* **Wichtige Attribute:** `qual_typ_code` (**PK**, z.B. "DR-GP", "PB-S"), `bezeichnung`, `sparte`, `oeto_regel_ref_id` (**FK**).
#### `LizenzTyp_OEPS`
* **Zweck:** Definition der verschiedenen Lizenztypen gemäß OEPS-Systematik (z.B. R1, RS2, RD3N).
* **Wichtige Attribute:** `lizenz_typ_code` (**PK**), `bezeichnung`, `sparte`, `oeto_regel_ref_id` (**FK**).
#### `AltersklasseDefinition`
* **Zweck:** Definition von Altersklassen für Reiter und Pferde gemäß ÖTO und ZNS-Vorgaben.
* **Wichtige Attribute:** `altersklasse_code` (**PK**, z.B. "JG", "U18", "4J"), `bezeichnung`, `min_alter`, `max_alter`, `oeto_regel_ref_id` (**FK**).
#### `Sportfachliche_Stammdaten`
* **Zweck:** Zentrale Ablage für wiederverwendbare sportfachliche Definitionen, die nicht direkt Lizenz- oder Qualifikationstypen sind (z.B. Dressuraufgaben, Standard-Hindernistypen, Wertungsverfahren, Punktetabellen für RVK).
* **Wichtige Attribute:** `stammdatum_id` (**PK**), `typ` (zur Unterscheidung), `code`, `bezeichnung`, `sparte_zugehoerigkeit`.
### 3.2. Service_ZNS_Daten
Dieser Service bildet die Struktur der vom OEPS bereitgestellten `.dat`-Dateien ab.
#### `Verein_ZNS`
* **Zweck:** Speichert Vereinsinformationen gemäß `VEREIN01.dat`.
* **Wichtige Attribute:** `oeps_vereins_nr` (**PK**), `name`.
#### `Person_ZNS`
* **Zweck:** Zentrale Entität für Personen (Reiter, Richter, Parcoursbauer etc.), basierend auf `LIZENZ01.dat` und `RICHT01.dat`.
* **Wichtige Attribute:** `oeps_satz_nr_person` (**PK**), `familienname`, `vorname`, `geburtsdatum`, `geschlecht`, `nationalitaet_code`, `oeps_hauptverein_nr` (**FK** zu `Verein_ZNS`), `fei_id_person`, `ist_auf_sperrliste`.
#### `Person_hat_Lizenz_ZNS`
* **Zweck:** M:N-Beziehungstabelle, die abbildet, welche `Person_ZNS` welchen `LizenzTyp_OEPS` besitzt (basierend auf dem `LIZENZINFO`-Feld und den Hauptlizenzfeldern in `LIZENZ01.dat`).
* **Wichtige Attribute:** `oeps_satz_nr_person` (**PK, FK**), `lizenz_typ_code` (**PK, FK**), `bezahlt_im_jahr`.
#### `Person_hat_Qualifikation_ZNS`
* **Zweck:** M:N-Beziehungstabelle, die die Qualifikationen einer `Person_ZNS` (aus `RICHT01.dat`) mit den definierten `QualifikationsTypen` verknüpft.
* **Wichtige Attribute:** `oeps_satz_nr_person` (**PK, FK**), `qual_typ_code` (**PK, FK**).
#### `Pferd_ZNS`
* **Zweck:** Speichert Pferdeinformationen gemäß `PFERDE01.dat`.
* **Wichtige Attribute:** `oeps_satz_nr_pferd` (**PK**), `name`, `lebensnummer`, `geburtsjahr`, `geschlecht`, `farbe`, `abstammung_vater_name`, `oeps_verein_nr_pferd` (**FK** zu `Verein_ZNS`), `letzte_zahlung_pferdegebuehr_jahr`, `fei_pass_nr`.
### 3.3. Service_Veranstaltungsplanung
#### `VeranstaltungsRahmen`
* **Zweck:** Definiert die übergeordnete, konkrete Veranstaltung an einem Ort zu einer Zeit, die mehrere Turniere umfassen kann.
* **Wichtige Attribute:** `veranst_rahmen_id` (**PK**), `name`, `datum_von_gesamt`, `datum_bis_gesamt`, `hauptveranstalter_verein_nr` (**FK** zu `Verein_ZNS`).
#### `Turnier_OEPS`
* **Zweck:** Repräsentiert ein einzelnes, vom OEPS anerkanntes Turnier (Pferdesportliche Veranstaltung) innerhalb eines `VeranstaltungsRahmen`. Entspricht den Daten im A-Satz der OEPS-Dateien.
* **Wichtige Attribute:** `oeps_turnier_nr` (**PK**), `veranst_rahmen_id` (**FK**), `name_zusatz`, `datum_von_turnier`, `datum_bis_turnier`, `kategorie_text_turnier`, `turnierart_sparte`.
#### `Pruefung_OEPS` (Bewerb)
* **Zweck:** Definiert einen einzelnen Bewerb innerhalb eines `Turnier_OEPS`. Entspricht den Daten im B-Satz/BBEWERBE-Abschnitt.
* **Wichtige Attribute:** `pruefung_db_id` (**PK**), `oeps_turnier_nr` (**FK**), `oeps_bewerb_nr_display`, `name_text_pruefung`, `klasse_text`, `datum_pruefung`, `art_disziplin_haupt` (zur Steuerung spartenspezifischer Logik).
#### `Pruefung_Abteilung`
* **Zweck:** Definiert eine spezifische Abteilung innerhalb einer `Pruefung_OEPS`, da Ergebnisse und Nennungen oft pro Abteilung verwaltet werden (gemäß B-Satz im Pflichtenheft).
* **Wichtige Attribute:** `pruefung_abteilung_db_id` (**PK**), `pruefung_db_id` (**FK**), `oeps_abteilung_nr`, `bezeichnung_abteilung`, `anzahl_starter_abteilung_gemeldet`, `geldpreis_summe_abteilung`.
#### `Meisterschaft_Cup_Serie`
* **Zweck:** Abbildung von übergeordneten Wettbewerbsformaten wie Landesmeisterschaften, Cups oder Turnierserien, die sich über mehrere Turniere oder spezifische Prüfungen erstrecken können.
* **Wichtige Attribute:** `mcs_id` (**PK**), `name`, `typ`, `jahr`, `sparte`.
#### `MCS_Wertungspruefung`
* **Zweck:** M:N-Beziehungstabelle, die festlegt, welche `Pruefung_Abteilung` für eine `Meisterschaft_Cup_Serie` als Wertungsprüfung zählt.
* **Wichtige Attribute:** `mcs_id` (**PK, FK**), `pruefung_abteilung_db_id` (**PK, FK**), `faktor_fuer_wertung`.
#### Unterpaket `Sportfachliche_Details_Pruefung`
Enthält Entitäten zur Spezifizierung von Prüfungsdetails für einzelne Sparten:
* **`DressurPruefungSpezifika`**: Details wie Aufgabe, Platzgröße.
* **`SpringenPruefungSpezifika`**: Details wie Parcoursdesigner, Hindernisanzahl, Höhe, Wertungsverfahren.
* **`VielseitigkeitPruefungSpezifika`**: Details zu den Teilprüfungen Dressur, Gelände, Springen.
* **`ReitervierkampfPruefungSpezifika`**: Details zu den Teilprüfungen Dressur, Springen, Laufen, Schwimmen.
Diese Entitäten sind 1:1 mit `Pruefung_OEPS` verknüpft und referenzieren ggf. `Sportfachliche_Stammdaten` aus dem `Service_OeTO_Verwaltung`.
### 3.4. Service_Nennungsabwicklung
#### `Nennung_OEPS`
* **Zweck:** Speichert eine Nennung eines Reiter-Pferd-Paares für eine spezifische `Pruefung_Abteilung`. Basiert auf dem KKARTEI-Satz der `n2-*.dat` Datei.
* **Wichtige Attribute:** `nennung_db_id` (**PK**), `pruefung_abteilung_db_id` (**FK**), `oeps_satz_nr_reiter` (**FK**), `oeps_satz_nr_pferd` (**FK**), `genutzte_lizenz_person_satz_nr` (**FK**), `genutzte_lizenz_typ_code` (**FK**), `nennungs_zeitpunkt`, `status_nennung`.
#### `Ergebnis_OEPS_Zeile`
* **Zweck:** Speichert die Ergebniszeile für eine Teilnahme, basierend auf dem D-Satz der `*.erg` Datei.
* **Wichtige Attribute:** `ergebnis_zeile_db_id` (**PK**), `nennung_db_id` (**FK** empfohlen), `pruefung_abteilung_db_id` (**FK**), `platz`, `punkte_wertnote_text_ergebnis`, `zeit_prozent_text_ergebnis`, `geldpreis_betrag_ergebnis`, `nation_code_fuer_ergebnis`.
#### Unterpaket `Sportfachliche_Details_Ergebnis`
Enthält Entitäten zur Spezifizierung von Ergebnisdetails für einzelne Sparten:
* **`DressurErgebnisSpezifika`**: Gesamtwertnote, Prozent; kann um Lektionsbewertungen erweitert werden.
* **`SpringenErgebnisSpezifika`**: Stilnote; kann um `SpringenUmlaufErgebnis` (Fehler/Zeit pro Umlauf/Stechen) erweitert werden.
* **`VielseitigkeitErgebnisSpezifika`**: Minuspunkte aus den einzelnen Teilprüfungen, Gesamtminuspunktzahl.
* **`ReitervierkampfErgebnisSpezifika`**: Punkte und Rohleistungen aus den vier Teilprüfungen, Gesamtpunktzahl.
Diese Entitäten sind 1:1 mit `Ergebnis_OEPS_Zeile` verknüpft.
## 4. Veranstaltungshierarchie
Die Abwicklung von Pferdesportveranstaltungen folgt einer klaren Hierarchie, die im Modell abgebildet wird:
1. **`VeranstaltungsRahmen`**: Die oberste Ebene, die eine komplette Veranstaltung an einem Ort und Zeitraum definiert (z.B. "Pfingstturnier Sudenhof").
2. **`Turnier_OEPS`**: Einem `VeranstaltungsRahmen` können ein oder mehrere offizielle OEPS-Turniere zugeordnet sein (z.B. ein CDN-A und ein CSN-B am selben Wochenende unter einem `VeranstaltungsRahmen`). Jedes `Turnier_OEPS` hat eine eigene OEPS-Turniernummer.
3. **`Pruefung_OEPS`**: Jedes `Turnier_OEPS` besteht aus mehreren Bewerben (Prüfungen), die im System als `Pruefung_OEPS` erfasst werden und eine OEPS-Bewerbsnummer tragen.
4. **`Pruefung_Abteilung`**: Ein `Pruefung_OEPS` kann in eine oder mehrere Abteilungen unterteilt sein, für die separate Nennungen und Ergebnislisten geführt werden können.
Parallel dazu existiert die Entität **`Meisterschaft_Cup_Serie`**, die es erlaubt, Turniere oder spezifische Prüfungsabteilungen übergeordneten Wettbewerben (wie Landesmeisterschaften oder Cups) zuzuordnen. Die Zuordnung erfolgt über die Zwischentabelle `MCS_Wertungspruefung`.
## 5. Spartenspezifische Details
Für die vier Hauptsparten Dressur, Springen, Vielseitigkeit und Reitervierkampf sind exemplarisch spezifische Entitäten zur Detaillierung von Prüfungsanforderungen und Ergebnisstrukturen vorgesehen. Diese befinden sich in den Unterpaketen `Sportfachliche_Details_Pruefung` (unter `Service_Veranstaltungsplanung`) und `Sportfachliche_Details_Ergebnis` (unter `Service_Nennungsabwicklung`). Diese Entitäten sind stets mit einer Kern-Prüfung (`Pruefung_OEPS`) bzw. einer Kern-Ergebniszeile (`Ergebnis_OEPS_Zeile`) verknüpft und erweitern diese um disziplinspezifische Attribute.
## 6. Beziehungen
Alle Beziehungen zwischen den Entitäten, insbesondere die paketübergreifenden Verknüpfungen, sind im PlantUML-Diagramm am Ende des Skripts explizit definiert, um Klarheit und korrekte Verarbeitung sicherzustellen. (Das PlantUML-Diagramm selbst dient hier als visuelle Referenz für die Beziehungen).
## 7. Allgemeine Hinweise und Ausblick
* Dieses Datenbankmodell stellt einen umfassenden Entwurf dar, der als solide Grundlage für die Entwicklung einer Meldestellen-Software dient.
* Die Detailtiefe, insbesondere bei Attributen und komplexen Geschäftsregeln (z.B. exakte Logik der Startberechtigungsprüfung, Gebührenberechnung, Generierung von spezifischen Berichten), kann und muss in weiteren Schritten verfeinert werden.
* Die Normalisierung von Daten, die in den ZNS-Dateien als Textfelder oder kommaseparierte Listen vorliegen (z.B. Qualifikationen), wurde teilweise durch Zwischentabellen angedeutet und ist ein wichtiger Aspekt für die Datenbankintegrität.
* Die Pflege der ÖTO-Referenzen und der sportfachlichen Stammdaten ist für die Aktualität und Korrektheit des Systems entscheidend.

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

View File

@ -0,0 +1,389 @@
@startuml
!theme vibrant
title Datenbankmodell ÖTO - Service-Orientierte Modulare Struktur (inkl. aller Sparten)
' #####################################################################
' ### Service OeTO-Verwaltung (Regeln, Lizenzen, Definitionen) ###
' #####################################################################
package Service_OeTO_Verwaltung {
entity OETORegelReferenz {
+ oeto_regel_referenz_id : UUID <<PK>>
--
paragraph_nummer : VARCHAR
kapitel_titel : VARCHAR
kurzbeschreibung_regel : TEXT
oeto_version_datum : DATE
url_detail : VARCHAR
}
entity QualifikationsTyp {
+ qual_typ_code : VARCHAR <<PK>>
--
bezeichnung : VARCHAR
sparte : VARCHAR
# oeto_regel_ref_id : UUID <<FK>>
}
entity LizenzTyp_OEPS {
+ lizenz_typ_code : VARCHAR(4) <<PK>>
--
bezeichnung : VARCHAR
sparte : VARCHAR
# oeto_regel_ref_id : UUID <<FK>>
}
entity AltersklasseDefinition {
+ altersklasse_code : VARCHAR(4) <<PK>>
--
bezeichnung : VARCHAR
min_alter : INTEGER
max_alter : INTEGER
# oeto_regel_ref_id : UUID <<FK>>
}
entity Sportfachliche_Stammdaten {
+ stammdatum_id : UUID <<PK>>
--
typ : VARCHAR ' z.B. DRESSURAUFGABE, HINDERNISTYP_SPRINGEN, WERTUNGSVERFAHREN_SPRINGEN, RVK_PUNKTETABELLE
code : VARCHAR ' z.B. "GA02/23", "OXER_STANDARD", "FEHLER_ZEIT", "RVK_STANDARD_2025"
bezeichnung : VARCHAR
beschreibung_details : TEXT
sparte_zugehoerigkeit : VARCHAR ' Für welche Sparte(n) ist dieser Stammdatensatz relevant
# oeto_regel_ref_id : UUID <<FK>>
}
}
' --- Ende Service OeTO-Verwaltung ---
' #####################################################################
' ### Service ZNS-Daten (Import/Export von OEPS Stammdaten) ###
' #####################################################################
package Service_ZNS_Daten {
entity Verein_ZNS {
+ oeps_vereins_nr : VARCHAR(4) <<PK>>
--
name : VARCHAR(50)
}
entity Person_ZNS {
+ oeps_satz_nr_person : VARCHAR(6) <<PK>>
--
familienname : VARCHAR(50)
vorname : VARCHAR(25)
geburtsdatum : DATE
geschlecht : CHAR(1)
nationalitaet_code : VARCHAR(3)
# oeps_hauptverein_nr : VARCHAR(4) <<FK>>
mitglieds_nr_verein : VARCHAR(8)
fei_id_person : VARCHAR(10)
ist_auf_sperrliste : BOOLEAN
kader_flag : CHAR(1)
telefon : VARCHAR(21)
}
entity Person_hat_Lizenz_ZNS {
# oeps_satz_nr_person : VARCHAR(6) <<FK>>
# lizenz_typ_code : VARCHAR(4) <<FK>>
--
PRIMARY KEY (oeps_satz_nr_person, lizenz_typ_code)
bezahlt_im_jahr : INTEGER
}
entity Person_hat_Qualifikation_ZNS {
# oeps_satz_nr_person : VARCHAR(6) <<FK>>
# qual_typ_code : VARCHAR <<FK>>
--
PRIMARY KEY (oeps_satz_nr_person, qual_typ_code)
}
entity Pferd_ZNS {
+ oeps_satz_nr_pferd : VARCHAR(10) <<PK>>
--
name : VARCHAR(30)
lebensnummer : VARCHAR(9)
geburtsjahr : INTEGER
geschlecht : CHAR(1)
farbe : VARCHAR(15)
abstammung_vater_name : VARCHAR(30)
# oeps_verein_nr_pferd : VARCHAR(4) <<FK>>
letzte_zahlung_pferdegebuehr_jahr : INTEGER
fei_pass_nr : VARCHAR(10)
}
}
' --- Ende Service ZNS-Daten ---
' #####################################################################
' ### Service Veranstaltungsplanung (Events, Turniere, Bewerbe) ###
' #####################################################################
package Service_Veranstaltungsplanung {
entity VeranstaltungsRahmen {
+ veranst_rahmen_id : UUID <<PK>>
--
name : VARCHAR
' # austragungsort_id : UUID <<FK>>
datum_von_gesamt : DATE
datum_bis_gesamt : DATE
# hauptveranstalter_verein_nr : VARCHAR(4) <<FK>>
beschreibung : TEXT
}
entity Turnier_OEPS {
+ oeps_turnier_nr : VARCHAR(5) <<PK>>
--
# veranst_rahmen_id : UUID <<FK>>
name_zusatz : VARCHAR
datum_von_turnier : DATE
datum_bis_turnier : DATE
kategorie_text_turnier : VARCHAR(25)
turnierart_sparte : VARCHAR
' # ausschreibung_dok_id : UUID <<FK>>
}
entity Pruefung_OEPS {
+ pruefung_db_id : UUID <<PK>>
--
# oeps_turnier_nr : VARCHAR(5) <<FK>>
oeps_bewerb_nr_display : VARCHAR(3)
name_text_pruefung : VARCHAR(35)
klasse_text : VARCHAR(4)
kategorie_text_pruefung : VARCHAR(8)
datum_pruefung : DATE
art_disziplin_haupt : VARCHAR ' Zur Filterung für spezifische Details: Dressur, Springen, Vielseitigkeit, RVK
# oeto_regel_ref_id_pruefung : UUID <<FK>>
}
entity Pruefung_Abteilung {
+ pruefung_abteilung_db_id : UUID <<PK>>
--
# pruefung_db_id : UUID <<FK>>
oeps_abteilung_nr : INTEGER
bezeichnung_abteilung : VARCHAR
anzahl_starter_abteilung_gemeldet : INTEGER
geldpreis_summe_abteilung : DECIMAL
}
entity Meisterschaft_Cup_Serie {
+ mcs_id : UUID <<PK>>
--
name : VARCHAR
typ : VARCHAR
jahr : INTEGER
sparte : VARCHAR
# oeto_regel_ref_id_mcs : UUID <<FK>>
}
entity MCS_Wertungspruefung {
# mcs_id : UUID <<FK>>
# pruefung_abteilung_db_id : UUID <<FK>>
--
PRIMARY KEY (mcs_id, pruefung_abteilung_db_id)
faktor_fuer_wertung : DECIMAL
bemerkung : VARCHAR
}
' --- Spartenspezifische Details für Prüfungen ---
package Sportfachliche_Details_Pruefung {
entity DressurPruefungSpezifika {
# pruefung_db_id : UUID <<PK>> <<FK>>
--
# aufgabe_stammdatum_id : UUID <<FK>> ' Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ DRESSURAUFGABE)
platz_groesse_code : VARCHAR
# oeto_regel_ref_id_dressur : UUID <<FK>>
}
entity SpringenPruefungSpezifika {
# pruefung_db_id : UUID <<PK>> <<FK>>
--
# parcours_designer_person_id : VARCHAR(6) <<FK>> ' Service_ZNS_Daten.Person_ZNS
anzahl_hindernisse : INTEGER
hoehe_max_cm : INTEGER
erlaubte_zeit_sek : INTEGER
# wertungs_verfahren_stammdatum_id : UUID <<FK>> ' Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ WERTUNGSVERFAHREN_SPRINGEN)
anzahl_umlaeufe : INTEGER
anzahl_stechen : INTEGER
# oeto_regel_ref_id_springen : UUID <<FK>>
}
entity VielseitigkeitPruefungSpezifika {
# pruefung_db_id : UUID <<PK>> <<FK>> ' Hauptprüfung VS
--
# dressur_aufgabe_stammdatum_id : UUID <<FK>> ' Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ DRESSURAUFGABE)
gelaende_laenge_m : INTEGER
gelaende_anzahl_hindernisse : INTEGER
gelaende_erlaubte_zeit_sek : INTEGER
gelaende_optimalzeit_sek : INTEGER
springen_parcours_anforderungen_text : VARCHAR
# oeto_regel_ref_id_vs : UUID <<FK>>
}
entity ReitervierkampfPruefungSpezifika {
# pruefung_db_id : UUID <<PK>> <<FK>>
--
dressur_anforderungen_text : VARCHAR ' oder Verweis auf Aufgabe
springen_anforderungen_text : VARCHAR ' oder Verweis auf Parcoursdetails
lauf_distanz_m : INTEGER
schwimm_distanz_m : INTEGER
# punkte_tabelle_stammdatum_id : UUID <<FK>> ' Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ RVK_PUNKTETABELLE)
# oeto_regel_ref_id_rvk : UUID <<FK>>
}
}
}
' --- Ende Service Veranstaltungsplanung ---
' #####################################################################
' ### Service Nennungsabwicklung (Nennungen, Ergebnisse) ###
' #####################################################################
package Service_Nennungsabwicklung {
entity Nennung_OEPS {
+ nennung_db_id : UUID <<PK>>
--
# pruefung_abteilung_db_id : UUID <<FK>>
# oeps_satz_nr_reiter : VARCHAR(6) <<FK>>
# oeps_satz_nr_pferd : VARCHAR(10) <<FK>>
# genutzte_lizenz_person_satz_nr : VARCHAR(6) <<FK>>
# genutzte_lizenz_typ_code : VARCHAR(4) <<FK>>
nennungs_zeitpunkt : TIMESTAMP
status_nennung : VARCHAR
kopf_nr_pferd_fuer_nennung : VARCHAR(4)
}
entity Ergebnis_OEPS_Zeile {
+ ergebnis_zeile_db_id : UUID <<PK>>
--
# nennung_db_id : UUID <<FK>>
# pruefung_abteilung_db_id : UUID <<FK>>
platz : INTEGER
ausschluss_disq_code : CHAR(1)
punkte_wertnote_text_ergebnis : VARCHAR(6)
zeit_prozent_text_ergebnis : VARCHAR(5)
stechen_sr_info_text_ergebnis : VARCHAR(4)
geldpreis_betrag_ergebnis : DECIMAL
nation_code_fuer_ergebnis : VARCHAR(3)
platziert_flag : CHAR(1)
}
' --- Spartenspezifische Details für Ergebnisse ---
package Sportfachliche_Details_Ergebnis {
entity DressurErgebnisSpezifika {
# ergebnis_zeile_db_id : UUID <<PK>> <<FK>>
--
gesamt_wertnote : DECIMAL(5,3)
gesamt_prozent : DECIMAL(5,2)
' Hier könnten Details zu Richterbewertungen pro Lektion folgen (eigene Entitäten)
}
entity SpringenErgebnisSpezifika {
# ergebnis_zeile_db_id : UUID <<PK>> <<FK>>
--
stilnote_gesamt : DECIMAL(3,1) ' Falls zutreffend
' Für Details pro Umlauf/Stechen: separate Entität SpringenUmlaufErgebnis
}
' Kind von SpringenErgebnisSpezifika oder direkt von Ergebnis_OEPS_Zeile
entity SpringenUmlaufErgebnis {
+ umlauf_ergebnis_id : UUID <<PK>>
--
# ergebnis_zeile_db_id : UUID <<FK>> ' oder springen_ergebnis_spezifika_id
umlauf_oder_stechen_nr : INTEGER ' 1=Grundumlauf, 2=Stechen etc.
fehlerpunkte_hindernis : DECIMAL(4,2)
fehlerpunkte_zeit : DECIMAL(4,2)
zeit_benoetigt_sek : DECIMAL(5,2)
stilnote_umlauf : DECIMAL(3,1)
}
entity VielseitigkeitErgebnisSpezifika {
# ergebnis_zeile_db_id : UUID <<PK>> <<FK>> ' Gesamtergebnis VS
--
minuspunkte_dressur : DECIMAL(5,2)
minuspunkte_gelaende_hindernis : DECIMAL(5,2)
minuspunkte_gelaende_zeit : DECIMAL(5,2)
minuspunkte_springen_hindernis : DECIMAL(5,2)
minuspunkte_springen_zeit : DECIMAL(5,2)
gesamt_minuspunkte : DECIMAL(5,2)
' Ggf. Verweise auf Detailergebnisse der Teilprüfungen, wenn diese als eigene Ergebnis_OEPS_Zeile erfasst werden
}
entity ReitervierkampfErgebnisSpezifika {
# ergebnis_zeile_db_id : UUID <<PK>> <<FK>> ' Gesamtergebnis RVK
--
punkte_dressur : INTEGER
leistung_dressur_roh : VARCHAR ' z.B. Wertnote
punkte_springen : INTEGER
leistung_springen_roh : VARCHAR ' z.B. Fehler/Zeit
punkte_laufen : INTEGER
leistung_laufen_roh : VARCHAR ' z.B. Zeit
punkte_schwimmen : INTEGER
leistung_schwimmen_roh : VARCHAR ' z.B. Zeit
gesamt_punkte_rvk : INTEGER
}
}
}
' --- Ende Service Nennungsabwicklung ---
' #####################################################################
' ### Definition der Beziehungen (insbesondere Paketübergreifend) ###
' #####################################################################
' Service OeTO-Verwaltung Beziehungen
Service_OeTO_Verwaltung.QualifikationsTyp -- Service_OeTO_Verwaltung.OETORegelReferenz
Service_OeTO_Verwaltung.LizenzTyp_OEPS -- Service_OeTO_Verwaltung.OETORegelReferenz
Service_OeTO_Verwaltung.AltersklasseDefinition -- Service_OeTO_Verwaltung.OETORegelReferenz
Service_OeTO_Verwaltung.Sportfachliche_Stammdaten -- Service_OeTO_Verwaltung.OETORegelReferenz
' Service ZNS-Daten Beziehungen
Service_ZNS_Daten.Person_ZNS -- Service_ZNS_Daten.Verein_ZNS
Service_ZNS_Daten.Person_hat_Lizenz_ZNS -- Service_ZNS_Daten.Person_ZNS
Service_ZNS_Daten.Person_hat_Lizenz_ZNS -- Service_OeTO_Verwaltung.LizenzTyp_OEPS
Service_ZNS_Daten.Person_hat_Qualifikation_ZNS -- Service_ZNS_Daten.Person_ZNS
Service_ZNS_Daten.Person_hat_Qualifikation_ZNS -- Service_OeTO_Verwaltung.QualifikationsTyp
Service_ZNS_Daten.Pferd_ZNS -- Service_ZNS_Daten.Verein_ZNS
' Service Veranstaltungsplanung Beziehungen
Service_Veranstaltungsplanung.VeranstaltungsRahmen -- Service_ZNS_Daten.Verein_ZNS : "veranstaltet von"
Service_Veranstaltungsplanung.Turnier_OEPS -- Service_Veranstaltungsplanung.VeranstaltungsRahmen : "ist Teil von"
Service_Veranstaltungsplanung.Pruefung_OEPS -- Service_Veranstaltungsplanung.Turnier_OEPS : "gehört zu"
Service_Veranstaltungsplanung.Pruefung_OEPS -- Service_OeTO_Verwaltung.OETORegelReferenz : "unterliegt Regel"
Service_Veranstaltungsplanung.Pruefung_Abteilung -- Service_Veranstaltungsplanung.Pruefung_OEPS : "ist Abteilung von"
Service_Veranstaltungsplanung.Meisterschaft_Cup_Serie -- Service_OeTO_Verwaltung.OETORegelReferenz : "hat Regelwerk"
Service_Veranstaltungsplanung.MCS_Wertungspruefung -- Service_Veranstaltungsplanung.Meisterschaft_Cup_Serie
Service_Veranstaltungsplanung.MCS_Wertungspruefung -- Service_Veranstaltungsplanung.Pruefung_Abteilung
' Spartendetails für Prüfung
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_Veranstaltungsplanung.Pruefung_OEPS
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nutzt Aufgabe"
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.OETORegelReferenz
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_Veranstaltungsplanung.Pruefung_OEPS
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_ZNS_Daten.Person_ZNS : "Parcoursdesigner"
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nach Wertungsart"
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_OeTO_Verwaltung.OETORegelReferenz
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.VielseitigkeitPruefungSpezifika -- Service_Veranstaltungsplanung.Pruefung_OEPS
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.VielseitigkeitPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nutzt Dressuraufgabe"
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.VielseitigkeitPruefungSpezifika -- Service_OeTO_Verwaltung.OETORegelReferenz
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.ReitervierkampfPruefungSpezifika -- Service_Veranstaltungsplanung.Pruefung_OEPS
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.ReitervierkampfPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nutzt Punktetabelle"
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.ReitervierkampfPruefungSpezifika -- Service_OeTO_Verwaltung.OETORegelReferenz
' Service Nennungsabwicklung Beziehungen
Service_Nennungsabwicklung.Nennung_OEPS -- Service_Veranstaltungsplanung.Pruefung_Abteilung : "für"
Service_Nennungsabwicklung.Nennung_OEPS -- Service_ZNS_Daten.Person_ZNS : "durch Reiter"
Service_Nennungsabwicklung.Nennung_OEPS -- Service_ZNS_Daten.Pferd_ZNS : "mit Pferd"
Service_Nennungsabwicklung.Nennung_OEPS -- Service_ZNS_Daten.Person_hat_Lizenz_ZNS : "unter Lizenz"
Service_Nennungsabwicklung.Ergebnis_OEPS_Zeile -- Service_Nennungsabwicklung.Nennung_OEPS : "von"
Service_Nennungsabwicklung.Ergebnis_OEPS_Zeile -- Service_Veranstaltungsplanung.Pruefung_Abteilung : "in Abteilung"
' Spartendetails für Ergebnis
Service_Nennungsabwicklung.Sportfachliche_Details_Ergebnis.DressurErgebnisSpezifika -- Service_Nennungsabwicklung.Ergebnis_OEPS_Zeile
Service_Nennungsabwicklung.Sportfachliche_Details_Ergebnis.SpringenErgebnisSpezifika -- Service_Nennungsabwicklung.Ergebnis_OEPS_Zeile
Service_Nennungsabwicklung.Sportfachliche_Details_Ergebnis.SpringenUmlaufErgebnis -- Service_Nennungsabwicklung.Sportfachliche_Details_Ergebnis.SpringenErgebnisSpezifika : "Detail zu" ' Oder zu Ergebnis_OEPS_Zeile
Service_Nennungsabwicklung.Sportfachliche_Details_Ergebnis.VielseitigkeitErgebnisSpezifika -- Service_Nennungsabwicklung.Ergebnis_OEPS_Zeile
Service_Nennungsabwicklung.Sportfachliche_Details_Ergebnis.ReitervierkampfErgebnisSpezifika -- Service_Nennungsabwicklung.Ergebnis_OEPS_Zeile
' --- Allgemeine Hinweise ---
' - Alle vier Sparten (Dressur, Springen, Vielseitigkeit, Reitervierkampf) sind nun mit spezifischen
' Detailentitäten für Prüfung und Ergebnis exemplarisch im Modell enthalten.
' - Die Komplexität und der Detaillierungsgrad dieser spartenspezifischen Entitäten können je nach
' Anforderung noch deutlich erweitert werden (z.B. detaillierte Hindernisprotokolle im Springen,
' Richterbewertungsbögen für Dressur, Phasen-Ergebnisse für Vielseitigkeit).
' - Dieses Diagramm stellt einen umfassenden Entwurf dar, der als Grundlage für die weitere
' iterative Verfeinerung dienen kann.
@enduml

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

View File

@ -0,0 +1,306 @@
@startuml
' Diagramm-Optionen
skinparam linetype ortho
hide empty members
skinparam shadowing false
skinparam defaultFontName "Segoe UI"
skinparam defaultFontSize 10
skinparam roundCorner 10
allow_mixing
' --- Enums (mit Suffix E) ---
enum SparteE {
DRESSUR,
SPRINGEN,
VIELSEITIGKEIT,
FAHREN,
VOLTIGIEREN,
WESTERN,
DISTANZ,
ISLAND,
PFERDESPORT_SPIEL,
SONDERPRUEFUNG,
SONSTIGE,
UNBEKANNT
}
enum RegelwerkTypE {
OETO,
FEI,
SONSTIGE
}
enum PruefungsaufgabeNationE {
NATIONAL_OEPS,
FEI,
SONSTIGE
}
enum PruefungsaufgabeRichtverfahrenModusE {
GM,
GT,
NICHT_SPEZIFIZIERT
}
enum PruefungsaufgabeViereckE {
VIERECK_20x40,
VIERECK_20x60,
ANDERE,
UNBEKANNT
}
enum ArtDesStechensE {
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 FunktionaerRolleE {
RICHTER,
RICHTER_VORSITZ,
RICHTER_BEI_C,
RICHTER_AM_ABREITEPLATZ,
PARCOURSBAUER,
PARCOURSBAU_ASSISTENT,
STEWARD,
TECHNISCHER_DELEGIERTER,
TURNIERLEITER,
TURNIERBEAUFTRAGTER,
TIERARZT_TURNIER,
HUFSCHMIED_TURNIER,
MELDESTELLEMPERSONAL,
RECHENSTELLE,
SPRECHER,
REITERSPRECHER,
ZEITNEHMER,
SCHREIBER_RICHTER,
HELFER_PARCOURS,
SONSTIGE_FUNKTION
}
enum RichterPositionE {
C, E, H, B, M,
VORSITZ, SONSTIGE_POSITION
}
enum DatenQuelleE {
OEPS_ZNS,
MANUELL_NATIONAL,
MANUELL_INTERNATIONAL,
SYSTEM_GENERIERTR
}
enum NennungStatusE {
GEMELDET,
MANUELL_ERFASST,
BESTAETIGT,
NACHGENANNT,
BEZAHLT,
STARTBERECHTIGT,
ABGEMELDET_REITER,
ABGEMELDET_VERANSTALTER,
STORNIERT_SYSTEM
}
enum BeginnzeitTypE {
FIX_UM,
ANSCHLIESSEND,
CA_UM,
NACH_VORHERIGEM_BEWERB_ABTEILUNG
}
enum EventStatusE {
IN_PLANUNG,
GENEHMIGT_VERANSTALTER,
OEFFENTLICH_SICHTBAR,
AKTIV,
ABGESCHLOSSEN,
ABGESAGT
}
enum PlatzTypE {
AUSTRAGUNG,
VORBEREITUNG,
LONGIEREN,
SONSTIGES
}
' --- Entitäten für verwaltbare Auswahllisten (Lookup Tables / Master Data) ---
entity "Pruefungsaufgabe" {
+ id: UUID (PK)
--
kuerzel: String
nameLang: String
sparte: SparteE
nation: PruefungsaufgabeNationE
'..weitere..
}
entity "Richtverfahren" {
+ id: UUID (PK)
--
code: String
bezeichnung: String
sparte: SparteE
}
entity "BewerbsKlasseDefinition" as BewerbsKlasseDef {
+ id: UUID (PK)
--
kuerzel: String
bezeichnung: String
sparte: SparteE
}
entity "BewerbsKategorieOetoDefinition" as BewerbsKatOetoDef {
+ id: UUID (PK)
--
kuerzel: String 'z.B. "CDN-C Neu"'
bezeichnung: String
abgeleiteteSparte: SparteE ' Automatisch aus Kuerzel oder manuell?'
}
' --- Kern-Entitäten ---
entity "Event" {
+ id: UUID (PK)
--
bezeichnung: String
datumVon: LocalDate
datumBis: LocalDate
}
entity "Turnier" {
+ id: UUID (PK)
--
eventId: UUID (FK)
oepsTurnierNr: String
titel: String
' sparte: SparteE ' Wird nun aus oetoKategorieIds abgeleitet oder ist spezifisch für das Turnier'
oetoKategorieIds: List<UUID> '(FKs zu BewerbsKatOetoDef)'
regelwerkTyp: RegelwerkTypE
datumVon: LocalDate ' Eigenes Datum pro Turnier'
datumBis: LocalDate ' Eigenes Datum pro Turnier'
}
entity "BewerbBasis" {
+ id: UUID (PK)
--
turnierId: UUID (FK)
nummerInAusschreibung: Integer ' Eindeutig pro Turnier'
uebergeordneteBezeichnung: String
sparte: SparteE ' Bleibt explizit, kann aus oetoKategorieId vorgeschlagen werden'
oetoKategorieId: UUID (FK zu BewerbsKatOetoDef.id) ' Die spezifische ÖTO Kategorie dieses Bewerbs'
' klasseId hier entfernt, wandert in spartspezifische Details '
}
entity "DressurBewerbDetails" {
+ bewerbBasisId: UUID (PK, FK)
--
pruefungsaufgabeId: UUID (FK)
richtverfahrenId: UUID (FK)
klasseId: UUID (FK zu BewerbsKlasseDef.id)? ' Klasse spezifisch für Dressur'
' zugewieseneFunktionaere: List<BewerbFunktionaerZuordnung> '
}
entity "SpringBewerbDetails" {
+ bewerbBasisId: UUID (PK, FK)
--
richtverfahrenId: UUID (FK)
artDesStechens: ArtDesStechensE?
klasseId: UUID (FK zu BewerbsKlasseDef.id)? ' Klasse spezifisch für Springen (z.B. Höhe)'
' zugewieseneFunktionaere: List<BewerbFunktionaerZuordnung> '
}
entity "BewerbFunktionaerZuordnung" {
+ id: UUID (PK)
--
' Entweder zu bewerbBasisId oder besser zu spartspezifischer DetailId '
' dressurBewerbDetailsId: UUID (FK)? '
' springBewerbDetailsId: UUID (FK)? '
bewerbBasisId: UUID (FK) ' Allgemeine Zuordnung, Rolle entscheidet über Relevanz '
personId: UUID (FK)
funktionaerRolle: FunktionaerRolleE
positionImBewerb: String? ' Für Richterpositionen etc. '
}
entity "Abteilung" {
+ id: UUID (PK)
--
bewerbBasisId: UUID (FK)
abteilungsKennzeichen: String ' z.B. "1", "A" -> ergibt mit BewerbBasis.nummer "12/1" '
bezeichnungOeffentlich: String?
' ... Teilungskriterien (strukturiert) ...
}
entity "Person" {
+ id: UUID (PK)
--
nachname: String
vorname: String
}
entity "Pferd" {
+ id: UUID (PK)
--
name: String
}
entity "Nennung" {
+ id: UUID (PK)
--
abteilungId: UUID (FK)
personId: UUID (FK)
pferdId: UUID (FK)
}
entity "Startfolge" {
+ id: UUID (PK)
--
nennungId: UUID (FK)
startNummer: Int
}
entity "Ergebnis" {
+ id: UUID (PK)
--
startfolgeId: UUID (FK)
platzierung: Int?
}
entity "FunktionaerEinsatz" {
+ id: UUID (PK)
--
personId: UUID (FK)
eventId: UUID (FK)
rolle: FunktionaerRolleE
positionRichter: RichterPositionE?
geplanterStart: LocalDateTime
geplantesEnde: LocalDateTime
}
entity "CupOderMeisterschaft" as Cup {
+ id: UUID (PK)
--
name: String
jahr: Int
sparte: SparteE
}
' --- Beziehungen (Auswahl) ---
Event "1" -- "0..*" Turnier
Turnier "1" -- "0..*" BewerbBasis
BewerbBasis "1" -- "0..1" DressurDetails
BewerbBasis "1" -- "0..1" SpringDetails
BewerbBasis "1" -- "1..*" Abteilung
Abteilung "1" -- "0..*" Nennung
Nennung --> Person
Nennung --> Pferd
Nennung "1" -- "0..1" Startfolge
Startfolge "1" -- "0..1" Ergebnis
BewerbBasis "1" -- "0..*" BewerbFunktionaerZuordnung : "hat Funktionäre"
Person "1" -- "0..*" BewerbFunktionaerZuordnung
' Oder Funktionärszuweisung über FunktionaerEinsatz und Zeit/Bewerbs-Matching '
Event "1" -- "0..*" FunktionaerEinsatz
Person "1" -- "0..*" FunktionaerEinsatz
Cup "1" -- "0..*" Turnier : "umfasst Turniere \n(über Zwischentabelle)"
' ... weitere Beziehungen ...
@enduml

View File

@ -0,0 +1,68 @@
@startuml
enum KurzbezeichnungTurnierBewerbE {
CDN ... Dressur
CSN ... Springen
CCN ... Vielseitigkeit
CAN ... Fahren
CVN ... Voltigieren
CEN ... Distanzreiten
CHNI ... Turniere für Islandpferde
CHNV ... Reitervierkampf
TREC ... Orientierungsreiten
CPEDN ... Pferdesportler mit Behinderung Dressur
CPEAN ... Pferdesportler mit Behinderung Fahren
CMGN ... Mounted Games
CWEN ... Working Equitation
}
note top of KurzbezeichnungTurnierBewerbE
Die Gliederung nach Sparten und die Kurzbezeichnung von Tur-
nieren und Bewerben, die nach der ÖTO ausgetragen werden,
erfolgt in Übereinstimmung mit der FEI. Die angegebenen
Bezeichnungen gelten für nationale Turniere;
end note
enum TeilnehmerkreisesE {
J ... JG, JN und/oder YR
P ... Ponys
N ... Noriker
H ... Haflinger
L ... Ländliche Reiter auf Warmblutpferden
A ... Vollblutaraberbewerbe
K ... Kaltblut
D ... Damensattel
}
note top of TeilnehmerkreisesE
Die Einschränkungen des Teilnehmerkreises für Turniere oder
einzelne Bewerbe auf die folgenden Reiter oder Pferde durch
die Ausschreibung sind in der Bezeichnung durch Anhängen
des angegebenen Buchstaben zu berücksichtigen:
end note
enum TurnierGliederungE {
A* ... -A*
A ... -A
B* ... -B*
B ... -B
C ... -C
C-NEU ... -C-NEU
}
note top of TurnierGliederungE
Zur Gliederung nach den Anforderungen werden nationale Tur-
niere in die Kategorien A*, A, B*, B, C und C-NEU eingeteilt. Der
Kurzbezeichnung gemäß Abs. 2 und 3 ist zur Kennzeichnung
entweder -A*, -A, -B*, -B, -C oder -C-NEU anzuhängen.
end note
entity "Ergebnis" {
+ id: UUID (PK)
--
startfolgeId: UUID (FK)
platzierung: Int?
}
@enduml