Hospital – Base de datos

Vamos a crear una base de datos de un hospital (dbhospital) en phpMyAdmin SQL, con las siguientes características:

  • El hospital tiene varias plantas, cada una de las cuales tiene un nombre y una cantidad de camas.
  • Los pacientes cuentan con un número de seguro, dni y nombre, cada vez que el paciente llega al hospital se anota en su historia una fecha de entrada y una de salida.
  • A su vez cuando llega al hospital y es internado se le asigna una cama.
  • Existen médicos que atienden a los pacientes, estas atenciones las denominan visitas médicas.

Base de datos Hospital

El archivo bdhospital.sql lo podemos importar, usando el SGBD phpMyAdmin SQL en una base de datos vacía.

-- phpMyAdmin SQL Dump
-- version 4.7.7
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 23-01-2018 a las 22:44:23
-- Versión del servidor: 10.1.28-MariaDB
-- Versión de PHP: 7.1.11

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de datos: `bdhospital`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tcama`
--

CREATE TABLE `tcama` (
  `idCama` int(11) NOT NULL,
  `fkPlanta` char(3) COLLATE utf8_spanish_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

--
-- Volcado de datos para la tabla `tcama`
--

INSERT INTO `tcama` (`idCama`, `fkPlanta`) VALUES
(101, 'A'),
(102, 'A'),
(103, 'A'),
(104, 'A'),
(201, 'B'),
(202, 'B'),
(203, 'B'),
(204, 'B'),
(205, 'B'),
(206, 'B'),
(301, 'C'),
(302, 'C'),
(303, 'C'),
(304, 'C');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `thistoria`
--

CREATE TABLE `thistoria` (
  `idHistoria` int(11) NOT NULL,
  `FechaEntrada` date DEFAULT NULL,
  `FechaAlta` date DEFAULT NULL,
  `FkNumeroSeguro` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

--
-- Volcado de datos para la tabla `thistoria`
--

INSERT INTO `thistoria` (`idHistoria`, `FechaEntrada`, `FechaAlta`, `FkNumeroSeguro`) VALUES
(1, '2017-02-02', '2017-10-30', 2),
(2, '2017-02-15', '2017-02-16', 3),
(3, '2017-03-18', '2017-07-19', 4),
(4, '2017-04-21', '2017-08-19', 5),
(5, '2017-05-19', '2017-09-30', 6);

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tmedico`
--

