Datenbank-Schema
MistelMonitor verfolgt einen Offline-First Ansatz. Das bedeutet, die primäre Datenbank ist die SQLite-Datenbank (MistelMonitor.db) auf dem Endgerät. Das Backend dient lediglich als Synchronisations-Hub.
Entity Relationship Diagram (ERD)
erDiagram
ActionYear ||--o{ Event : "enthält"
Event ||--|{ EventGroup : "hat"
Group ||--|{ EventGroup : "ist Teil von"
Event ||--o{ Zone : "hat Gebiete"
Event ||--o{ Report : "enthält Berichte"
Event ||--o{ Depot : "hat Sammelplätze"
Group ||--o{ Sector : "bearbeitet"
Group ||--o{ Report : "erstellt/bearbeitet"
Sector ||--o{ Report : "beinhaltet"
Report ||--o{ Image : "hat Beweisfotos"
%% Tabellen-Definitionen
ActionYear {
string id PK
int year
string name
string status
}
Event {
string id PK
string name
string description
date start_date
date end_date
string area_geojson "Polygon des Aktionsgebiets"
}
Group {
string id PK
string name "z.B. Team Rot"
}
EventGroup {
string event_id PK,FK
string group_id PK,FK
}
Sector {
string id PK
string group_id FK
string name "z.B. Wiese A"
string area_geojson "Polygon"
int light_trees "Geschätzt"
int medium_trees "Geschätzt"
int hard_trees "Geschätzt"
}
Zone {
string id PK
string event_id FK
string type "Sperrzone / Befallsgebiet"
string area_geojson "Polygon"
string severity "1-3 (bei Befall)"
}
Report {
string id PK
string event_id FK
string group_id FK
string sector_id FK
float latitude
float longitude
string tree_type
string severity "1-3"
string status "erfasst, geschnitten, kontrolliert"
string municipality "Automatisch ermittelt"
string district "Automatisch ermittelt"
}
Image {
string id PK
string report_id FK
string path "Lokaler Pfad"
bool is_synced
}
Depot {
string id PK
string event_id FK
float latitude
float longitude
float volume_estimate
string status "bereit, abgeholt"
}
Tabellen-Details
Reports (Berichte)
Die zentrale Tabelle. Jeder Eintrag repräsentiert einen erfassten Baum.
status: Der Lebenszyklus eines Baumes (reported->cleared->checked).severity: Befallsstärke (1=Leicht, 2=Mittel, 3=Stark).cleared_at: Zeitstempel des Schnitts.
Sectors (Wiesen)
Ein Sektor ist ein Arbeitsgebiet, das einem Group (Team) zugewiesen ist.
- Sektoren werden vom Admin im Dashboard automatisch oder manuell erstellt.
- Sie dienen dazu, große Events in handhabbare Aufgaben zu teilen.
Zones (Gebiete)
Zonen definieren spezielle Bereiche innerhalb eines Events.
- Sperrzonen (Rot): Naturschutzgebiete, Gefahrenbereiche. Werden vom Slicing-Algorithmus ausgeschlossen.
- Befallsgebiete (Grün/Orange): Markierungen von Clustern.
Synchronization
Jede Tabelle (außer statische Kataloge) besitzt die Felder:
is_synced(Boolean):0= Änderungen lokal vorhanden, Upload nötig.updated_at(Timestamp): Für Konfliktlösung (Last-Write-Wins).deleted_at(Timestamp): Für Soft-Delete Logik (Synchronisation von Löschungen).