Voltar para a lista de artigos Artigos
9 minutos de leitura

Que tipo de dados escolher para uma coluna ao criar uma tabela em SQL

Os bancos de dados armazenam valores de dados de vários tipos. Por exemplo, você pode armazenar o nome de um produto como uma cadeia de texto, o preço de um produto como um número, ou a data de venda de um produto como um valor de data. Estes valores - o nome do produto, o preço e a data de venda - são armazenados como diferentes tipos de dados. Neste artigo, explicamos vários tipos de dados SQL com exemplos reais.

Criando uma tabela em SQL

SQL é uma linguagem para manipulação de dados em bancos de dados. Criada no início dos anos 70, ainda é utilizada hoje em quase todas as bases de dados relacionais após 50 anos. O aprendizado de SQL continua a ser muito popular.

SQL é usada como a linguagem de dados padrão para manipulação e consulta de dados para os bancos de dados mais populares. Eu não acho que seria errado dizer que todos nós usamos aplicações que usam consultas SQL várias vezes ao dia em nossos telefones celulares ou computadores sem sequer nos darmos conta disso.

SQL é também uma linguagem fácil de aprender, muito semelhante ao inglês, com uma curva de aprendizagem superficial. Veja a seguinte consulta SQL, por exemplo:

SELECT employee_id, employee_name FROM employees WHERE salary > 75000

Você provavelmente pode adivinhar que dados esta consulta retorna: a identificação do funcionário e o nome dos funcionários que ganham mais de $75.000. Fácil, não é?

Entretanto, antes de podermos consultar os dados em um banco de dados, precisamos armazenar os dados no banco de dados. Os bancos de dados utilizam tabelas para armazenar os registros de dados. Uma tabela tem um conjunto de campos (também conhecidos como colunas).

Para saber mais sobre tabelas, sugiro o curso Criando Tabela em SQL. É um curso prático com cerca de 80 exercícios para equipá-lo com tudo o que você precisa para começar a criar tabelas em bancos de dados SQL.

Uma tabela típica para armazenar dados sobre funcionários pode ter campos como employee_id, employee_name, e salary. Você pode incluir qualquer campo na tabela; você pode incluir outros campos baseados em suas necessidades, tais como o departamento ao qual o funcionário pertence e o aniversário do funcionário.

Entretanto, quando você define um novo campo em uma tabela, é obrigatório que você especifique seu tipo de dados. O objetivo principal deste artigo é explorar que tipo de dados escolher para um campo ao criar uma tabela em SQL.

Vamos começar criando uma tabela simples chamada foods para uma empresa de alimentos de execução. Possui apenas duas colunas ou campos: food_name e food_category. Como estas duas colunas irão armazenar valores de texto, usamos o tipo de dados VARCHAR, que é usado para armazenar cadeias de texto de qualquer comprimento. Vejamos a declaração CREATE TABLE para isto:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20)
);

Ambas as colunas (food_name e food_category) aceitarão valores de string de texto. Entretanto, food_name aceitará valores não maiores do que 50 caracteres. Esta limitação é especificada em VARCHAR(50); da mesma forma, food_category não aceitará mais de 20 caracteres.

Suponha que desejamos criar uma nova versão da tabela com uma coluna adicional. Queremos armazenar a data em que o item alimentar foi cozinhado ou preparado. Vamos chamar esta coluna adicional prepared_on e usar o tipo de dados DATE para isso. A declaração CREATE TABLE para a nova versão da tabela é:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE
);

Os valores válidos para a coluna prepared_on incluem '2022-11-03' e '2022-11-02'. O formato exato das datas pode variar; outros formatos válidos comuns são 'mm/dd/yyyy' e 'yyyymmdd'. O seguinte INSERT mostra como criar um registro na tabela foods:

INSERT INTO foods
VALUES ('Chicken with mashed potatoes','Main Dish','11/08/2022');

Encontre mais sobre INSERT neste artigo.

A instrução SQL SELECT abaixo mostra como lemos os registros na tabela e vemos como são os registros:

