Examen de Sistemas Informáticos 1. Febrero 2005

Anuncio
Examen de Sistemas Informáticos 1. Febrero 2005
Una clínica veterinaria desea informatizar determinados procesos de su negocio, para lo cual nos solicita
que diseñemos una base de datos que responda a las necesidades que tienen de cara al tratamiento y
almacenamiento de la información de la que disponen.
La mayoría de esta información que pretenden gestionar gira entorno a los clientes, sus animales, el
historial médico de los mismos y el personal que los ha atendido, aparte de la facturación.
En la clínica, además de prestar servicio médico, también se dedica a la venta de animales, de tal manera
que les interesa, no solamente conocer los datos de los animales que traen los clientes sino también los
datos de los animales que han sido vendidos y quién los ha comprado, puesto que los animales adquiridos
en la clínica están cubiertos por un seguro médico de seis meses (todas las consultas médicas excepto el
material desechable corren a cargo de la clínica), cualquier factura emitida durante este periodo deberá
reflejar este hecho y hacer constar un cargo de cero euros. Evidentemente, es necesario para la clínica,
conocer la fecha de compra de los animales, ya que una vez que ha transcurrido el periodo del seguro, las
consultas serán facturadas con normalidad. Hay que hacer notar que la clínica se nutre de animales que
provienen de mayoristas cuya gestión no incumbe a esta base de datos. Para acometer el trabajo, nos
indican que la información que desean almacenar de sus clientes (los propietarios de los animales) es: el
DNI (o número de pasaporte, que es equivalente), nombre y apellidos, domicilio y teléfono de contacto.
Una vez que los datos de un cliente entran a formar parte del sistema, éstos son almacenados de forma
indefinida, así como el historial de cada uno de los animales que son atendidos en la clínica. De cada uno
de los animales que se tratan (indistintamente de si son los vendidos o traídos a consulta), la información
a almacenar es el número de licencia, nombre, tipo de animal (gato, perro, garrapata, etc) y las alergias así
como su historial médico.
Se considera que un animal pertenece a un único propietario pero un propietario puede tener muchos
animales
A la clínica le interesa gestionar su “agenda” de tal manera que intentará que los clientes telefoneen antes
de acudir con su animal para pedir cita. De esta manera, cuando el cliente telefonea, se asigna una fecha y
una hora para acudir a la clínica, y además se le toma nota de una pequeña descripción del motivo de la
visita así como otra breve descripción de los síntomas que presenta el animal.
Una vez que se admite un animal en la clínica (bien sea mediante cita previa o sin ella debido a una
emergencia “urgente”), se abre una “hoja de registro” y se almacena la fecha, la hora de entrada, la de
salida, el material desechable empleado en la cura y una descripción del motivo de la visita así como de la
diagnosis. Esta información se usará para general automáticamente la factura correspondiente a cada
visita que debe quedar almacenada junto con información que permita determinar si la factura ha sido
pagada y cuando; y también servirá para crear el historial médico.
Nota: El historial médico debe crearse de forma dinámica a partir de la información existente en la base
de datos. Es decir, no es necesario crear una entidad. En caso de que se crea necesario crear dicha entidad
se debe discutir como se actualiza.
APARTADO 1
a) (5 puntos, de ellos 1,5 son el trigger solicitado) Diseña RAZONADAMENTE una base de datos
(diagrama entidad relación) que satisfaga los requerimientos anteriores y pueda usarse para responder a
las consultas de los apartados siguiente. Se deberán indicar las restricciones de integridad que contenga, y
la forma en que se especificarían en SQL tanto la estructura de las tablas como las restricciones de
integridad.
Nota 1: Por favor, ser breves en vuestros razonamientos, pero estos son imprescindibles.
En particular no olvides crear un trigger que calcule automáticamente la cantidad adeudada por cada
visita. El trigger se debe comportar como se describe a continuación:
1.
Cuando se almacena el día/hora de salida se debe calcular el precio de la consulta en función del
tiempo que dure la consulta y los materiales desechables empleados
2.
Si se modifica algún dato de la “hoja de registro” después de que se haya introducido el día/hora
de salida (para subsanar un error) se debe recalcular el precio de la consulta a menos que la
factura ya se haya cobrado en cuyo caso se rechazará la modificación
Nota 2: todas las relaciones deben satisfacer la 3ª forma normal o deberás comentar por que opinas que en
este caso particular es conveniente que se viole este principio general
Nota 3: Ningún atributo de las entidades puede ser redundante (cada atributo redundante descontará 3
puntos de la nota final). Se define atributo redundante como aquel que puede ser obtenido mediante una
consulta que involucre el resto de los atributos de la base de datos. Sólo se admiten atributos redundantes
cuando se explique su necesidad y se rellenen automáticamente mediante un trigger o similar
Por lo tanto, en este apartado, se debe entregar:
a)
Diagrama Entidad-Relación.
b) Tablas y triggers en SQL incluyendo todas las restricciones de integridad.
c)
Explicación RAZONADA del diseño.
APARTADO 2
(2.5 puntos) Da RAZONADAMENTE una consulta en álgebra relacional y SQL que permitan
realizar la siguientes operación (en SQL se valorará la eficiencia).
La clínica veterinaria esta pensando en ofertar a sus clientes un nuevo seguro medico que cubra todos los
gastos médicos de un animal durante un año si se pagan un importe de XX euros. Para decidir cual es el
valor correcto para XX necesita saber:
1.
Gasto medio de cada tipo de animal (perro, gato, etc) por año
2.
Gasto medio de cada tipo de animal agrupado por periodos de 6 meses. Esto es de 0 a 6 meses de
edad, de 6 a 12 y así sucesivamente.
Nota 1: a la hora de realizar las consultas no se admitirá el uso de ningún atributo redundante que no se
rellene automáticamente
APARTADO 3
(2.5 puntos) Escribe RAZONADAMENTE un programa en C con SQL embebido que a partir de la
base de datos imprima las facturas a cobrar a los clientes. El programa será activado por el sistema
operativo todos los días a las 12:00 y debe generar facturas para todos aquellos servicios para los cuales
no se haya impreso nunca una factura (y que hayan concluido) o para aquellos servicios que no se hayan
cobrado tras un periodo de 60 días desde que se envió la última factura. La factura debe contener la
dirección completa del cliente, el nombre y numero de licencia del animal y una descripción
pormenorizada del servicio incluyendo gastos de mano de obra y precio de cada uno de los elementos
desechables utilizados durante la consulta (no olvides calcular el IVA, 16%). Recuerda que el número de
factura debe ser único y debe quedar almacenado en la base de datos. Las facturas remandadas a clientes
morosos deben tener todas el mismo número de factura. La base de datos debe permitiros almacenar datos
sobre cuando se emitió la factura, cuando se ha re-emitido y si se ha cobrado
Descargar