Já pensou no motivo de um banco de dados ter tantos tipos de valores inteiros? SMALLINT? BIGINT? É de comer?
Conteúdo
- Prólogo
- Escolhendo tipos em modelos de dados
- Tomando uma decisão consciente
- O que posso fazer um Byte ?
- Agora vamos colocar em prática
- Considerações finais
1. Prólogo
Nessa vida de desenvolvedor de software, aprendi a valorizar os fundamentos das tecnologias com as quais trabalho. Neste artigo, vamos explorar todos os tipos INTEGER existentes, quais suas características e como podemos usar isso para tomar decisões mais assertivas ao modelar um esquema com MySQL.
2. Escolhendo tipos em modelos de dados
Um princípio fundamental para modelar dados é avaliar se os tipos escolhidos são os melhores para os valores que serão recebidos. Nesse artigo vamos tentar entender quais tipos de inteiros existem e quais suas diferenças para podermos tomar essa melhor decisão no momento de criar nossas tabelas.
3. Tomando uma decisão consciente
Para conseguirmos tomar a decisão mais consciente precisamos saber quais o tipos de inteiro existentes e qual o espaço ocupado em Bytes por cada tipo, pois independente de você inserir o número inteiro 1 em um registro ele ocupa um espaço diferente de acordo com o tipo de dado do schema.
Por exemplo, o tipo TINYINT ocupa 1 byte
, enquanto o tipo BIGINT ocupa 8 bytes
. Portanto, mesmo que você insira o número inteiro 1 em um registro, ele ocupará um espaço diferente dependendo do tipo de dado especificado no esquema (schema).
Podemos considerar que cada tipo de inteiros nos permitem armazenar um certo range de valores e cada range reserva uma quantidade de Bytes.
Vamos observar todos os tipos e seus custos de Bytes:
Type | Storage (Bytes) |
---|---|
TINYINT | 1 |
SMALLINT | 2 |
MEDIUMINT | 3 |
INT | 4 |
4. O que posso fazer um Byte ?
Com 1 Byte podemos usar 8 Bits, ou seja com o TINYINT podemos armazenar números no seguinte range:
00000000 = 0
11111111 = 255
E caso precisarmos ter um sinal ? Nesse caso vamos precisas separar um bit para isso reduzindo nosso range assim:
0 1111111 = -128 (negative bit)
1 1111111 = 127 (positive bit)
Com isso temos a seguinte tabela:
Type | Storage (Bytes) | Min Signed | Max Signed | Min Unsigned | Max Unsigned |
---|---|---|---|---|---|
TINYINT | 1 | -128 | 127 | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 | 0 | 65535 |
MEDIUMINT | 3 | -8388608 | 8388607 | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 | 0 | 4294967295 |
BIGINT | 8 | -2^63 | 2^63-1 | 0 | 2^64-1 |
5. Agora vamos colocar em prática
CREATE TABLE `books` (
`id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`num_pages` SMALLINT UNSIGNED,
PRIMARY KEY (id)
);
Nesse trecho de SQL, tomamos a decisão de escolher o tipo de inteiro mais adequado com base no contexto do nosso caso de uso. Ao analisar a coluna num_pages
, que representa o total de páginas de um livro, optamos por utilizar o tipo SMALLINT. Essa escolha foi feita levando em consideração os seguintes fatores:
1. Valor máximo adequado: O tipo TINYINT possui um valor máximo de 255
, o qual poderia ser facilmente ultrapassado por livros com um número significativo de páginas. No entanto, o tipo SMALLINT oferece um tamanho maior, permitindo um valor máximo de 65535. Essa faixa é mais adequada para a representação do número de páginas de um livro na vida real a não ser que você esteja lendo Game of Thrones, ai já seria preciso de um BIGINIT.
2. Modificador UNSIGNED: Utilizamos o modificador UNSIGNED
para indicar que não há necessidade de armazenar valores negativos para o número de páginas de um livro. Isso nos permite aproveitar um limite positivo maior dentro do mesmo tipo de dado, já que não precisamos reservar espaço para o sinal.
Portanto, ao escolher o tipo SMALLINT UNSIGNED
para a coluna num_pages
, levamos em consideração o valor máximo adequado, a economia de espaço e a exclusão da possibilidade de valores negativos, garantindo uma representação eficiente e precisa do número de páginas dos livros em nosso sistema.
6. Considerações finais
Após compreendermos as diferenças entre os tipos de inteiro, percebi o quanto é importante escolher o tipo de dado adequado para cada situação. Refletindo sobre minha própria experiência, lembro-me das vezes em que utilizei o tipo INTEGER desnecessariamente. Após aprofundar-me nesse assunto e compartilhar essas informações, acredito que não vou mais cometer esse erro. Espero que este artigo tenha sido esclarecedor para vocês também, auxiliando na escolha consciente do tipo de inteiro mais adequado para cada contexto.
Venha fazer parte de um ambiente de aprendizado.
Top comments (3)
Amei 💜
Ótimo artigo.
Parabéns por artigo, gostei!