lunes, 19 de noviembre de 2012

EJERCICIOS DE FUNDAMENTOS DE BASE DE DATOS CAP. 3 UNIDAD III


3.1 Diséñese una base de datos relacional para la oficina de registro de una universidad. La oficina conserva datos sobre cada curso, incluyendo el profesor, el número de estudiantes matriculados y la hora y el lugar de las clases. Por cada pareja estudiante – curso, se guarda una calificación.

Respuesta:  Los atributos subrayados indican la clave primaria.

estudiante (id-estudiante, nombre, programa)
curso (número-curso, título, programa-estudios, créditos)
ofertas-cursos (número-curso, número-sección, año, semestre, hora, aula)
profesor (id-profesor, nombre, departamento, título)
matrículas (id-estudiante, número-curso, número-sección, semestre, año, calificación)
enseña (número-curso, número-sección, semestre, año, id-profesor)
requerimientos (curso-principal, requisitos-previos)

3.2 Descríbanse las diferencias de significado entre los términos relación y esquema de la relaciónIlústrese la respuesta haciendo referencia a la solución propuesta para el Ejercicio 3.1.

Respuesta:  Un esquema de la relación es una definición de tipos y una relación es una instancia de ese esquema. Por ejemplo, estudiante (ss#, nombre) es un esquema de la relación y ss# nombre es una relación basada en ese esquema.

ss#
nombre
123-45-6789
Tom Jones
456-78-9123
Joe Brown






3.3 Diséñese una base de datos relacional correspondiente al diagrama E-R de la Figura 3.38.

Respuesta:  El esquema de la base de datos relaciones se presenta a continuación.

persona (id-conductor, nombre, dirección)
coche (matrícula, año, modelo)
accidente (número-informe, lugar, fecha)
posee (id-conductor, matrícula)
participado (número-informe, id-conductor, matrícula, importe-daños)
empleado (nombre-persona, calle, ciudad)
trabaja (nombre-persona, nombre-compañía, sueldo)
compañía (nombre-compañía, ciudad)
jefe (nombre-persona, nombre-jefe)

3.4 En el Capítulo 2 se mostró la manera de representar los conjuntos de relaciones de varios a varios, de varios a uno, de uno a varios y de uno a uno. Explicar la manera en que las claves primarias ayudan a representar estos conjuntos de relaciones en el modelo relacional.

Respuesta: Supóngase que la clave primaria del esquema de la relación R es {Ai1, Ai2 , ...,Ain} y que la clave primaria del esquema de la relación S es {Bi1, Bi2 , ...,Bim}. Entonces una relación entre los dos conjuntos se puede representar como una tupla (Ai1, Ai2 , ...,Ain, Bi1, Bi2 , ...,Bim). En una relación de uno a uno, cada valor en {Ai1, Ai2 , ...,Ain} aparecerá en una tupla e igualmente para {Bi1, Bi2 , ...,Bim}. En una relación de varios a uno (por ejemplo de varios A a un B), cada valor en {Ai1, Ai2 , ...,Ain} aparecerá una vez y cada valor en {Bi1, Bi2 , ...,Bin} puede aparecer varias veces. En una relación de varios a varios, los valores en ambos {Ai1, Ai2 , ...,Ain} y {Bi1, Bi2 , ...,Bim}aparecerán varias veces. Sin embargo, en todos los casos anteriores {Ai1, Ai2 , ...,Ain ,Bi1, Bi2 , ...,Bim} es una clave primaria, por lo que ninguna tupla en (Aj1 , ...,Ajn Bk1 , ...,Bkm) aparecerá más de una vez.


3.5 Considérese la base de datos relacional de la Figura 3.39, donde las claves primarias están subrayadas.

Formúlese una expresión del álgebra relacional, otra del cálculo relacional de tuplas y una tercera del cálculo relacional de dominios, para cada una de las consultas siguientes:

a. Averiguar los nombres de todos los empleados que trabajan para el Banco Importante.
b. Averiguar el nombre y la ciudad de residencia de todos los empleados que trabajan para el Banco Importante.
c. Averiguar el nombre, la calle y ciudad de residencia, de todos los empleados que trabajan para el Banco Importante y ganan más de 10.000€ anuales.
d. Averiguar el nombre de todos los empleados de esta base de datos que viven en la misma ciudad que la compañía para la que trabajan.
e. Averiguar el nombre de todos los empleados que viven en la misma ciudad y en la misma calle que sus jefes.
f. Averiguar el nombre de todos los empleados de esta base de datos que no trabajan para el Banco Importante.
g. Averiguar el nombre de todos los empleados que ganan más que cualquier empleado del Banco Pequeño.
h. Supóngase que las compañías pueden estar ubicadas en varias ciudades. Buscar todas las empresas con sede en todas las ciudades en las que tiene sede el Banco Pequeño.

Respuesta:
a.         Õnombre-persona (snombre-compañía = “Banco Importante” (trabaja))

b.         Õnombre-persona (empleado |x|
(Õnombre-compañía = “Banco Importante” (trabaja)))

c.         Õnombre-persona, calle, ciudad
(s(nombre-compañía = “Banco Importante” ^sueldo > 2.000.000)
trabaja |x| 1 empleado)

d.         Õnombre-persona (empleado |x| trabaja |x| compañía)

e.         Õnombre-persona ((empleado |x| jefe)
|x| (nombre-jefe = empleado2.nombre-persona ^empleado.calle = empleado2.calle
^ empleado.ciudad = empleado2.ciudad)(Ƥempleado2 (empleado)))

f.          Las soluciones siguientes asumen que todas las personas trabajan para una compañía. Si se permite que aparezcan personas en la base de datos (por ejemplo en empleado) pero que no aparezcan en trabaja, el problema se complica. Más adelante se dan soluciones para este caso más realista.
Õnombre-persona (snombre-compañía _ “Banco Importante” (trabaja))

Si las personas no pueden trabajar para cualquier compañía:
Õnombre-persona (empleado) __ Õnombre-persona
(s(nombre-compañía = “Banco Importante”) (trabaja))

g.         Õnombre-persona (trabaja) __ Õtrabaja.nombre-persona (trabaja
|x| (trabaja.sueldo ≤ trabaja2.sueldo ^ trabaja2.cpnmbre-compañía =“Banco Pequeño”)
Ƥ trabaja2 (trabaja)))

