Modelado físico avanzado relacional de bases de datos
En este módulo se aplicarán todos los conceptos aprendidos a través de ejercicios prácticos y un proyecto final basado en un caso real. Además, exploraremos cómo se implementan y optimizan bases de datos en sistemas de gran escala.
Proyecto Final: Sistema de Gestión para una Clínica
Descripción del Caso
Desarrollaremos un sistema de base de datos para una clínica que debe gestionar:
- Pacientes: Datos personales, historial médico.
- Citas: Fecha, hora, médico asignado.
- Médicos: Especialidad, horario disponible.
Modelo Lógico
Entidades:
- Pacientes:
- Atributos:
idPaciente,nombre,edad,sexo,telefono.
- Atributos:
- Médicos:
- Atributos:
idMedico,nombre,especialidad,horario.
- Atributos:
- Citas:
- Atributos:
idCita,fecha,hora,idPaciente,idMedico.
- Atributos:
Relaciones:
- Un paciente puede tener múltiples citas.
- Un médico puede atender múltiples citas.
Implementación del Modelo Físico
Creación de las tablas en MySQL:
1CREATE TABLE Pacientes ( 2 idPaciente INT AUTO_INCREMENT PRIMARY KEY, 3 nombre VARCHAR(100) NOT NULL, 4 edad INT NOT NULL, 5 sexo ENUM('M', 'F') NOT NULL, 6 telefono VARCHAR(15) 7); 8 9CREATE TABLE Medicos ( 10 idMedico INT AUTO_INCREMENT PRIMARY KEY, 11 nombre VARCHAR(100) NOT NULL, 12 especialidad VARCHAR(50), 13 horario VARCHAR(100) 14); 15 16CREATE TABLE Citas ( 17 idCita INT AUTO_INCREMENT PRIMARY KEY, 18 fecha DATE NOT NULL, 19 hora TIME NOT NULL, 20 idPaciente INT NOT NULL, 21 idMedico INT NOT NULL, 22 FOREIGN KEY (idPaciente) REFERENCES Pacientes(idPaciente), 23 FOREIGN KEY (idMedico) REFERENCES Medicos(idMedico) 24);
Carga de Datos Iniciales
Insertar datos de ejemplo en las tablas:
1-- Pacientes 2INSERT INTO Pacientes (nombre, edad, sexo, telefono) 3VALUES 4('Juan Pérez', 35, 'M', '555-1234'), 5('Ana López', 29, 'F', '555-5678'); 6 7-- Médicos 8INSERT INTO Medicos (nombre, especialidad, horario) 9VALUES 10('Dr. González', 'Cardiología', 'Lunes-Viernes 9:00-15:00'), 11('Dra. Martínez', 'Pediatría', 'Lunes-Miércoles 10:00-14:00'); 12 13-- Citas 14INSERT INTO Citas (fecha, hora, idPaciente, idMedico) 15VALUES 16('2024-12-20', '10:30', 1, 1), 17('2024-12-21', '11:00', 2, 2);
Consultas Comunes
-
Listar todas las citas de un paciente:
1SELECT Citas.fecha, Citas.hora, Medicos.nombre AS medico 2FROM Citas 3JOIN Pacientes ON Citas.idPaciente = Pacientes.idPaciente 4JOIN Medicos ON Citas.idMedico = Medicos.idMedico 5WHERE Pacientes.nombre = 'Juan Pérez'; -
Buscar citas de un médico en un rango de fechas:
1SELECT Pacientes.nombre AS paciente, Citas.fecha, Citas.hora 2FROM Citas 3JOIN Pacientes ON Citas.idPaciente = Pacientes.idPaciente 4WHERE Citas.idMedico = 1 AND Citas.fecha BETWEEN '2024-12-01' AND '2024-12-31'; -
Contar el número de pacientes atendidos por cada médico:
1SELECT Medicos.nombre, COUNT(DISTINCT Citas.idPaciente) AS pacientes_atendidos 2FROM Citas 3JOIN Medicos ON Citas.idMedico = Medicos.idMedico 4GROUP BY Medicos.nombre;
Análisis de Casos Reales
2.1. Caso: Amazon
- Problema: Manejar millones de productos con búsquedas rápidas.
- Solución:
- Uso de índices avanzados para búsquedas por categoría y texto.
- Bases de datos distribuidas para manejar la carga.
- Datos de usuario almacenados en NoSQL para personalización rápida.
Ejemplo:
1CREATE INDEX idx_categoria_precio ON Productos(categoria, precio);
Caso: Netflix
- Problema: Recomendaciones basadas en preferencias de usuario.
- Solución:
- Uso de bases de datos NoSQL (como Cassandra) para manejar grandes volúmenes de datos distribuidos.
- Optimización de consultas en tiempo real para generar recomendaciones.
Simulación en MongoDB:
1{ 2 "usuario": "Juan Pérez", 3 "historial": ["Drama", "Acción"], 4 "recomendaciones": ["Película A", "Película B"] 5}
Proyecto Final: Requisitos
- Diseñar un modelo lógico basado en un caso de negocio (por ejemplo, una biblioteca, un sistema de reservas de hotel o un sistema de facturación).
- Migrar el modelo lógico al modelo físico.
- Implementar las tablas, restricciones, índices y relaciones en el SGBD.
- Cargar datos iniciales y realizar consultas para validar el diseño.
- Crear un informe que incluya:
- Descripción del modelo.
- Scripts SQL utilizados.
- Resultados de las consultas realizadas.
Evaluación del Proyecto Final
-
Estructura del modelo:
- ¿Cumple con los requisitos del caso de negocio?
- ¿Se implementaron correctamente las relaciones entre las tablas?
-
Eficiencia:
- ¿Se usaron índices de manera efectiva?
- ¿Las consultas son rápidas y bien diseñadas?
-
Documentación:
- ¿El informe incluye una descripción clara del modelo y los scripts?