Datenbankschema
Mindwtr hält das lokale Datenmodell bewusst klein und synchronisierungsfreundlich. Die Desktop-App verwendet SQLite als primären Speicher; auf Mobilgeräten kommt dasselbe Core-Schema zum Einsatz, sofern SQLite verfügbar ist.
Die maßgebliche Quelle für das SQLite-Schema befindet sich in:
packages/core/src/sqlite-schema.tspackages/core/src/sqlite-adapter.ts
Diese Seite bietet Mitwirkenden eine praktische Übersicht über dieses Schema.
Core-Tabellen
tasks
Primäre Aufgabendatensätze einschließlich GTD-Status, Planungsfeldern, Checklisten-Daten, Anhängen, Reihenfolge und Synchronisierungsmetadaten.
Wichtige Spalten:
status: GTD-Spur (inbox,next,waiting,someday,reference,done,archived)projectId,sectionId,areaId: übergeordnete BeziehungendueDate,startTime,reviewAt,completedAt: zeitbezogene ArbeitsablauffelderrelativeStartOffset: JSON-gestützte Vorlaufregel, diestartTimeanhand vondueDateneu berechnetrepeatReminderMinutes: Wiederholungsintervall für Erinnerungen zur Fälligkeitszeit, beschränkt auf unterstützte voreingestellte Minutenwertelocation: physischer/örtlicher Kontext für Suche, vom Kalender erstellte Aufgaben und in den Kalender übertragene Ereignissechecklist,attachments,tags,contexts,recurrence: JSON-gestützte FeldershowFutureRecurrence: als Ganzzahl gespeichertes boolesches Flag; aktiviert im Kalender eine ausschließlich zur Planung dienende Vorschau des nächsten VorkommensdeletedAt,purgedAt: von der Synchronisierung verwendete Tombstone-Felderrev,revBy,updatedAt: Metadaten für Zusammenführung/Konflikte
projects
Projektcontainer und ihre Planungsmetadaten.
Wichtige Spalten:
status:active,someday,waiting,archivedareaId: optionaler übergeordneter BereichorderNum: Projektreihenfolge innerhalb eines BereichstagIds,attachments: JSON-gestützte FeldersupportNotes,reviewAt: Planungs-/DurchsichtsfelderdeletedAt,rev,revBy,updatedAt: Synchronisierungsmetadaten
sections
Projektinterne Gruppierungsspuren für Aufgaben.
Wichtige Spalten:
projectId: zugehöriges ProjektorderNum: Abschnittsreihenfolge innerhalb des ProjektsisCollapsed: persistierter UI-ZustanddeletedAt,rev,revBy,updatedAt: Synchronisierungsmetadaten
areas
Übergeordnete GTD-Fokusbereiche.
Wichtige Spalten:
name,color,iconorderNum: manuelle ReihenfolgedeletedAt,rev,revBy,updatedAt: Synchronisierungsmetadaten
people
Verwaltete zugewiesene Personen für delegierte oder personenbezogene Arbeit.
Wichtige Spalten:
name: Anzeigename, der für Vorschläge zu Aufgabenzuweisungen und die Sucheassigned:verwendet wirdnote,referenceLink: optionale Notizen zur Person und Referenz-URLdeletedAt,rev,revBy,updatedAt: Synchronisierungsmetadaten
settings
Einzeiliger JSON-Speicher für App-Einstellungen.
id = 1data: serialisiertes Einstellungsobjekt
saved_filters
Gespeicherte Definitionen von Fokusfiltern, die von der Ansicht „Fokus“ verwendet werden.
Wichtige Spalten:
name,icon,view: Anzeigemetadatencriteria: serialisierte FilterkriteriensortBy,sortOrder: optionale gespeicherte SortierungcreatedAt,updatedAt: lokale Metadaten
calendar_sync
Zuordnungstabelle für die Push-Synchronisierung mit dem Gerätekalender.
Wichtige Spalten:
task_id: Mindwtr-Aufgaben-IDcalendar_event_id,calendar_id: native Kalenderkennungenplatform: Plattformnamensraum für die Zuordnunglast_synced_at: Zeitstempel der letzten erfolgreichen Übertragung
schema_migrations
Verzeichnet angewandte Schemaversionen für additive Migrationen.
Volltextsuchtabellen
SQLite FTS5 stellt die lokale Suche auf Desktop und Mobilgeräten bereit.
tasks_fts
Indizierte Suchfelder für Aufgaben:
titledescriptiontagscontextslocation
projects_fts
Indizierte Suchfelder für Projekte:
titlesupportNotestagIdsareaTitle
FTS-Tabellen werden durch Trigger in packages/core/src/sqlite-schema.ts gepflegt.
Indizes
Das Schema enthält gezielte Indizes für die üblichen UI- und Synchronisierungspfade:
- Filter nach Aufgabenstatus und Löschung
- Datumsabfragen für Aufgaben (
dueDate,startTime,reviewAt,completedAt) - Gruppierungsabfragen für Aufgaben (
projectId,areaId,sectionId) - Abfragen nach Projektstatus und Bereichsreihenfolge
Die aktuellen Indexdefinitionen befinden sich in SQLITE_INDEX_SCHEMA in packages/core/src/sqlite-schema.ts.
Validierungsregeln
SQLite-Trigger lehnen beim Schreiben ungültige Enum-Werte und fehlerhaftes JSON ab.
Die aktuellen Validierungsprüfungen umfassen:
- gültige Statuswerte für Aufgaben/Projekte
- gültiges JSON für Tags, Kontexte, Checklisten, Anhänge und Wiederholungen von Aufgaben
- gültiges JSON für Tag-IDs und Anhänge von Projekten
Dadurch bleibt die Datenbank auf dem Datenträger mit dem TypeScript-Modell abgestimmt, und eine teilweise Beschädigung kann die Speicherschicht nicht umgehen.
Synchronisierungssemantik
Mindwtr verlässt sich bei Core-Entitäten nicht auf kaskadierende relationale Löschvorgänge. Das Datenmodell verwendet Tombstones für vorläufiges Löschen, damit Löschungen sicher zwischen Geräten synchronisiert werden können.
Siehe auch:
- Architektur
- Daten und Synchronisierung
- Synchronisierungsalgorithmus
docs/adr/0001-sqlite-constraints.md
Hinweise für Mitwirkende
- Ziehen Sie additive Schemaänderungen destruktiven Neufassungen vor.
- Aktualisieren Sie beim Hinzufügen eines Feldes sowohl das Schema als auch die Zuordnungslogik des Adapters.
- Wenn ein neues Feld die Suche beeinflusst, aktualisieren Sie FTS-Tabellen/-Trigger bewusst.
- Prüfen Sie bei Änderungen an Einschränkungen oder Löschverhalten zuerst die Auswirkungen auf Synchronisierung/Tombstones.