Ir al contenido principal

CREATE TABLE en SQL: Diseño de esquemas maestros y mejores prácticas

Comprende cómo CREATE TABLE da forma a tu base de datos. Aprende la sintaxis clave, los tipos de datos, las restricciones y las técnicas de optimización para crear esquemas escalables.
Actualizado 15 ene 2026  · 7 min leer

La instrucción « CREATE TABLE » es la base de cualquier diseño de base de datos relacional. Define qué datos almacenas, cómo se estructuran y las reglas que garantizan su exactitud.

En este tutorial, te guiaré a través de los fundamentos de la sintaxis de CREATE TABLE, opciones de diseño prácticas y ejemplos reales para ayudarte a crear tablas intuitivas y eficientes que satisfagan tanto las necesidades actuales como el crecimiento futuro.

Si eres nuevo en SQL, considera comenzarcon nuestro curso Introducción a SQL o el curso SQL intermedio para adquirir una base sólida. Además, la hoja de referencia rápida sobre conceptos básicos de SQL, que puedes descargar, me parece una referencia muy útil, ya que incluye todas las funciones SQL más comunes.

El papel de CREATE TABLE en el diseño de bases de datos

La instrucción « CREATE TABLE » es el comando principal del lenguaje de definición de datos (DDL) que determina cómo se almacenan, organizan y acceden a tus datos. Antes de escribirla, debes decidir qué representa la tabla, cómo se conecta con otras y cómo su estructura respaldará futuras consultas. 

La sintaxis básica incluye el nombre de la tabla seguido de una lista de columnas, cada una definida con un tipo de datos y restricciones opcionales. Considera la siguiente sintaxis:

-- Create table syntax
CREATE TABLE schema_name.table_name (
    column_name data_type constraint,
    column_name data_type constraint,
    column_name data_type constraint,
    ...
);

Dónde:

  • schema_name: Espacio de nombres opcional para organizar tablas.

  • table_name: Nombre claro y descriptivo para la entidad.

  • column_name: El nombre de un campo (atributo) de la tabla.

  • data_type: Define el formato, como INT, VARCHAR o DATE.

  • constraint: Reglas opcionales como PRIMARY KEY, NOT NULL o UNIQUE.

Esta sintaxis es coherente en las principales plataformas SQL, como MySQL, PostgreSQL y SQL Server, con solo pequeñas diferencias dialectales en las opciones avanzadas. Por lo tanto, debes seguir unas convenciones de nomenclatura claras para los nombres de las tablas y columnas a fin de mantener la coherencia entre estas plataformas.

Definición de columnas, tipos de datos y restricciones

Ahora que ya hemos visto cómo crear la estructura de la tabla, veamos cómo definir las columnas que dan forma a los datos. Una definición de columna se compone de tres elementos: el nombre de la columna, su tipo de datos y sus restricciones.

Elegir los tipos de datos adecuados optimiza el almacenamiento y el rendimiento de las consultas, como por ejemplo utilizar INT para los ID numéricos o VARCHAR para el texto de longitud variable. Las malas decisiones, como utilizar tipos de datos grandes innecesariamente, pueden provocar una pérdida de espacio y ralentizar las consultas.

Las restricciones aplican las reglas que mantienen tus datos fiables y conectados. Por ejemplo, el identificador único de fila ( PRIMARY KEY ) identifica de forma única cada fila, y el identificador de tabla ( FOREIGN KEY ) vincula las tablas para mantener las relaciones. La restricción DEFAULT establece valores automáticos, mientras que CHECK garantiza que los valores cumplan criterios específicos. 

Considera el ejemplo siguiente, que muestra restricciones y tipos de datos bien definidos. 

-- Create table syntax with data types and constraints defined
CREATE TABLE orders (
    order_id INT PRIMARY KEY,          -- Proper PK
    user_id INT NOT NULL,              -- Required relationship
    total DECIMAL(10,2) NOT NULL,      -- Exact monetary value
    status VARCHAR(20) DEFAULT 'new',  -- Controlled default
    FOREIGN KEY (user_id) REFERENCES users(user_id)  -- Enforce relationship
);

La siguiente consulta muestra un ejemplo de diseño deficiente de una tabla en el que la falta de claves y restricciones, los tipos de tamaño excesivo y las elecciones de datos imprecisas pueden dar lugar a un almacenamiento inconsistente o ineficiente.

CREATE TABLE orders (
    id VARCHAR(50),        -- Unnecessary string PK
    user VARCHAR(255),     -- No relationship enforced
    total FLOAT,           -- Risky for money calculations
    status TEXT            -- No constraints or defaults
);

Como buena práctica, asegúrate siempre de definir explícitamente los tipos de datos y las restricciones de acuerdo con el diseño de tus tablas y los requisitos empresariales.

Recomiendorealizar nuestro curso Introducción a las bases de datos relacionales en SQL paraaprender a crear tablas, aplicar relaciones y restricciones entre tablas.

Diseño de tablas para escenarios del mundo real

Una vez que hayas comprendido la sintaxis de CREATE TABLE, te mostraré cómo diseñar tablas que se ajusten a los flujos de trabajo del mundo real. 

Ejemplo de comercio electrónico

Supongamos que quieres crear un sistema de comercio electrónico. Tendrás las tablas customers, orders y products con claves externas que vinculan estas tablas para reforzar las relaciones y la integridad referencial.

En primer lugar, crearás la tabla customers con el siguiente esquema para almacenar los perfiles de usuario:

-- Create customers table to store user profiles
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,               
    name VARCHAR(150) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

En segundo lugar, la tabla products tendrá el siguiente esquema para almacenar cada elemento en la plataforma.

-- Create products table for catalog of items for sale
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    price DECIMAL(10,2) NOT NULL,               -- Accurate money type
    stock INT CHECK (stock >= 0),               -- Prevent negative inventory
    created_at TIMESTAMP DEFAULT NOW()
);

Por último, tendrás la tabla orders para almacenar las compras realizadas por los clientes.

-- Create orders table
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT NOT NULL,                   -- Link order → customer
    order_date TIMESTAMP DEFAULT NOW(),
    total_amount DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    -- Enforce relationship and ensure customer exists
);

Al crear varias tablas, utiliza siempre la restricción « FOREIGN KEY » (relación de referencia) para establecer la relación entre una columna de la tabla secundaria y la « PRIMARY KEY » (tabla de referencias) de la tabla principal, con el fin de garantizar la integridad referencial. En nuestro ejemplo, esta relación garantiza que no puedas tener un pedido para un cliente que no existe.

Tablas temporales frente a tablas clonadas

A veces, es posible que desees crear una tabla para un caso de uso rápido o para probar una transformación de datos sin afectar al esquema en vivo. En tal caso, puedes crear una tabla temporal o clonada. Veamos cómo crear cada uno:

  • Tablas temporales: Son tablas de corta duración, a menudo visibles solo para la sesión actual de la base de datos, que se eliminan automáticamente cuando finaliza la sesión. Son útiles para transformaciones de datos complejas, procesamiento de datos en varios pasos o pruebas. La siguiente consulta muestra cómo crear una tabla temporal en PostgreSQL.
-- Temporary copy for short-term analysis
CREATE TEMPORARY TABLE temp_sales AS
SELECT * FROM sales
WHERE sale_date >= CURRENT_DATE - INTERVAL '7 days';
  • Tablas clonadas: Son copias exactas de las tablas existentes, incluidos los índices y las restricciones. Son útiles para transacciones delicadas en las que es necesario preservar la integridad de los datos durante las modificaciones.
-- Create quick structural clone for testing or recovery
CREATE TABLE orders_backup AS
SELECT * FROM orders;

Normalización frente a desnormalización

Al diseñar tablas, el equilibrio entre la normalización y la desnormalización depende de casos de uso específicos, el volumen de datos y los patrones de consulta para optimizar la eficacia y la facilidad de mantenimiento del sistema. A continuación se muestra un resumen de cuándo utilizar cada método:

  • Normalización: Este método consiste en dividir tablas grandes en otras más pequeñas y relacionadas entre sí, de modo que cada dato que no sea clave se almacene una sola vez. Tu ventaja es una mayor eficiencia, una redundancia minimizada y un mantenimiento más sencillo.
  • Desnormalización: Esto implica la adición estratégica de redundancia, como incluir el nombre del cliente en cada línea del pedido. Este método mejora el rendimiento de lectura para requisitos específicos de generación de informes o análisis, especialmente cuando las uniones son lentas.

Optimización y automatización de la creación de tablas

Al crear tablas para tu base de datos, debes tener en cuenta el rendimiento y la facilidad de mantenimiento en el futuro. Basándome en mi amplia experiencia en el diseño de bases de datos, considero útiles las siguientes técnicas de optimización:

  • Indexación: Añadir índices en las columnas que se utilizan con frecuencia en las búsquedas acelera las consultas. Cuando defines la tabla ` PRIMARY KEY`, se crea automáticamente un índice único.
  • Partición: En el caso de tablas grandes, la partición divide los datos en fragmentos más pequeños y manejables según criterios como la fecha, lo que mejora la eficiencia de las consultas al limitar el alcance del escaneo.
  • Columnas calculadas: Algunas bases de datos, como SQL Server y PostgreSQL, permiten definir columnas calculadas que calculan dinámicamente valores a partir de otras columnas. Este enfoque puede reducir el almacenamiento redundante de datos y mejorar la velocidad de las consultas.

En los flujos de trabajo modernos, la automatización desempeña un papel importante en el diseño y la gestión de esquemas. Puedes utilizar las siguientes herramientas y consultas para documentar, replicar o automatizar el proceso:

Herramienta/Método

Objetivo

Ejemplo de aplicación

pg_dump/ Copias de seguridad de bases de datos

Se utiliza para generar scripts de CREATE TABLE a partir de una base de datos existente.

Réplica de un entorno de producción para realizar pruebas o migraciones.

Consultas de esquemas de información

Consultar directamente las vistas de la base de datos integrada INFORMATION_SCHEMA.COLUMNS para recuperar los metadatos del esquema.

Automatizar la documentación o generar dinámicamente código de aplicación basado en definiciones de columnas.

FuncionesSQL/Procedimientos almacenados

Escribir rutinas de base de datos que comprueben si una tabla existe, la eliminen y luego la vuelvan a crear (lo que a menudo se denomina patrón « IF EXISTS »/« CREATE TABLE »).

Automatización de scripts de implementación o configuración

Para la planificación visual, puedes utilizar herramientas GUI,como pgAdmin, MySQL Workbench o SQL Server Management Studio, para generar scripts DDL, dibujar diagramas de relaciones y mejorar la colaboración entre los miembros del equipo, tanto técnicos como no técnicos.

Errores comunes y mejores prácticas

El diseño de tablas eficientes y fáciles de mantener en SQL garantiza que tu base de datos funcione de manera óptima. Los siguientes son los consejos que recomiendo al crear tablas en SQL: 

  • Normalización excesiva: Dividir las tablas en tantos fragmentos pequeños puede complicar las uniones y ralentizar las consultas, mientras que una normalización insuficiente puede provocar redundancia de datos. Para evitarlo, utiliza siempre 3NF inicialmente y, a continuación, utiliza la desnormalización solo para tablas de informes específicas en las que priorices la velocidad de lectura sobre la simplicidad de actualización.

  • Diseño deficiente de las restricciones: Si no defines tus restricciones, como las claves externas que faltan, puedes acabar con registros huérfanos o datos incoherentes que son difíciles de limpiar. Especifica siempre un índice en cada columna que sirva de e FOREIGN KEY a para garantizar que las uniones sean rápidas.

  • Denominación y documentación claras: Utiliza siempre nombres de tablas y columnas predecibles y descriptivos. Mantén un registro de cambios sencillo para las actualizaciones del esquema y evita utilizar abreviaturas que los futuros programadores puedan no entender.

  • Permisos y consideraciones de seguridad: Al diseñar tablas para entornos de producción, concede solo los privilegios necesarios, como los que permiten crear, modificar o eliminar tablas, y separa el acceso de lectura y escritura para proteger los datos críticos. Además, implementa controles a nivel de esquema y registros de auditoría para realizar un seguimiento de los cambios, lo que evita el acceso no autorizado y garantiza el cumplimiento normativo y la seguridad de los datos.

Conclusión

Con los avances en las plataformas de nube, la declaración « CREATE TABLE » (el software es el rey) se está volviendo más flexible. Ahora, las herramientas de automatización y las funciones sin servidor simplifican la gestión de esquemas y las migraciones. Recomiendo explorar temas como los marcos de migración de esquemas (Flyway, Liquibase), el modelado dimensional y las estrategias avanzadas de normalización y desnormalización para ayudarte a crear bases de datos escalables.

También recomiendo realizar nuestro Diseño de bases de datos, en el que aprenderás a crear y gestionar bases de datos y a seleccionar el DBMS más adecuado a tus necesidades. Por último, prueba nuestro ingeniero de datos asociado en SQL programa para aprender los fundamentos de la ingeniería de datos y el almacenamiento de datos. 


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Creo artículos que simplifican la ciencia de los datos y la analítica, haciéndolos fáciles de entender y accesibles.

Preguntas frecuentes

¿Cómo se crean relaciones entre tablas?

Utiliza restricciones de tipo « FOREIGN KEY » que hagan referencia a columnas de otra tabla.

¿Puedes crear una tabla basada en la estructura de otra tabla?

Sí, puedes utilizar la instrucción « CREATE TABLE AS SELECT » para clonar la estructura y, opcionalmente, los datos de una tabla existente.

¿Cuál es la diferencia entre una tabla temporal y una tabla normal?

Las tablas temporales solo existen durante una sesión o transacción, mientras que las tablas normales permanecen en la base de datos.

¿Por qué deberías indexar las columnas utilizadas en las restricciones FOREIGN KEY?

Debes indexar las columnas para acelerar las operaciones de unión entre las tablas principal y secundaria.

Temas

Aprende SQL con DataCamp

Curso

Introducción a SQL

2 h
1.5M
Aprende a crear y consultar bases de datos relacionales utilizando SQL en solo dos horas.
Ver detallesRight Arrow
Iniciar curso
Ver másRight Arrow
Relacionado

Tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

Tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

Tutorial

Introducción a los disparadores SQL: Guía para desarrolladores

Aprende a utilizar los disparadores SQL para automatizar tareas, mantener la integridad de los datos y mejorar el rendimiento de la base de datos. Prueba ejemplos prácticos como los comandos CREATE, ALTER y DROP en MySQL y Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

Tutorial

Base de datos Azure SQL: Configuración y gestión paso a paso

Aprende a crear, conectar, gestionar, consultar y proteger tu base de datos Azure SQL. Esta guía paso a paso cubre todo lo esencial para una configuración óptima de la base de datos.
Anneleen Rummens's photo

Anneleen Rummens

Tutorial

Creación y personalización de tablas dinámicas en Power BI

Aprende a crear tablas dinámicas personalizables en Power BI con formato condicional avanzado y algunos consejos de optimización.
Joleen Bothma's photo

Joleen Bothma

Ver másVer más