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"