update er diagram

This commit is contained in:
Maximilian 2025-06-10 09:15:00 +02:00
parent bb8949af76
commit 29ae840701

View file

@ -7,9 +7,16 @@ erDiagram
User ||--o{ FallenBird : creates User ||--o{ FallenBird : creates
User ||--o{ Costs : creates User ||--o{ Costs : creates
User ||--o{ Emailadress : creates User ||--o{ Emailadress : creates
User ||--o{ Bird : creates
User ||--o{ Aviary : creates
User ||--o{ Contact : creates
Bird ||--o{ FallenBird : "is type of" Bird ||--o{ FallenBird : "is type of"
Bird ||--o{ BirdEmail : "has emails for" Bird ||--o{ BirdEmail : "has emails for"
Bird ||--o{ Costs : "can have costs"
Bird }|--|| BirdStatus : "has status"
Bird }|--|| Circumstance : "has circumstances"
Bird }|--|| Aviary : "housed in"
Circumstance ||--o{ FallenBird : "describes finding" Circumstance ||--o{ FallenBird : "describes finding"
BirdStatus ||--o{ FallenBird : "has status" BirdStatus ||--o{ FallenBird : "has status"
@ -41,12 +48,16 @@ erDiagram
string sex string sex
date date_found date date_found
string place string place
date death_date
string cause_of_death
text notes
int created_by_id FK
datetime created datetime created
datetime updated datetime updated
uuid find_circumstances_id FK bigint find_circumstances_id FK
string diagnostic_finding string diagnostic_finding
int user_id FK int user_id FK
int status_id FK bigint status_id FK
uuid aviary_id FK uuid aviary_id FK
string sent_to string sent_to
text comment text comment
@ -57,43 +68,90 @@ erDiagram
bigint id PK bigint id PK
string name UK string name UK
richtext description richtext description
string species
string age_group
string gender
decimal weight
decimal wing_span
date found_date
string found_location
string finder_name
string finder_phone
string finder_email
uuid aviary_id FK
bigint status_id FK
bigint circumstance_id FK
text notes
int created_by_id FK
datetime created
datetime updated
boolean melden_an_naturschutzbehoerde
boolean melden_an_jagdbehoerde
boolean melden_an_wildvogelhilfe_team
} }
BirdStatus { BirdStatus {
bigint id PK bigint id PK
string name
string description UK string description UK
} }
Circumstance { Circumstance {
bigint id PK bigint id PK
string name
string description string description
} }
Aviary { Aviary {
uuid id PK uuid id PK
string description UK string name
string location
string description
int capacity
int current_occupancy
string contact_person
string contact_phone
string contact_email
text notes
int created_by_id FK
string condition string condition
date last_ward_round date last_ward_round
string comment string comment
datetime created_at
datetime updated_at
} }
Costs { Costs {
uuid id PK uuid id PK
bigint bird_id FK
uuid id_bird_id FK uuid id_bird_id FK
decimal costs string description
date created decimal amount
string comment string category
date date
text notes
int user_id FK int user_id FK
datetime created
datetime updated
} }
Contact { Contact {
uuid id PK uuid id PK
string name string first_name
string phone string last_name
int created_by_id FK
string email string email
string phone
string address string address
string comment string city
string postal_code
string country
text notes
boolean is_active
string name
uuid tag_id_id FK uuid tag_id_id FK
datetime created_at
datetime updated_at
} }
ContactTag { ContactTag {
@ -107,6 +165,9 @@ erDiagram
datetime created_at datetime created_at
datetime updated_at datetime updated_at
int user_id FK int user_id FK
boolean is_naturschutzbehoerde
boolean is_jagdbehoerde
boolean is_wildvogelhilfe_team
} }
BirdEmail { BirdEmail {
@ -121,51 +182,78 @@ erDiagram
### Kern-Entitäten ### Kern-Entitäten
#### `FallenBird` (Patienten) #### `FallenBird` (Patienten)
- **Zweck**: Zentrale Entität für gefundene/verletzte Vögel - **Zweck**: Zentrale Entität für gefundene/verletzte Vögel (individuelle Patienten)
- **Primärschlüssel**: UUID - **Primärschlüssel**: UUID
- **Neue Features**:
- Todesdatum und Todesursache für verstorbene Tiere
- Erweiterte Notizen-Funktionalität
- Verbesserte Audit-Trails
- **Beziehungen**: - **Beziehungen**:
- Gehört zu einem `Bird` (Vogelart) - Gehört zu einem `Bird` (Vogelart)
- Hat einen `BirdStatus` (Status) - Hat einen `BirdStatus` (Status)
- Wird von einem `User` erstellt - Wird von einem `User` erstellt und bearbeitet
- Kann in einer `Aviary` (Voliere) untergebracht sein - Kann in einer `Aviary` (Voliere) untergebracht sein
- Hat `Circumstance` (Fundumstände) - Hat `Circumstance` (Fundumstände)
- Kann `Costs` (Kosten) haben - Kann `Costs` (Kosten) haben
#### `Bird` (Vogelarten) #### `Bird` (Vogelarten)
- **Zweck**: Katalog der verschiedenen Vogelarten - **Zweck**: Katalog der verschiedenen Vogelarten mit umfassenden Metadaten
- **Primärschlüssel**: BigInt - **Primärschlüssel**: BigInt
- **Eindeutig**: Name - **Eindeutig**: Name
- **Beziehungen**: Hat viele `FallenBird` Instanzen - **Neue Features**:
- Erweiterte physische Eigenschaften (Gewicht, Flügelspannweite)
- Finder-Informationen (Name, Telefon, E-Mail)
- Benachrichtigungseinstellungen für Behörden
- Beziehungen zu Status, Fundumständen und Volieren
- **Beziehungen**: Hat viele `FallenBird` Instanzen, kann Costs haben
#### `Aviary` (Volieren) #### `Aviary` (Volieren)
- **Zweck**: Unterbringungsplätze für die Vögel - **Zweck**: Unterbringungsplätze für die Vögel mit erweiterten Verwaltungsfunktionen
- **Primärschlüssel**: UUID - **Primärschlüssel**: UUID
- **Neue Features**:
- Name und Standort-Informationen
- Kapazitäts- und Belegungsmanagement
- Kontaktperson-Details (Person, Telefon, E-Mail)
- Audit-Trail (created_by, timestamps)
- **Status**: Offen, Geschlossen, Gesperrt - **Status**: Offen, Geschlossen, Gesperrt
- **Beziehungen**: Kann mehrere `FallenBird` beherbergen - **Beziehungen**: Kann mehrere `FallenBird` beherbergen, gehört zu einem `User`
### Referenz-Tabellen ### Referenz-Tabellen
#### `BirdStatus` (Patientenstatus) #### `BirdStatus` (Patientenstatus)
- **Zweck**: Status-Katalog (z.B. "In Behandlung", "Freigelassen", "Verstorben") - **Zweck**: Status-Katalog (z.B. "In Behandlung", "Freigelassen", "Verstorben")
- **Primärschlüssel**: BigInt - **Primärschlüssel**: BigInt
- **Neue Features**: Zusätzliches `name` Feld für interne Bezeichnungen
- **Eindeutig**: Description
#### `Circumstance` (Fundumstände) #### `Circumstance` (Fundumstände)
- **Zweck**: Katalog der Fundumstände (z.B. "Verletzt gefunden", "Aus Nest gefallen") - **Zweck**: Katalog der Fundumstände (z.B. "Verletzt gefunden", "Aus Nest gefallen")
- **Primärschlüssel**: BigInt - **Primärschlüssel**: BigInt
- **Neue Features**: Zusätzliches `name` Feld für interne Bezeichnungen
### Kosten-Management ### Kosten-Management
#### `Costs` (Kosten) #### `Costs` (Kosten)
- **Zweck**: Kostenerfassung pro Patient - **Zweck**: Erweiterte Kostenerfassung pro Patient oder Vogelart
- **Primärschlüssel**: UUID - **Primärschlüssel**: UUID
- **Beziehungen**: Gehört zu einem `FallenBird` und wird von einem `User` erstellt - **Neue Features**:
- Duale Beziehungen: zu `Bird` (Vogelart) und `FallenBird` (Patient)
- Kategorisierung (medizinisch, Nahrung, Ausrüstung, Transport, Sonstiges)
- Detaillierte Beschreibungen und Notizen
- Verbesserte Audit-Trails
- **Beziehungen**: Gehört zu einem `FallenBird` oder `Bird` und wird von einem `User` erstellt
### Kontakt-Management ### Kontakt-Management
#### `Contact` (Kontakte) #### `Contact` (Kontakte)
- **Zweck**: Kontaktdaten (Finder, Tierärzte, etc.) - **Zweck**: Erweiterte Kontaktdaten (Finder, Tierärzte, etc.)
- **Primärschlüssel**: UUID - **Primärschlüssel**: UUID
- **Beziehungen**: Kann mit `ContactTag` kategorisiert werden - **Neue Features**:
- Strukturierte Namensfelder (Vor- und Nachname)
- Vollständige Adressinformationen (Stadt, PLZ, Land)
- Aktivitätsstatus für Kontakte
- Benutzer-Zuordnung und Audit-Trail
- **Beziehungen**: Kann mit `ContactTag` kategorisiert werden, gehört zu einem `User`
#### `ContactTag` (Kontakt-Tags) #### `ContactTag` (Kontakt-Tags)
- **Zweck**: Kategorisierung von Kontakten - **Zweck**: Kategorisierung von Kontakten
@ -174,13 +262,18 @@ erDiagram
### E-Mail-System ### E-Mail-System
#### `Emailadress` (E-Mail-Adressen) #### `Emailadress` (E-Mail-Adressen)
- **Zweck**: Verwaltung von E-Mail-Adressen - **Zweck**: Erweiterte Verwaltung von E-Mail-Adressen mit Benachrichtigungskategorien
- **Primärschlüssel**: BigInt - **Primärschlüssel**: BigInt
- **Neue Features**:
- Benachrichtigungskategorien (Naturschutzbehörde, Jagdbehörde, Wildvogelhilfe-Team)
- Automatische Zuordnung basierend auf Vogelart-Einstellungen
- Standard-Aktivierung für Naturschutz und Wildvogelhilfe
- **Beziehungen**: Gehört zu einem `User` - **Beziehungen**: Gehört zu einem `User`
#### `BirdEmail` (Vogel-E-Mail-Verknüpfung) #### `BirdEmail` (Vogel-E-Mail-Verknüpfung)
- **Zweck**: Many-to-Many Beziehung zwischen Vögeln und E-Mail-Adressen - **Zweck**: Many-to-Many Beziehung zwischen Vögeln und E-Mail-Adressen
- **Primärschlüssel**: BigInt - **Primärschlüssel**: BigInt
- **Hinweis**: Wird durch die neuen Benachrichtigungsfelder in `Bird` und `Emailadress` ersetzt
## Datenbank-Design-Prinzipien ## Datenbank-Design-Prinzipien
@ -190,22 +283,65 @@ erDiagram
### Beziehungstypen ### Beziehungstypen
- **1:N**: Die meisten Beziehungen (User zu FallenBird, Bird zu FallenBird, etc.) - **1:N**: Die meisten Beziehungen (User zu FallenBird, Bird zu FallenBird, etc.)
- **M:N**: `Bird``Emailadress` über `BirdEmail` - **M:N**: Ersetzt durch direkte Benachrichtigungsfelder in Models
- **Optional**: `FallenBird.aviary` (kann NULL sein) - **Optional**: Viele Felder unterstützen NULL-Werte für Flexibilität
- **Duale Beziehungen**: `Costs` kann sowohl zu `Bird` als auch zu `FallenBird` gehören
### Besondere Eigenschaften ### Besondere Eigenschaften
- **Soft References**: `Costs.id_bird` mit `SET_NULL` für Datenschutz - **Soft References**: `Costs.id_bird` und `Costs.bird` mit `SET_NULL` für Datenschutz
- **Audit Trail**: `created`/`updated` Felder in wichtigen Tabellen - **Audit Trail**: Umfassende `created`/`updated` Felder mit Benutzer-Zuordnung
- **Rich Text**: `Bird.description` für formatierte Beschreibungen - **Rich Text**: `Bird.description` für formatierte Beschreibungen mit CKEditor 5
- **JSON/Array Fields**: Potentiell für Kosten-Historie (siehe `costs_default()` Funktion) - **Benachrichtigungssystem**: Automatische E-Mail-Benachrichtigungen basierend auf Vogelart und E-Mail-Kategorien
- **Kategorisierung**: Kosten-Kategorien und Kontakt-Tags für bessere Organisation
- **Flexibilität**: Duale Beziehungen ermöglichen Kosten auf Vogelart- und Patientenebene
## Geschäftslogik-Unterstützung ## Geschäftslogik-Unterstützung
Das Schema unterstützt folgende Geschäftsprozesse: Das Schema unterstützt folgende Geschäftsprozesse:
1. **Patientenaufnahme**: FallenBird → Bird, Circumstance, User 1. **Patientenaufnahme**: FallenBird → Bird, Circumstance, User
2. **Unterbringung**: FallenBird → Aviary 2. **Vogelartverwaltung**: Bird mit umfassenden Metadaten und Benachrichtigungseinstellungen
3. **Statusverfolgung**: FallenBird → BirdStatus 3. **Unterbringung**: FallenBird → Aviary mit Kapazitätsmanagement
4. **Kostenverfolgung**: FallenBird → Costs 4. **Statusverfolgung**: FallenBird → BirdStatus
5. **Kontaktverwaltung**: Contact → ContactTag 5. **Erweiterte Kostenverfolgung**: FallenBird/Bird → Costs mit Kategorisierung
6. **E-Mail-Benachrichtigungen**: Bird → BirdEmail → Emailadress 6. **Kontaktverwaltung**: Contact → ContactTag mit strukturierten Adressdaten
7. **Intelligente E-Mail-Benachrichtigungen**:
- Automatische Benachrichtigung basierend auf Vogelart-Einstellungen
- Kategorisierte E-Mail-Adressen (Naturschutz, Jagd, Wildvogelhilfe)
- Standard-Aktivierung für wichtige Kategorien
8. **Audit und Compliance**: Umfassende Benutzer-Zuordnung und Zeitstempel
## Änderungsprotokoll (Stand: Juni 2025)
### Wesentliche Erweiterungen
#### Bird Model (Vogelarten)
- **Erweiterte Metadaten**: Hinzufügung von physischen Eigenschaften (Gewicht, Flügelspannweite)
- **Finder-Informationen**: Vollständige Kontaktdaten für Finder
- **Benachrichtigungssystem**: Automatische E-Mail-Benachrichtigungen für Behörden
- **Beziehungserweiterungen**: Verbindungen zu Status, Fundumständen und Volieren
#### E-Mail-System
- **Kategorisierte E-Mail-Adressen**: Naturschutz, Jagd, Wildvogelhilfe-Team
- **Intelligente Standardwerte**: Naturschutz und Wildvogelhilfe standardmäßig aktiviert
- **Automatische Benachrichtigungen**: Basierend auf Vogelart-Einstellungen
#### Kosten-Management
- **Duale Beziehungen**: Kosten können sowohl Vogelarten als auch Patienten zugeordnet werden
- **Kategorisierung**: Medizinisch, Nahrung, Ausrüstung, Transport, Sonstiges
- **Erweiterte Dokumentation**: Detaillierte Beschreibungen und Notizen
#### Volieren-Management
- **Kapazitätsverwaltung**: Überwachung von Belegung und Kapazität
- **Kontaktinformationen**: Ansprechpartner mit vollständigen Kontaktdaten
- **Erweiterte Metadaten**: Name, Standort und detaillierte Beschreibungen
#### Kontakt-System
- **Strukturierte Daten**: Separate Vor- und Nachnamenfelder
- **Vollständige Adressen**: Stadt, PLZ, Land-Informationen
- **Aktivitätsstatus**: Aktive/Inaktive Kontakte
### Datenintegrität und Compliance
- **Umfassende Audit-Trails**: Benutzer-Zuordnung und Zeitstempel in allen wichtigen Tabellen
- **Flexible Beziehungen**: NULL-fähige Fremdschlüssel für optionale Beziehungen
- **Soft-Delete-Mechanismen**: SET_NULL für wichtige Beziehungen zum Datenschutz