Vamos a aprender a crear un Esquema Entidad Relación en SQL o modelo de Base de datos. Con un ejemplo práctico.

¿Qué es un Esquema ER?
Un Esquema de Entidad-Relación (ER) es un diagrama visual utilizado para representar las entidades de una base de datos, sus atributos y las relaciones entre ellas. Este tipo de esquema es esencial para diseñar la estructura de una base de datos relacional antes de implementarla.
Pasos para Crear un Esquema ER
1. Identificación de Elementos Clave
- Entidades: Son objetos o conceptos del mundo real que necesitan ser almacenados en la base de datos. Ejemplos comunes son
Usuario
,Producto
,Pedido
,Curso
. - Atributos: Son las características o propiedades de las entidades. Por ejemplo, para la entidad
Usuario
, los atributos podrían sernombre
,email
yfecha_nacimiento
. - Clave Primaria (PK): Es un atributo que identifica de manera única cada registro en una entidad. Por ejemplo,
id_usuario
para la entidadUsuario
. - Relaciones: Representan cómo las entidades están relacionadas entre sí. Por ejemplo, un
Usuario
puede realizar variosPedidos
. - Clave Foránea (FK): Es un atributo en una entidad que hace referencia a la clave primaria de otra entidad para establecer una relación entre ellas.
2. Dibuja el Esquema ER
Paso 1: Dibuja las Entidades
Cada entidad se representa con un rectángulo. Dentro de cada rectángulo, escribe los atributos de la entidad, subrayando el atributo que actúa como la clave primaria.
Paso 2: Añade las Relaciones
Las relaciones entre las entidades se representan con un rombo. Usa líneas para conectar las entidades con las relaciones. Es importante incluir las cardinalidades de las relaciones. Las cardinalidades describen cuántos registros de una entidad pueden estar relacionados con registros de otra entidad.
Ejemplos de cardinalidades:
- 1:1 significa que un registro en una entidad está relacionado con solo un registro de la otra.
- 1:N significa que un registro en una entidad puede estar relacionado con varios registros en la otra.
- N:M significa que varios registros de una entidad pueden estar relacionados con varios registros de la otra.
Paso 3: Añade Atributos a las Relaciones
Si una relación tiene atributos propios (como la fecha en que un usuario hizo un pedido), añade estos atributos cerca de la relación.
Ejemplo Práctico: Sistema de Ventas
Entidades:
Cliente
(id_cliente, nombre, email)Producto
(id_producto, nombre, precio)Pedido
(id_pedido, fecha, id_cliente)DetallePedido
(id_pedido, id_producto, cantidad)
Relaciones:
- Cliente — hace — Pedido (1:N): Un cliente puede realizar muchos pedidos.
- Pedido — tiene — DetallePedido (1:N): Un pedido puede tener varios productos.
- Producto — aparece en — DetallePedido (1:N): Un producto puede aparecer en varios detalles de pedidos.
Notas:
DetallePedido
es una entidad débil que representa una relación N:M entrePedido
yProducto
.
Herramientas para Crear Diagramas ER
Herramienta | Tipo | Web/App |
---|---|---|
Draw.io | Gratuita / Online | ✅ |
Lucidchart | Freemium / Online | ✅ |
dbdiagram.io | Gratis / Markdown-style | ✅ |
MySQL Workbench | Software técnico | ✅ |
DBeaver | Gratis / Avanzado | ✅ |
Trucos y Buenas Prácticas
- Usa Nombres Claros y Consistentes: Nombra tus entidades en singular, por ejemplo
Usuario
, noUsuarios
. Además, utiliza una convención de nombres coherente (por ejemplo,snake_case
ocamelCase
). - Normaliza la Base de Datos: Evita redundancias y asegúrate de que la base de datos esté normalizada al menos hasta la Tercera Forma Normal (3FN).
- Usa Claves Numéricas como PK: Es más eficiente tener un atributo numérico como
id_usuario
en lugar de usar un campo de texto como el nombre del usuario. - Documenta tu Esquema: Incluye pequeñas descripciones o notas para cada entidad y relación. Esto facilitará el trabajo en equipo y la comprensión del modelo.
- Comienza Simple: No añadas todos los detalles al principio. Comienza con las entidades y relaciones principales, y luego ve añadiendo más detalles conforme se vayan necesitando.
Ejercicio Rápido: Sistema de Cursos Online
Imagina que vas a crear una base de datos para una plataforma de cursos online. ¿Cómo organizarías las siguientes entidades?
Usuario
Curso
Inscripción
¿Qué relaciones y atributos usarías para conectarlas?
Solución:
1. Entidades y Atributos
Entidades:
- Usuario: Representa a un usuario de la plataforma (profesor, estudiante, etc.).
- Atributos:
id_usuario
(PK)nombre
email
fecha_registro
- Atributos:
- Curso: Representa un curso disponible en la plataforma.
- Atributos:
id_curso
(PK)nombre
descripcion
fecha_inicio
- Atributos:
- Inscripción: Representa la relación entre un usuario y un curso en el que se inscribe.
- Atributos:
id_inscripcion
(PK)id_usuario
(FK)id_curso
(FK)fecha_inscripcion
- Atributos:
2. Relaciones y Cardinalidades
- Usuario — Inscripción (1:N): Un
Usuario
puede estar inscrito en variosCursos
, pero cada inscripción está asociada a un solo usuario. - Curso — Inscripción (1:N): Un
Curso
puede tener múltiples inscripciones, pero cada inscripción pertenece a un único curso.
3. Esquema de la Base de Datos
Tablas en SQL
-- Tabla Usuario CREATE TABLE Usuario ( id_usuario INT PRIMARY KEY, nombre VARCHAR(100), email VARCHAR(100) UNIQUE, fecha_registro DATE ); -- Tabla Curso CREATE TABLE Curso ( id_curso INT PRIMARY KEY, nombre VARCHAR(100), descripcion TEXT, fecha_inicio DATE ); -- Tabla Inscripción (relación entre Usuario y Curso) CREATE TABLE Inscripcion ( id_inscripcion INT PRIMARY KEY, id_usuario INT, id_curso INT, fecha_inscripcion DATE, FOREIGN KEY (id_usuario) REFERENCES Usuario(id_usuario), FOREIGN KEY (id_curso) REFERENCES Curso(id_curso) );
Explicación del Modelo Relacional
- La tabla
Usuario
almacena información sobre los usuarios de la plataforma. La clave primaria esid_usuario
, y se guarda información como el nombre, correo electrónico y la fecha en que se registró en la plataforma. - La tabla
Curso
almacena los cursos disponibles en la plataforma. La clave primaria esid_curso
, y cada curso tiene un nombre, descripción y fecha de inicio. - La tabla
Inscripción
es una tabla intermedia que almacena las inscripciones de los usuarios en los cursos. Esta tabla tiene claves foráneasid_usuario
yid_curso
que hacen referencia a las claves primarias de las tablasUsuario
yCurso
, respectivamente. También tiene un atributo adicional:fecha_inscripcion
, que guarda la fecha en la que un usuario se inscribe a un curso.
4. Esquema ER
A continuación, te describo cómo quedaría el diagrama Entidad-Relación (ER).
Diagrama ER
- Entidades:
Usuario
→ Atributos:id_usuario
,nombre
,email
,fecha_registro
Curso
→ Atributos:id_curso
,nombre
,descripcion
,fecha_inicio
Inscripción
→ Atributos:id_inscripcion
,id_usuario
,id_curso
,fecha_inscripcion
- Relaciones:
- Usuario — Inscripción (1:N): Un usuario puede estar inscrito en múltiples cursos, pero cada inscripción tiene un solo usuario.
- Curso — Inscripción (1:N): Un curso puede tener múltiples inscripciones, pero cada inscripción pertenece a un único curso.
Representación Gráfica del Esquema ER
Usuario
yCurso
están conectados aInscripción
mediante relaciones de uno a muchos (1:N).[Usuario] ---< [Inscripción] >--- [Curso]
5. Implementación en SQL
Con el esquema y las relaciones claras, la implementación en SQL podría ser como sigue:
-- Crear la tabla Usuario CREATE TABLE Usuario ( id_usuario INT PRIMARY KEY, nombre VARCHAR(100), email VARCHAR(100) UNIQUE, fecha_registro DATE ); -- Crear la tabla Curso CREATE TABLE Curso ( id_curso INT PRIMARY KEY, nombre VARCHAR(100), descripcion TEXT, fecha_inicio DATE ); -- Crear la tabla Inscripción CREATE TABLE Inscripcion ( id_inscripcion INT PRIMARY KEY, id_usuario INT, id_curso INT, fecha_inscripcion DATE, FOREIGN KEY (id_usuario) REFERENCES Usuario(id_usuario), FOREIGN KEY (id_curso) REFERENCES Curso(id_curso) );
6. Consultas Básicas
- Listar todos los cursos en los que un usuario está inscrito:
SELECT c.nombre, c.descripcion FROM Curso c JOIN Inscripcion i ON c.id_curso = i.id_curso WHERE i.id_usuario = 1;
- Listar todos los usuarios inscritos en un curso:
SELECT u.nombre, u.email FROM Usuario u JOIN Inscripcion i ON u.id_usuario = i.id_usuario WHERE i.id_curso = 2;

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.