-- Diana Canaviri Chura 13796944
-- Crear tabla de pacientes
CREATE TABLE DCCH_PACIENTES (
ID_PACIENTE NUMBER PRIMARY KEY,
NOMBRES VARCHAR2(50) NOT NULL,
APELLIDOS VARCHAR2(50) NOT NULL,
FECHA_NACIMIENTO DATE NOT NULL,
GENERO CHAR(1) CHECK (GENERO IN ('M', 'F')),
TELEFONO VARCHAR2(15)
);
-- Crear tabla de doctores
CREATE TABLE DCCH_DOCTORES (
ID_DOCTOR NUMBER PRIMARY KEY,
NOMBRES VARCHAR2(50) NOT NULL,
APELLIDOS VARCHAR2(50) NOT NULL,
ESPECIALIDAD VARCHAR2(50) NOT NULL,
ANIOS_EXPERIENCIA NUMBER CHECK(ANIOS_EXPERIENCIA >= 0)
);
-- Crear tabla de citas
CREATE TABLE DCCH_CITAS (
ID_CITA NUMBER PRIMARY KEY,
FECHA_CITA DATE NOT NULL,
HORA_CITA VARCHAR2(5) NOT NULL,
ID_PACIENTE NUMBER NOT NULL,
ID_DOCTOR NUMBER NOT NULL,
MOTIVO VARCHAR2(100) NOT NULL,
ESTADO VARCHAR2(20) CHECK (ESTADO IN ('COMPLETADA', 'PENDIENTE', 'CANCELADA')),
CONSTRAINT FK_CITAS_PACIENTES FOREIGN KEY (ID_PACIENTE)
REFERENCES DCCH_PACIENTES(ID_PACIENTE),
CONSTRAINT FK_CITAS_DOCTOR FOREIGN KEY (ID_DOCTOR)
REFERENCES DCCH_DOCTORES(ID_DOCTOR)
);
-- Crear secuencias
CREATE SEQUENCE SEQ_DCCH_ID_PACIENTE
START WITH 2001
INCREMENT BY 1
NOCACHE
NOCYCLE;
CREATE SEQUENCE SEQ_DCCH_ID_DOCTOR
START WITH 501
INCREMENT BY 1
NOCACHE
NOCYCLE;
CREATE SEQUENCE SEQ_DCCH_ID_CITA
START WITH 501
INCREMENT BY 1
NOCACHE
NOCYCLE;
-- Insertar pacientes
INSERT INTO DCCH_PACIENTES(ID_PACIENTE, NOMBRES, APELLIDOS, FECHA_NACIMIENTO, GENERO, TELEFONO)
VALUES (SEQ_DCCH_ID_PACIENTE.NEXTVAL, 'CARLOS', 'GUTIERREZ', TO_DATE('10/01/1999','DD/MM/YYYY'), 'M', '5551001');
INSERT INTO DCCH_PACIENTES(ID_PACIENTE, NOMBRES, APELLIDOS, FECHA_NACIMIENTO, GENERO, TELEFONO)
VALUES (SEQ_DCCH_ID_PACIENTE.NEXTVAL, 'MARIA', 'LOPEZ', TO_DATE('10/11/1988','DD/MM/YYYY'), 'F', '5551002');
INSERT INTO DCCH_PACIENTES(ID_PACIENTE, NOMBRES, APELLIDOS, FECHA_NACIMIENTO, GENERO, TELEFONO)
VALUES (SEQ_DCCH_ID_PACIENTE.NEXTVAL, 'SOFIA', 'HERNANDEZ', TO_DATE('10/11/1978','DD/MM/YYYY'), 'F', '5551003');
-- Insertar doctores
INSERT INTO DCCH_DOCTORES(ID_DOCTOR, NOMBRES, APELLIDOS, ESPECIALIDAD, ANIOS_EXPERIENCIA)
VALUES (SEQ_DCCH_ID_DOCTOR.NEXTVAL, 'JUAN', 'PEREZ', 'CARDIOLOGIA', 13);
INSERT INTO DCCH_DOCTORES(ID_DOCTOR, NOMBRES, APELLIDOS, ESPECIALIDAD, ANIOS_EXPERIENCIA)
VALUES (SEQ_DCCH_ID_DOCTOR.NEXTVAL, 'ANA', 'LOPEZ', 'PEDIATRIA', 8);
INSERT INTO DCCH_DOCTORES(ID_DOCTOR, NOMBRES, APELLIDOS, ESPECIALIDAD, ANIOS_EXPERIENCIA)
VALUES (SEQ_DCCH_ID_DOCTOR.NEXTVAL, 'LUIS', 'GARCIA', 'TRAUMATOLOGIA', 15);
-- Insertar citas (CORREGIDO: usando IDs existentes)
INSERT INTO DCCH_CITAS(ID_CITA, FECHA_CITA, HORA_CITA, ID_PACIENTE, ID_DOCTOR, MOTIVO, ESTADO)
VALUES (SEQ_DCCH_ID_CITA.NEXTVAL, TO_DATE('15/05/2023', 'DD/MM/YYYY'), '09:00', 2001, 501, 'DOLOR DE PECHO', 'COMPLETADA');
INSERT INTO DCCH_CITAS(ID_CITA, FECHA_CITA, HORA_CITA, ID_PACIENTE, ID_DOCTOR, MOTIVO, ESTADO)
VALUES (SEQ_DCCH_ID_CITA.NEXTVAL, TO_DATE('16/05/2023', 'DD/MM/YYYY'), '10:30', 2002, 502, 'CONTROL RUTINARIO', 'PENDIENTE');
INSERT INTO DCCH_CITAS(ID_CITA, FECHA_CITA, HORA_CITA, ID_PACIENTE, ID_DOCTOR, MOTIVO, ESTADO)
VALUES (SEQ_DCCH_ID_CITA.NEXTVAL, TO_DATE('17/05/2023', 'DD/MM/YYYY'), '14:00', 2003, 503, 'DOLOR DE RODILLA', 'CANCELADA');
-- Consultas
SELECT * FROM DCCH_PACIENTES;
SELECT * FROM DCCH_DOCTORES;
SELECT * FROM DCCH_CITAS;
-- CREACIÓN DE ÍNDICES
-- Índice para la columna ESPECIALIDAD en la tabla ALA_DOCTORES
CREATE INDEX IDX_DCCH_ESPECIALIDAD
ON DCCH_DOCTORES (ESPECIALIDAD);
-- Índice compuesto para APELLIDOS y NOMBRES en la tabla ALA_PACIENTES
CREATE INDEX IDX_DCCH_NOMBRES
ON DCCH_PACIENTES(APELLIDOS, NOMBRES);
-- Índice para FECHA_CITA en la tabla ALA_CITAS
CREATE INDEX IDX_DCCH_CITAS
ON DCCH_CITAS(FECHA_CITA);
-- CREACIÓN DE VISTAS
-- CREACIÓN DE VISTA PARA CITAS PENDIENTES
CREATE OR REPLACE VIEW VW_CITAS_PENDIENTES AS
SELECT
C.ID_CITA, P.NOMBRES AS NOMBRE_PACIENTE, P.APELLIDOS AS APELLIDO_PACIENTE, D.NOMBRES AS NOMBRE_DOCTOR,
D.APELLIDOS AS APELLIDO_DOCTOR, D.ESPECIALIDAD, C.FECHA_CITA, C.HORA_CITA, C.MOTIVO, C.ESTADO
FROM
DCCH_CITAS C JOIN DCCH_PACIENTES P ON C.ID_PACIENTE = P.ID_PACIENTE
JOIN DCCH_DOCTORES D ON C.ID_DOCTOR = D.ID_DOCTOR
WHERE
C.ESTADO = 'PENDIENTE';