Link para a página inicial da série: https://www.couchbase.com/blog/couchbase-oracle-developers-part-2-architecture/
Como parte da remodelagem de dados, ao passar do modelo relacional para o modelo JSON, você terá de considerar o mapeamento do tipo de dados. No Oracle, você terá de criar e declarar os tipos de cada coluna explicitamente antes de carregar os dados ou escrever consultas. No Couchbase, você simplesmente se conforma com a sintaxe JSON e a interpretação do tipo de dados é automática e implícita. Esta é a visão geral dos mapeamentos, da conversão e da aritmética desses tipos de dados.
Oráculo | Couchbase | |
Modelo | Relacional, objeto-relacional | JSON modelo com N1QL (SQL para JSON) |
Tipos de dados | 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 |
Tipos de dados String | CHAR, VARCHAR, VARCHAR2, NCHAR, NVARCHAR, LOONGVARCHAR | String, com até 20 MB de comprimento. Todos os dados de cadeia de caracteres em JSON são Unicode. |
Tipos de dados de data e hora | DATE, TIME, TIMESTAMP, todos esses com TIMEZONE, INTERVALO | Data, Hora, Carimbo de data/hora, todos eles com fusos horários devem ser representados em Formato ISO 8601 e salvos como cadeias de caracteres. O N1QL tem funções abrangentes para formatação, extração, conversão e aritmética.
Este artigo aborda detalhadamente a conversão e a aritmética neles. |
Booleano | BOOLEÃO | Booleano
verdadeiro e falso são automaticamente interpretados como um valor booleano. |
Numérico | NÚMERO
DECIMAL BIGINT SMALLINT INTEGER FLOAT REAL DUPLO |
Dados numéricos: podem ser inteiros, fracionários ou um expoente. Aqui estão os intervalos: https://docs.couchbase.com/server/current/analytics/9_data_type.html |
Tipos de dados binários | BINÁRIO
VARBINÁRIO LONGVARBINARY |
Você pode armazenar o documento inteiro como binário ou codificar o binário como valores base64. |
Tipos de dados de objetos grandes | ||
BLOB, RAW, LONG_RAW | Cada documento pode ter até 20 MB. Os dados binários podem ser codificados via BASE64 | |
CLOB | Cada documento pode ter até 20 MB. | |
Tipos ABSTRACT, TABELAS NESTADAS | Suporte integrado a objetos, matrizes, matrizes de objetos, objetos de matrizes. Não há suporte para tipos de dados opacos definidos pelo usuário. | |
XML | Alguém ainda usa XML em bancos de dados? ;-) | |
QUALQUER TIPO | O ANY TYPE foi inventado para tornar as rotinas do Oracle flexíveis, em termos de tipos que manipulam como parâmetros e tipos de retorno.
No modelo JSON, |
|
Objetos | CRIE os tipos de objetos e as colunas associadas a eles de forma explícita: CRIAR TIPO tipo_de_pessoa AS OBJETO | Os OBJETOS são incorporados ao modelo JSON com qualquer número de níveis aninhados com qualquer tipo de dados, objetos ou matrizes. |
Matrizes | O VARRAY pode criar uma matriz de um tipo específico e, em seguida, usar esse tipo como o tipo de uma coluna.
URL: https://docs.oracle.com/cd/B28359_01/appdev.111/b28371/adobjcol.htm#i468598 |
A matriz é um cidadão de primeira classe no modelo de dados JSON e pode ser usada para qualquer valor. Cada matriz pode ser composta de escalares de qualquer tipo: escalares, objetos, matrizes etc.
"A": [1, "X", [3, 4]] "B": [{"x":1}, {"x":2}] |
Notas adicionais
Tipos Date e Datetime.
O Oracle e outros RDBMS têm tipos de dados abrangentes para lidar com dados relacionados a tempo e manipulá-los. O JSON não tem um tipo de data ou data e hora. Escolhemos o tipo ISO 8601 . A ideia é armazenar os dados relacionados a data e hora em um formato de cadeia de caracteres, em conformidade com a norma ISO 8601, e depois manipulá-los de forma consistente.
Conversão de chave primária em chave de documento.
A chave do documento do Couchbase é sempre menor que 255 bytes e geralmente é uma string. O RDBMS pode ter uma chave primária de uma única coluna ou de várias colunas (composta) para uma tabela. Uma forma comum de conversão é simplesmente ter um separador entre as partes individuais após a conversão de cada parte em uma string. A chave do documento deve ser exclusiva de um bucket e, portanto, normalmente é prefixada com o tipo de tabela (coleção). Veja a blog com exemplos de como fazer isso corretamente.