quinta-feira, 6 de dezembro de 2018

Entendendo os tipos de dados do LibreOffice Base



A despeito do título deste artigo, convém aqui de início esclarecer que o LibreOffice Base não é, em sua essência, o banco de dados; e por consequência os tipos de dados usados não pertencem a ele. Por definição o Base é uma ferramenta de acesso a um banco de dados ou usando o termo específico, trata-se de um Sistema de Gerenciamento de Banco de Dados (SGBD) – do inglês Data Base Management System (DBMS). Mas para manter uma didática mais eficiente o possível, menciono o Base como se fosse uma espécie de "tudo em um". Dessa forma torna-se mais fácil a compreensão de todos.

Por padrão o LibreOffice Base usa incorporado o banco de dados HSQLDB (do inglês Hyper Structured Query Language Database). Trata-se de um servidor base de dados de código aberto, escrito totalmente na linguagem Java. Logo, o primeiro quesito para trabalhar com o LibreOffice Base é ter o Java instalado.

O HSQLDB não oferece uma robustez tão grande se comparado a outros bancos de dados como o Firebird ou o MySQL. Mas é uma solução simples e eficaz para pequenos bancos de dados. Na data de publicação este artigo (04/12/2018), está em fase experimental o uso do Firebird como banco de dados incorporado no Base, o que certamente será um gigantesco avanço. Hoje já é possível usar o Firebird, indo no menu Ferramentas > Opções > LibreOffice > Avançado e marcando a caixa de “Ativar funcionalidades experimentais”. Isso pode ser feito a partir de qualquer aplicativo da suíte do LibreOffice, Após fazer isso o Firebird estará disponível dentro das opções de banco de dados incorporado. Mas como informa o alerta da caixa de seleção, o acionamento desse recurso pode provocar instabilidade e isso é algo bem sério quando o assunto é um banco de dados. Dessa forma, é preferível aguardar e só passar a usar o Firebird depois que recurso deixar de ser experimental e estiver completamente implementado.

Bom, se tivermos algum outro banco de dados externo também podemos usar o Base para se conectar a ele e gerar consultas e relatórios.

Mas retornando ao HSQLDB, como qualquer sistema de banco de dados, ele possui um rico conjunto de tipos de dados para escolher ao construir seu banco de dados. Uma compreensão dos tipos e quando você pode usá-los, ajudará você a criar suas tabelas para seus projetos de banco de dados.

Então, dada as explicações acima e absorvendo a ideia de que o LibreOffice Base seja "tudo em um", vamos ver quais os tipos de dados disponíveis.




Qual a necessidade de se trabalhar com o tipo de dados correto?



Quando você configura uma tabela de banco de dados, uma das coisas que você precisa especificar para cada campo é seu tipo. Quando você classifica um tipo para um campo, está está determinando um tratamento específico que o Base dará para aquela informação armazenada no campo. É como um código. Por exemplo, você pode escrever o número 24 de várias maneiras: "24", "XXIV", "vinte e quatro", "duas dúzias", "11000 (valor binário)", etc. A princípio não há problema nenhum em usar qualquer desses formatos. O problema é quando se torna necessário multiplicar "vinte e quatro" por outro valor. É aí que o tipo de dado correto faz toda a diferença, pois uma coisa é ter um campo de números com o algarismo "24" dentro dele; e outra coisa é ter um campo de texto escrito "XXIV".

A premissa básica para seleção correta do tipo de dado é entender qual será o uso da informação  armazenada ali, de modo que não haja frustração e muita dor de cabeça. Por exemplo, os tipos numéricos em um banco de dados tem por função representar quantidades. Trata-se de um valor aritmético capaz de fazer parte de um cálculo. Portanto, existe diferença entre um campo que abrigará o número de tomates colhidos, para outro contendo o CPF de alguém. Como assim? Não são todos números? Sim, são números. Porém, ao contrário da colheita de tomates - que forma um valor que pode ser somado, subtraído, multiplicado ou dividido; e pode ser descrito como milhões, milhares, centenas e unidades - o número do CPF não representa uma quantidade aritmética. Trata-se apenas de um identificador. Ainda que formado exclusivamente por números, esse tipo de dado se encaixa na categoria "Text", já que trata-se de um campo meramente descritivo.