SELECT food_name, food_category, prepared_on FROM foods;

Na imagem a seguir, você vê como o cliente SQL mostra os nomes das colunas e os tipos de dados para cada coluna retornada pela instrução SELECT:

Que tipo de dados escolher para uma coluna ao criar uma tabela em SQL

Encontre mais sobre a instrução SELECT aqui.

Se você nunca lidou com bancos de dados, eu recomendo o curso Tipos de Dados em SQL. Neste curso, você aprende sobre tipos de dados comuns no SQL Server, MySQL, Oracle e PostgreSQL. Se você veio aqui em busca de informações sobre como criar tabelas, um curso muito completo O Básico da Criação de Tabelas em SQL ensina os blocos básicos de criação de tabelas no MySQL, SQL Server, Oracle e PostgreSQL. Finalmente, você pode querer ler sobre o curso SQL para Iniciantes no artigo Why Take the "SQL para Iniciantes" Course - a razão pela qual este curso online foi criado, a filosofia por trás dele, e o que ele contém.

Tipos de Dados Numéricos

Agora que a data de preparação para cada item alimentar está na tabela, suponhamos que queremos incluir uma coluna para armazenar quantos dias um item alimentar pode ser vendido antes de sua expiração. Este é um número; até agora, não incluímos nenhuma coluna numérica na tabela. foods.

Em bancos de dados SQL, há vários tipos de dados para dados numéricos. Precisamos analisar que tipo de número temos que saber como proceder.

Se os valores que você deseja armazenar na coluna são números sem casas decimais, o tipo de dados a serem utilizados é INTEGER. Exemplos de valores inteiros são 10, 1, 1234, 302123, 0, e até números negativos como -10 e -90. A regra é simples: qualquer número sem decimais é um valor válido a ser armazenado como um tipo de dado INTEGER. Vamos incluir a coluna valid_days como o tipo de dados INTEGER:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER
);

Digamos que agora queremos incluir na tabela uma coluna para armazenar o preço de cada item alimentar. Criamos uma coluna chamada price. Esta coluna terá valores numéricos com casas decimais, portanto utilizaremos o tipo de dados NUMERIC. Este tipo de dados aceita números decimais com qualquer número de dígitos após o ponto decimal. Então, criando a tabela foods parece ser o seguinte:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER,
	price			NUMERIC(6,2)
);

Na declaração CREATE TABLE acima, usamos o tipo de dados NUMERIC(6,2) para armazenar preços com um comprimento máximo de 6 dígitos, 2 dos quais estão após o ponto decimal. Por exemplo, 10.25, 1.3, e 1234.56 são valores válidos para NUMERIC(6,2).

O tipo de dados booleanos

Outro tipo de dado importante é BOOLEAN. Este tipo de dado é usado para representar ou armazenar em uma tabela um de apenas dois valores possíveis: TRUE ou FALSE.

Suponhamos que queremos identificar quais alimentos são orgânicos certificados. Podemos incluir uma coluna chamada is_organic_certified do tipo de dados BOOLEAN. Como você pode imaginar, o valor TRUE na coluna is_organic_certified indica que o item alimentar é certificado orgânico. A nova versão da declaração CREATE TABLE é:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_on			DATE,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

Neste ponto, temos uma tabela com várias colunas. Vamos criar um novo registro usando INSERT, como fizemos anteriormente:

INSERT INTO foods VALUES ('Apple Pie','Dessert','11/07/2022',3,3.78, True);

E novamente, fazemos um SELECT para ver os dados na tabela.

SELECT food_name, food_category, prepared_on,
       valid_days, price, is_organic_certified
FROM foods;
Que tipo de dados escolher para uma coluna ao criar uma tabela em SQL

Antes de concluir esta seção, gostaria de recomendar dois artigos sobre os tipos de dados numéricos. O primeiro é "Compreendendo os tipos de dados numéricos em SQL" sobre os vários tipos de dados numéricos disponíveis nos bancos de dados SQL. O segundo é "Tipos de dados numéricos vs. tipos de dados decimais em SQL" com uma explicação interessante sobre as diferenças entre NUMERIC e DECIMAL tipos de dados SQL.

