El modelo relacional, base de las bases de datos relacionales y de SQL, fue propuesto por E. F. Codd en 1970. Organiza los datos en relaciones (tablas) sobre las que opera el álgebra relacional (selección, proyección, unión, producto y reunión). Dos reglas garantizan la coherencia: la integridad de entidad, que prohíbe valores NULL en cualquier atributo de la clave primaria, y la integridad referencial, que exige que toda clave foránea coincida con un valor existente de la clave primaria referenciada o bien sea nula.
El modelo entidad-relación (E-R), propuesto por Peter Chen en 1976, describe en palabras entidades, atributos, relaciones y cardinalidades. Al mapearlo al modelo relacional, una relación muchos-a-muchos (M:N) se transforma creando una tabla intermedia (junction) cuya clave primaria se forma con las claves foráneas de las entidades participantes.
SQL (ISO/IEC 9075) se divide en DDL (CREATE, ALTER, DROP, TRUNCATE) para definir estructuras y DML (SELECT, INSERT, UPDATE, DELETE) para manipular datos. Puntos clave de las consultas:
La normalización reduce redundancia por etapas: la 1FN exige valores atómicos, sin grupos repetitivos ni atributos multivaluados; la 2FN (ya en 1FN) elimina las dependencias parciales respecto a parte de una clave compuesta; la 3FN (ya en 2FN) elimina las dependencias transitivas de atributos no primos; y la FNBC/BCNF exige que todo determinante de una dependencia funcional sea clave candidata.
Las transacciones fiables cumplen las propiedades ACID: Atomicidad, Consistencia, Aislamiento (Isolation) y Durabilidad. El control de concurrencia se apoya en el bloqueo de dos fases (2PL), que separa una fase de adquisición de bloqueos de otra de liberación para garantizar planes serializables. Por último, los índices aceleran la búsqueda de filas evitando recorridos completos de tabla, mejorando el desempeño de las consultas al costo de mayor espacio y de actualizaciones más lentas en escritura.
1. ¿Qué autor propuso el modelo relacional de datos en el artículo "A Relational Model of Data for Large Shared Data Banks", publicado en 1970 en Communications of the ACM?
E. F. Codd propuso el modelo relacional en ese artículo de 1970, base teórica de las bases de datos relacionales y de SQL. Peter Chen, C. J. Date y Michael Stonebraker son otros autores relevantes en bases de datos, pero no los del artículo citado. (E. F. Codd, "A Relational Model of Data for Large Shared Data Banks", Communications of the ACM, vol. 13, núm. 6, 1970.)
2. ¿Qué autor introdujo el modelo entidad-relación (E-R) para describir entidades, atributos y relaciones, en un artículo publicado en 1976 en ACM Transactions on Database Systems?
Peter Chen propuso el modelo E-R en 1976 como herramienta de modelado conceptual. E. F. Codd es el autor del modelo relacional (1970), no del modelo E-R. (Peter P. Chen, "The Entity-Relationship Model — Toward a Unified View of Data", ACM Transactions on Database Systems (TODS), vol. 1, núm. 1, 1976.)
3. En una tabla EMPLEADO cuya clave primaria es el atributo numero_empleado, un programador intenta insertar un registro sin especificar valor para numero_empleado, de modo que ese atributo quede en NULL. Conforme a la regla de integridad de entidad, ¿qué debe ocurrir con esa operación?
La regla de integridad de entidad establece que ningún atributo de la clave primaria puede ser nulo, por lo que la inserción debe rechazarse; esta regla aplica siempre, no solo cuando existen claves foráneas. (E. F. Codd; Elmasri y Navathe, "Fundamentals of Database Systems", capítulo del modelo relacional.)
4. De acuerdo con la regla de integridad referencial del modelo relacional, ¿qué valores puede tomar válidamente una clave foránea?
La integridad referencial exige que la clave foránea coincida con un valor existente de la clave primaria referenciada o sea nula; no se limita a un tipo de dato ni a valores dentro de la misma tabla. (Elmasri y Navathe, "Fundamentals of Database Systems"; C. J. Date, "An Introduction to Database Systems".)
5. Una relación PEDIDO_DETALLE tiene clave primaria compuesta (numero_pedido, clave_producto) y un atributo nombre_producto que depende únicamente de clave_producto, sin depender del par completo de la clave. Considerando que sus valores son atómicos, ¿cuál es la forma normal de menor nivel (menos estricta) que esta relación deja de cumplir?
La relación cumple la 1FN (valores atómicos); la primera forma que deja de cumplir es la 2FN, pues un atributo no primo depende solo de una parte de la clave compuesta (dependencia parcial). No hay atributo multivaluado ni dependencia transitiva. (E. F. Codd; Elmasri y Navathe, "Fundamentals of Database Systems".)
6. En una relación EMPLEADO cuya clave primaria es numero_empleado, el atributo clave_departamento depende de numero_empleado, y el atributo nombre_departamento depende de clave_departamento (no depende directamente de numero_empleado). Considerando que sus valores son atómicos, ¿cuál es la forma normal de menor nivel (menos estricta) que esta relación deja de cumplir?
La relación cumple 1FN (valores atómicos) y 2FN (su clave primaria no es compuesta, por lo que no puede haber dependencias parciales); la primera forma que deja de cumplir es la 3FN, pues nombre_producto/nombre_departamento depende transitivamente de la clave a través de otro atributo no primo. (E. F. Codd; Elmasri y Navathe, "Fundamentals of Database Systems".)
7. Una relación cumple la tercera forma normal (3FN) porque toda dependencia funcional cuyo determinante no es clave candidata tiene como atributo determinado un atributo que forma parte de alguna clave candidata (atributo primo). ¿Qué forma normal NO cumple necesariamente esta relación?
La FNBC exige que todo determinante de una dependencia funcional sea clave candidata, sin excepción para atributos primos; la 3FN sí permite esa excepción, por lo que una relación puede estar en 3FN sin estar en FNBC. (R. F. Boyce y E. F. Codd; Silberschatz, Korth y Sudarshan, "Database System Concepts".)
8. Al transformar el modelo entidad-relación al modelo relacional, ¿cómo se representa una relación con cardinalidad muchos a muchos (M:N) entre dos entidades?
Una relación M:N se representa mediante una tabla intermedia cuya clave primaria combina las claves foráneas de las entidades participantes; agregar una clave foránea directa solo es válido para relaciones 1:N. (Elmasri y Navathe, "Fundamentals of Database Systems", algoritmo de mapeo E-R a relacional.)
9. ¿Cuál de las siguientes listas corresponde únicamente a instrucciones del lenguaje de definición de datos (DDL) en SQL?
CREATE, ALTER, DROP y TRUNCATE son las instrucciones que crean y modifican estructuras (DDL); SELECT, INSERT, UPDATE y DELETE pertenecen al DML. (ISO/IEC 9075 (estándar SQL), parte de definición de datos.)
10. Un estudiante afirma que las instrucciones DELETE y TRUNCATE pertenecen ambas al lenguaje de manipulación de datos (DML), porque las dos eliminan filas de una tabla. ¿Por qué esta clasificación es incorrecta?
Aunque ambas eliminan datos, TRUNCATE se clasifica como DDL y DELETE como DML; TRUNCATE elimina las filas conservando la estructura de la tabla, por lo que la tercera opción también es falsa. (ISO/IEC 9075 (estándar SQL), partes de definición y manipulación de datos.)
11. En el procesamiento lógico de una sentencia SELECT con GROUP BY, ¿cuál es la diferencia entre las cláusulas WHERE y HAVING?
WHERE actúa sobre filas individuales antes de la agrupación, mientras que HAVING filtra los grupos ya formados por GROUP BY; la primera opción invierte esta relación. (ISO/IEC 9075 (procesamiento lógico de la sentencia SELECT).)
12. Se tienen las tablas CLIENTE(id_cliente, nombre, ciudad) y PEDIDO(id_pedido, id_cliente, monto). Se ejecuta: SELECT ciudad, COUNT(*) AS total FROM CLIENTE JOIN PEDIDO ON CLIENTE.id_cliente = PEDIDO.id_cliente GROUP BY ciudad HAVING COUNT(*) > 5; ¿Qué representa el resultado de esta consulta?
La consulta agrupa por ciudad y HAVING COUNT(*) > 5 conserva solo los grupos (ciudades) con más de 5 filas de pedidos asociadas, no clientes individuales ni el monto. (ISO/IEC 9075 (estándar SQL), cláusulas GROUP BY y HAVING.)
13. En una tabla EMPLEADO donde la columna telefono admite valores nulos, ¿qué diferencia existe entre COUNT(*) y COUNT(telefono) al ejecutarse sobre esa tabla?
COUNT(*) cuenta todas las filas del resultado, incluidas aquellas con valores nulos en telefono, mientras que COUNT(telefono) omite esas filas. (ISO/IEC 9075 (estándar SQL), funciones de agregación.)
14. La tabla CONTACTO tiene 12 filas en total; de ellas, 3 tienen valor nulo en la columna correo_electronico. Al ejecutar SELECT COUNT(*), COUNT(correo_electronico) FROM CONTACTO;, ¿qué par de resultados se obtiene?
COUNT(*) cuenta las 12 filas totales, mientras que COUNT(correo_electronico) excluye las 3 filas con valor nulo, dando 12 - 3 = 9. (ISO/IEC 9075 (estándar SQL), funciones de agregación.)
15. Un reporte debe incluir a todos los clientes registrados en la tabla CLIENTE, incluso a quienes no tienen ningún pedido en la tabla PEDIDO, mostrando NULL en las columnas de PEDIDO cuando no exista coincidencia. Colocando CLIENTE como tabla izquierda y PEDIDO como tabla derecha, ¿qué tipo de reunión (JOIN) satisface este requisito?
El LEFT OUTER JOIN conserva todas las filas de la tabla izquierda (CLIENTE) y rellena con NULL las columnas de la derecha cuando no hay coincidencia; INNER JOIN excluiría a los clientes sin pedidos y RIGHT OUTER JOIN preservaría las filas de PEDIDO. (ISO/IEC 9075 (estándar SQL), operaciones de reunión (joined tables).)
16. Se desea obtener los productos que nunca han sido incluidos en algún pedido mediante: SELECT nombre FROM PRODUCTO WHERE id_producto NOT IN (SELECT id_producto FROM DETALLE_PEDIDO); Si la columna id_producto de DETALLE_PEDIDO contiene al menos un valor NULL, ¿qué problema presenta esta consulta?
Con lógica trivaluada, comparar un valor con un NULL de la lista de NOT IN produce 'desconocido', por lo que la condición nunca se evalúa como verdadera y el resultado queda vacío; NOT IN sí admite subconsultas y no ignora los nulos automáticamente. (ISO/IEC 9075 (estándar SQL), lógica trivaluada y predicado null.)
17. La tabla PEDIDO tiene 8 filas y la tabla DETALLE_PEDIDO tiene 20 filas; cada fila de DETALLE_PEDIDO hace referencia a exactamente un id_pedido existente en PEDIDO, y id_pedido es la clave primaria de PEDIDO. Al ejecutar un INNER JOIN entre PEDIDO y DETALLE_PEDIDO usando la igualdad sobre id_pedido, ¿cuántas filas contendrá el resultado?
Como id_pedido es clave primaria única en PEDIDO y cada una de las 20 filas de DETALLE_PEDIDO referencia un id_pedido existente, cada fila encuentra exactamente una coincidencia, por lo que el resultado tiene 20 filas; 28 surge de sumar en vez de emparejar y 160 de multiplicar como en un producto cartesiano. (ISO/IEC 9075 (estándar SQL), operaciones de reunión (joined tables).)
18. La tabla PEDIDO registra los montos 100, 250, 150 y 500 correspondientes a los 4 únicos pedidos de un mismo cliente. Al ejecutar SELECT SUM(monto), AVG(monto) FROM PEDIDO WHERE id_cliente = X;, ¿qué par de resultados se obtiene?
La suma de los 4 montos es 1000 y el promedio es 1000 entre 4, es decir 250; 1000 y 200 correspondería a dividir por error entre 5 pedidos, y 1000 y 4 confunde el promedio con el número de filas. (ISO/IEC 9075 (estándar SQL), funciones de agregación SUM y AVG.)
19. ¿Qué conjunto de propiedades garantiza que las transacciones en un sistema gestor de bases de datos (SGBD) se ejecuten de manera confiable, resumido en el acrónimo ACID?
ACID corresponde a Atomicidad, Consistencia, Aislamiento (Isolation) y Durabilidad; las demás opciones mezclan términos de seguridad informática que no forman parte del acrónimo. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de transacciones; ISO/IEC 9075 (SQL).)
20. ¿En qué consiste el protocolo de bloqueo de dos fases (2PL) para el control de concurrencia en transacciones?
El protocolo 2PL divide la ejecución de cada transacción en una fase de crecimiento (solo adquisición de bloqueos) seguida de una fase de decrecimiento (solo liberación), lo cual garantiza la serializabilidad de las transacciones concurrentes. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de control de concurrencia.)
21. Una transacción T, que sigue el protocolo de bloqueo de dos fases (2PL), libera su primer bloqueo. A partir de ese momento, ¿qué restricción aplica al resto de la ejecución de T?
Al liberar su primer bloqueo, T entra en la fase de decrecimiento, en la que el protocolo 2PL le prohíbe adquirir bloqueos nuevos; solo puede seguir liberando los que ya posee. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de control de concurrencia.)
22. A diferencia del protocolo básico de bloqueo de dos fases (2PL), el protocolo de bloqueo estricto de dos fases (strict 2PL) exige, adicionalmente, que:
El strict 2PL exige que los bloqueos exclusivos se mantengan hasta el commit o abort para evitar lecturas de datos no confirmados; mantener también los compartidos hasta el final corresponde al 2PL riguroso, y adquirir todos los bloqueos antes de iniciar corresponde al 2PL conservador. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de control de concurrencia.)
23. La transacción T1 mantiene un bloqueo exclusivo sobre la fila A y solicita un bloqueo exclusivo sobre la fila B; al mismo tiempo, la transacción T2 mantiene un bloqueo exclusivo sobre la fila B y solicita un bloqueo exclusivo sobre la fila A. Ambas transacciones siguen el protocolo 2PL y ninguna libera sus bloqueos. ¿Qué situación describe este escenario?
La espera circular entre T1 y T2 constituye un interbloqueo; el protocolo 2PL garantiza la serializabilidad de las transacciones, pero no impide por sí mismo que ocurran interbloqueos. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de control de concurrencia.)
24. Un equipo de desarrollo afirma que, por seguir el protocolo de bloqueo de dos fases (2PL), su sistema de transacciones queda automáticamente libre de interbloqueos (deadlocks). ¿Por qué esta afirmación es incorrecta?
El protocolo 2PL asegura que los planes de ejecución concurrentes sean serializables, pero no impide la espera circular entre transacciones que produce interbloqueos, los cuales requieren mecanismos adicionales de detección o prevención. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de control de concurrencia.)
25. En el control de concurrencia basado en bloqueos, ¿qué combinación de bloqueos puede mantenerse simultáneamente sobre el mismo elemento de datos por dos transacciones distintas?
Dos bloqueos compartidos sobre el mismo elemento son compatibles porque ambas transacciones solo leen el dato; cualquier combinación que incluya un bloqueo exclusivo es incompatible con otro bloqueo simultáneo sobre el mismo elemento. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de control de concurrencia (matriz de compatibilidad de bloqueos).)
26. Una variante del protocolo de bloqueo de dos fases exige que cada transacción adquiera todos los bloqueos que necesitará antes de comenzar a ejecutar cualquier operación, sin poder solicitar bloqueos adicionales después. ¿Cómo se conoce esta variante?
El bloqueo de dos fases conservador (o estático) exige predeclarar y adquirir todos los bloqueos antes de iniciar la ejecución, lo cual evita el interbloqueo al eliminar la condición de retener y esperar; strict y rigorous 2PL se refieren al momento de liberación de los bloqueos, no de su adquisición inicial. (Silberschatz, Korth y Sudarshan, "Database System Concepts", capítulo de control de concurrencia.)
27. ¿Qué autor propuso en 1976 el modelo entidad-relación (E-R) como una forma de representar de manera conceptual las entidades, sus atributos y las relaciones entre ellas, con independencia de un sistema gestor de base de datos particular?
Peter Chen publicó "The Entity-Relationship Model" en 1976 en ACM TODS; Codd había propuesto antes el modelo relacional (1970) y Bachman el modelo en red, por lo que no corresponden al modelo E-R. (Peter P. Chen, "The Entity-Relationship Model — Toward a Unified View of Data", ACM TODS, vol. 1, núm. 1, 1976.)
28. En el esquema relacional derivado de un diagrama entidad-relación, la regla de integridad de entidad impone una restricción específica sobre los atributos que forman la clave primaria de una tabla. ¿Cuál es esa restricción?
La regla de integridad de entidad establece que ningún atributo de la clave primaria puede ser nulo, ya que de lo contrario no podría identificarse de forma única cada fila. (E. F. Codd; Elmasri y Navathe, "Fundamentals of Database Systems", capítulo del modelo relacional.)
29. En una base de datos, la tabla Inscripcion tiene el atributo id_alumno como clave foránea que referencia a la clave primaria de la tabla Alumno. Un desarrollador intenta insertar en Inscripcion un nuevo registro con id_alumno = 350, valor que no existe en ningún registro de la tabla Alumno y que tampoco se dejó como nulo. De acuerdo con la regla de integridad referencial, ¿qué debe suceder?
La integridad referencial exige que la clave foránea coincida con un valor existente de la clave primaria referenciada o sea nula; como 350 no existe y no se dejó nula, la inserción debe rechazarse. (Elmasri y Navathe, "Fundamentals of Database Systems"; C. J. Date, "An Introduction to Database Systems".)
30. Un modelo entidad-relación describe que un Alumno puede inscribirse en muchas Materias y que una Materia puede tener inscritos a muchos Alumnos (cardinalidad muchos a muchos). Al transformar este modelo al esquema relacional, ¿cuál es el procedimiento correcto?
Una relación M:N se transforma creando una tabla intermedia (de unión) cuya clave primaria combina las claves foráneas de ambas entidades participantes; agregar la clave de una entidad en la otra solo es válido para relaciones 1:N. (Elmasri y Navathe, "Fundamentals of Database Systems", algoritmo de mapeo E-R a relacional.)
31. Un modelo entidad-relación describe que cada Empleado ocupa como máximo una Oficina, aunque no todos los empleados tienen oficina asignada, mientras que toda Oficina debe estar asignada exactamente a un Empleado. Se trata de una relación uno a uno (1:1) en la que Oficina tiene participación total y Empleado tiene participación parcial. Al mapear este modelo a tablas relacionales, ¿en qué tabla conviene colocar la clave foránea para minimizar los valores nulos?
Dado que toda Oficina tiene participación total (siempre tiene un empleado asignado), colocar ahí la clave foránea evita nulos; si se colocara en Empleado, los empleados sin oficina generarían valores nulos. (Elmasri y Navathe, "Fundamentals of Database Systems", reglas de mapeo de relaciones 1:1 según participación.)
32. Un modelo entidad-relación describe en palabras la siguiente situación: "un Departamento puede tener asignados muchos Empleados, pero cada Empleado pertenece exactamente a un Departamento". ¿Qué cardinalidad describe esta relación entre Departamento y Empleado?
Cada empleado se asocia con exactamente un departamento (no cero) y un departamento puede tener varios empleados, lo que corresponde a la cardinalidad uno a muchos. (Elmasri y Navathe, "Fundamentals of Database Systems", representación de cardinalidades en el modelo E-R.)
33. En un modelo entidad-relación, la entidad Dependiente es una entidad débil que no puede existir sin un Empleado asociado, y se identifica mediante una clave parcial propia junto con la clave primaria de Empleado. Al construir el esquema relacional, ¿cómo se refleja correctamente esta dependencia en la tabla Dependiente?
Las entidades débiles se identifican combinando su clave parcial con la clave primaria de la entidad fuerte, la cual se incorpora como clave foránea que forma parte de la clave primaria de la entidad débil. (Elmasri y Navathe, "Fundamentals of Database Systems", entidades y claves débiles.)
34. La tabla Pedido tiene como clave primaria id_pedido y contiene el atributo id_cliente, definido como clave foránea que referencia a la clave primaria de la tabla Cliente. ¿Cuál de las siguientes inserciones en Pedido NO es congruente con la regla de integridad referencial?
La regla de integridad referencial exige que la clave foránea coincida con un valor existente de la clave primaria referenciada o sea nula; el valor 87 inexistente viola esa regla, mientras que las demás opciones sí son congruentes con ella. (Elmasri y Navathe, "Fundamentals of Database Systems"; C. J. Date, "An Introduction to Database Systems".)
35. Un modelo entidad-relación describe que un Empleado puede supervisar a varios empleados, y que cada Empleado tiene a lo sumo un supervisor, el cual también es un Empleado. Al mapear esta relación recursiva uno a muchos al esquema relacional, ¿cómo se representa correctamente en la tabla Empleado?
Las relaciones recursivas 1:N se representan mediante una clave foránea que apunta a la clave primaria de la misma tabla (clave foránea autorreferenciada), sin necesidad de tablas adicionales. (Elmasri y Navathe, "Fundamentals of Database Systems", relaciones recursivas en el modelo E-R.)