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
Pregunta 5
Una base de datos NoSQL por documentos es una base no-relacional que almacena los datos como documentos estructurados. El concepto principal es el documento. La BD almacena y recupera documentos. Los documentos pueden ser XML, JSON, BSON, etc.
Cada documento es una colección de pares: nombre de campo y valor. Los valores pueden ser un valor simple, una estructura compleja como una lista, otro documento o listas de documentos hijos.
A la hora de diseñar este tipo de bases de datos hay tres pasos fundamentales:
- Modelo conceptual de alto nivel, incluyendo patrones de consulta y diagramas de entidad-relación
- Modelo lógico a través de un diagrama de interrelación de documentos (DID)
- Modelo físico, incluyendo JSON Schema, estrategias de replicación y distribución, índices
Basándose en el DER, en el DID se especifica la interrelación entre documentos, principalmente si se incrustarán o referenciarán, determinando así el grado de desnormalización de los documentos.
MongoDB es una base de datos de documentos cuya principal ventaja es la capacidad de escalar horizontalmente casi sin configuración. Particionando los datos basándose en sus claves, este motor hace trivial la tarea de sharding. Además, provee otras características como un framework para procesamiento batch y una API de consulta que permite búsquedas por campo, rangos, regex.
Pregunta 6
Una base de datos distribuída (DDB) es una colección de múltiples BD que están lógicamente relacionadas y se encuentran distribuídas en una red de computadoras. Este tipo de DBs presentan características nuevas, para las que los motores proveen transparencia (a costa de flexibilidad) para simplificar el proceso de desarrollo. Estas son:
- Distribución de los datos: libera al usuario de conocer detalles operativos de la red y ubicación de los datos
- Replicación: el usuario desconoce la existencia de copias
- Fragmentación horizontal y vertical: libera al usuario de conocer detalles sobre la fragmentación de los datos
- Diseño y Ejecución: libera al usuario de conocer cómo está diseñada la DDB y dónde es ejecutada una transacción
A la hora de elegir una DDB, se deberá tener en cuenta la flexibilidad y el grado de control que se requieran para alcanzar la performance, disponibilidad y tolerancia a fallos que se precise (entre otras cosas).