Volver a la lista de artículos Artículos
Lectura de 10 minutos

Qué Tipo de Datos Elegir para una Columna al Crear una Tabla en SQL

Las bases de datos almacenan valores de datos de varios tipos. Por ejemplo, puede almacenar el nombre de un producto como una cadena de texto, el precio de un producto como un número o la fecha de venta de un producto como un valor de fecha. Estos valores (el nombre del producto, el precio y la fecha de venta) se almacenan como distintos tipos de datos. En este artículo, explicamos varios tipos de datos SQL con ejemplos reales.

Creación de una tabla en SQL

SQL es un lenguaje para manipular datos en bases de datos. Creado a principios de los años 70, sigue utilizándose hoy en día en casi todas las bases de datos relacionales después de 50 años. Aprender SQL sigue siendo muy popular.

SQL se utiliza como lenguaje de datos estándar para manipular y consultar datos en las bases de datos más populares. No creo que me equivoque si digo que todos utilizamos aplicaciones que emplean consultas SQL varias veces al día en nuestros teléfonos móviles u ordenadores sin darnos cuenta.

SQL también es un lenguaje fácil de aprender, muy parecido al inglés y con una curva de aprendizaje poco pronunciada. Tomemos como ejemplo la siguiente consulta SQL:

SELECT employee_id, employee_name FROM employees WHERE salary > 75000

Probablemente puedas adivinar qué datos devuelve esta consulta: el ID y el nombre de los empleados que ganan más de 75.000 dólares. Fácil, ¿verdad?

Sin embargo, antes de poder consultar los datos de una base de datos, tenemos que almacenarlos en ella. Las bases de datos utilizan tablas para almacenar los registros de datos. Una tabla tiene un conjunto de campos (también conocidos como columnas).

Para aprender más sobre tablas, te sugiero el curso Creación de tablas en SQL. Es un curso práctico con unos 80 ejercicios para equiparte con todo lo que necesitas para empezar a crear tablas en bases de datos SQL.

Una tabla típica para almacenar datos sobre empleados puede tener campos como employee_id, employee_name, y salary. Puedes incluir cualquier campo a la tabla; puedes incluir otros campos basados en tus necesidades, como el departamento al que pertenece el empleado y la fecha de cumpleaños del empleado.

Sin embargo, cuando defina un nuevo campo en una tabla, es obligatorio que especifique su tipo de datos. El objetivo principal de este artículo es explorar qué tipo de datos elegir para un campo al crear una tabla en SQL.

Empecemos creando una tabla sencilla llamada foods para una empresa de comida a domicilio. Sólo tiene dos columnas o campos: food_name y food_category. Como estas dos columnas almacenarán valores de texto, utilizaremos el tipo de datos VARCHAR, que se utiliza para almacenar cadenas de texto de cualquier longitud. Veamos la sentencia CREATE TABLE para ello:

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

Ambas columnas (food_name y food_category) aceptarán valores de cadena de texto. Sin embargo, food_name aceptará valores de no más de 50 caracteres. Esta limitación se especifica en VARCHAR(50); de forma similar, food_category no aceptará más de 20 caracteres.

Supongamos que queremos crear una nueva versión de la tabla con una columna adicional. Queremos almacenar la fecha en que se cocinó o preparó el alimento. Llamemos a esta columna adicional prepared_on y utilicemos el tipo de datos DATE para ella. La sentencia CREATE TABLE para la nueva versión de la tabla es:

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

Los valores válidos para la columna prepared_on incluyen '2022-11-03' y '2022-11-02'. El formato exacto de las fechas puede variar; otros formatos válidos comunes son 'mm/dd/yyyy' y 'yyyymmdd'. El siguiente INSERT muestra cómo crear un registro en la tabla foods:

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

Más información sobre INSERT en este artículo.

La sentencia SQL SELECT que se muestra a continuación muestra cómo leemos los registros de la tabla y vemos qué aspecto tienen:

