domingo, 16 de agosto de 2020

Entendendo tipos de dados do SQL

Photo by travelnow.or.crylater on Unsplash

Quando se procura um banco de dados é bom verificar os tipos de dados em cada em cada tabela e coluna. As vezes o criador do banco de dados disponibiliza um dicionário dos dados. O dicionário é um arquivo que explica os dados do bancos de dados, como os dados foram obtidos, a relação entre eles, a disposição dos dados, e mais. Infelizmente, encontrar um banco de dados com a documentação é muito difícil. Então, o jeito é aprender sobre o banco de dados fazendo inspeções das tabelas e seus dados.
Entender os tipos de dados é uma tarefa importante na analise e criação de bancos de dados. Com os dados armazenados de forma correta a analise e a criação do banco de dados se torna mais precisa. Entender o conceito de tipos de dados pode ser útil além da linguagem SQL, esse é um conceito que pode ser útil em outras linguagens. Os conhecimentos aprendidos nesse tutorial não se aplica apenas a linguagem SQL.
As colunas dos bancos de dados SQL, só podem armazenar um tipo de dado por coluna. Não é possível armazenar dois tipo de de dados na mesma coluna. Quando o tipo de dado é definido com a declaração CREATE TABLE, esse é o único tipo de dado permitido na coluna. A definição do tipo é especifica logo após o nome da coluna. Veja um exemplo:

MariaDB [meu_BD]> CREATE TABLE jogos_brasil(
    -> data_jogo DATE,
    -> gols INTEGER
    -> );

Na tabela jogos_brasil, criamos a coluna data_jogo e definimos que essa coluna vai guardar dados do tipo data adicionando DATE depois do seu nome. Fizemos a mesma coisa com a tabela gols, a diferença é o tipo de dados que essa tabela vai guardar, que é dados do tipo INTEGER (inteiro).
Esses são os tipos de dados mais comuns nos bancos de dados:

  • Caracteres: Qualquer carácter ou simbolo
  • Números: Incluí todos os números
  • Data e hora: Informações de dados e horas

Nesse tutorial vamos aprender a utilizar esses tipos de dados a fundo.

Caracteres

As sequências de caracteres são o tipo de dados mais comum. Isso porque esse tipo pode ser utilizado para guardar dados um conjunto de números, texto ou datas. Mas o dado continua sendo do tipo carácter, '1' e 1 são tipos de dados diferentes. O dado que pode ser guardado no tipo carácter é o '1'. Esses são os tipos de caracteres:

  • CHAR(n) Esse tipo de dado tem um comprimento máximo definido com n. Criando uma coluna com CHAR(25), o tamanho máximo de caracteres que podem ser guardados em cada linha é de vinte caracteres. Se for armazenado menos caracteres o restante será preenchido com espaços em branco. Esse tipo também pode ser escrito na forma longa, CHARACTER(n). A forma mais comum é a curta.
  • VARCHAR(n): Esse tipo de dado é parecido com o anterior, a diferença é que se definirmos o tamanho máximo de 25 caracteres, mas só adicionamos dez caracteres, o restante não será preenchido. Esse tipo de dados é mais utilizado em grandes bancos de dados, porque esse tipo de dado economiza espaço. A sua forma longa é VARYING(n).
  • TEXT: Com esse tipo de dado você pode guardar dados de comprimento ilimitado (A sequência mais longa pode ter o tamanho de até 1GB).

Não a uma diferença de desempenho entre os três tipos de dados. A economia de espaço utilizando os tipos de dados VARCHAR() e TEXT pode ser uma vantagem, mas só em questão de armazenamento. Já que esses tipos de dados vão alocar apenas o espaço necessário.

Números

As colunas do tipo numérico, além de poder guardar dados desse tipo, nos permitem realizar operações matemáticas com esses dados como a soma, multiplicação, divisão entre outros. E nos permite ordenar os dados de forma crescente ou decrescente. Essa é uma vantagem, se a ordem é importante no seu projeto. Por isso, se no seu projeto vai ser preciso fazer operações matemáticas ou precisar de uma ordem, utilize os tipos de dados numéricos.
Esses são os tipos numéricos da linguagem SQL:

  • Inteiros: números inteiros, positivos e negativos
  • Ponto fixo e ponto flutuante: dois formatos de frações de números inteiros

Inteiros

Os dados mais comum nos bancos de dados são os do tipo inteiro. Isso porque os números inteiros estão em toda parte. Olhe ao seu redor e veja quantas coisas podem ser contadas ou medidas com números inteiros.
Existem três tipos de dados do tipo inteiro: smallint, integer e bigint. A diferença entre esses três tipos é o valor máximo que cada tipo pode guardar. Na tabela abaixo, é mostrado a quantidade que cada tipo pode armazenar e a quantidade de memoria utilizada no armazenamento:

