Campo JSONB
El campo JSONB (etiquetado como jsonb en la interfaz) se utiliza para almacenar conjuntos de datos no estructurados o semi-estructurados, 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 es un JSON válido antes de guardarlo, y almacena los datos en un formato binario descompuesto que permite indexación eficiente y consulta 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:
- Name: El identificador único del sistema para el campo (ej.,
metadata,settings,api_response). - Default Value: Un objeto o array JSON válido para ser asignado si no se proporcionan datos (ej.,
{"theme": "dark"}o[]). - Description: Un cuadro de texto opcional para describir el esquema o propósito de los datos JSON.
- Mandatory: Si está habilitado, el registro no se puede guardar a menos que se proporcionen datos JSON válidos.
- Unique: Si está habilitado, asegura que no haya dos registros que tengan exactamente la misma estructura y contenido JSON.
- Nota: Esto impone 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 igualdad binaria exacta, lo que significa que
Tip: ¿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. Soporta indexación (GIN), lo que te permite realizar búsquedas de alto rendimiento y filtrado directamente sobre claves y valores dentro del objeto JSON (ej., encontrar todos los usuarios donde
attributes->'color'es “blue”).
Casos de Uso Comunes
Sección titulada «Casos de Uso Comunes»- Configuración/Ajustes: Almacenar preferencias de usuario que podrían cambiar a menudo sin necesidad de nuevas columnas en la base de datos (ej.,
{"notifications": true, "theme": "dark"}). - Datos de API Externa: Almacenar respuestas sin procesar de integraciones de terceros (ej., webhooks de Stripe o cargas útiles de logs).
- Atributos Dinámicos: Detalles de productos que varían ampliamente entre categorías (ej., una Camiseta tiene
tallaycolor, pero una Laptop tieneramycpu). - Listas: Almacenar arrays simples de cadenas o números (ej.,
["tag1", "tag2", "tag3"]).