Enlace a la página de inicio de la serie: https://www.couchbase.com/blog/couchbase-oracle-developers-part-2-architecture/
Como parte de la remodelación de datos, al pasar del modelo relacional al modelo JSON, tendrás que tener en cuenta la asignación de tipos de datos. En Oracle, tendrás que crear y declarar los tipos de cada columna explícitamente antes de cargar los datos o escribir consultas. En Couchbase, simplemente te ajustas a la sintaxis JSON y la interpretación del tipo de datos es automática e implícita. Aquí está el resumen de mapeos, conversión y aritmética en estos tipos de datos.
Oracle | Couchbase | |
Modelo | Relacional, Objeto-relacional | JSON modelo con N1QL (SQL para JSON) |
Tipos de datos | https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/Data-Types.html#GUID-A3C0D836-BADB-44E5-A5D4-265BA5968483 | https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/datatypes.html |
Cadena Tipos de datos | CHAR, VARCHAR, VARCHAR2, NCHAR, NVARCHAR, LOONGVARCHAR | Cadena de hasta 20 MB de longitud. Todos los datos de cadena en JSON son Unicode. |
Tipos de datos de fecha y hora | FECHA, HORA, TIMESTAMP, todos estos con TIMEZONE, INTERVALO | Fecha, Hora, Timestamp, todos estos con zonas horarias deben representarse en Formato ISO 8601 y se guardan como cadenas. N1QL dispone de numerosas funciones de formateo, extracción, conversión y aritmética.
Este artículo trata en detalle la conversión y la aritmética en ellos. |
Booleano | BOOLEAN | Booleano
verdadero y falso se interpretan automáticamente como un valor booleano. |
Numérico | NÚMERO
DECIMAL BIGINT SMALLINT INTEGRO FLOTADOR REAL DOBLE |
Datos numéricos: pueden ser enteros, fracciones o exponentes. Éstos son los rangos: https://docs.couchbase.com/server/current/analytics/9_data_type.html |
Tipos de datos binarios | BINARIO
VARBINARIO LONGVARBINARY |
Puede almacenar todo el documento como binario o codificar el binario como valores base64. |
Tipos de datos de objetos grandes | ||
BLOB, RAW, LONG_RAW | Cada documento puede ocupar hasta 20 MB. Los datos binarios pueden codificarse mediante BASE64 | |
CLOB | Cada documento puede ocupar hasta 20 MB. | |
Tipos ABSTRACT, NESTED TABLES | Soporte incorporado para objetos, matrices, matrices de objetos, objetos de matrices. No hay soporte para tipos de datos opacos definidos por el usuario. | |
XML | ¿Alguien sigue utilizando XML en las bases de datos? ;-) | |
CUALQUIER TIPO | ANY TYPE fue inventado para hacer las rutinas de Oracle flexibles - en términos de tipos que manejan como parámetros y tipos de retorno.
En el modelo JSON, |
|
Objetos | CREAR explícitamente los tipos de objeto y las columnas asociadas: CREAR TIPO tipo_persona AS OBJETO | Los OBJETOS se construyen en el modelo JSON con cualquier número de niveles anidados con cualquier tipo de datos, objetos o matrices. |
Matrices | VARRAY puede crear un array de un tipo específico y luego utilizar ese tipo como tipo para una columna.
URL: https://docs.oracle.com/cd/B28359_01/appdev.111/b28371/adobjcol.htm#i468598 |
Array es un ciudadano de primera clase en el modelo de datos JSON y se puede utilizar para cualquier valor. Cada array puede ser de escalares de cualquier tipo: escalares, objetos, arrays, etc.
"A": [1, "X", [3, 4]] "B": [{"x":1}, {"x":2}] |
Notas adicionales
Tipos Date y Datetime.
Oracle y otros RDBMS tienen extensos tipos de datos para manejar datos relacionados con el tiempo y manipularlos. JSON no tiene un tipo date o datetime. Hemos elegido el tipo ISO 8601 . La idea es almacenar los datos relacionados con la fecha y la hora en forma de cadena, de conformidad con la norma ISO 8601, y luego manipularlos de manera coherente.
Conversión de clave primaria a clave de documento.
La clave de documento de Couchbase es siempre inferior a 255 bytes y suele ser una cadena. RDBMS puede tener una sola columna o múltiples columnas (compuesto) clave primaria para una tabla. Una forma común de convertir es simplemente tener un separador entre las partes individuales después de convertir cada parte a una cadena. La clave de documento debe ser única para un cubo y por lo tanto es típicamente prefijada con el tipo de tabla (colección). Véase el blog con ejemplos de cómo hacerlo correctamente.