Está en la página 1de 5

--Creación de tablas

CREATE TABLE Paciente (


ID_Paciente INT PRIMARY KEY,
Nombre VARCHAR(50),
Apellido VARCHAR(50),
Fecha_Nacimiento DATE,
Direccion VARCHAR(100),
Telefono VARCHAR(20)
);

CREATE TABLE Medico (


ID_Medico INT PRIMARY KEY,
Nombre VARCHAR(50),
Apellido VARCHAR(50),
Fecha_Nacimiento DATE,
Direccion VARCHAR(100),
Telefono VARCHAR(20),
Especialidad VARCHAR(50)
);

CREATE TABLE Clinica (


ID_Clinica INT PRIMARY KEY,
Nombre VARCHAR(50),
Direccion VARCHAR(100),
Telefono VARCHAR(20),
Provincia VARCHAR(50)
);

CREATE TABLE Afiliacion (


ID_Medico INT,
ID_Clinica INT,
PRIMARY KEY (ID_Medico, ID_Clinica),
FOREIGN KEY (ID_Medico) REFERENCES Medico(ID_Medico),
FOREIGN KEY (ID_Clinica) REFERENCES Clinica(ID_Clinica)
);

CREATE TABLE Diagnostico (


ID_Diagnostico INT PRIMARY KEY,
Descripcion VARCHAR(100)
);

CREATE TABLE Consulta (


ID_Consulta INT PRIMARY KEY,
ID_Paciente INT,
ID_Clinica INT,
ID_Medico INT,
Fecha DATE,
ID_Diagnostico INT,
Descripcion VARCHAR(100),
FOREIGN KEY (ID_Paciente) REFERENCES Paciente(ID_Paciente),
FOREIGN KEY (ID_Clinica) REFERENCES Clinica(ID_Clinica),
FOREIGN KEY (ID_Medico) REFERENCES Medico(ID_Medico),
FOREIGN KEY (ID_Diagnostico) REFERENCES Diagnostico(ID_Diagnostico)
);

CREATE TABLE Historia (


ID_Historia INT PRIMARY KEY,
ID_Paciente INT,
ID_Clinica INT,
ID_Medico INT,
Fecha DATE,
ID_Diagnostico INT,

FOREIGN KEY (ID_Paciente) REFERENCES Paciente(ID_Paciente),


FOREIGN KEY (ID_Clinica) REFERENCES Clinica(ID_Clinica),
FOREIGN KEY (ID_Medico) REFERENCES Medico(ID_Medico),
FOREIGN KEY (ID_Diagnostico) REFERENCES Diagnostico(ID_Diagnostico)
);

CREATE TABLE MedicoClinica (


ID_Medico INT NOT NULL,
ID_Clinica INT NOT NULL,
CantidadConsultas INT NOT NULL,
PRIMARY KEY (ID_Medico, ID_Clinica),
FOREIGN KEY (ID_Medico) REFERENCES Medico(ID_Medico),
FOREIGN KEY (ID_Clinica) REFERENCES Clinica(ID_Clinica)
);

--Insertación de valores a las tablas.

-- Insertar datos en la tabla Paciente


INSERT INTO Paciente (ID_Paciente, Nombre, Apellido, Fecha_Nacimiento, Direccion,
Telefono)
VALUES (1, 'Juan', 'Pérez', '1990-01-01', 'Roca viva 123', '555-1234'),
(2, 'María', 'García', '1985-05-15', 'Avenida Principal Duarte 456', '555-5678'),
(3, 'Pedro', 'Martínez', '1978-12-31', 'Calle Buena vista 789', '555-9012');

-- Insertar datos en la tabla Medico


INSERT INTO Medico (ID_Medico, Nombre, Apellido, Fecha_Nacimiento, Direccion,
Telefono, Especialidad)
VALUES (1, 'Luis', 'González', '1980-06-25', 'Avenida Principal 123', '555-4321',
'Cardiología'),
(2, 'Ana', 'Hernández', '1975-03-12', 'Calle Jose tomás 456', '555-8765',
'Pediatría'),
(3, 'Jorge', 'Sánchez', '1990-11-05', 'Calle Buenos aires 789', '555-2109',
'Ginecología');

--Alter table para la fecha de ingreso

ALTER TABLE Medico ADD FechaIngreso DATE;

--Updates a la tabla de medico

UPDATE Medico
SET FechaIngreso = '2023-04-19'
WHERE ID_Medico = 1;

UPDATE Medico
SET FechaIngreso = '2023-06-20'
WHERE ID_Medico = 2;

-- Insertar datos en la tabla Clinica