SELECT food_name, food_category, prepared_on FROM foods;

En la siguiente imagen, se ve cómo el cliente SQL muestra los nombres de las columnas y los tipos de datos de cada columna devuelta por la sentencia SELECT:

Qué tipo de datos elegir para una columna al crear una tabla en SQL

Más información sobre la sentencia SELECT aquí.

Si nunca has trabajado con bases de datos, te recomiendo el curso Tipos de Datos en SQL. En este curso, aprenderás sobre los tipos de datos comunes en SQL Server, MySQL, Oracle y PostgreSQL. Si has llegado aquí buscando información sobre la creación de tablas, un curso muy completo Los fundamentos de la creación de tablas en SQL te enseña los bloques básicos de la creación de tablas en MySQL, SQL Server, Oracle y PostgreSQL. Por último, puede que quieras leer sobre el cursoSQL para principiantes en el artículo Por qué hacer el curso "SQL para principiantes " - la razón por la que se creó este curso online, la filosofía que hay detrás y lo que contiene.

Tipos de Datos Numéricos

Ahora que la fecha de preparación de cada alimento está en la tabla, supongamos que queremos incluir una columna para almacenar cuántos días puede venderse un alimento antes de su caducidad. Se trata de un número; hasta ahora, no hemos incluido ninguna columna numérica en la tabla foods.

En las bases de datos SQL, existen varios tipos de datos numéricos. Debemos analizar qué tipo de número tenemos para saber cómo proceder.

Si los valores que queremos almacenar en la columna son números sin decimales, el tipo de dato a utilizar es INTEGER. Ejemplos de valores enteros son 10, 1, 1234, 302123, 0, e incluso números negativos como -10 y -90. La regla es simple: cualquier número sin decimales es un valor válido para ser almacenado como un tipo de datos INTEGER. Incluyamos la columna valid_days como tipo de datos INTEGER:

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

Supongamos que ahora queremos incluir en la tabla una columna para almacenar el precio de cada alimento. Creamos una columna llamada price. Esta columna tendrá valores numéricos con decimales, por lo que utilizaremos el tipo de datos NUMERIC. Este tipo de datos acepta números decimales con cualquier número de dígitos después del punto decimal. Entonces, la creación de la tabla foods tiene el siguiente aspecto:

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

En la sentencia CREATE TABLE anterior, utilizamos el tipo de datos NUMERIC(6,2) para almacenar precios con una longitud máxima de 6 dígitos, 2 de ellos después del punto decimal. Por ejemplo, 10.25, 1.3 y 1234.56 son valores válidos para NUMERIC(6,2).

El tipo de datos booleano

Otro tipo de datos importante es BOOLEAN. Este tipo de datos se utiliza para representar o almacenar en una tabla uno de los dos únicos valores posibles: TRUE o FALSE.

Supongamos que queremos identificar qué alimentos tienen certificación ecológica. Podemos incluir una columna llamada is_organic_certified del tipo de datos BOOLEAN. Como puede imaginar, el valor TRUE en la columna is_organic_certified indica que el alimento es certificado ecológico. La nueva versión de la sentencia CREATE TABLE es:

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
);

En este punto, tenemos una tabla con varias columnas. Vamos a crear un nuevo registro utilizando INSERT como hicimos anteriormente:

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

Y de nuevo, hacemos un SELECT para ver los datos de la tabla.

SELECT food_name, food_category, prepared_on,
       valid_days, price, is_organic_certified
FROM foods;
Qué tipo de datos elegir para una columna al crear una tabla en SQL

Antes de concluir esta sección, quiero recomendar dos artículos sobre tipos de datos numéricos. El primero es "Understanding Numerical Data Types in SQL" sobre los diversos tipos de datos numéricos disponibles en las bases de datos SQL. El segundo es "Numeric vs. Decimal Data Types in SQL" con una interesante explicación de las diferencias entre los tipos de datos SQL NUMERIC y DECIMAL.

Tipos de Datos Relacionados con la Fecha y la Hora

Ya hemos introducido el tipo de dato DATE para almacenar un único valor de fecha en una tabla SQL. En esta sección, presentamos otros dos tipos de datos relacionados con valores de fecha y hora.

El primero es TIMESTAMP para almacenar un punto en el tiempo con la fecha y la hora. Por ejemplo, podemos almacenar la fecha y hora de nacimiento de una persona como '1998-03-03 11:23:15' en una columna del tipo de datos TIMESTAMP.

Probemos esto con nuestra tabla foods. Supongamos que queremos almacenar no sólo la fecha de preparación del alimento, sino también la hora, ya que en algunos casos la hora específica puede ser importante para la caducidad de los alimentos. Entonces, la sentencia CREATE TABLE se convierte en:

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
);

Cuando almacenamos un nuevo registro en la tabla foodsel valor de prepared_at debe seguir un formato como '2022-11-03 11:30:45'. Dicho esto, no necesitamos almacenar los segundos porque ese nivel de detalle no es necesario para la caducidad de los alimentos. Por lo tanto, podemos omitir los segundos y utilizar valores parecidos a '2022-11-03 11:30'. La columna TIMESTAMP aceptará este valor y almacenará '2022-11-03 11:30:00' en la base de datos.

Otro tipo de datos relacionado con la fecha y la hora es INTERVAL, utilizado para representar un periodo de tiempo. Por ejemplo, el valor '11:30' del tipo INTERVAL representa un periodo de 11 horas y 30 minutos, y el valor '1:20:35.145' representa 1 hora, 20 minutos, 35 segundos y 145 milisegundos.

Estos no son los únicos formatos válidos para los valores de INTERVAL. Existen muchos formatos diferentes para especificar un valor del tipo INTERVAL dependiendo de las unidades de tiempo (días, horas, minutos o segundos) que queramos incluir.

Apliquemos este tipo de datos a nuestra tabla foods. Supongamos que tenemos un periodo de caducidad para cada alimento: 8 horas para una ensalada, 24 horas para un puré de patatas, etc. Para almacenar esta información, incluimos la columna expiration_period del tipo de datos INTERVAL. La sentencia CREATE TABLE modificada tiene el siguiente aspecto:

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
);

Recomiendo el artículo "¿Para qué se utiliza SQL?", en el que se explica por qué son tan importantes los conocimientos de datos como SQL. También hay un interesante artículo titulado "An Overview of MySQL Data Types" que explica los tipos de datos más importantes disponibles en MySQL.

Aprenda Tipos de Datos SQL y Cree sus Propias Tablas

Hemos cubierto los principales tipos de datos SQL en este artículo. Comenzamos con los tipos de datos de texto, luego discutimos los tipos de datos numéricos, y cerramos con tipos de datos más específicos como BOOLEAN, INTERVAL, y TIMESTAMP.

También me gustaría sugerir algunos artículos más. El primero es "¿Qué es SQL?" donde se encuentran respuestas a preguntas de alto nivel como "¿Qué es SQL?" o "¿Por qué debería aprenderlo?" El segundo es "Sintaxis SQL" para aquellos que están iniciando el proceso de aprendizaje de SQL. En informática, la sintaxis del lenguaje es una de las principales razones de una experiencia de aprendizaje frustrante, por lo que empezar bien con la sintaxis SQL es importante.

Hay otros temas importantes relacionados con los tipos de datos que no cubrimos en el ámbito de este artículo. Por ejemplo, existe una técnica llamada casting que tiene que ver con el cambio del tipo de datos de un dato dado a otro tipo de datos válido.

SQL es un lenguaje fácil de aprender. Sin embargo, hay un montón de conceptos o técnicas - como el casting - que dominar para aprovechar toda la potencia del lenguaje. Sigue aprendiendo SQL, practica SQL, invierte en tus habilidades e invierte en ti mismo.