Final del 14/08/19 (Bases de Datos)
Consigna
Se aprueba con 60/100. (10 puntos cada una)
- Definir dependencia funcional. Dado {idAlumno, nombreAlumno, idCurso, idProfesor} dar un conjunto de dependencias funcionales. Decir en qué forma normal se encuentra.
- Definir clave candidata y clave primaria. Definir 2FN.
- Para qué sirve la normalización? Cómo se relaciona con las pautas de diseño de una base de datos? Describir anomalías que puede presentar una base de datos desnormalizada.
- Qué es una transacción? Dar un ejemplo de algún dominio. Por qué es importante el control de concurrencia?
- Explicar bases NoSQL por documentos, explicando el concepto de documento. Qué es un DID? Dar un ejemplo de un sistema de base de datos por documentos.
- Definir base de datos distribuida. Explicar nuevos niveles de transparencia.
- Explicar fragmentación. Explicar cómo se recupera la tabla original con álgebra relacional.
- Explicar independencia física.
- Dar dos ejemplos de optimizaciones algebraicas. Ejemplificar.
- Diferencia entre administrador de datos y DBA. Relacionar con concepto de independencia física y transparencia.
Respuestas posiblemente incorrectas
Pregunta 1
Una dependencia funcional X -> Y entre dos conjuntos de atributos X e Y de una BD indica que cualquiera dos tuplas t1 y t2 en R tal que t1[X] = t2[X], se debe cumplir t1[Y] = t2[Y].
Las dependencias funcionales dependen de la semántica de la relación, y por tanto vamos a asumir que el conjunto de atributos dado corresponde a un sistema de gestión unviersitaria (e.g Guaraní) para dar sus dependencias funcionales.
- idAlumno -> nombreAlumno: cada alumno tiene un único id asignado
- idCurso -> idProfesor: asumiendo que un curso representa una instancia de materia + profesor + cuatrimestre de cursada
Si asumimos que este esquema representa una relación del estilo "inscripción a cursada", podemos considerar que la PK estará compuesta por { idAlumno, idCurso }. En este caso no se llega a 2FN pues los atributos nombreAlumno e idProfesor dependen parcialmente de la PK. El esquema se encuentra en 1FN por no ser 2FN y no tener relaciones dentro de relaciones ni atributos multivaluados.
Pregunta 2
Una clave candidata es una de las posibles claves de una relación. Una clave S es un subconjunto de atributos de R con la propiedad de que no hay dos tuplas t1, t2 en un estado legal r(R) que cumplan t1(S) = t2(S).
La clave primaria es una clave candidata designada arbitrariamente como tal. Por ejemplo, en una tabla donde se tienen los atributos DNI y Pasaporte de una persona, uno podría elegir tanto DNI como Pasaporte como PK.
2FN es una forma normal que, además de ser 1FN (prohíbe relaciones dentro de relaciones, atributos multivaluados), cumple que todo atributo no primo A de R depende funcionalmente de manera completa de la PK de R. Esto es, que la PK es una DF minimal para todos los atributos que no pertenecen a alguna CK.
Pregunta 3
La normalización es una herramienta que se apoya en las DFs para evaluar y comparar distintas formas de agrupar atributos en un esquema. Al diseñar una base de datos normalizada siguiendo las formas normales, se busca que el resultado sea conceptualmente bueno (e.g entendible) y también físicamente bueno (e.g minimizar duplicación).
Para esto se siguen cuatro pautas fundamentales, que si bien no siempre pueden alcanzarse al mismo tiempo, dan una medida informal de la calidad del diseño:
- semántica clara
- reducir información redundante
- reducir la cantidad de valores NULL
- no permite generar tuplas espúreas
Una base de datos desnormalizada puede presentar distintos problemas, como por ejemplo:
- Anomalías de modificación: el nombre del departamento 33 es inconsistente (Compras/Adquisiciones):
idEmpleado | idDepartamento | nombreDepartamento |
---|---|---|
1 | 33 | Compras |
2 | 34 | Ventas |
3 | 33 | Adquisiciones |
- Anomalías de deleción: al borrar el empleado 2 desaparece el departamento Ventas
idEmpleado | idDepartamento | nombreDepartamento |
---|---|---|
1 | 33 | Compras |
3 | 33 | Adquisiciones |
- Anomalías de inserción: este esquema no permite agregar información de departamentos que aún no tienen empleados. Lo siguiente es inválido:
idEmpleado | idDepartamento | nombreDepartamento |
---|---|---|
NULL | 35 | Ingeniería |
NULL | 36 | Calidad |
Pregunta 4
Una transacción es un conjunto de instrucciones que se ejecutan formando una unidad lógica de procesamiento. Una transacción puede incluir uno o más accesos a la BD a través del uso de diversas operaciones (inserción, eliminación, modificación, etc.).
Diversos sistemas como los bancarios, los de reservas de vuelos o del mercado de valores, usan transacciones para garantizar la consistencia de los datos. Por ejemplo, un sistema bancario que usa una transacción para actualizar dos saldos a causa una transferencia evita la pérdida o creación de dinero en caso de fallas. En este caso, la atomicidad de la transacción garantiza que se ejecuta completo o se deshace por completo.
Este tipo de sistemas requieren rápida respuesta y alta disponibilidad para muchos usuarios que acceden de manera concurrente. En este escenario, un motor de base de datos hace uso de la multiprogramación, intercalando operaciones de distintas transacciones que se ejecutan concurrentemente. El control de concurrencia resulta importante pues queremos evitar que una transacción interfiera con otra: para el usuario, las transacciones se comportan como si se hubieran ejecutado una a continuación de la otra. De no manejar la concurrencia, pueden aparecer distintos problemas como:
- Lost update
- Dirty read
- Incorrect summary
- Unrepeatable read