Zum Inhalt springen

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.ts
  • packages/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 Beziehungen
  • dueDate, startTime, reviewAt, completedAt: zeitbezogene Arbeitsablauffelder
  • relativeStartOffset: JSON-gestützte Vorlaufregel, die startTime anhand von dueDate neu berechnet
  • repeatReminderMinutes: Wiederholungsintervall für Erinnerungen zur Fälligkeitszeit, beschränkt auf unterstützte voreingestellte Minutenwerte
  • location: physischer/örtlicher Kontext für Suche, vom Kalender erstellte Aufgaben und in den Kalender übertragene Ereignisse
  • checklist, attachments, tags, contexts, recurrence: JSON-gestützte Felder
  • showFutureRecurrence: als Ganzzahl gespeichertes boolesches Flag; aktiviert im Kalender eine ausschließlich zur Planung dienende Vorschau des nächsten Vorkommens
  • deletedAt, purgedAt: von der Synchronisierung verwendete Tombstone-Felder
  • rev, revBy, updatedAt: Metadaten für Zusammenführung/Konflikte

projects ​

Projektcontainer und ihre Planungsmetadaten.

Wichtige Spalten:

  • status: active, someday, waiting, archived
  • areaId: optionaler übergeordneter Bereich
  • orderNum: Projektreihenfolge innerhalb eines Bereichs
  • tagIds, attachments: JSON-gestützte Felder
  • supportNotes, reviewAt: Planungs-/Durchsichtsfelder
  • deletedAt, rev, revBy, updatedAt: Synchronisierungsmetadaten

sections ​

Projektinterne Gruppierungsspuren für Aufgaben.

Wichtige Spalten:

  • projectId: zugehöriges Projekt
  • orderNum: Abschnittsreihenfolge innerhalb des Projekts
  • isCollapsed: persistierter UI-Zustand
  • deletedAt, rev, revBy, updatedAt: Synchronisierungsmetadaten

areas ​

Übergeordnete GTD-Fokusbereiche.

Wichtige Spalten:

  • name, color, icon
  • orderNum: manuelle Reihenfolge
  • deletedAt, 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 Suche assigned: verwendet wird
  • note, referenceLink: optionale Notizen zur Person und Referenz-URL
  • deletedAt, rev, revBy, updatedAt: Synchronisierungsmetadaten

settings ​

Einzeiliger JSON-Speicher für App-Einstellungen.

  • id = 1
  • data: serialisiertes Einstellungsobjekt

saved_filters ​

Gespeicherte Definitionen von Fokusfiltern, die von der Ansicht „Fokus“ verwendet werden.

Wichtige Spalten:

  • name, icon, view: Anzeigemetadaten
  • criteria: serialisierte Filterkriterien
  • sortBy, sortOrder, groupBy: optionale gespeicherte Sortierung und Gruppierung
  • createdAt, updatedAt, deletedAt: Zeitstempel und Metadaten für logisches Löschen

calendar_sync ​

Zuordnungstabelle für die Push-Synchronisierung mit dem Gerätekalender.

Wichtige Spalten:

  • task_id: Mindwtr-Aufgaben-ID
  • calendar_event_id, calendar_id: native Kalenderkennungen
  • platform: Plattformnamensraum für die Zuordnung
  • last_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:

  • title
  • description
  • tags
  • contexts
  • location
  • checklist
  • assignedTo

projects_fts ​

Indizierte Suchfelder für Projekte:

  • title
  • supportNotes
  • tagIds
  • areaTitle

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:


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.

Mindwtr ist kostenlos, quelloffen und lokal orientiert.
Getting Things Done und GTD sind eingetragene Marken der David Allen Company. Mindwtr ist weder mit der David Allen Company verbunden noch wird es von ihr unterstützt oder gesponsert.