Desarrollado por E.F. Codd en 1970, revolucionó el manejo de datos al basarse en teoría matemática de conjuntos y álgebra relacional. Sus principios fundamentales son:
┌──────────────┐ ┌──────────────┐
│ CLIENTES │ │ PEDIDOS │
├──────────────┤ ├──────────────┤
│ id (PK) │───────│ cliente_id │
│ nombre │ │ fecha │
│ telefono │ │ total │
└──────────────┘ └──────────────┘
CLAVE PRIMARIA (PK): Atributo(s) que identifican unívocamente cada tupla
Ej: id_cliente en tabla CLIENTES
CLAVE FORÁNEA (FK): Atributo que referencia una PK en otra tabla
Ej: cliente_id en PEDIDOS que referencia id_cliente en CLIENTES
Componente | Ejemplo | Propósito |
---|---|---|
Tabla | Clientes | Almacenar datos de entidad cliente |
Atributo | nombre, email | Características de la entidad |
Clave Primaria | id_cliente | Identificador único |
Clave Foránea | cliente_id en Pedidos | Relacionar tablas |
Lenguaje formal para manipular relaciones mediante operadores:
1. σcondición(R) # Selección (WHERE)
2. πatributos(R) # Proyección (SELECT columnas)
3. R ∪ S # Unión (UNION)
4. R - S # Diferencia (EXCEPT)
5. R × S # Producto cartesiano
6. R ⋈condición S # Join (JOIN ON)
Operación | Símbolo | Ejemplo SQL |
---|---|---|
Selección | σ | SELECT * FROM clientes WHERE ciudad='Madrid' |
Proyección | π | SELECT nombre, email FROM clientes |
Join | ⋈ | SELECT * FROM clientes JOIN pedidos ON clientes.id = pedidos.cliente_id |
Dadas las tablas:
Expresar en álgebra relacional:
Modelo ER:
┌──────────┐ ┌──────────┐
│ ALUMNO │───┐ │ CURSO │
├──────────┤ │ ├──────────┤
│ id │ └───│ codigo │
│ nombre │<──┐ │ nombre │
└──────────┘ │ └──────────┘
│
│ ┌──────────┐
└───│ MATRÍCULA│
├──────────┤
│ fecha │
│ nota │
└──────────┘
Modelo Relacional:
ALUMNO(id(PK), nombre)
CURSO(codigo(PK), nombre)
MATRICULA(alumno_id(FK), curso_id(FK), fecha, nota)
Ejemplo de limitación:
Un producto con múltiples variantes (tallas, colores)
es difícil modelar elegantemente en puro modelo relacional
Ejercicio: Transformar el siguiente modelo ER a relacional:
┌──────────┐ ┌──────────┐
│ LIBRO │───┐ │ AUTOR │
├──────────┤ │ ├──────────┤
│ ISBN(PK) │ └───│ id(PK) │
│ título │<──┐ │ nombre │
│ editorial│ │ └──────────┘
└──────────┘ │
│ ┌──────────┐
└───│ EJEMPLAR │
├──────────┤
│ código │
│ ubicación│
└──────────┘
LIBRO(ISBN(PK), título, editorial)
AUTOR(id(PK), nombre)
LIBRO_AUTOR(ISBN(FK), autor_id(FK)) # Tabla puente para relación M:N
EJEMPLAR(código(PK), ISBN(FK), ubicación)
Diseñar un modelo relacional para un sistema universitario con:
Guía práctica con conceptos básicos, estructura y ejemplos didácticos para entender el diseño de bases de datos.
El modelo ER es una herramienta de diseño conceptual que nos permite representar la estructura de los datos antes de implementarlos en una base de datos real.
💡 ¿Para qué sirve? Para visualizar las entidades importantes de un sistema y cómo se relacionan entre sí.
Componente | Descripción | Ejemplo |
---|---|---|
Entidad | Objeto del mundo real (persona, cosa, evento) | Cliente , Producto , Pedido |
Atributo | Característica de una entidad | Cliente: ID, Nombre, Teléfono |
Relación | Asociación entre entidades | Cliente compra Producto |
Cardinalidad | Indica cuántas instancias de una entidad se relacionan con otra | 1:N (Un cliente hace muchos pedidos) |
Sistema de Ventas
Entidades: Cliente
, Pedido
, Producto
Relaciones:
1:N
)N:M
)🛠️ Herramientas útiles: draw.io o Lucidchart para crear diagramas ER
Es la implementación práctica del modelo ER en una base de datos real. Los datos se organizan en tablas (relaciones) con filas (tuplas) y columnas (atributos).
Componente | Descripción | Ejemplo en SQL |
---|---|---|
Tabla | Estructura que almacena datos | CREATE TABLE Cliente (...); |
Clave Primaria | Identificador único de una fila | ID INT PRIMARY KEY |
Clave Foránea | Referencia a una clave primaria en otra tabla | cliente_id INT REFERENCES Cliente(ID) |
Restricciones | Reglas para mantener la integridad de los datos | NOT NULL , UNIQUE , FOREIGN KEY |
💻 Práctica interactiva: Usa SQLite Online para probar consultas
Aspecto | Modelo ER (Diseño) | Modelo Relacional (Implementación) |
---|---|---|
Propósito | Diseño conceptual | Almacenamiento físico en tablas |
Elementos | Entidades, relaciones, atributos | Tablas, claves, restricciones SQL |
Uso | Diagramas (abstracto) | Consultas SQL (concreto) |
Diseña un sistema para una biblioteca:
Libro
, Autor
, Préstamo
, Usuario
💡 Solución sugerida:
Esta guía presenta un ejemplo completo del proceso de diseño conceptual de una base de datos para un sistema de gestión de biblioteca, siguiendo los 8 pasos metodológicos establecidos:
Cada paso se desarrolla con ejemplos prácticos del sistema de biblioteca, mostrando la aplicación concreta de la metodología.
Las entidades son objetos o conceptos del mundo real sobre los cuales queremos almacenar información. Deben ser significativas para el sistema y tener atributos propios.
Identificamos las siguientes entidades principales:
Criterios para identificar entidades:
Las relaciones son asociaciones significativas entre entidades. Debemos identificar cómo se conectan las entidades entre sí y la cardinalidad de estas relaciones.
Relación | Entidades | Cardinalidad | Descripción |
---|---|---|---|
escribe | Autor - Libro | 1:N | Un autor puede escribir muchos libros, un libro tiene un autor principal |
publica | Editorial - Libro | 1:N | Una editorial publica muchos libros, un libro tiene una editorial |
realiza | Usuario - Préstamo | 1:N | Un usuario realiza muchos préstamos, un préstamo es de un usuario |
contiene | Préstamo - Libro | 1:1 | Un préstamo contiene exactamente un libro, un libro puede estar en un préstamo |
Relaciones identificadas en el sistema de biblioteca
Tipos de cardinalidad:
Los atributos son características o propiedades de las entidades y relaciones. Debemos asignar a cada entidad y relación sus atributos correspondientes.
Entidad/Relación | Atributos | Tipo | Descripción |
---|---|---|---|
Libro | ISBN, título, año_publicacion, num_paginas, idioma | Simple | Datos básicos del libro |
Autor | nombre, fecha_nacimiento, nacionalidad | Simple | Información del autor |
Usuario | dni, nombre, direccion, telefono, email | Simple | Datos de contacto del usuario |
Préstamo | fecha_prestamo, fecha_devolucion_prevista, fecha_devolucion_real | Simple | Fechas que controlan el préstamo |
escribe | tipo_autor (principal, coautor) | Simple | Rol del autor en el libro |
Atributos asignados a entidades y relaciones
Tipos de atributos:
El dominio define los valores posibles que puede tomar un atributo, incluyendo su tipo de dato y restricciones.
Atributo | Dominio | Restricciones |
---|---|---|
ISBN | VARCHAR(13) | Formato válido de ISBN, NOT NULL, UNIQUE |
título | VARCHAR(200) | NOT NULL |
año_publicacion | INTEGER | Entre 1450 y año actual |
dni | VARCHAR(9) | Formato válido, NOT NULL, UNIQUE |
VARCHAR(100) | Formato válido de email | |
fecha_prestamo | DATE | NOT NULL, ≤ fecha actual |
Dominios y restricciones para atributos clave
Tipos comunes de dominios:
Los identificadores son atributos o conjuntos de atributos que identifican unívocamente cada instancia de una entidad.
Entidad | Identificador | Tipo | Comentarios |
---|---|---|---|
Libro | ISBN | Natural | Identificador único internacional para libros |
Autor | id_autor | Artificial | Se crea un ID numérico porque no hay atributo natural único |
Usuario | dni | Natural | Documento Nacional de Identidad es único por persona |
Préstamo | id_prestamo | Artificial | Número secuencial generado por el sistema |
Editorial | cif | Natural | Código de Identificación Fiscal único para empresas |
Identificadores principales para cada entidad
Tipos de identificadores:
Identificar relaciones de generalización/especialización donde una entidad es una versión más específica de otra.
Identificamos las siguientes jerarquías:
Entidad General | Entidades Específicas | Tipo | Atributos Diferenciadores |
---|---|---|---|
Usuario | Estudiante, Profesor, Personal | Solapamiento |
|
Libro | LibroImpreso, LibroDigital | Exclusiva |
|
Jerarquías de generalización identificadas
Tipos de jerarquías:
Representación gráfica del esquema conceptual que integra todos los elementos identificados.
Leyenda del diagrama:
Diagrama Entidad-Relación completo para el sistema de biblioteca
Convenciones comunes en diagramas ER:
Validación del modelo con los usuarios finales para asegurar que cumple con los requisitos del negocio.
Ejemplo: ¿Necesitamos agregar "Revistas" como entidad separada de "Libros"?
Ejemplo: ¿Un libro puede tener múltiples autores? ¿Necesitamos cambiar la cardinalidad?
Ejemplo: ¿Necesitamos agregar "género" a los libros o "número_carnet" a los usuarios?
Ejemplo: ¿El ISBN identifica unívocamente cada ejemplar físico o necesitamos un "número_inventario"?
Ejemplo: ¿Los tipos de usuario (Estudiante, Profesor) cubren todos los casos necesarios?
Resultado de la revisión:
Después de reuniones con el personal de la biblioteca, se acordaron los siguientes cambios:
El Modelo Entidad-Relación (ER) es un modelo conceptual que nos permite representar los datos y sus relaciones de forma abstracta, mientras que el Modelo Relacional es el modelo lógico que implementaremos finalmente en una base de datos.
🔍 Proceso de transformación: Convertiremos:
Entidad | Atributos |
---|---|
Libro | id_libro (PK), título, año, ISBN |
Autor | id_autor (PK), nombre, nacionalidad |
Usuario | id_usuario (PK), nombre, email, teléfono |
Estructura de entidades para el sistema de biblioteca
Relaciones:
🔑 Observaciones clave:
id_autor
como FK en LibroPrestamo
Entidad | Atributos |
---|---|
Proyecto | id_proyecto (PK), nombre, fecha_inicio, fecha_fin |
Empleado | id_empleado (PK), nombre, especialidad, salario |
Departamento | id_departamento (PK), nombre, presupuesto |
Estructura de entidades para el sistema de proyectos
Relaciones:
Tabla | Atributos | Claves | Relaciones |
---|---|---|---|
Departamento | id_departamento, nombre, presupuesto | PK: id_departamento | Coordina Proyectos (1:N) |
Empleado | id_empleado, nombre, especialidad, salario, id_departamento | PK: id_empleado FK: id_departamento |
Pertenece a Departamento (1:N) Trabaja en Proyectos (N:M) |
Proyecto | id_proyecto, nombre, fecha_inicio, fecha_fin, id_departamento | PK: id_proyecto FK: id_departamento |
Coordinado por Departamento (1:N) Asignado a Empleados (N:M) |
Asignacion | id_asignacion, id_empleado, id_proyecto, horas_semana, rol | PK: id_asignacion FK: id_empleado, id_proyecto |
Tabla intermedia para relación N:M |
Estructura relacional resultante para el sistema de proyectos