Esquema de la base de datos
Mindwtr mantiene el modelo de datos local intencionadamente pequeño y fácil de sincronizar. La aplicación de escritorio usa SQLite como almacenamiento principal y la aplicación móvil usa el mismo esquema principal cuando SQLite está disponible.
La fuente de verdad del esquema de SQLite se encuentra en:
packages/core/src/sqlite-schema.tspackages/core/src/sqlite-adapter.ts
Esta página es un mapa práctico de ese esquema para quienes contribuyen al proyecto.
Tablas principales
tasks
Registros principales de tareas, incluidos el estado GTD, los campos de programación, los datos de listas de comprobación, los adjuntos, la ordenación y los metadatos de sincronización.
Columnas destacadas:
status: categoría GTD (inbox,next,waiting,someday,reference,done,archived)projectId,sectionId,areaId: relaciones con entidades superioresdueDate,startTime,reviewAt,completedAt: campos temporales del flujo de trabajorelativeStartOffset: regla de antelación respaldada por JSON que vuelve a calcularstartTimea partir dedueDaterepeatReminderMinutes: intervalo de repetición del recordatorio a la hora de vencimiento, limitado a los valores predefinidos de minutos admitidoslocation: contexto físico o de ubicación para búsquedas, tareas creadas desde el calendario y eventos enviados al calendariochecklist,attachments,tags,contexts,recurrence: campos respaldados por JSONshowFutureRecurrence: indicador booleano almacenado como entero; habilita en el Calendario una vista previa de la próxima repetición destinada únicamente a la planificacióndeletedAt,purgedAt: campos de registros de eliminación usados por la sincronizaciónrev,revBy,updatedAt: metadatos de fusión y conflictos
projects
Contenedores de proyectos y sus metadatos de planificación.
Columnas destacadas:
status:active,someday,waiting,archivedareaId: área superior opcionalorderNum: orden del proyecto dentro de un áreatagIds,attachments: campos respaldados por JSONsupportNotes,reviewAt: campos de planificación y revisióndeletedAt,rev,revBy,updatedAt: metadatos de sincronización
sections
Categorías de agrupación de tareas locales a cada proyecto.
Columnas destacadas:
projectId: proyecto propietarioorderNum: orden de la sección dentro del proyectoisCollapsed: estado persistente de la interfazdeletedAt,rev,revBy,updatedAt: metadatos de sincronización
areas
Áreas de enfoque GTD de nivel superior.
Columnas destacadas:
name,color,iconorderNum: orden manualdeletedAt,rev,revBy,updatedAt: metadatos de sincronización
people
Personas asignadas gestionadas para trabajo delegado o centrado en personas.
Columnas destacadas:
name: nombre visible usado por las sugerencias de personas asignadas a tareas y la búsquedaassigned:note,referenceLink: notas opcionales sobre la persona y URL de referenciadeletedAt,rev,revBy,updatedAt: metadatos de sincronización
settings
Almacén JSON de una sola fila para los ajustes de la aplicación.
id = 1data: objeto de ajustes serializado
saved_filters
Definiciones de filtros de Enfoque guardados que usa la vista Enfoque.
Columnas destacadas:
name,icon,view: metadatos de presentacióncriteria: criterios de filtrado serializadossortBy,sortOrder: orden opcional guardadocreatedAt,updatedAt: metadatos locales
calendar_sync
Tabla de correspondencias para la sincronización por envío con el calendario del dispositivo.
Columnas destacadas:
task_id: ID de la tarea de Mindwtrcalendar_event_id,calendar_id: identificadores del calendario nativoplatform: espacio de nombres de la plataforma para la correspondencialast_synced_at: marca de tiempo del último envío correcto
schema_migrations
Registra las versiones del esquema aplicadas para migraciones aditivas.
Tablas de búsqueda de texto completo
SQLite FTS5 permite realizar búsquedas locales en las aplicaciones de escritorio y móvil.
tasks_fts
Campos indexados para la búsqueda de tareas:
titledescriptiontagscontextslocation
projects_fts
Campos indexados para la búsqueda de proyectos:
titlesupportNotestagIdsareaTitle
Las tablas FTS se mantienen mediante desencadenadores en packages/core/src/sqlite-schema.ts.
Índices
El esquema incluye índices específicos para las rutas habituales de la interfaz y la sincronización:
- filtros por estado y eliminación de tareas
- consultas de tareas por fecha (
dueDate,startTime,reviewAt,completedAt) - consultas de agrupación de tareas (
projectId,areaId,sectionId) - consultas de proyectos por estado y orden del área
Las definiciones actuales de los índices se encuentran en SQLITE_INDEX_SCHEMA, dentro de packages/core/src/sqlite-schema.ts.
Reglas de validación
Los desencadenadores de SQLite rechazan al escribir los valores de enumeración no válidos y el JSON con formato incorrecto.
Las comprobaciones de validación actuales incluyen:
- valores de estado válidos para tareas y proyectos
- validez del JSON de las etiquetas, los contextos, las listas de comprobación, los adjuntos y la recurrencia de las tareas
- validez del JSON de los ID de etiquetas y los adjuntos de los proyectos
Esto mantiene la base de datos en disco alineada con el modelo de TypeScript y evita que una corrupción parcial eluda la capa del almacén.
Semántica de sincronización
Mindwtr no depende de eliminaciones relacionales en cascada para las entidades principales. El modelo de datos usa registros de eliminación lógica para que las eliminaciones puedan sincronizarse de forma segura entre dispositivos.
Consulta también:
- Arquitectura
- Datos y sincronización
- Algoritmo de sincronización
docs/adr/0001-sqlite-constraints.md
Notas para quienes contribuyen
- Es preferible realizar cambios aditivos en el esquema en lugar de reescrituras destructivas.
- Al añadir un campo, actualiza tanto el esquema como la lógica de correspondencia del adaptador.
- Si un campo nuevo afecta a las búsquedas, actualiza deliberadamente las tablas y los desencadenadores FTS.
- Al cambiar las restricciones o el comportamiento de eliminación, comprueba primero las implicaciones para la sincronización y los registros de eliminación.