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