Para entender melhor, veja a seguir as cinco categorias de tipos de dados do LibreOffice Base:

  • numéricos
  • alfanuméricos
  • binários
  • tempo
  • outros


Numéricos



Os dados numéricos podem usar valores exatos referentes aos números inteiros como também números decimais. O ideal é que você escolha o tipo de dados que se proponha a armazenar adequadamente o valor correto de forma confiável. A principal característica de um campo numérico é que ele tem como atribuição representar uma grandeza aritmética e não meras numerações cadastrais como CPF, CNPJ ou número da identidade. Portanto, trata-se de situações distintas.

No LibreOffice Base fornece dez tipos de campos que servem para armazenar números e suas diferenças estão principalmente relacionadas ao tamanho.

Yes/No [ BOOLEAN ]


Esse é um tipo de campo bastante interessante, que armazena somente dois valores: Sim ou Não (que também pode ser chamado de "verdadeiro" ou "falso"). Seu tamanho é "0" ou "1", ocupando 1 byte. O Base utiliza uma caixa de seleção (checkbox) para representar o "0" ou "1". A convenção utilizada é "1" para "Sim" e "0" para "Não", ficando essa característica mais evidente quando usado em critérios de consultas. A princípio, trabalhar com um campo onde só cabem dois valores pode parecer totalmente improdutivo, mas ocorre exatamente o contrário. A simplicidade desse tipo de campo garante uma vasta gama de utilidades, sendo especialmente útil para consultas e relatórios.


Tiny Integer [ TINYINT ]


O menor dos tipos inteiros. Seu tamanho é -28 a 28-1. Isso é entre -128 a 127. Ocupa 1 byte de armazenamento. Você só deve usar esse tipo de dado se tiver certeza absoluta que trabalhará com números que ficarão dentro desse intervalo. Por exemplo, esse tipo de campo pode ser perfeito para informar o número de filhos de alguém ou a quantidade de bombons dentro de uma caixa. Mas pode ser incorreto para informar a quantidade de melancias transportadas.

Small Integer [ SMALLINT ]


Com um tamanho de -215 a 215-1, esse tipo de número inteiro oferece um espaço bem mais significativo do que o TINYINT. Você pode trabalhar com valores entre -32.768 a 32.767. Ocupa 2 bytes de armazenamento. A exemplo do TINYINT, você precisa certificar-se que seus números cabem dentro desse intervalo.

Integer [ INTEGER ]


Este é, sem dúvida, o tipo de valor inteiro mais comumente usado, com um tamanho de -2³¹ a 2³¹-1. Isso é uma faixa de valores que vai de -2.147.483.648 a 2.147.483.647. Ocupa 4 bytes de armazenamento. Esse é o tipo geralmente usado para abrigar chave-primária e oferece uma enorme gama de aplicabilidade em um banco de dados. A única exceção é caso você vá trabalhar com números inteiros absurdamente grandes.


BigInt [ BIGINT ]


Esse tipo de campo é raramente utilizado. Seu tamanho abriga valores de -263 a 263-1. Isso é um numeral tão grande, mas tão grande, que dificilmente haverá algo que demande tal necessidade! Vai de incríveis -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 ocupando 8 bytes de armazenamento. A menos que você pretenda armazenar a distância da Terra até os planetas de Star Wars, você nunca precisará usar esse tipo.

Number [ NUMERIC ]
Decimal [ DECIMAL ]


Os campos NUMERIC e DECIMAL não têm limite de tamanho. Trata-se de dois tipos de dados com grau de precisão perfeita para se trabalhar com números fracionários.