Tipos de dados relacionados a data e hora

Já introduzimos o tipo de dado DATA para armazenar um único valor de data em uma tabela SQL. Nesta seção, introduzimos mais dois tipos de dados relacionados a valores de data e hora.

O primeiro é TIMESTAMP para armazenamento de um ponto no tempo com a data e a hora. Por exemplo, podemos armazenar a data e a hora de nascimento de uma pessoa como '1998-03-03 11:23:15' em uma coluna do tipo de dados TIMESTAMP.

Vamos tentar isto com nossa mesa foods. Suponha que queremos armazenar não apenas a data em que o alimento é preparado, mas também o tempo porque o tempo específico pode ser importante para a expiração do alimento em alguns casos. Então, a declaração CREATE TABLE se torna:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

Quando armazenamos um novo registro na mesa foodso valor para prepared_at deve seguir um formato como '2022-11-03 11:30:45'. Dito isto, não precisamos armazenar os segundos porque esse nível de detalhe não é necessário para a expiração dos alimentos. Portanto, podemos omitir os segundos e usar valores que se pareçam com '2022-11-03 11:30'. A coluna TIMESTAMP aceitará este valor e armazenará o '2022-11-03 11:30:00' no banco de dados.

Outro tipo de dado relacionado a data e hora é INTERVAL, usado para representar um período de tempo. Por exemplo, o valor '11:30' do tipo INTERVAL representa um período de 11 horas e 30 minutos, e o valor '1:20:35.145' representa 1 hora, 20 minutos, 35 segundos, e 145 milissegundos.

Estes não são os únicos formatos válidos para os valores INTERVAL. Há muitos formatos diferentes para especificar um valor do tipo INTERVAL, dependendo de quais unidades de tempo (dias, horas, minutos ou segundos) queremos incluir.

Vamos aplicar este tipo de dados à nossa tabela foods. Suponha que tenhamos um prazo de validade para cada item alimentar: 8 horas para uma salada, 24 horas para purê de batata, etc. Para armazenar estas informações, incluímos a coluna expiration_period do tipo de dados INTERVAL. A declaração CREATE TABLE modificada é parecida com esta:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN,
	expiration_period		INTERVAL
);

Recomendo o artigo "Para que serve SQL?", que discute por que as habilidades de dados como SQL são tão importantes. Há também um artigo interessante intitulado "Uma Visão Geral dos Tipos de Dados MySQL" que explica os tipos de dados mais importantes disponíveis no MySQL.

Aprenda os tipos de dados SQL e crie suas próprias tabelas

Cobrimos os principais tipos de dados SQL neste artigo. Começamos com tipos de dados de texto, depois discutimos tipos de dados numéricos, e fechamos com tipos de dados mais específicos como BOOLEAN, INTERVAL, e TIMESTAMP.

Gostaria também de sugerir mais alguns artigos. O primeiro é "O que é SQL?" onde você encontra respostas a perguntas de alto nível como "O que é SQL?" ou "Por que eu deveria aprender?" O segundo é "Sintaxe SQL" para aqueles que estão iniciando o processo de aprendizagem de SQL. Na ciência da computação, a sintaxe da linguagem é uma das principais razões para uma frustrante experiência de aprendizagem, portanto, é importante ter um bom começo com a sintaxe SQL.

Há outros tópicos importantes relacionados aos tipos de dados que não abordamos no âmbito deste artigo. Por exemplo, há uma técnica chamada casting que tem a ver com a mudança do tipo de dados de um determinado dado para outro tipo de dados válidos.

SQL é uma linguagem fácil de aprender. Entretanto, há muitos conceitos ou técnicas - como a fundição - a dominar para alavancar o poder total da linguagem. Continue aprendendo SQL, pratique SQL, invista em suas habilidades, e invista em si mesmo!