Tipo de dado Tamanho em bytes Intervalo
smallint 2 bytes −32768 a +32767
integer 4 bytes −2147483648 a +2147483647
bigint 8 bytes −9223372036854775808 a +9223372036854775807

Uma preocupação ao definir o tipo de dados é o seu consumo de memoria e a escalonabilidade dos dados. Se você escolher um tipo que consome pouca memória e depois esse tipo não conseguir armazenar os seus dados, você terá um problema. Do outro lado é possível que você escolha um tipo que consome mais memoria e nunca venha a precisar dessa precisão extra. Por isso faça um estudo pra definir qual tipo usar.

Tipos de ponto flutuante

Existem dois tipos de de dados de ponto flutuante, real e de precisão dupla. a diferença entre os dois é a quantidade de dados que eles podem representar. O tipo real tem precisão de seis casas decimais e o de precisão dupla quinze. Veja uma lista dos tipos de ponto flutuante:

Tipo de dado Tamanho em bytes Intervalo
numeric, decimal Variável Até 131072 dígitos antes da vírgula decimal;
Até 16383 dígitos após o ponto decimal
real 4 bytes Precisão de até 6 casas decimais
double precision 8 bytes Precisão de até 15 casas decimais

Veja um exemplo de como utilizar cada tipo de ponto flutuante:

MariaDB [meu_BD]> CREATE TABLE tipos_numericos(
    -> coluna_numeric NUMERIC(20, 5),
    -> coluna_real REAL,
    -> coluna_d_precisao DOUBLE PRECISION
    -> );
Query OK, 0 rows affected (0.021 sec)

MariaDB [meu_BD]> INSERT INTO tipos_numericos
    -> VALUES
    -> (.8, .8, .8),
    -> (3.13579, 3.13579, 3.13579),
    -> (2.1234469287, 2.1234469287, 2.1234469287);
Query OK, 3 rows affected, 1 warning (0.006 sec)
Records: 3  Duplicates: 0  Warnings: 1

MariaDB [meu_BD]> SELECT * FROM tipos_numericos;
+----------------+--------------+-------------------+
| coluna_numeric | coluna_real  | coluna_d_precisao |
+----------------+--------------+-------------------+
|        0.80000 |          0.8 |               0.8 |
|        3.13579 |      3.13579 |           3.13579 |
|        2.12345 | 2.1234469287 |      2.1234469287 |
+----------------+--------------+-------------------+
3 rows in set (0.001 sec)

Note que os dois último números da coluna coluna_numeric foram arredondados e o primeiro foi preenchido com zeros. Isso acontece porque definimos a precisão de cinco casas decimais. Assim, se o número não tiver precisão suficiente as casas decimais serão preenchidas com zeros. E se passar do número especificado, o número é arredondado.

Escolhendo o tipo de dados numérico

Definir qual tipo de dados usar é uma tarefa que demanda estudo e depende de cada caso, mas existem alguma dicas que podem ser útil na escolha:

  1. Sempre que possível utilize números inteiros. Só use tipos de ponto flutuante se for necessário.
  2. Se precisar utilizar dados de ponto flutuante e precisar de exatidão no cálculos utilize o NUMERIC ou se equivalente DECIMAL.
  3. Escolha um tipo de dado grande o suficiente. Só use um tipo de dado menor quando você tiver certeza que não vai precisar de um número maior.

Data e hora

Quando você digita uma data em um formulário de pesquisa, você está obtendo os benefícios dos bancos de dados terem conhecimento da hora atual, além da capacidade de suportar os formatos de datas, horas e as variedades do calendário, como os anos bissextos e fusos horários. Isso é crucial para narrar histórias com dados, porque a questão de quando algo ocorreu normalmente é uma questão tão importante quanto quem, o quê ou quantos estavam participando da historia.
Veja uma lista dos tipos de dados de data e hora mais usados:

Tipo de dado Tamanho em bytes Descrição Intervalo
timestamp 8 bytes Data e hora 4713 AC to 294276 DC
date 4 bytes Data 4713 AC to 5874897 DC
time 8 bytes Hora 00:00:00 to 24:00:00

Veja um exemplo de como utilizar esses tipos de dados:

MariaDB [meu_BD]> CREATE TABLE data_hora(
    -> coluna_timestamp TIMESTAMP,
    -> coluna_data DATE,
    -> coluna_time TIME
    -> );
Query OK, 0 rows affected (0.021 sec)

MariaDB [meu_BD]> INSERT INTO data_hora
    -> VALUES
    -> ('2018-12-31 01:00', '2018-04-23', '12:00:21'),
    -> ('2012-06-29 02:00', '2019-04-23', '14:30:22'),
    -> (now(), '2018-04-23', '12:00:21');

Query OK, 3 rows affected (0.003 sec)

A função now() retorna a data e hora de quando a função é chamada. Se for passado uma data errada isso vai gerar um erro. Um exemplo de data errada é: '2018-02-30'.

0 comentários:

Postar um comentário