É o campo ideal para armazenar valores monetários.

Variáveis decimais podem ter números positivos ou negativos ou zero.

Basicamente para definí-los basta especificar o número total de dígitos permitidos para a parte inteira e o número de casas decimais. Em ambos os casos, você pode dizer ao Base quantas casas decimais você quer para gravar o número.  Em geral, os diferentes tipos de dados ​​para representar números com casas decimais envolve basicamente o fator chamado "precisão". Um determinado tipo pode gravar um número enorme, mas não pode armazenar a parte fracionária em muitas casas decimais. Outro pode não ser capaz de lidar com números grandes, mas ainda pode armazená-lo com muitas casas decimais da parte fracionária do número. Essas campos possuem uma precisão maior para os valores decimais do que os campos REAL e DOUBLE.

Real [ REAL ]
Double [ DOUBLE ]


Estes têm um alcance mais limitado de casas decimais e uma precisão que não é tão boa. É útil para lidar com valores aproximados.

Float [ FLOAT ]


É o tipo de dado adequado para armazenar valores científicos. Os números de ponto flutuante são números decimais ou números reais. Eles são feitos de uma parte inteira e uma parte parcial separada por um ponto decimal.


Alfanuméricos


Os campos alfanuméricos tem ampla utilidade. De números a textos, eles armazenam de tudo! A característica principal é que tais campos guardam informações cruciais a todo banco de dados, mas que não se incluem em nenhuma conta matemática.


Text [ VARCHAR ]


Este é, sem dúvida, o campo mais comumente usado no Base. Serve para armazenar caracteres variáveis de comprimento indeterminado. O termo VARCHAR, do inglês "VARiable CHARacters", refere-se a um tipo de dados de um campo que pode armazenar letras e números. Ao usar o VARCHAR, você define o número máximo de caracteres para o campo. Por exemplo, para um campo denominado “NomeDoCliente” com tamanho de 100 caracteres, caso você entre com um nome com 20 caracteres, esse campo exigirá os recursos de memória somente daqueles 20 caracteres, mesmo que o tamanho disponível seja de 100.

Text [ VARCHAR_IGNORECASE ]


Trata-se de uma versão de VARCHAR que não faz distinção entre caracteres maiúsculos ou minúsculos nos resultados de consultas. Por exemplo, se fizermos uma busca por “Maria” e no banco de dados constar “MARIA” ou “maria”, o registro não será localizado. Para evitar esse comportamento devemos atribuir o campo como VARCHAR_IGNORECASE, que não diferencia letras maiúsculas de minúsculas. Isso torna o VARCHAR_IGNORECASE adequado para ser usado em campos com grande tendência a acumular muitas siglas como, por exemplo, nomes de empresas.

Text (fix) [ CHAR ]


Este é um campo alfanumérico de tamanho fixo. A forma de definir as propriedades do campo é igual ao VARCHAR. A diferença de um campo CHAR é que ele possui exatamente o tamanho fixo que foi definido em suas propriedades. Se o texto fornecido não preencher a quantidade atribuída de caracteres, o restante que ficou vago será preenchido com espaços. Este tipo de campo é ideal para armazenar dados que sabe-se que permanecerão sempre com a quantidade definida de caracteres. Um exemplo clássico é o número do CPF, que sempre possui 11 caracteres.

Memo [ LONGVARCHAR ]


É projetado para grandes blocos de texto. Um exemplo clássico são tabelas que necessitam de um campo "Observações". Outro exemplo seria num banco de dados de filmes, em que a sinopse também pode vir como LONGVARCHAR.

Binários


Image [ LONGVARBINARY]
Binary [ VARBINARY ]
Binary (fix) [ BINARY ]


Esse tipo é para armazenar dados binários como imagens e outros documentos. O LONGVARBINARY, por exemplo, é focado no armazenamento de fotos. Mas desde já deixo um alerta: seu uso não é uma boa ideia!

Todos os tipos binários de imagens suportadas, teoricamente podem ser armazenados na tabela do banco de dados. Refiro-me teoricamente, porque embora alguma extensões possam ser armazenadas, algumas não são exibidas nem em formulários e nem relatórios. É o caso, por exemplo, de arquivos SVG.

Para armazenar uma imagem é muito simples. Basta que o tipo de campo da tabela esteja definido como LONGVARBINARY. Apesar dessa possibilidade, é mais coerente que as imagens não fiquem incorporadas dentro do banco de dados, mas apenas vinculadas, com um link num campo de texto.

O problema do uso de imagens incorporadas é que elas tendem a inflar consideravelmente o tamanho do arquivo ODB, podendo provocar travamentos, quedas de desempenho ou, na pior das hipóteses, inviabilizar o trabalho no banco de dados. Isso sem mencionar que as imagens também podem perder metadados ou, no caso de alguma falha catastrófica, até elas mesmas podem se perder em definitivo. Não é difícil, por exemplo, que algumas dezenas de fotos com 1 MB venham paralisar o banco de dados. Hoje, não raro, até mesmo uma única foto de celular pode alcançar vários megabytes de tamanho - pois a maioria dos aparelhos vendidos alcançam mais de 5 megapixels. Por conta desses detalhes, o armazenamento de fotos ou outros arquivos em um banco de dados é uma péssima ideia.

Portanto, não é preciso muito para concluir que é melhor, mais seguro e mais fácil, armazenar imagens externas e, no banco de dados apenas armazenar o link.

Tempo



Estes são tipos para definir campos que controlam a data e a hora. Existem três variações desse tipo de campo e eles se diferem basicamente na forma como armazenam sua informação.

Date [ DATE ]


Contém uma data. Simples assim. É a forma mais básica de armazenar uma informação de tempo. O formato da entrada convencional é DD-MM-AAAA ou seja, 05/12/2018. Mas é possível alterar a formatação para guardar, por exemplo, o dia da semana, a data completa por extenso, o nome do mês abreviado, o ano com dois dígitos, etc.

Time [ TIME ]


Contém uma hora do relógio. Pode-se usar o formato HH:MM:SS, de 24 horas, como 20:15:36 ou o formato de 12 horas, como 8:15:36 PM. Pode também armazenar somente horas e minutos.

Date/Time [ TIMESTAMP ]


É basicamente uma combinação de data e hora. Pode-se usar, por exemplo, DD-MM-AAAA HH:MM:SS, ou seja, 06/12/2018 10:01:05.



OUTROS


Os tipos nesta categoria não estão relacionados com nada específico. Eles simplesmente não se encaixam em nenhuma das categorias acima.


OTHER [ OTHER ]


A categoria OTHER praticamente abarca uma família de dados que não tem lá muito uso. Basicamente esse tipo de campo pode ser usado ​​para armazenar objetos Java, ou seja, rotinas de programação em Java.

Pois bem, são estes os tipos de dados disponíveis para construir tabelas no LibreOffice Base.

Chego ao final deste artigo e espero que ele seja útil. E aí? Gostou? Você gostaria de ver mais artigos sobre o LibreOffice Base?


Assine nossa newsletter!

Quer receber as novidades mais recentes do Blog Valeu Cara na sua caixa de entrada?
Informe seu e-mail e clique em Assinar.

Assine o feed RSS Siga o Blog Valeu Cara no Twitter Curta o Blog Valeu Cara no Facebook Blog Valeu Cara no Google+Canal do Blog Valeu Cara no YouTube





Participe deixando seu comentário, dúvida, sugestão, ideias, críticas, exemplos ou o que você quiser na parte de comentários desta postagem. Sua participação é extremamente importante para que este blog esteja sempre melhorando o seu conteúdo.