Este proyecto de referencia presenta el modelado e implementación de una base de datos relacional para una EPS colombiana (Entidad Promotora de Salud). El esquema abarca la afiliación de pacientes con su plan de salud, la red de clínicas IPS organizadas por consultorio y departamento, el cuerpo médico con sus turnos, la programación de citas, el historial clínico con diagnósticos vinculados a medicamentos y servicios, y las visitas domiciliarias atendidas por auxiliares. Fue construido como ejemplo guía del curso Bases de Datos Relacionales 2026-I y está acompañado por un contraejemplo en MongoDB para comparar los enfoques relacional y documental sobre el mismo dominio.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/tutosrive/db-relacionales-2026-1/llms.txt
Use this file to discover all available pages before exploring further.
AUTO_INCREMENT, DATE y TIME como columnas separadas y las restricciones ON DELETE CASCADE son compatibles con MySQL 8. Para migrar a PostgreSQL reemplaza AUTO_INCREMENT por SERIAL y ajusta las restricciones de cascada según el comportamiento deseado.Universo de Discurso
Una EPS actúa como aseguradora de salud: ofrece planes de salud a sus pacientes afiliados y coordina una red de IPS (Instituciones Prestadoras de Servicios). Cada IPS alberga consultorios organizados en departamentos clínicos (medicina general, cardiología, pediatría, etc.). Los médicos ejercen en un consultorio y cubren turnos programados. Los pacientes agendan citas con médicos, cuyo resultado genera un diagnóstico que puede prescribir medicamentos y ordenar servicios médicos. El sistema registra también visitas domiciliarias con un auxiliar y un vehículo asignado para atender pacientes con movilidad reducida. La gestión de insumos cierra el ciclo operativo: los proveedores suministran insumos a las IPS mediante registrosInsumoxIps, y cada entrega queda vinculada al proveedor en ProveedorxInsumo. La relación entre IPS y EPS se formaliza en IpsxEps mediante un tipo de convenio.
Esquema Relacional
Diagrama Entidad-Relación
Consultas SQL de Referencia
- Reportes de citas
- Diagnósticos y medicamentos
- Visitas domiciliarias
- Cobertura e insumos
Diccionario de Datos
Eps — Entidad Promotora de Salud
Eps — Entidad Promotora de Salud
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idEps | INT | PK, AUTO_INCREMENT (desde 6001) | Identificador interno de la EPS. |
nombre | VARCHAR(100) | — | Razón social de la EPS. |
tipoEntidad | VARCHAR(50) | — | Tipo de entidad: pública, privada, mixta. |
direccion | VARCHAR(255) | — | Dirección de la sede principal. |
telefono | VARCHAR(15) | — | Número de contacto general. |
correo | VARCHAR(100) | — | Correo electrónico institucional. |
PlanSalud — Plan de cobertura
PlanSalud — Plan de cobertura
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idPlanSalud | INT | PK, AUTO_INCREMENT (desde 19001) | Identificador del plan de salud. |
precio | INT | — | Valor mensual del plan en pesos colombianos. |
tipo | VARCHAR(100) | — | Nombre o categoría del plan (ej. básico, complementario). |
Ips — Institución Prestadora de Servicios
Ips — Institución Prestadora de Servicios
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idIps | INT | PK, AUTO_INCREMENT (desde 4001) | Identificador de la IPS. |
nombre | VARCHAR(100) | — | Nombre de la clínica u hospital. |
direccion | VARCHAR(255) | — | Dirección física de la IPS. |
telefono | VARCHAR(15) | — | Número de contacto de la IPS. |
correo | VARCHAR(100) | — | Correo electrónico de la IPS. |
IpsxEps — Convenio entre IPS y EPS
IpsxEps — Convenio entre IPS y EPS
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idIpsxEps | INT | PK, AUTO_INCREMENT (desde 7001) | Identificador del convenio. |
idIps | INT | FK → Ips, NOT NULL | IPS que firma el convenio. |
idEps | INT | FK → Eps, NOT NULL | EPS que firma el convenio. |
tipoConvenio | VARCHAR(100) | — | Tipo de convenio (ej. pleno, parcial, urgencias). |
Departamento — Departamento clínico de la IPS
Departamento — Departamento clínico de la IPS
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idDepartamento | INT | PK, AUTO_INCREMENT (desde 8001) | Identificador del departamento clínico. |
nombre | VARCHAR(100) | — | Nombre del departamento (ej. Medicina General, Cardiología). |
especialidad | VARCHAR(100) | — | Especialidad médica principal del departamento. |
descripcion | TEXT | — | Descripción de los servicios que presta el departamento. |
Consultorio — Espacio físico de atención
Consultorio — Espacio físico de atención
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idConsultorio | INT | PK, AUTO_INCREMENT (desde 9001) | Identificador del consultorio. |
idIps | INT | FK → Ips, NOT NULL | IPS a la que pertenece el consultorio. |
idDepartamento | INT | FK → Departamento, NOT NULL | Departamento clínico al que pertenece. |
localizacion | VARCHAR(255) | — | Ubicación dentro de la IPS (piso, ala, número de sala). |
Medico — Personal médico
Medico — Personal médico
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idMedico | INT | PK, AUTO_INCREMENT (desde 13001) | Identificador del médico. |
idConsultorio | INT | FK → Consultorio, NOT NULL | Consultorio donde ejerce el médico. |
nombre | VARCHAR(100) | — | Nombre del médico. |
apellidos | VARCHAR(100) | — | Apellidos del médico. |
especialidad | VARCHAR(100) | — | Especialidad médica (ej. Cardiología, Pediatría). |
telefono | VARCHAR(15) | — | Número de contacto del médico. |
correo | VARCHAR(100) | — | Correo electrónico del médico. |
Turno — Turno de trabajo médico
Turno — Turno de trabajo médico
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idTurno | INT | PK, AUTO_INCREMENT (desde 24001) | Identificador del turno. |
horaInicio | TIME | — | Hora de inicio del turno. |
horaFin | TIME | — | Hora de finalización del turno. |
MedicoxTurno — Asignación de turnos a médicos
MedicoxTurno — Asignación de turnos a médicos
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idMedico | INT | PK (compuesta), FK → Medico | Médico asignado al turno. |
idTurno | INT | PK (compuesta), FK → Turno | Turno asignado. |
fecha | DATE | PK (compuesta) | Fecha en la que el médico cubre el turno. |
Paciente — Afiliado a la EPS
Paciente — Afiliado a la EPS
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idPaciente | INT | PK, AUTO_INCREMENT (desde 14001) | Identificador del paciente. |
idEps | INT | FK → Eps, NOT NULL | EPS a la que está afiliado el paciente. |
idPlanSalud | INT | FK → PlanSalud, NOT NULL | Plan de salud del paciente. |
nombre | VARCHAR(100) | — | Nombre del paciente. |
apellidos | VARCHAR(100) | — | Apellidos del paciente. |
edad | INT | — | Edad del paciente en años. |
genero | VARCHAR(15) | — | Género del paciente. |
telefono | VARCHAR(15) | — | Número de contacto del paciente o acudiente. |
direccion | VARCHAR(255) | — | Dirección de residencia del paciente. |
correo | VARCHAR(100) | — | Correo electrónico del paciente. |
Cita — Cita médica programada
Cita — Cita médica programada
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idCita | INT | PK, AUTO_INCREMENT (desde 15001) | Identificador de la cita. |
idMedico | INT | FK → Medico, NOT NULL | Médico que atiende la cita. |
idPaciente | INT | FK → Paciente, NOT NULL | Paciente que solicita la cita. |
fecha | DATE | — | Fecha programada para la cita. |
hora | TIME | — | Hora programada para la cita. |
motivo | TEXT | — | Motivo de consulta registrado al agendar. |
HistoriaClinica — Registro médico del paciente
HistoriaClinica — Registro médico del paciente
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idHistoriaClinica | INT | PK, AUTO_INCREMENT (desde 21001) | Identificador de la historia clínica. |
idPaciente | INT | FK → Paciente, NOT NULL | Paciente al que pertenece la historia. |
fecha_creacion | DATE | — | Fecha en que se creó la historia clínica. |
Diagnostico — Diagnóstico médico
Diagnostico — Diagnóstico médico
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idDiagnostico | INT | PK, AUTO_INCREMENT (desde 16001) | Identificador del diagnóstico. |
idHistoriaClinica | INT | FK → HistoriaClinica | Historia clínica a la que pertenece. |
idCita | INT | FK → Cita | Cita en la que se emitió el diagnóstico. |
descripcion | TEXT | — | Descripción clínica del diagnóstico. |
tratamiento | TEXT | — | Plan de tratamiento indicado por el médico. |
Medicamento — Catálogo farmacológico
Medicamento — Catálogo farmacológico
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idMedicamento | INT | PK, AUTO_INCREMENT (desde 17001) | Identificador del medicamento. |
nombre | VARCHAR(100) | — | Nombre comercial del medicamento. |
cantidad_mg | INT | — | Dosis estándar en miligramos. |
viaAdministracion | VARCHAR(100) | — | Vía de administración: oral, intravenosa, tópica, etc. |
DiagnosticoxMedicamento — Prescripción
DiagnosticoxMedicamento — Prescripción
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idDiagnostico | INT | PK (compuesta), FK → Diagnostico | Diagnóstico que genera la prescripción. |
idMedicamento | INT | PK (compuesta), FK → Medicamento | Medicamento prescrito. |
fecha | DATE | PK (compuesta) | Fecha de la prescripción. |
cantidad | INT | — | Cantidad de unidades prescritas. |
Servicio — Servicios médicos disponibles
Servicio — Servicios médicos disponibles
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idServicio | INT | PK, AUTO_INCREMENT (desde 18001) | Identificador del servicio. |
nombre | VARCHAR(100) | — | Nombre del servicio (ej. Laboratorio clínico, Rayos X). |
descripcion | TEXT | — | Descripción detallada del servicio médico. |
DiagnosticoxServicio — Servicio ordenado
DiagnosticoxServicio — Servicio ordenado
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idDiagnostico | INT | PK (compuesta), FK → Diagnostico | Diagnóstico que ordena el servicio. |
idServicio | INT | PK (compuesta), FK → Servicio | Servicio ordenado. |
fecha | DATE | PK (compuesta) | Fecha de la orden del servicio. |
descripcion | TEXT | — | Observaciones o instrucciones específicas para el servicio. |
Auxiliar — Personal de apoyo domiciliario
Auxiliar — Personal de apoyo domiciliario
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idAuxiliar | INT | PK, AUTO_INCREMENT (desde 22001) | Identificador del auxiliar. |
nombre | VARCHAR(100) | — | Nombre del auxiliar. |
apellidos | VARCHAR(100) | — | Apellidos del auxiliar. |
telefono | VARCHAR(15) | — | Número de contacto del auxiliar. |
correo | VARCHAR(100) | — | Correo electrónico del auxiliar. |
Vehiculo — Vehículo para visitas domiciliarias
Vehiculo — Vehículo para visitas domiciliarias
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
placaVehiculo | VARCHAR(20) | PK | Placa del vehículo; actúa como clave natural. |
equipamiento | VARCHAR(255) | — | Equipamiento médico disponible en el vehículo. |
VisitaDomiciliaria — Atención en domicilio
VisitaDomiciliaria — Atención en domicilio
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idVisita | INT | PK, AUTO_INCREMENT (desde 23001) | Identificador de la visita. |
idPaciente | INT | FK → Paciente | Paciente que recibe la visita. |
placaVehiculo | VARCHAR(20) | FK → Vehiculo | Vehículo utilizado para el desplazamiento. |
idAuxiliar | INT | FK → Auxiliar | Auxiliar que realiza la visita. |
motivo | TEXT | — | Motivo de la visita domiciliaria. |
fecha | DATE | — | Fecha de la visita. |
reporte | TEXT | — | Informe del auxiliar sobre la visita realizada. |
Proveedor — Proveedor de insumos
Proveedor — Proveedor de insumos
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idProveedor | INT | PK, AUTO_INCREMENT (desde 1001) | Identificador del proveedor. |
nombre | VARCHAR(100) | — | Nombre del proveedor o representante. |
apellidos | VARCHAR(100) | — | Apellidos del proveedor. |
direccion | VARCHAR(255) | — | Dirección del proveedor. |
telefono | VARCHAR(15) | — | Número de contacto del proveedor. |
correo | VARCHAR(100) | — | Correo electrónico del proveedor. |
Insumo — Catálogo de insumos médicos
Insumo — Catálogo de insumos médicos
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idInsumo | INT | PK, AUTO_INCREMENT (desde 2001) | Identificador del insumo. |
nombre | VARCHAR(100) | — | Nombre del insumo (ej. jeringa, guante, mascarilla). |
descripcion | TEXT | — | Descripción detallada del insumo. |
tipoInsumo | VARCHAR(50) | — | Categoría del insumo: descartable, reutilizable, fármaco. |
cantidad | INT | — | Cantidad actual en inventario. |
unidadMedida | VARCHAR(50) | — | Unidad de medida: unidades, cajas, litros, etc. |
ProveedorxInsumo — Suministro de insumos
ProveedorxInsumo — Suministro de insumos
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idProveedorxInsumo | INT | PK, AUTO_INCREMENT (desde 3001) | Identificador del registro de suministro. |
idProveedor | INT | FK → Proveedor, NOT NULL | Proveedor que suministra el insumo. |
idInsumo | INT | FK → Insumo | Insumo suministrado. |
cantidad | INT | — | Cantidad entregada en este suministro. |
fecha | DATE | — | Fecha del suministro. |
InsumoxIps — Entrega de insumos a IPS
InsumoxIps — Entrega de insumos a IPS
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idInsumoxIps | INT | PK, AUTO_INCREMENT (desde 5001) | Identificador de la entrega. |
idInsumo | INT | FK → Insumo, NOT NULL | Insumo entregado. |
idIps | INT | FK → Ips, NOT NULL | IPS receptora del insumo. |
fechaEntrega | DATE | — | Fecha de la entrega. |
estadoEntrega | VARCHAR(50) | — | Estado: pendiente, entregado, rechazado. |
Comparación: SQL vs NoSQL
El repositorio del curso también incluye una versión MongoDB de este mismo dominio. La siguiente comparación ilustra las diferencias de modelado para una entidad central como el paciente y su historial clínico.pacientes, citas, medicos, ips). El esquema documental desnormaliza datos para optimizar lecturas, mientras que el esquema relacional prioriza la integridad referencial y la consistencia transaccional. Ambos enfoques son válidos según el contexto; este curso se centra en el modelo relacional.Modelo Relacional (SQL)
Modelo Documental (MongoDB)
Extensiones Sugeridas
Facturación de Citas
Factura(idFactura, idCita, idPaciente, fecha, total, estadoPago) para registrar el cobro de copagos y la liquidación de servicios cubiertos por el plan de salud.Incapacidades Médicas
Incapacidad(idIncapacidad, idCita, idPaciente, fechaInicio, fechaFin, diasConcedidos, descripcion) para gestionar el flujo de incapacidades emitidas por los médicos.Búsqueda Semántica con pgvector
embedding vector(384) en Medicamento y Servicio para recomendación semántica basada en síntomas descritos por el paciente en lenguaje natural.Auditoría de Cambios
Auditoria(id, tabla, operacion, usuario, fecha, datos_anteriores JSON) para registrar INSERT, UPDATE y DELETE sobre las tablas sensibles del sistema.