INSERT INTO Clinica (ID_Clinica, Nombre, Direccion, Telefono, Provincia)
VALUES (1, 'Clínica San José', 'Calle Principal 123', '555-1111', 'Madrid'),
(2, 'Clínica Santa Ana', 'Avenida Secundaria 456', '555-2222', 'Barcelona'),
(3, 'Clínica Santa Lucía', 'Calle Falsa 789', '555-3333', 'Valencia');
INSERT INTO Clinica (ID_Clinica, Nombre, Direccion, Telefono, Provincia)
VALUES (4, 'Clínica Esperanza', 'Avenida Independencia 234', '555-7890', 'Santo
Domingo'),
(5, 'Clínica del Este', 'Calle Principal 567', '555-1234', 'San Cristóbal');

--Update a la tabla clinica

UPDATE Clinica
SET Provincia =
CASE
WHEN ID_Clinica = 1 THEN 'Santo Domingo'
WHEN ID_Clinica = 2 THEN 'Santiago'
WHEN ID_Clinica = 3 THEN 'San Cristóbal'
END
WHERE ID_Clinica IN (1, 2, 3);

--Insertar datos en la tabla MedicoClinica


INSERT INTO MedicoClinica(ID_Medico, ID_Clinica, CantidadConsultas)
VALUES (1, 1, 20),
(2, 3, 25),
(3, 3, 12);

-- Insertar datos en la tabla Afiliacion


INSERT INTO Afiliacion (ID_Medico, ID_Clinica)
VALUES (1, 1),
(2, 1),
(2, 2),
(3, 3);

-- Insertar datos en la tabla Diagnostico


INSERT INTO Diagnostico (ID_Diagnostico, Descripcion)
VALUES (1, 'Gripe'),
(2, 'Dolor de cabeza'),
(3, 'Infarto');

-- Insertar datos en la tabla Consulta


INSERT INTO Consulta (ID_Consulta, ID_Paciente, ID_Clinica, ID_Medico, Fecha,
ID_Diagnostico, Descripcion)
VALUES (1, 1, 1, 1, '2023-04-01', 1, 'Paciente con síntomas de gripe'),
(2, 2, 2, 2, '2023-04-02', 2, 'Paciente con dolor de cabeza'),
(3, 3, 3, 3, '2023-04-03', 3, 'Paciente con infarto');

--Creación de las vista/view


CREATE VIEW VistaMedicosIngresados2023
AS
SELECT Nombre, Apellido, FechaIngreso
FROM Medico
WHERE YEAR(FechaIngreso) = 2023;

CREATE VIEW ClinicasPorProvincia AS


SELECT Provincia, COUNT(*) AS CantidadClinicas
FROM Clinica
GROUP BY Provincia;
--Procedure para las consultas

CREATE PROCEDURE ActualizarConsultasMedicos


AS
BEGIN
DECLARE @ID_Medico INT, @ID_Clinica INT, @CantidadConsultas INT;
DECLARE cursorMedicos CURSOR FOR
SELECT ID_Medico FROM Medico;

OPEN cursorMedicos;

FETCH NEXT FROM cursorMedicos INTO @ID_Medico;

WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE cursorClinicas CURSOR FOR
SELECT ID_Clinica FROM Clinica;

OPEN cursorClinicas;

FETCH NEXT FROM cursorClinicas INTO @ID_Clinica;

WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @CantidadConsultas = COUNT(*) FROM Consulta WHERE ID_Medico =
@ID_Medico AND ID_Clinica = @ID_Clinica;

INSERT INTO MedicoClinica (ID_Medico, ID_Clinica, CantidadConsultas)


VALUES (@ID_Medico, @ID_Clinica, @CantidadConsultas);

FETCH NEXT FROM cursorClinicas INTO @ID_Clinica;


END

CLOSE cursorClinicas;
DEALLOCATE cursorClinicas;

FETCH NEXT FROM cursorMedicos INTO @ID_Medico;


END

CLOSE cursorMedicos;
DEALLOCATE cursorMedicos;
END

--Función del total de médicos

CREATE FUNCTION TotalMedicosPorClinica(@nombreClinica VARCHAR(50))


RETURNS INT
AS
BEGIN
DECLARE @total INT;

SELECT @total = COUNT(m.ID_Medico)


FROM Medico m
INNER JOIN MedicoClinica mc ON m.ID_Medico = mc.ID_Medico
INNER JOIN Clinica c ON mc.ID_Clinica = c.ID_Clinica
WHERE c.Nombre = @nombreClinica;
RETURN @total;
END;

--Todas las consultas

SELECT Nombre, Apellido, FechaIngreso


FROM VistaMedicosIngresados2023;

SELECT *
FROM ClinicasPorProvincia

SELECT Nombre, Provincia


FROM Clinica

SELECT * FROM MedicoClinica;

SELECT c.ID_Consulta, p.Nombre, d.Descripcion


FROM Consulta c
INNER JOIN Paciente p ON c.ID_Paciente = p.ID_Paciente
INNER JOIN Diagnostico d ON c.ID_Diagnostico = d.ID_Diagnostico
WHERE c.Fecha = '2023-04-01';

SELECT c.ID_Consulta, p.Nombre, d.Descripcion


FROM Consulta c
INNER JOIN Paciente p ON c.ID_Paciente = p.ID_Paciente
INNER JOIN Diagnostico d ON c.ID_Diagnostico = d.ID_Diagnostico
WHERE c.Fecha = '2023-04-02';

SELECT c.ID_Consulta, p.Nombre, d.Descripcion


FROM Consulta c
INNER JOIN Paciente p ON c.ID_Paciente = p.ID_Paciente
INNER JOIN Diagnostico d ON c.ID_Diagnostico = d.ID_Diagnostico
WHERE c.Fecha = '2023-04-03';

SELECT A.ID_Clinica, COUNT(*) AS Cantidad_Medicos


FROM Afiliacion A
JOIN Medico M ON A.ID_Medico = M.ID_Medico
GROUP BY A.ID_Clinica;

También podría gustarte