2. Numéricos Inteiros
TINYINT / TINYINT UNSIGNED
Inteiro super compacto de 1 Byte (0 a 255 sem sinal, ou -128 a 127 com sinal).
💾 Espaço em Disco: 1 Byte (8 bits)
📏 Limites: Unsigned: 0 a 255 | Signed: -128 a 127
É o menor tipo numérico inteiro do banco de dados, consumindo apenas 1 byte por linha. Excelente para armazenar números pequenos cujos limites são bem conhecidos, como idade de uma pessoa, dia do mês (1 a 31), nota de avaliação (1 a 5 estrelas), número de parcelas de cartão (1 a 24) ou códigos de status.
✅ Quando Usar
- •Idade de usuários (0 a 150 anos cabe com folga em `TINYINT UNSIGNED`).
- •Avaliações/Ratings de produtos (1 a 5 estrelas ou 0 a 10).
- •Mês do ano (1 a 12), dia da semana (1 a 7), número de parcelas (1 a 48).
- •Prioridade ou nível de permissão numérico simples.
🚫 Quando NÃO Usar
- •Quantidades de estoque ou contadores de visualizações que podem facilmente passar de 255.
- •No PostgreSQL não existe `TINYINT` nativo (use `SMALLINT` no Postgres).
📐 Configuração no DrawDB
- Type:
- TINYINT (MySQL/MariaDB) ou SMALLINT (PostgreSQL)
- Size / Values:
- Vazio
- Default:
- Ex: 0 ou 1
MySQL / MariaDB
TINYINT UNSIGNED
PostgreSQL
SMALLINT (2 bytes)
SQLite
INTEGER
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE avaliacoes_produto (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
produto_id INT UNSIGNED NOT NULL,
estrelas TINYINT UNSIGNED NOT NULL COMMENT 'Nota de 1 a 5',
comentario VARCHAR(500) NULL,
CONSTRAINT chk_estrelas CHECK (estrelas BETWEEN 1 AND 5)
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);
$estrelas = filter_input(INPUT_POST, 'estrelas', FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 5]
]);
if ($estrelas === false || $estrelas === null) {
throw new DomainException('A nota deve ser um número inteiro entre 1 e 5.');
}
$stmt = $pdo->prepare('
INSERT INTO avaliacoes_produto (produto_id, estrelas, comentario)
VALUES (:produto_id, :estrelas, :comentario)
');
$stmt->bindValue(':produto_id', 42, PDO::PARAM_INT);
$stmt->bindValue(':estrelas', $estrelas, PDO::PARAM_INT);
$stmt->bindValue(':comentario', 'Excelente produto!', PDO::PARAM_STR);
$stmt->execute();