h.         Nota: El Banco Pequeño se incluirá en cada respuesta.
Õnombre-compañïa (compañía ÷
(Õciudad (snombre-compañía = “Banco Pequeño” (compañía))))



 3.8       Considérese la base de datos relacional de la Figura 3.39. Se da una expresión del álgebra relacional para cada petición:

a. Modificar la base de datos de forma que Santos viva en Tres Cantos.
b. Dar a todos los empleados del Banco Importante un aumento de sueldo del 10%.
c. Dar a todos los jefes de la base de datos un aumento de sueldo del 10%.
d. Dar a todos los jefes de la base de datos un aumento de sueldo del 10%, a menos que su sueldo esté por encima de 100.000 € anuales. En tal caso, darles sólo un 3%.
e. Borrar todas las tuplas de la relación trabaja para los empleados del Banco Pequeño.

Respuesta:

a.         empleado Õnombre-persona,calle,“Tres Cantos”
(snombre-persona =“Santos”(empleado))
(empleado  snombre-persona =“Santos”(empleado))

b.         trabaja Õnombre-persona,nombre-compañía, 1.1 * salario (
                        (s(nombre-compañía = “Banco Importante”) (trabaja))
(trabaja - snombre-compañía = “Banco Importante(trabaja))

c.         La sintaxis de actualización permite referenciar sólo a una relación sencilla. Dado que esta actualización requiere acceder a las dos relaciones a actualizar (trabaja) y jefe, se deben seguir varios pasos. En primer lugar, identificar las tuplas de trabaja que se han se actualizar y almacenarlas en una relación temporal (t1) Después, crear una relación temporal (t2) que contenga las nuevas tuplas. Finalmente borrar las tuplas en t1, desde trabaja, e insertar las tuplas t2.
t1 ←Õtrabaja.nombre-persona, nombre-compañía, salario
(strabaja.nombre-persona = nombre-jefe (trabaja × jefe))
t2 Õnombre-persona,nombre-compañía, 1.1 * salario (t1)
trabaja(trabaja - t1) ᴗ t2

d. La misma situación surge aquí. Como antes, t1, contiene las tuplas que se han de actualizar y t2 contiene estas tuplas en su forma actualizada.

t1 ← Õtrabaja.nombre-persona, nombre-compañía, salario
(strabaja.nombre-persona = nombre-jefe (trabaja × jefe))
t2 ← Õtrabaja.nombre-persona, nombre-compañía, salario*1.03
(st1.salario * 1.1 > 100.000(t1))
t2 ← t2 (Õtrabaja.nombre-persona, nombre-compañía, salario*1.1
(st1.salario * 1.1 _ 100.000(t1))
trabaja(trabaja - t1) __ t2

e. trabaja trabaja - snombre-compañía = “Banco Pequeño” (trabaja)



 3.10 Considérese la base de datos relacional de la Figura 3.39. Se da una expresión del álgebra relacional para cada una de las consultas siguientes:

a. Averiguar la compañía con mayor número de empleados.
b. Averiguar la compañía con nómina (suma de sueldos de sus empleados) más reducida.
c. Averiguar las compañías cuyos empleados ganan un sueldo más alto, en media, que el sueldo medio del Banco Importante.

Respuesta:
a.         t1 ←nombre-compañía G count-distinct nombre-persona (trabaja)
t2 ← max número-empleadosfuerza-compañía (nombre-compañía,número-empleados)(t1))
Õnombre-compañía(Ƥ t3 (nombre-compañía,número-empleados)(t1) |x|Ƥ t4 (número-empleados)(t2))

b.         t1 ←nombre-compañía G sum sueldo (trabaja)
t2 ←min nómina nómina-compañía (nombre-compañía,nómina)(t1))
Õnombre-compañía(Ƥ t3 (nombre-compañía,nómina)(t1) |x| Ƥ t4 (nómina)(t2))

c.         t1 ←nombre-compañía G avg sueldo (trabaja)
t2 ← snombre-compañía = “Banco Importante” (t1)
Õt3.nombre-compañía(( Ƥ t3(nombre-compañía,salario-medio)(t1))
| x| t3.salario-medio > banco-importante.salario-medio (Ƥ  banco-importante (nombre-compañía,salario-medio)(t2)))










No hay comentarios:

Publicar un comentario