Download Equipo Nº 9 Hospitales
Document related concepts
no text concepts found
Transcript
INSTITUTO TECNOLOGICO DEL VALLE DEL GUADIANA TALLER DE BASE DE DATOS DOCUMENTO DEL CASO DE HOSPITALES Y EJERCICIO DEL PDF PROFESOR: RAMIRO VILLANUEVA EQUIPO Nº 9 YADIRA RODRIGUEZ MARTINEZ ANA SILVIA TENORIO SANCHEZ PEDRO CHAVEZ MARTINEZ JOSE LUIS ALVAREZ CARRILLO FECHA DE ENTREGA 02/ ABRIL/2009 CASO DE UN HOSPITAL 9. Se trata de diseñar la base de datos para la administración de un consorcio de hospitales, que permita gestionar datos acerca del personal así como de los pacientes de los mismos. De cada hospital interesa almacenar además de su nombre dirección, teléfono, fax, etc. • El personal de los hospitales (del que interesa almacenar su dni, nombre, apellidos, dirección y teléfono) se divide en personal administrativo y personal sanitario (dentro de este se distingue a su vez ATS y médicos). • Los médicos tienen una especialidad que interesa conocer (pediatría, obstetricia, etc.) Y sólo trabajan, al igual que el resto del personal, en un hospital. • Los pacientes pueden acudir a varios hospitales del consorcio, pudiendo ser Atendidos por varios médicos. • Se desea conocer los datos personales de los pacientes que van a ingresar en el hospital, así como el número de seguridad social, compañía aseguradora, la fecha de admisión y la sala (habitación) en la que deben permanecer. • Cada sala se identifica por un número de sala dentro de cada hospital y se desea conocer el número de camas de las que dispone cada sala. • Cada admisión de un paciente en el hospital lleva asociada una o varias fichas de tratamiento en las que se indica la enfermedad y el médico que la atiende. Cada tratamiento se identifica por el nombre de la enfermedad del tratamiento que es único para cada admisión. • Además, cada tratamiento da lugar a distintos resultados que permiten realizar el seguimiento de cada enfermedad de un paciente. El resultado debe indicar la fecha y hora en que éste tuvo lugar, así como un comentario (por ejemplo, indicando si el paciente tiene fiebre etc.). Para un mismo tratamiento sólo puede haber un resultado en un mismo día, a una misma hora. CODIGO DE LAS TABLAS Tabla pacientes create table pacientes (id_paciente number not null, nombre varchar2(50)null, direccion varchar2(50)null,padecimiento varchar2(50)null,no_cama number,departamento varchar2(50)null,telefono number null,seguro_social number null,fecha_de_ingreso date null,fecha_de_egreso date null,tratamiento varchar2(50) null,medico varchar2(50)null,constraint pkey_pacientes primary key (id_paciente)); Llaves foráneas alter table pacientes add constraint fkey_medicos foreign key (medico) references medicos (id_medico); alter table pacientes add constraint fkey_departamentos foreign key (departamento) references departamentos (id_departamento); Tabla medicos create table medicos (id_medico number not null,nombre varchar2(50)null,paterno varchar2(50)null,materno varchar2(50)null,telefono number(9)null,direccion varchar2(50)null,especialidad varchar2(50)null,constraint pkey_medicos primary key (id_medico)); Tabla departamentos create table departamentos (id_departamento number not null,nombre varchar2(50)null,bloque varchar2(4)null,no_camas number(2) null,constraint pkey_departamentos primary key (id_departamento)); Tabla hospitales create table hospitales (id_hospital number not null,direccion varchar2(50)null,especialidad varchar2(50)null,ciudad varchar2(50)null,administrador varchar2(50)null,constraint pkey_hospitales primary key (id_hospital)); Llaves foraneas alter table hospitales add constraint fkey_pacientes foreing key (id_hospital) references pacientes (nombre hospital); alter table hospitales add constraint fkey_medicos foreign key (id_hospital) references medicos (id_medico); alter table hospitales add constraint fkey_personal foreing key (id_hospital) references personal (id_personal); alter table hospitales add constraint fkey_departamentos foreing key (id_hospital) references departamentos (id_departamento); alter table hospitals add constraint fkey_tratamientos (id_hospital) references tratamientos (id_tratamientos); foreign key Tabla tratamientos create table tratamientos (id_tratamientos number not null,fecha date null,hora number (4)null,nombre_enfermedad varchar2(50)null,nombre_paciente varchar2(50)null,medico varchar2(50)null,comentario varchar2(50)null,constraint pkey_tratamientos primary key (id_tratamientos)); Tabla personal create table personal (id_personal number not null,nombre_personal varchar2 (50) null,paterno varchar2 (50)null,materno varchar2(50)null,direccion varchar2(50)null,telefono number null,curp number null,turno varchar2 (50)null, ocupacion varchar2 (50)null,grado_estudios varchar2 (50)null,constraint pkey_personal primary key (id_personal)); VISTAS select "PACIENTES"."NOMBRE_PACIENTE" as "NOMBRE_PACIENTE", "PACIENTES"."PADECIMIENTO" as "PADECIMIENTO", "PACIENTES"."NO_CAMA" as "NO_CAMA", "PACIENTES"."DEPARTAMENTO" as "DEPARTAMENTO", "DEPARTAMENTOS"."NOMBRE_DEPARTAMENTO" "NOMBRE_DEPARTAMENTO", "DEPARTAMENTOS"."BLOQUE" as "BLOQUE", "MEDICOS"."NOMBRE_MEDICO" as "NOMBRE_MEDICO", "MEDICOS"."ESPECIALIDAD" as "ESPECIALIDAD" from "MEDICOS" "MEDICOS", "DEPARTAMENTOS" "DEPARTAMENTOS", "PACIENTES" "PACIENTES" as select "PERSONAL"."NOMBRE_PERSONAL" as "NOMBRE_PERSONAL", "PERSONAL"."TURNO" as "TURNO", "PERSONAL"."OCUPACION" as "OCUPACION", "HOSPITALES"."NOMBRE_HOSPITAL" as "NOMBRE_HOSPITAL", "HOSPITALES"."CIUDAD" as "CIUDAD", "HOSPITALES"."DIRECCION" as "DIRECCION" from "HOSPITALES" "HOSPITALES", "PERSONAL" "PERSONAL" select "MEDICOS"."NOMBRE_MEDICO" as "NOMBRE_MEDICO", "MEDICOS"."ESPECIALIDAD" as "ESPECIALIDAD", "MEDICOS"."CEDULA" as "CEDULA" from "MEDICOS" "MEDICOS" select "TRATAMIENTOS"."NOMBRE_ENFERMEDAD" "NOMBRE_ENFERMEDAD", as "TRATAMIENTOS"."NOMBRE_DEL_TRATAMIENTO" "NOMBRE_DEL_TRATAMIENTO", as "TRATAMIENTOS"."NOMBRE_PACIENTE" as "NOMBRE_PACIENTE", "TRATAMIENTOS"."SALA" as "SALA", "TRATAMIENTOS"."COMENTARIO" as "COMENTARIO" from "TRATAMIENTOS" "TRATAMIENTOS" TRIGER create or replace trigger trigger_pacientes before insert on test for each row declare n registros number; ncont number; begin select sum(registros),count(1) into nregistros, ncont from test where id_paciente= :new.id_paciente; nregistros:=nvl(nregistros, :new.registros); if ncont=0 then ncont:=1; end if; update hospital set =(nregistros+ :new.)/(ncontegistros+1) where id_paciente= :new.id_paciente; end trigger_pacientes; DOCUMENTO DE PDF REPORTE DE TRIGGERS CREAR LAS SIGUIENTES TABLAS CON AL SIGUIENTE ESTRUCTURA Autores = { ID: numérico (PK) Nombre: carácter (50) Apellidos: carácter (50) } Libros = { ISBN: carácter (10) (PK) Género: carácter (20) Título: carácter (100) Páginas: numérico Precio: numérico Copyright: numérico (4) Autor1: numérico (FK autores) Autor2: numérico (FK autores) Autor3: numérico (FK autores) } Estadisticas = { Genero: carácter (20) Total_Libros: numérico Precio_Medio: numérico } TABLA DE AUTORES create table Autores(id_ number not null,Nombre varchar2(50)null,paterno varchar2(50)null, constraint pkey_autores primary key(id_)); TABLA DE LIBROS create table libros(ISBN varchar2(10)not null,genero varchar2(20)null, titulo varchar2(100)null,paginas number null,precio number null,copyright number(4),autor1 number null,autor2 number null,autor3 number null,constraint pkey_libros primary key(ISBN)); Llaves foráneas Alter table libros add constraint fkey_autores foreign key (autor1) references autores (id_); Alter table libros add constraint fkey_autor2 foreign key (autor2) references autores(id_); Alter table libros add constraint fkey_autor3 foreign key (autor3) references autores(id_); TABLA DE ESTADISTICA create table estadistica(genero varchar2(20),total_libros number,precion_medio number); 2 . Estudie el código del siguiente disparador. Trate de expresar con palabras cuál es el resultado esperado de su ejecución. CREATE OR REPLACE TRIGGER ActualizarEstadisticas AFTER INSERT OR DELETE OR UPDATE ON libros DECLARE CURSOR c_Estadisticas IS SELECT genero, COUNT(*) total_libros, AVG(precio) precio_medio FROM libros GROUP BY genero; v_genero estadisticas.genero%TYPE; v_total_libros estadisticas.total_libros%TYPE; v_precio_medio estadisticas.precio_medio%TYPE; BEGIN DELETE FROM estadisticas; OPEN c_Estadisticas; LOOP FETCH c_Estadisticas INTO v_genero, v_total_libros, v_precio_medio; EXIT WHEN c_Estadisticas%NOTFOUND; INSERT INTO estadisticas (genero, total_libros, precio_medio) VALUES (v_genero, v_total_libros, v_precio_medio); END LOOP; CLOSE c_Estadisticas; END ActualizarEstadisticas; / CREATE OR REPLACE TRIGGER ActualizarEstadisticas_FOR AFTER INSERT OR DELETE OR UPDATE ON libros DECLARE CURSOR c_Estadisticas IS SELECT genero, COUNT(*) total_libros, AVG(precio) precio_medio FROM libros GROUP BY genero; BEGIN DELETE FROM estadisticas; FOR v_RegistroEstadisticas in c_Estadisticas LOOP INSERT INTO estadisticas (genero, total_libros, precio_medio) VALUES (v_RegistroEstadisticas.genero, v_RegistroEstadisticas.total_libros, v_RegistroEstadisticas.precio_medio); END LOOP; END ActualizarEstadisticas_FOR; 3. Para comprobar el funcionamiento del disparador: a) Consulte la totalidad de las 3 tablas creadas b) Inserte los datos de varios autores y a continuación utilice los datos de dichos autores para insertar datos en la tabla Libros. PARA INSERTAR LOS DATOS EN LA TABLA DE AUTORES insert into autores values('1','Marlene','thierault'); insert into autores values('2','Rachel','charmichael'); insert into autores values('3','james','viscusi'); insert into autores values('4','Michael','Abbey'); insert into autores values('5','Michael','Corey'); insert into autores values('6','Gaja','Vaidyanatha'); insert into autores values('7','Kirtikumar','Deshpande'); insert into autores values('8','John','Kostelac'); insert into autores values('9','Ian','Abramson'); insert into autores values('10','Kenny','Smith'); insert into autores values('11','Stephan','Haisley'); insert into autores values('15','David','James'); insert into autores values('16','Graham','Seibert'); insert into autores values('17','Simon','Russell'); insert into autores values('18','Bastin','Gerald'); insert into autores values('19','Nigel','King'); insert into autores values('20','Dan','Natchek'); para insertar datos a la tabla libros insert into libros values ('71122048','oracle basics','oracle bginers guide',765,44,1989,4,5,1) insert into libros values ('72131454','oracle basics','oracle performance',404,39,2001,6,7,8) insert into libros values ('72192798','oracle basics','oracle beginner',535,39,2002,4,5,9) insert into libros values ('72194618','oracle basics','oracle backup',487,39,2002,10,11,2) insert into libros values ('72133791','oracle basics','oracle E business suite',823,69,2002,18,19,20) insert into libros values ('72132302','oracle basics','oracle E business suite',820,59,2002,15,16,17) insert into libros values ('72222492','oracle basics','oracle aplication server',544,45,2002,4,8,15) creacion de la vista select "LIBROS_1"."ISBN" as "ISBN", "LIBROS_1"."TITULO" as "TITULO", "AUTORES"."NOMBRE" as "NOMBRE", "AUTORES"."PATERNO" as "PATERNO" from "AUTORES" "AUTORES", "LIBROS" "LIBROS_1"