BREAKING CHANGE: Datenmodell-Umstellung von 1:1 auf M:N Beziehungen Migration 008: - Zielgruppen-Tabelle (target_groups) mit training_style_id Hierarchie - M:N Zuordnungstabellen: exercise_focus_areas, exercise_styles, exercise_target_groups - Altersgruppen-Dimension (exercise_age_groups) mit CHECK constraint - Hierarchische Struktur: training_styles.focus_area_id → focus_areas - Daten-Migration: Bestehende 1:1 Beziehungen zu M:N mit is_primary=true - Seed-Daten: Beispiel-Zielgruppen für Shotokan Architektur: - Smart Cascade-Logik (RESTRICT, Rerouting, Move) vorbereitet - Legacy-Spalten (focus_area_id, training_style_id) bleiben zur Rückwärtskompatibilität - Primary/Secondary Assignments via is_primary Flag Dokumentation: - .claude/docs/technical/DATABASE_SCHEMA.md (kontinuierlich gepflegt) - .claude/docs/functional/DOMAIN_MODEL.md (fachliche Anforderungen) - Migrations-Historie aktualisiert version: 0.3.0 (backend + frontend) modules: exercises 0.3.0, catalogs 1.1.0 DB_SCHEMA_VERSION: 20260423 Konzept: shinkan_anforderungsdokument_entwurf.md (§8.1, §8.3, §10.7)
404 lines
9.2 KiB
Markdown
404 lines
9.2 KiB
Markdown
# Shinkan Jinkendo - Fachliches Domänenmodell
|
|
|
|
**Version:** 0.2.0
|
|
**Stand:** 2026-04-23
|
|
**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:**
|
|
```
|
|
Fokusbereich (Sportart/Bereich)
|
|
└─ Stil
|
|
└─ Zielgruppe
|
|
```
|
|
|
|
**Beispiele:**
|
|
```
|
|
Karate
|
|
├─ Shotokan
|
|
│ ├─ Breitensportler
|
|
│ ├─ Leistungssportler
|
|
│ └─ Kinder
|
|
├─ Goju-Ryu
|
|
│ ├─ Erwachsene
|
|
│ └─ Jugendliche
|
|
└─ Wado-Ryu
|
|
└─ Gemischt
|
|
|
|
Selbstverteidigung
|
|
├─ Erwachsene
|
|
│ ├─ Männer
|
|
│ ├─ Frauen
|
|
│ └─ Gemischt
|
|
└─ Kinder
|
|
└─ 6-12 Jahre
|
|
|
|
Gewaltschutz
|
|
├─ Frauen
|
|
├─ Kinder
|
|
└─ Senioren
|
|
```
|
|
|
|
**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:** Konkrete Trainingsempfänger-Gruppe innerhalb eines Stils.
|
|
|
|
**Beispiele:**
|
|
- Breitensportler
|
|
- Leistungssportler
|
|
- Kinder (6-12 Jahre)
|
|
- Jugendliche (13-17 Jahre)
|
|
- Erwachsene
|
|
- Frauen
|
|
- Senioren
|
|
- Gemischt
|
|
|
|
**Hierarchie:**
|
|
- Gehört zu genau EINEM Trainingsstil
|
|
- Kann Altersbereich definieren
|
|
|
|
**Eigenschaften:**
|
|
- Name, Beschreibung
|
|
- Stil-Zuordnung
|
|
- Optionale Altersangabe (min_age, max_age)
|
|
- Status
|
|
|
|
**Verwaltung:**
|
|
- Admin-Level: Systemadmin, Vereinsadmin, Spartenadmin
|
|
- CRUD: Voll administrierbar
|
|
- Verschieben: Zwischen Stilen möglich
|
|
- Löschen: Cascade oder Restrict (konfigurierbar)
|
|
|
|
### 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
|
|
|
|
1. Admin navigiert zu Katalogverwaltung
|
|
2. Wählt "Fokusbereiche"
|
|
3. Klickt "Neu anlegen"
|
|
4. Füllt aus: Name, Kürzel, Beschreibung, Farbe, Icon
|
|
5. Speichert
|
|
6. System validiert Eindeutigkeit (Name)
|
|
7. Fokusbereich verfügbar für Stil-Zuordnung
|
|
|
|
### Stil verschieben (zwischen Fokusbereichen)
|
|
|
|
**Szenario:** Goju-Ryu soll von "Karate" nach "Karate Traditional" verschoben werden.
|
|
|
|
**Workflow:**
|
|
1. Admin wählt Stil "Goju-Ryu"
|
|
2. Klickt "Verschieben"
|
|
3. Wählt Ziel-Fokusbereich "Karate Traditional"
|
|
4. System prüft:
|
|
- Ziel-Fokusbereich existiert
|
|
- Keine Namenskonflikte
|
|
5. System aktualisiert:
|
|
- `training_styles.focus_area_id`
|
|
- Alle abhängigen Zielgruppen bleiben erhalten
|
|
6. System loggt Änderung
|
|
7. Erfolg-Meldung
|
|
|
|
### Fokusbereich löschen (mit Schutz)
|
|
|
|
**Szenario:** "Judo" soll gelöscht werden.
|
|
|
|
**Workflow:**
|
|
1. Admin wählt "Judo"
|
|
2. Klickt "Löschen"
|
|
3. System prüft Abhängigkeiten:
|
|
```sql
|
|
SELECT COUNT(*) FROM training_styles WHERE focus_area_id = :id
|
|
SELECT COUNT(*) FROM exercise_focus_areas WHERE focus_area_id = :id
|
|
```
|
|
4. **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"
|
|
5. **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:**
|
|
1. Admin wählt Zielgruppe "Kinder"
|
|
2. Klickt "Umrouten"
|
|
3. Wählt Ziel: "Schüler"
|
|
4. System zeigt Vorschau:
|
|
- "47 Übungen werden aktualisiert"
|
|
- Liste der betroffenen Übungen (mit Scroll)
|
|
5. Admin bestätigt
|
|
6. System führt Batch-Update aus:
|
|
```sql
|
|
UPDATE exercise_target_groups
|
|
SET target_group_id = :new_id
|
|
WHERE target_group_id = :old_id
|
|
```
|
|
7. Optional: Alte Zielgruppe löschen oder archivieren
|
|
8. 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
|