A escolha do data type correto… Porque é importante?
Eu sempre gostei de trabalhar com SGBDs diferentes, porque eu saia da minha zona de conforto e aprendia coisas novas. Para uma pessoa hiper ativa, isso é ótimo!
Sempre que me aventuro com um SGBD novo, uma das primeiras coisas que eu procuro entender são os tipos de dados suportados e suas particularidades.
Quando escolhemos um data type limitamos os valores que podem ser incluídos em uma determinada coluna, e dessa forma começamos a garantir a qualidade dos dados.
Muito se fala de tunning, de ciência de dados e Inteligência Artificial, mas pouco se fala no quanto as empresas gastam porque precisam limpar os dados (que serão usados pelos cientistas de de dados e engenheiros de IA), e um dos motivos para ter dados sujos é não escolher o data type correto.
A primeira versão deste post, continha um resumo super extenso sobre os tipos de dados do PostgreSQL, mas confesso que ficou mega chato de ler e eu não tenho a mesma competência para escrever da comunidade que escreveu a documentação do PG. Então recomendo fortemente que você leia a documentação para conhecer cada tipo de dados.
Neste post vou destacar alguns itens que eu acho muito fofos e que diferenciam o PG dos outros SGBDs (não vou falar sobre os tipos para pesquisa de texto, que são lindos, porque em breve escreverei um post sobre eles)
Item 1 – Tipos seriais
Um que eu adoro no PG são os tipos seriais… Os tipos de dados smallserial, serial e bigserial não são verdadeiros tipos, mas uma notação conveniente para a criação de colunas cujos valores são auto incrementais (semelhante a propriedade identity do SQL Server).
Nome | Tamanho | Limites |
smallserial | 2 bytes | 1 a 32767 |
serial | 4 bytes | 1 a 2147483647 |
bigserial | 8 bytes | 1 a 9223372036854775807 |
Item 2 – Tipo de Dados Interval
Representa um intervalo de tempo, aceita um parâmetro opcional (p) que especifica o número de dígitos fracionários retidos no campo de segundos. Por padrão, não há limite explícito na precisão. O intervalo permitido p é de 0 a 6.
O tipo interval tem uma opção, que indica qual tipo de intervalo deve ser armazenado
- YEAR
- MONTH
- DAY
- HOUR
- MINUTE
- SECOND
- YEAR TO MONTH
- DAY TO HOUR
- DAY TO MINUTE
- DAY TO SECOND
- HOUR TO MINUTE
- HOUR TO SECOND
- MINUTE TO SECOND
Nome | Tamanho | Descrição | Menor valor | Maior Valor |
interval [ fields ] [ (p) ] | 16 bytes | intervalo de tempo | -178000000 anos | 178000000 anos |
Item 3 – Tipo booleano
O que eu acho legal neste data type é que temos uma boa variedade de valores que podem ser usados com o mesmo significado (eu sempre uso os tradicionais TRUE / FALSE)
Nome | Tamanho | Descrição |
boolean | 1 byte | estado de verdadeiro ou falso |
Valores literais válidos para o “verdadeiro” são:
TRUE |
‘t’ |
‘true’ |
‘y’ |
‘yes’ |
‘on’ |
‘1’ |
Para o “ falso ” , os seguintes valores podem ser usados:
FALSE |
‘f’ |
‘false’ |
‘n’ |
‘no’ |
‘off’ |
‘0’ |
Item 4 – Tipos enumerados
Para a fanática da qualidade de dados um tipo ENUM é uma fofura! Eles tipos de dados que compreendem um conjunto de valores ordenado e estático. Eles são equivalentes aos enum suportados em várias linguagens de programação.
Item 5 – Tipos de endereço de rede
O PostgreSQL oferece tipos de dados para armazenar endereços IPv4, IPv6 e MAC. É melhor usar esses tipos em vez de tipos de texto sem formatação para armazenar endereços de rede, porque esses tipos oferecem verificação de erros de entrada e operadores e funções especializadas.
Nome | Tamanho de armazenamento | Descrição |
cidr | 7 ou 19 bytes | Redes IPv4 e IPv6 |
inet | 7 ou 19 bytes | Hosts e redes IPv4 e IPv6 |
macaddr | 6 bytes | MAC Adress |
macaddr8 | 8 bytes | MAC Adress
(formato EUI-64) |
Conclusão
Trago 4 conclusões que (na minha opinião) são verdades absolutas quando o assunto é banco de dados:
- Tuning começa com a escolha e pesquisa dos tipos de dados corretos para cada necessidade e SGBD.
- Quando escolhemos um data type limitamos os valores que podem ser incluídos em um determinado atributo, e dessa forma começamos a garantir a qualidade dos dados.
- Corrigir um data type é muito mais trabalhoso do que criar as colunas com o tipo certo
- Limpar dados é caro!
Este assunto continuará com PostgreSQL como BD NoSQL e os tipos de dados para pesquisa de texto.
Referências
https://www.postgresql.org/docs/11/datatype.html