Preferir tablas STRICT en SQLite
Tablas STRICT vs. comportamiento predeterminado
- Muchos sostienen que las tablas
STRICTdeberían ser el valor predeterminado, o incluso el único modo en versiones futuras. - Otros responden que
STRICTes solo una preferencia; el comportamiento actual de SQLite es intencional y encaja con su nicho. - Algunos sugieren una pragma global o “conjuntos predeterminados”/predeterminados versionados (por ejemplo, “usar los valores predeterminados de 2026.1”) para habilitar la estricticidad y otras opciones más seguras sin romper código القديم.
Filosofía e historia de tipado de SQLite
- SQLite comenzó en un mundo de “todo es una cadena/número” (Tcl, almacenamiento al estilo dbm), y su tipado dinámico en gran medida persistió hasta SQLite 3.
- La documentación del proyecto defiende explícitamente el tipado flexible; los críticos en el hilo a menudo encuentran estas justificaciones poco convincentes o hechas a posteriori.
- Los defensores enfatizan SQLite como “competencia para fopen”, no para Oracle/Postgres, y ven las comprobaciones estrictas en tiempo de ejecución como una sobrecarga opcional cuando puedes demostrar la corrección en el código de la aplicación.
Preocupaciones prácticas: tipos, fechas, booleanos
- Quejas comunes:
- Los tipos de columna no se imponen por defecto.
- Falta de tipos nativos
DATE/TIMESTAMP/BOOL, especialmente incómodo en modoSTRICT. - Sorpresas como columnas de enteros aceptando texto arbitrario, y bytes NUL en cadenas afectando funciones como
length().
- Soluciones alternativas: guardar fechas como texto o marcas de tiempo Unix; booleanos como enteros o bitfields; imponer con restricciones
CHECK.
Compatibilidad hacia atrás y valores predeterminados
- SQLite muy rara vez cambia los valores predeterminados (por ejemplo, claves foráneas desactivadas por defecto, WAL desactivado por defecto) para evitar romper software existente.
- Algunos ven esto como responsable; otros lo ven como obligar a los nuevos usuarios a aprender y desactivar “footguns” uno por uno.
- Hay debate sobre si aceptar tipos de forma sorprendente es un peor modo de fallo que romper código antiguo durante las actualizaciones.
Migraciones, herramientas y modos
- Las migraciones de esquema en SQLite se consideran engorrosas; herramientas y patrones de terceros intentan simplificarlas.
- Las tablas
STRICTno pueden activarse o desactivarse con un simpleALTER; el enfoque típico es recrear y copiar, aunque algunas herramientas lo automatizan. - Las opiniones divergen sobre si el modo estricto mejora las integraciones con lenguajes de nivel superior (p. ej., ORMs de Rust/Go) o complica el mapeo de tipos.