meldestelle/docs/diagrams/Datenbankmodell ÖTO - Service-Orientierte Modulare Struktur.puml
2025-05-16 14:38:16 +02:00

390 lines
16 KiB
Plaintext

@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