update er diagram
This commit is contained in:
parent
bb8949af76
commit
29ae840701
1 changed files with 167 additions and 31 deletions
198
ER_Diagramm.md
198
ER_Diagramm.md
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue