Cómo hacer un Esquema Entidad-Relación (ER) en Base de Datos

Tiempo de lectura: 5 minutos

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

Acantilados mar -  Pexels

¿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 ser nombre, email y fecha_nacimiento.
  • Clave Primaria (PK): Es un atributo que identifica de manera única cada registro en una entidad. Por ejemplo, id_usuario para la entidad Usuario.
  • Relaciones: Representan cómo las entidades están relacionadas entre sí. Por ejemplo, un Usuario puede realizar varios Pedidos.
  • 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 entre Pedido y Producto.

Herramientas para Crear Diagramas ER

HerramientaTipoWeb/App
Draw.ioGratuita / Online
LucidchartFreemium / Online
dbdiagram.ioGratis / Markdown-style
MySQL WorkbenchSoftware técnico
DBeaverGratis / Avanzado

Trucos y Buenas Prácticas

  1. Usa Nombres Claros y Consistentes: Nombra tus entidades en singular, por ejemplo Usuario, no Usuarios. Además, utiliza una convención de nombres coherente (por ejemplo, snake_case o camelCase).
  2. 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).
  3. 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.
  4. 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.
  5. 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
  • Curso: Representa un curso disponible en la plataforma.
    • Atributos:
      • id_curso (PK)
      • nombre
      • descripcion
      • fecha_inicio
  • 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

2. Relaciones y Cardinalidades

  • Usuario — Inscripción (1:N): Un Usuario puede estar inscrito en varios Cursos, 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 es id_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 es id_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áneas id_usuario y id_curso que hacen referencia a las claves primarias de las tablas Usuario y Curso, 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 y Curso están conectados a Inscripció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;

Deja un comentario