CREATE TABLE `tmedico` (
  `idMedico` int(11) NOT NULL,
  `nombre` varchar(15) COLLATE utf8_spanish_ci NOT NULL,
  `apellido` varchar(15) COLLATE utf8_spanish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

--
-- Volcado de datos para la tabla `tmedico`
--

INSERT INTO `tmedico` (`idMedico`, `nombre`, `apellido`) VALUES
(1, 'Juan', 'Pérez'),
(2, 'María', 'López'),
(3, 'Cristina', 'Rodríguez'),
(4, 'Marta', 'Puig');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tpaciente`
--

CREATE TABLE `tpaciente` (
  `idNumeroSeguro` int(11) NOT NULL,
  `dni` varchar(12) COLLATE utf8_spanish_ci DEFAULT NULL,
  `nombre` varchar(15) COLLATE utf8_spanish_ci NOT NULL,
  `apellido` varchar(15) COLLATE utf8_spanish_ci NOT NULL,
  `fechaNacimiento` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

--
-- Volcado de datos para la tabla `tpaciente`
--

INSERT INTO `tpaciente` (`idNumeroSeguro`, `dni`, `nombre`, `apellido`, `fechaNacimiento`) VALUES
(1, '1646798', 'Julian', 'Amador', '2001-11-01'),
(2, '4534534', 'Pedro', 'Martínez', '2003-10-02'),
(3, '5456345', 'Marta', 'Alabau', '2005-09-03'),
(4, '7686786', 'Richard', 'Ferrer', '2007-08-04'),
(5, '1233434', 'Manuel', 'Valls', '2009-07-05'),
(6, '9878977', 'Gerardo', 'Andreu', '2011-06-06');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tpacientecama`
--

CREATE TABLE `tpacientecama` (
  `idPacienteCama` int(11) NOT NULL,
  `fechaAsignacion` date DEFAULT NULL,
  `fechaSalida` date DEFAULT NULL,
  `fkCama` int(11) DEFAULT NULL,
  `fkHistoria` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

--
-- Volcado de datos para la tabla `tpacientecama`
--

INSERT INTO `tpacientecama` (`idPacienteCama`, `fechaAsignacion`, `fechaSalida`, `fkCama`, `fkHistoria`) VALUES
(1, '2017-01-01', '2017-01-12', 101, 1),
(2, '2017-02-15', '2017-02-16', 201, 2),
(3, '2017-03-18', '2017-03-18', 302, 3),
(4, '2017-04-21', '2017-04-25', 102, 4),
(5, '2017-05-19', '2017-05-19', 201, 5),
(6, '2017-06-30', '2017-06-30', 302, 1),
(7, '2017-07-19', '2017-07-19', 103, 3),
(8, '2017-08-15', '2017-08-19', 203, 4),
(9, '2017-09-23', '2017-09-30', 303, 5),
(10, '2017-10-29', '2017-10-30', 104, 1);

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tplanta`
--

CREATE TABLE `tplanta` (
  `idPlanta` char(3) COLLATE utf8_spanish_ci NOT NULL,
  `nombre` varchar(50) COLLATE utf8_spanish_ci DEFAULT NULL,
  `numeroCamas` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

--
-- Volcado de datos para la tabla `tplanta`
--

INSERT INTO `tplanta` (`idPlanta`, `nombre`, `numeroCamas`) VALUES
('A', 'Piso 1', 20),
('B', 'Piso 2', 15),
('C', 'Piso 3', 19),
('D', 'Piso 4', 5);

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tvisitamedica`
--

CREATE TABLE `tvisitamedica` (
  `FechaVisita` date DEFAULT NULL,
  `DiagnosticoEnfermedad` varchar(30) COLLATE utf8_spanish_ci DEFAULT NULL,
  `fkMedico` int(11) DEFAULT NULL,
  `fkPacienteCama` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

--
-- Volcado de datos para la tabla `tvisitamedica`
--

INSERT INTO `tvisitamedica` (`FechaVisita`, `DiagnosticoEnfermedad`, `fkMedico`, `fkPacienteCama`) VALUES
('2017-11-11', 'Bajo de peso', 1, 1),
('2017-11-13', 'No tiene Mejora', 1, 9),
('2017-11-15', 'Fiebre alta', 2, 8),
('2017-11-17', 'Pérdida de consciencia', 2, 7),
('2017-11-19', 'Dolor en articulaciones', 3, 6),
('2017-11-21', 'Sangrado por nariz', 3, 5),
('2017-11-23', 'No tiene Mejora', 4, 4),
('2017-11-25', 'No tiene Mejora', 4, 3),
('2017-11-27', 'Presión alta', 4, 2),
('2017-11-29', 'De alta en 2 días', 1, 1),
('2017-11-30', 'Ritmo cardiaco ', 1, 9),
('2017-12-02', 'No tiene Mejora', 2, 8),
('2017-12-04', 'Poco apetito', 2, 7),
('2017-12-06', 'Está mucho mejor', 2, 6),
('2017-12-08', 'No tiene Mejora', 2, 5),
('2017-12-10', 'Dolores en articulaciones', 3, 4),
('2017-12-12', 'No tiene Mejora', 3, 3),
('2017-12-14', 'De alta en 2 días', 3, 2),
('2017-12-16', 'No tiene Mejora', 3, 1),
('2017-12-18', 'Los dolores abdominales', 4, 7);

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `tcama`
--
ALTER TABLE `tcama`
  ADD PRIMARY KEY (`idCama`),
  ADD KEY `fkPlanta` (`fkPlanta`);

--
-- Indices de la tabla `thistoria`
--
ALTER TABLE `thistoria`
  ADD PRIMARY KEY (`idHistoria`),
  ADD KEY `FkNumeroSeguro` (`FkNumeroSeguro`);

--
-- Indices de la tabla `tmedico`
--
ALTER TABLE `tmedico`
  ADD PRIMARY KEY (`idMedico`);

--
-- Indices de la tabla `tpaciente`
--
ALTER TABLE `tpaciente`
  ADD PRIMARY KEY (`idNumeroSeguro`);

--
-- Indices de la tabla `tpacientecama`
--
ALTER TABLE `tpacientecama`
  ADD PRIMARY KEY (`idPacienteCama`),
  ADD KEY `fkCama` (`fkCama`),
  ADD KEY `fkHistoria` (`fkHistoria`);

--
-- Indices de la tabla `tplanta`
--
ALTER TABLE `tplanta`
  ADD PRIMARY KEY (`idPlanta`);

--
-- Indices de la tabla `tvisitamedica`
--
ALTER TABLE `tvisitamedica`
  ADD KEY `fkMedico` (`fkMedico`),
  ADD KEY `fkPacienteCama` (`fkPacienteCama`);

--
-- Restricciones para tablas volcadas
--

--
-- Filtros para la tabla `tcama`
--
ALTER TABLE `tcama`
  ADD CONSTRAINT `tcama_ibfk_1` FOREIGN KEY (`fkPlanta`) REFERENCES `tplanta` (`idPlanta`);

--
-- Filtros para la tabla `thistoria`
--
ALTER TABLE `thistoria`
  ADD CONSTRAINT `thistoria_ibfk_1` FOREIGN KEY (`FkNumeroSeguro`) REFERENCES `tpaciente` (`idNumeroSeguro`);

--
-- Filtros para la tabla `tpacientecama`
--
ALTER TABLE `tpacientecama`
  ADD CONSTRAINT `tpacientecama_ibfk_1` FOREIGN KEY (`fkCama`) REFERENCES `tcama` (`idCama`),
  ADD CONSTRAINT `tpacientecama_ibfk_2` FOREIGN KEY (`fkHistoria`) REFERENCES `thistoria` (`idHistoria`);

--
-- Filtros para la tabla `tvisitamedica`
--
ALTER TABLE `tvisitamedica`
  ADD CONSTRAINT `tvisitamedica_ibfk_1` FOREIGN KEY (`fkMedico`) REFERENCES `tmedico` (`idMedico`),
  ADD CONSTRAINT `tvisitamedica_ibfk_2` FOREIGN KEY (`fkPacienteCama`) REFERENCES `tpacientecama` (`idPacienteCama`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Tablas y relaciones

Las relaciones son:

base de datos hospital

Cada índice o clave foránea lo podemos reconocer por las letras fk_. En cambio, las claves primarias son las llaves de los campos id_.

CONSULTAS

  • Esta consulta deberá mostrar cada paciente con las fechas de entrada y salida de su historia médica, ordenado por el nombre y apellido.
SELECT `tpaciente`.`nombre`, `tpaciente`.`apellido`, `thistoria`.`FechaEntrada`, `thistoria`.`FechaAlta`
FROM `tpaciente`
    LEFT JOIN `thistoria` ON `thistoria`.`FkNumeroSeguro` = `tpaciente`.`idNumeroSeguro`
ORDER BY `tpaciente`.`nombre` ASC, `tpaciente`.`apellido` ASC
  • Ahora deberemos mostrar cada médico y quiénes son sus pacientes, ordenado por el nombre y apellido de los médicos.
SELECT `tmedico`.`idMedico`, `tmedico`.`nombre`, `tmedico`.`apellido`, `tpaciente`.`idNumeroSeguro`, `tpaciente`.`nombre`, `tpaciente`.`apellido`
FROM `tpacientecama`
    LEFT JOIN `tvisitamedica` ON `tvisitamedica`.`fkPacienteCama` = `tpacientecama`.`idPacienteCama`
    LEFT JOIN `thistoria` ON `tpacientecama`.`fkHistoria` = `thistoria`.`idHistoria`
    LEFT JOIN `tpaciente` ON `thistoria`.`FkNumeroSeguro` = `tpaciente`.`idNumeroSeguro`
    LEFT JOIN `tmedico` ON `tvisitamedica`.`fkMedico` = `tmedico`.`idMedico`
ORDER BY `tmedico`.`apellido` ASC, `tmedico`.`nombre` ASC
  • Muestra cada paciente con la fecha de visita y su diagnóstico, ordenado por el nombre y apellido.
SELECT `tpaciente`.`nombre`, `tpaciente`.`apellido`, `tvisitamedica`.`FechaVisita`, `tvisitamedica`.`DiagnosticoEnfermedad`
FROM `tpacientecama`
    LEFT JOIN `tvisitamedica` ON `tvisitamedica`.`fkPacienteCama` = `tpacientecama`.`idPacienteCama`
    LEFT JOIN `thistoria` ON `tpacientecama`.`fkHistoria` = `thistoria`.`idHistoria`
    LEFT JOIN `tpaciente` ON `thistoria`.`FkNumeroSeguro` = `tpaciente`.`idNumeroSeguro`
    ORDER BY `tpaciente`.`nombre` ASC, `tpaciente`.`apellido` ASC
  • Aquí, mostraremos los pacientes con las fechas de asignación y el número de cama, ordenado por nombre y apellido.
SELECT `tpaciente`.`nombre`, `tpaciente`.`apellido`, `tpacientecama`.`fechaAsignacion`, `tpacientecama`.`fkCama`
FROM `tpacientecama`
    LEFT JOIN `thistoria` ON `tpacientecama`.`fkHistoria` = `thistoria`.`idHistoria`
    LEFT JOIN `tpaciente` ON `thistoria`.`FkNumeroSeguro` = `tpaciente`.`idNumeroSeguro`
ORDER BY `tpaciente`.`nombre` ASC, `tpaciente`.`apellido` ASC
  • Por último, muestra cada nombre de planta y los diagnósticos, que se han hecho, ordenado por el nombre de planta.
SELECT `tplanta`.`nombre`, `tvisitamedica`.`DiagnosticoEnfermedad`
FROM `tcama`
    LEFT JOIN `tplanta` ON `tcama`.`fkPlanta` = `tplanta`.`idPlanta`
    LEFT JOIN `tpacientecama` ON `tpacientecama`.`fkCama` = `tcama`.`idCama`
    LEFT JOIN `tvisitamedica` ON `tvisitamedica`.`fkPacienteCama` = `tpacientecama`.`idPacienteCama`
ORDER BY `tplanta`.`nombre` ASC, `tplanta`.`idPlanta` ASC

También puede interesarte

Usuarios – Login en PHP

Carrito de compras PHP

Leer un archivo XML

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *