Dokumentations-Updates: DATABASE_SCHEMA.md: - Version 0.3.4 - Migration 009 zur Historie hinzugefügt - target_groups Struktur korrigiert (M:N statt 1:N) - training_style_target_groups Junction-Tabelle dokumentiert - Backend API Endpoints dokumentiert (5 neue) - Frontend Admin-UI Änderungen dokumentiert DOMAIN_MODEL.md: - Version 0.3.4 - Dimension 3 (Zielgruppe) komplett überarbeitet - Hierarchischer Kontext aktualisiert (M:N Architektur) - Admin-UI Darstellung erklärt (Tree-View + Matrix + Global) - BREAKING CHANGE klar gekennzeichnet Fachlich: - Zielgruppen sind jetzt GLOBAL (nicht mehr hierarchisch) - M:N Zuordnung über Junction-Tabelle - Wiederverwendbarkeit: Eine Zielgruppe → mehrere Stile Version: 0.3.4
10 KiB
Shinkan Jinkendo - Fachliches Domänenmodell
Version: 0.3.4
Stand: 2026-04-23 (Migration 009: Target Groups M:N Refactoring)
Basis: shinkan_anforderungsdokument_entwurf.md
Übersicht
Dieses Dokument beschreibt die fachliche Datenstruktur von Shinkan Jinkendo.
Zuständig für technische Umsetzung: siehe DATABASE_SCHEMA.md
Fachliche Kernprinzipien
1. Globaler Fähigkeitskatalog (§8.3)
Prinzip: Fähigkeiten werden NICHT pro Modell dupliziert.
Beispiele:
- Distanzgefühl (in Karate UND Selbstverteidigung)
- Stabiler Stand (in Karate UND Gewaltschutz)
- Aufmerksamkeit (in verschiedenen Zielgruppenmodellen)
Konsequenz: Ein globaler Katalog, aber kontextabhängige Ausprägung über Reifegradmodelle.
2. Mehrfachzuordnung von Übungen (§10.7)
Prinzip: Eine Übung kann mehreren Bereichen GLEICHZEITIG zugeordnet sein.
Beispiel: Distanzübung
- Karate ✓
- Selbstverteidigung ✓
- Gewaltschutz ✓
Technische Umsetzung: M:N Beziehungen mit is_primary Flag.
3. Hierarchischer Kontext (§8.1)
Fachliche Grundstruktur (ab Migration 009 - M:N):
Fokusbereich (Sportart/Bereich)
└─ Stil
└─ Zielgruppen (M:N Zuordnung, wiederverwendbar)
🔄 ÄNDERUNG: Zielgruppen sind global und können mehreren Stilen zugeordnet sein!
Beispiel-Architektur (vereinfacht):
Global definierte Zielgruppen:
├─ Breitensportler
├─ Leistungssportler
├─ Kinder
├─ Erwachsene
└─ Senioren
Zuordnungen (M:N):
Karate → Shotokan → [Breitensportler, Leistungssportler, Kinder]
Karate → Goju-Ryu → [Breitensportler, Erwachsene]
Karate → Wado-Ryu → [Leistungssportler]
Selbstverteidigung → [Erwachsene, Kinder, Senioren]
Gewaltschutz → [Kinder, Senioren]
Admin-UI Darstellung:
- Tree-View (Tab "Hierarchie"): Zeigt Fokusbereich → Stil → zugeordnete Zielgruppen
- Matrix (Tab "Zuordnungen"): Checkbox-Matrix: Stile × Zielgruppen
- Global (Tab "Zielgruppen"): Verwaltung aller Zielgruppen unabhängig von Stilen
Bedeutung für Reifegradmodelle:
Jede Kombination (Fokusbereich + Stil + Zielgruppe) kann ein eigenes Reifegradmodell haben:
- Karate / Shotokan / Breitensport → Modell A
- Karate / Shotokan / Leistungssport → Modell B
- Selbstverteidigung / Erwachsene → Modell C
Fachliche Dimensionen
Dimension 1: Fokusbereich (Sportart/Bereich)
Definition: Oberste fachliche Kategorisierung der Trainingsinhalte.
Beispiele:
- Karate
- Selbstverteidigung
- Gewaltschutz
Eigenschaften:
- Name, Kürzel, Beschreibung
- Farbe (für UI)
- Icon (Emoji oder Icon-Name)
- Status (aktiv/archiviert)
Verwaltung:
- Admin-Level: Systemadmin, Vereinsadmin
- CRUD: Voll administrierbar
- Löschen: Nur wenn keine abhängigen Stile oder Übungen
Dimension 2: Trainingsstil
Definition: Spezialisierung innerhalb eines Fokusbereichs.
Beispiele:
- Shotokan (unter Karate)
- Goju-Ryu (unter Karate)
- Wado-Ryu (unter Karate)
Hierarchie:
- Gehört zu genau EINEM Fokusbereich
- Kann optional Sub-Stile haben (parent_style_id)
Eigenschaften:
- Name, Kürzel, Beschreibung
- Fokusbereich-Zuordnung
- Optionale Hierarchie (z.B. Kyokushin → Kyokushin IKO)
- Status
Verwaltung:
- Admin-Level: Systemadmin, Vereinsadmin
- CRUD: Voll administrierbar
- Verschieben: Zwischen Fokusbereichen möglich
- Löschen: Nur wenn keine Zielgruppen oder Übungen zugeordnet
Dimension 3: Zielgruppe
Definition: Globale Trainingsempfänger-Gruppe, die MEHREREN Stilen zugeordnet werden kann (M:N).
🔄 ÄNDERUNG ab Migration 009: Zielgruppen sind NICHT mehr hierarchisch an Stile gebunden!
Beispiele:
- Breitensportler (kann in Shotokan, Goju-Ryu, Wado-Ryu gültig sein)
- Leistungssportler (kann in verschiedenen Stilen genutzt werden)
- Kinder (6-12 Jahre) (stilunabhängig)
- Jugendliche (13-17 Jahre)
- Erwachsene
- Frauen
- Senioren
- Gemischt
Architektur (ab Migration 009):
- ✅ Global unabhängig: Keine direkte FK zu
training_style_id - ✅ M:N Zuordnung: Über Junction-Tabelle
training_style_target_groups - ✅ Wiederverwendbar: Eine Zielgruppe kann mehreren Stilen zugeordnet sein
- ✅ Primary Flag:
is_primarykennzeichnet Hauptzuordnung
Eigenschaften:
- Name, Beschreibung
- Optionale Altersangabe (min_age, max_age)
- Status
- KEINE direkte Stil-Zuordnung mehr!
Verwaltung:
- Admin-Level: Systemadmin, Vereinsadmin, Spartenadmin
- CRUD: Voll administrierbar (global)
- Zuordnungen: Über M:N Matrix im Admin-UI
- Löschen: Nur wenn keine Übungen UND keine Stil-Zuordnungen
Admin-UI:
- Tab "Zielgruppen": Global verwalten (ohne Stil-Dropdown)
- Tab "Hierarchie": Tree-View (Fokusbereich → Stil → zugeordnete Zielgruppen)
- Tab "Zuordnungen": Checkbox-Matrix für M:N Assignments
Dimension 4: Altersgruppen (separate Dimension!)
Definition: Grobe Alterseinstufung UNABHÄNGIG von Zielgruppe.
Katalog:
- Minis (3-5 Jahre)
- Kinder (6-9 Jahre)
- Schüler (10-12 Jahre)
- Teenager (13-17 Jahre)
- Erwachsene (18+)
Abgrenzung zu Zielgruppe:
- Altersgruppe = didaktische Einstufung
- Zielgruppe = fachlicher Kontext
Beispiel:
- Übung kann für "Kinder" + "Schüler" geeignet sein (Altersgruppen)
- Und gleichzeitig zu Zielgruppe "Karate Breitensport Kinder" gehören
Übungs-Zuordnungslogik (§10)
Primäre vs. Sekundäre Zuordnung
Regel: Eine Übung hat genau EINE primäre Zuordnung pro Dimension.
Beispiel:
Übung: "Maai - Distanzübung"
Fokusbereiche:
- Karate (primär) ✓
- Selbstverteidigung (sekundär)
Stile:
- Shotokan (primär) ✓
- Goju-Ryu (sekundär)
- Wado-Ryu (sekundär)
Zielgruppen:
- Breitensportler (primär) ✓
- Leistungssportler (sekundär)
Altersgruppen:
- Schüler ✓
- Teenager ✓
- Erwachsene ✓
Fähigkeitsbezug (§10.8)
Übung trainiert MEHRERE Fähigkeiten:
Beispiel: "Kumite-Drill"
Hauptfähigkeiten:
- Distanzgefühl (Intensität: hoch)
- Timing (Intensität: hoch)
Nebenfähigkeiten:
- Beinarbeit (Intensität: mittel)
- Reaktionsfähigkeit (Intensität: mittel)
Attribute pro Fähigkeitsbezug:
- is_primary (Haupt- oder Nebenfähigkeit)
- intensity (niedrig/mittel/hoch)
- development_contribution (Entwicklungsbeitrag)
- required_level (Voraussetzung)
- target_level (Ziel-Level)
Trainingscharakter (§10.7)
Katalog:
- Grundlage (Einführung, Basisvermittlung)
- Aufbau (Aufbauendes Training)
- Vertiefung (Vertiefung, Spezialisierung)
- Festigung (Wiederholung, Festigung)
- Diagnose (Leistungsdiagnose, Test)
- Wettkampf (Wettkampfvorbereitung)
Bedeutung:
- Wichtig für Suche
- Wichtig für Trainingsplanung
- Wichtig für KI-Unterstützung (später)
Variantenlogik (§11.2)
Prinzip: Übung besteht aus Stammübung + optionale Varianten.
Beispiele für Varianten:
- Leicht / Mittel / Schwer
- Mit Partner / Ohne Partner
- Mit Hilfsmittel / Ohne Hilfsmittel
- Kindgerechte Variante
- Kurzvariante
- Fortgeschrittene Variante
Varianten-Attribute:
- Titel/Name
- Kurzbeschreibung
- Abweichende Durchführung
- Abweichende Dauer
- Abweichende Hilfsmittel
- Abweichender Fähigkeitsfokus
- Abweichende Zielgruppen
- Eigener Medienbezug
Methodenbezug (§11.5)
Prinzip: Genau EINE Hauptmethode, optional weitere Nebenmethoden.
Beispiele:
- Hauptmethode: Rollenspiel
- Nebenmethoden: Strukturierte Übung, Reflexion
Optional später:
- Sportmethodische Hauptmethode
- Didaktische Zusatzmethode
Qualitäts- und Bearbeitungsstatus (§11.3)
Statusstufen
Übungsstatus:
- Entwurf (in Arbeit)
- In Bearbeitung (aktiv gepflegt)
- Fachlich geprüft (Review OK)
- Freigegeben (produktiv nutzbar)
- Archiviert (nicht mehr aktiv)
Sichtbarkeitsebenen (§5.5)
Freigabeebenen:
- Privat (nur Ersteller)
- Für bestimmte Personen (später)
- Verein (alle Vereinsmitglieder)
- Sparte (nur bestimmte Sparte)
- Allgemein/Global (alle Nutzer)
- Offiziell (Standardinhalte)
Zusätzlich: Thematische Einschränkungen
- Karate-Inhalte
- Selbstverteidigungs-Inhalte
- Gewaltschutz-Inhalte
Admin-Workflows
Fokusbereich anlegen
- Admin navigiert zu Katalogverwaltung
- Wählt "Fokusbereiche"
- Klickt "Neu anlegen"
- Füllt aus: Name, Kürzel, Beschreibung, Farbe, Icon
- Speichert
- System validiert Eindeutigkeit (Name)
- Fokusbereich verfügbar für Stil-Zuordnung
Stil verschieben (zwischen Fokusbereichen)
Szenario: Goju-Ryu soll von "Karate" nach "Karate Traditional" verschoben werden.
Workflow:
- Admin wählt Stil "Goju-Ryu"
- Klickt "Verschieben"
- Wählt Ziel-Fokusbereich "Karate Traditional"
- System prüft:
- Ziel-Fokusbereich existiert
- Keine Namenskonflikte
- System aktualisiert:
training_styles.focus_area_id- Alle abhängigen Zielgruppen bleiben erhalten
- System loggt Änderung
- Erfolg-Meldung
Fokusbereich löschen (mit Schutz)
Szenario: "Judo" soll gelöscht werden.
Workflow:
- Admin wählt "Judo"
- Klickt "Löschen"
- System prüft Abhängigkeiten:
SELECT COUNT(*) FROM training_styles WHERE focus_area_id = :id SELECT COUNT(*) FROM exercise_focus_areas WHERE focus_area_id = :id - Falls verwendet:
- Dialog: "Fokusbereich kann nicht gelöscht werden. 5 Stile und 23 Übungen sind zugeordnet."
- Optionen:
- "Abbrechen"
- "Stile/Übungen umrouten" (Admin wählt Ziel)
- "Archivieren statt löschen"
- Falls nicht verwendet:
- Bestätigung: "Wirklich löschen? (Keine Abhängigkeiten)"
- Löschen durchführen
Zielgruppe umrouten
Szenario: Alle Übungen für "Kinder" sollen zu "Schüler" umgeleitet werden.
Workflow:
- Admin wählt Zielgruppe "Kinder"
- Klickt "Umrouten"
- Wählt Ziel: "Schüler"
- System zeigt Vorschau:
- "47 Übungen werden aktualisiert"
- Liste der betroffenen Übungen (mit Scroll)
- Admin bestätigt
- System führt Batch-Update aus:
UPDATE exercise_target_groups SET target_group_id = :new_id WHERE target_group_id = :old_id - Optional: Alte Zielgruppe löschen oder archivieren
- Erfolg-Meldung mit Log-Referenz
Nächste Schritte
- Hierarchie-UI Wireframes erstellen
- Admin-CRUD-Endpoints spezifizieren
- Cascade-Logik detaillieren
- Umrouten-Workflows implementieren
- Migration 008 Entwurf finalisieren
- Tests für alle Admin-Operationen
Letzte Aktualisierung: 2026-04-23
Verantwortlich: Claude Code
Review: Pending