Campo JSONB
El campo JSONB (etiquetado como jsonb en la interfaz) se utiliza para almacenar conjuntos de datos no estructurados o semiestructurados, como Objetos {...} o Arrays [...].
A diferencia de un campo de Texto estándar, este campo utiliza el formato JSONB (JSON Binario). Esto significa que la base de datos verifica que la entrada sea JSON válido antes de guardarla, y almacena los datos en un formato binario descompuesto que permite una indexación y consulta eficientes de claves específicas dentro de la estructura.
Propiedades de Configuración
Sección titulada «Propiedades de Configuración»Al configurar un campo JSON en la barra lateral derecha, están disponibles las siguientes configuraciones:
- Nombre: El identificador único del sistema para el campo (por ejemplo,
metadata,settings,api_response). - Valor Predeterminado: Un objeto o array JSON válido para asignar si no se proporcionan datos (por ejemplo,
{"theme": "dark"}o[]). - Descripción: Un cuadro de texto opcional para describir el esquema o propósito de los datos JSON.
- Obligatorio: Si está habilitado, el registro no se puede guardar a menos que se proporcionen datos JSON válidos.
- Único: Si está habilitado, asegura que no haya dos registros que tengan la misma estructura y contenido JSON exactos.
- Nota: Esto impone una igualdad binaria exacta, lo que significa que
{"a": 1, "b": 2}probablemente se consideraría igual a{"b": 2, "a": 1}dependiendo de la normalización de la base de datos, pero distinto de{"a": 1}.
- Nota: Esto impone una igualdad binaria exacta, lo que significa que
Consejo: ¿Por qué JSONB? Usamos el tipo de dato JSONB en lugar de JSON estándar. Aunque es ligeramente más lento de escribir, JSONB es significativamente más rápido de consultar. Admite la indexación (GIN), lo que te permite realizar búsquedas y filtrado de alto rendimiento directamente en claves y valores dentro del objeto JSON (por ejemplo, encontrar todos los usuarios donde
attributes->'color'es “azul”).
Casos de Uso Comunes
Sección titulada «Casos de Uso Comunes»- Configuración/Ajustes: Almacenar preferencias de usuario que pueden cambiar a menudo sin necesitar nuevas columnas de base de datos (por ejemplo,
{"notifications": true, "theme": "dark"}). - Datos de API Externa: Almacenar respuestas sin procesar de integraciones de terceros (por ejemplo, webhooks de Stripe o cargas de registro).
- Atributos Dinámicos: Detalles del producto que varían mucho entre categorías (por ejemplo, una camiseta tiene
tamañoycolor, pero una computadora portátil tieneramycpu). - Listas: Almacenar arrays simples de cadenas o números (por ejemplo,
["etiqueta1", "etiqueta2", "etiqueta3"]).