Esquema Lógico Enfermo PERSONAL (dni: dD, dirección: dR, población: dP) CP: dni DOCTOR (dni: dD, especialidad: dE) CP: dni CAj: dni → PERSONAL CAj: especialidad → ESPECIALIDAD ADMINISTRADOR (nif: dD) ESPECIALIDAD (especialidad: dE, HISTORIA (número: dN, orden: dN, descripción: dC) CP: nif fecha: dF, CP:especialidad CAj: nif → PERSONAL alta: dF descripción: dS, HISTORIAL (número: dN, PACIENTE (dni: dD, tratamiento: dS, cerrado: dB, nss: dD, dni: dD) fechaApertura: dF, nombre: dC, CP(número, orden) dni: dD) datos: dS, CP: número CAj(número) → HISTORIAL población: dP) CAlt: dni CP: dni CAj(dni) → DOCTOR CAj: dni → PACIENTE CAlt: nss VNN: dni P1. (1 punto) (1 fallo no resta; a partir del segundo resta 0,5 puntos; las no contestadas cuentan como fallo) a) Card(HISTORIAL, es-de)= (0,N) b) Card(HISTORIAL, pertenecer)= (1,1) c) Card(DOCTOR, firmar)= (0,N) d) Card(DOCTOR), es)= (1,1) e) Card(ADMINISTRADOR, es)= (1,1) f ) Card(DOCTOR, cura)= (0,1) Card(HISTORIA, es-de)= (1,1) Card(PACIENTE, pertenecer)= (0,1) Card(HISTORIA, firmar)= (1,1) Card(PERSONAL, es)= (0,1) Card(PERSONAL, es)= (0,1) Card(ESPECIALIDAD, cura)= (0,N) P2. (1,5 puntos) (cada fallo resta 0,5 puntos; las no contestadas cuentan como fallo) Marca con un círculo la respuesta correcta y justifica esa respuesta. a) Un doctor no puede ser, al mismo tiempo, paciente (se entiende que dos personas son la misma si tienen el mismo D.N.I.) = F La clave primaria de DOCTOR tiene el mismo dominio que la de PACIENTE, por lo que pueden almacenar los mismos valores. b) Sólo los doctores atienden a pacientes = V Los PACIENTES tienen HISTORIALES, compuestos de una o varias HISTORIAS que son firmadas por DOCTORES, pero no hay relación entre PACIENTES y ADMINISTRATIVOS. c) Si HISTORIA.fecha es el día en que un paciente ingresa en el hospital e HISTORIA.alta cuando desaparece la causa por la que el enfermo fue ingresado, HISTORIA.fecha puede ser una fecha posterior a la de HISTORIA.alta = V Los dos atributos están definidos sobre el mismo dominio y en el modelo relacional no existen herramientas para reflejar restricciones de valor entre atributos (las de dominio sólo limitan los valores posibles a almacenar en un atributo pero no permiten comparaciones entre varios atributos) d) Un paciente puede ser atendido en varias especialidades con sus correspondientes historias = V Los PACIENTES se relacionan con DOCTORES por HISTORIAL e HISTORIA: un PACIENTE tiene un HISTORIAL pero éste tiene varias HISTORIAS, cada una con un médico, por tanto un paciente se relaciona con N DOCTORES, cada uno con su ESPECIALIDAD, que no tiene por qué ser la misma para todos esos doctores. e) Un paciente sólo es atendido por un único doctor en todo su historial = F Por la misma razón que en la respuesta anterior. f) Los administrativos pueden ser doctores y tener especialidad = V Un valor de clave primaria de PERSONAL puede aparecer tanto en DOCTOR como en ADMINISTRADOR (hay una clave ajena de DOCTOR a PERSONAL, y otra de ADMINISTRADOR también a PERSONAL, por tanto la única restricción es la propia integridad referencial: en las claves ajenas de DOCTOR y ADMINISTRADOR sólo se pueden almacenar valores que estén previamente en la CP de PERSONAL) Esquema Lógico Enfermo PERSONAL (dni: dD, dirección: dR, población: dP) CP: dni DOCTOR (dni: dD, especialidad: dE) CP: dni CAj: dni → PERSONAL CAj: especialidad → ESPECIALIDAD ADMINISTRADOR (nif: dD) ESPECIALIDAD (especialidad: dE, HISTORIA (número: dN, CP: nif descripción: dC) orden: dN, CP:especialidad fecha: dF, CAj: nif → PERSONAL alta: dF descripción: dS, HISTORIAL (número: dN, PACIENTE (dni: dD, tratamiento: dS, cerrado: dB, nss: dD, fechaApertura: dF, dni: dD) nombre: dC, dni: dD) CP(número, orden) datos: dS, CP: número CAj(número) → HISTORIAL población: dP) CAlt: dni CP: dni CAj(dni) → DOCTOR CAj: dni → PACIENTE CAlt: nss VNN: dni P3. (0,5 puntos) Suponiendo que estamos definiendo aquellas restricciones del sistema que no se han podido reflejar en el esquema lógico Enfermo, ¿cuáles de las siguientes expresiones no son necesarias y porqué? (Suponiendo que todas las variables están correctamente definidas) ∀x (DOCTOR(dni: x) → PACIENTE(dni: x)) Esta restricción es necesaria porque no se refleja en el esquema “Todo DOCTOR es, también, PACIENTE”: evidentemente haría falta una CAj de DOCTOR hacia PACIENTE que al mismo tiempo fuera CP en DOCTOR. Esto no es posible ya que entonces deberíamos desmontar la generalización de PERSONAL. ∀x (HISTORIAL(número: x) → HISTORIA(número: x)) Esta restricción es necesaria porque no se refleja en el esquema “Todo HISTORIAL tiene, al menos, una HISTORIA”: es una restricción de existencia que afecta a HISTORIAL en su relación con HISTORIA, y en el esquema es imposible de reflejar ya que la clave ajena está, precisamente, en HISTORIA. ∀x (HISTORIAL(dni: x, número: t) → (PACIENTE(dni: x) ∧ ¬∃z (HISTORIAL(número: z, dni: x) ∧ z ≠ t))) Esta restricción ya está reflejada en el esquema. “Todo HISTORIAL pertenece a algún PACIENTE y no existen dos HISTORIALES del mismo paciente: un HISTORIAL pertenece a uno y sólo a un PACIENTE”: precisamente la definición de la CAj de HISTORIAL a PACIENTE (dni), al ser CAlt, no permite duplicados. (Nótese que se utiliza la CP (número) en la expresión para asegurarnos de que hablamos de HISTORIALES distintos) P4. (0,25 + 0,25 puntos) Resuelve los siguientes enunciados referidos al esquema lógico Enfermo utilizando el Álgebra Relacional. a) Nombre del paciente que ha sido visitado por doctores de todas las especialidades HISTORIAL x HISTORIA x DOCTOR donde HISTORIAL.número=HISTORIA.número y HISTORIA.dni=DOCTOR.dni [HISTORIAL.dni, especialidad] ÷ ( ESPECIALIDAD[especialidad] ) ∞ PACIENTE [nombre] (no se pueden utilizar concatenaciones entre HISTORIAL e HISTORIA, y con DOCTOR posteriormente, porque coinciden en nombre y dominio los dni de las claves ajenas a PACIENTE y a DOCTOR) b) Lista de (nombre de doctor, D.N.I. de paciente, y nombre de paciente), para las especialidades cuya descripción no sea radiología o medicina nuclear. PACIENTE x HISTORIAL x HISTORIA x DOCTOR donde HISTORIAL.número=HISTORIA.número y HISTORIA.dni=DOCTOR.dni y PACIENTE.dni=HISTORIAL.dni ∞ ESPECIALIDAD donde descripción ≠ “radiología” y descripción ≠ “medicina nuclear” [DOCTOR.nombre, PACIENTE.dni, PACIENTE.nombre] Esquema Lógico Enfermo PERSONAL (dni: dD, dirección: dR, población: dP) CP: dni DOCTOR (dni: dD, especialidad: dE) CP: dni CAj: dni → PERSONAL CAj: especialidad → ESPECIALIDAD ADMINISTRADOR (nif: dD) ESPECIALIDAD (especialidad: dE, HISTORIA (número: dN, CP: nif descripción: dC) orden: dN, CP:especialidad fecha: dF, CAj: nif → PERSONAL alta: dF descripción: dS, HISTORIAL (número: dN, PACIENTE (dni: dD, tratamiento: dS, cerrado: dB, nss: dD, fechaApertura: dF, dni: dD) nombre: dC, dni: dD) CP(número, orden) datos: dS, CP: número CAj(número) → HISTORIAL población: dP) CAlt: dni CP: dni CAj(dni) → DOCTOR CAj: dni → PACIENTE CAlt: nss VNN: dni P5. (1 punto) El esquema lógico Enfermo debería reflejar las siguientes dependencias funcionales, cuyos atributos están incluidos en una o más relaciones: identifica esas relaciones y comprueba que, efectivamente, están en una forma normal de las consideradas correctas. Debes especificar, para las relaciones identificadas, la forma normal en la que se encuentran teniendo en cuenta las “nuevas” dependencias y, si es que no se cumplen, arreglar las tablas. a) dni especialidad b) número nif dirección descripción orden población a) Está totalmente reflejado entre las tablas PERSONAL, DOCTOR y ESPECIALIDAD Por efecto de la especialización un doctor es un miembro del PERSONAL (por la clave ajena DOCTOR.dni a PERSONAL, que es al mismo tiempo CP en DOCTOR). Por lo tanto, un DOCTOR se caracteriza por los atributos genéricos de PERSONAL, y por los exclusivamente suyos definidos en su propia tabla. Así, PERSONAL.dni determina funcionalmente a PERSONAL.dirección y a PERSONAL.población. DOCTOR.dni determina funcionalmente a DOCTOR.especialidad, que es clave ajena la tabla ESPECIALIDAD donde ESPECIALIDAD.especialidad determina a ESPECIALIDAD.descripción. b) número y orden están en la tabla HISTORIA, y nif sólo se encuentra en la tabla ADMINISTRADOR. Para que esta dependencia funcional estuviera reflejada en el esquema haría falta una columna adicional definida sobre el dominio dD que fuera clave ajena en HISTORIA hacia ADMINISTRADOR. Esquema Lógico Enfermo PERSONAL (dni: dD, dirección: dR, población: dP) CP: dni DOCTOR (dni: dD, especialidad: dE) CP: dni CAj: dni → PERSONAL CAj: especialidad → ESPECIALIDAD ADMINISTRADOR (nif: dD) ESPECIALIDAD (especialidad: dE, HISTORIA (número: dN, orden: dN, descripción: dC) CP: nif fecha: dF, CP:especialidad CAj: nif → PERSONAL alta: dF descripción: dS, HISTORIAL (número: dN, PACIENTE (dni: dD, tratamiento: dS, cerrado: dB, nss: dD, dni: dD) fechaApertura: dF, nombre: dC, CP(número, orden) dni: dD) datos: dS, CP: número CAj(número) → HISTORIAL población: dP) CAlt: dni CP: dni CAj(dni) → DOCTOR CAj: dni → PACIENTE CAlt: nss VNN: dni P6. (0.5 punto) Algunas de las siguientes operaciones sobre la base de datos del esquema Lógico Enfermo podrían efectuarse de forma atómica. Para cada una de ellas indica: 1- Si la operación atómica es posible o no. 2a- En caso afirmativo, explica qué operación se realizaría y qué sería necesario añadir al esquema para permitirla. 2b- En caso negativo, explica porqué no es posible. a) Se desea dar de baja al paciente de dni 7777777 junto con los datos de su historial y todas sus historias. ES POSIBLE. Hay que añadir las siguientes definiciones al esquema: HISTORIAL ... CAj: dni → PACIENTE ANTE BORRADOS PROPAGAR HISTORIA ... CAj(número) → HISTORIAL ANTE BORRADOS PROPAGAR ... b) Se desea borrar los datos del dni 33333333 de la tabla DOCTOR junto con sus datos de la tabla PERSONAL. NO ES POSIBLE. La clave ajena está en DOCTOR, así que lo único que se puede hacer, realmente, es que si se borra un miembro de PERSONAL se propague a DOCTOR, no al revés. c) Se desea borrar los datos de la HISTORIA de número 10200 y orden 3 junto con los datos de la tabla DOCTOR relacionados con la historia. NO ES POSIBLE. Por idénticas razones que en la respuesta anterior (obviamente haciendo referencia a la CAj HISTORIA.dni) d) Se desea actualizar el HISTORIAL número 999 cambiando su número al 10999 y dejando como valor nulo el número de sus HISTORIAS relacionadas. NO ES POSIBLE. HISTORIA.número no admite nulos por estar dentro de la CP.