Professional Documents
Culture Documents
2. Los nombres de los equipos que han ganado al menos una vez.
Solucion:
Luego cruzo el resultado con DT dejando solo los que tiene el mismo
RUT DT (esto se puede hacer en un paso con la operacion Reunion
Natural)
Equipo y DT Equipo ? DT
Finalmente quito todos los atributos que no son necesarios usando
proyeccion:
1
Luego busco los partidos en que ha ganado la visita:
Luego extraigo solo los atributos de codigos de equipos para cada uno
y los renombro en una nueva tabla (notar que voy renombrando sobre
los mismos nombres de relaciones :P )
GL(codEquipo) codLocal GL
GV (codEquipo) codLocal GV
Luego junto los dos en una misma relacion:
G GL GV
SE S o
n Equipo
Ahora cuento cuantos jugadores hay por cada equipo usando la funcion
agregada Count sobre codEquipo (la funcion Count cuenta cuantas
tuplas hay para un atributo que se agrega o reune)
2
Ahora solo me quedo con los equipos que tienen mas de 3 jugadores
suspendidos:
SEC numeroSuspendidos>=3 SEC
Ahora quito la columna numeroSuspendidos
SEC(codEquipo) SEC
S suspendido=1 Jugador
Luego obtengo los equipos que han jugado *solo* de local y cuento la
cantidad de partidos:
L(codLocal, numeroP artidos) < codLocal > = < codV isitaCOU N T >
V (codV isita, numeroP artidos) < codV isita > = < codLocalCOU N T >
LV L V
Ahora sumo los partidos jugados de local y visita agrupados por cod-
Equipo
P J(codEquipo, numeroP artidosT otales) < codEquipo > = < numeroP artidosSU M A >
3
Ahora le quito el atributo numeroPartidosTotales
E codEquipo P J
Finalmente hago una reunion natural con los jugadores que estaban
suspendidos
JSE S o nE
Por ultimo una tabla que contenga solo los nombres de los jugadores:
5. Primero creo una tabla que tiene un atributo que indica el equipo y un
atributo que indica el equipo con el que se ha enfrentado. Para ello,
cruzo la tabla equipos con la tabla equipos para obtener un todos con
todos:
Equipo1(codEquipoBase) codEquipo Equipo
T CT Equipo1 o
n Equipo
Notar que por el momento no me interesa ninguna restriccion asi que
esta tabla contiene mas informacion de la que necesito. Luego, cruzo
esta tabla con la tabla Partido si y solo si el partido se jugo realmente,
es decir, si codLocal = codEquipoBase y codV isita = codEquipo o
codLocal = codEquipo y codV isita = codEquipoBase (en cualquiera
de estos dos casos quiere decir que esos equipos se han enfrentado)
T CT codEquipoBase,codEquipo (T CT o
ncond P artido)
Donde cond = (codLocal = codEquipoBasecodV isita = codEquipo)
(codLocal = codEquipo codV isita = codEquipoBase)
Ahora hago una division entre esta tabla y la tabla equipos, de esta
forma me arrojara todos los equipos de la tabla TCT que tienen en
codEquipo a todos los equipos de la tabla equipos (la que por supuesto
contiene todos los equipos). Para ello previamente debo proyectar la
tabla equipos:
Equipo codEquipo (Equipo)
T CT R T CT Equipo
Ahora busco el nombre si es que lo piden (esto lo voy hacer en una
operacion anidada: primero proyecto TCTR para obtener solo los cod-
EquipoBase, luego los renombro para hacer el reunion natural, luego
4
hago el reunion natural y finalmente proyecto para obtener solo los
nombres :P)
DG(codLocal, codV isita, dif G) < codLocal, codV isita > = < golesLocalgolesV isita >
DG(codLocal, codV isita, dif G) < codLocal, codV isita > =M AXIM Odif G
2 Arriendo de propiedades
Considerando el siguiente esquema:
Arrendatario(RUT, nombre, apellido)
Arrienda((RUT), idCasa, deuda)
Telefonos(RUT, fono)
Duen~no(RUT, nombre, apellido)
Casa(idCasa, RUT, numero, calle, comuna)
Con la informacion, responda:
Solucion:
5
1. Primero busco el idCasa de la casa que queda en Carrera 1024:
Luego busco todos los que arriendan alguna de las casas que estan en
las casas que arrienda Maria Perez
A C ? Arrienda
Finalmente sumo todas las deudas (ojo que como me piden todas no
tengo que agrupar)
Finalmente sumo las deudas, ahora SI tengo que agrupar por duenno.
DD(RUTD, deuda) < RUTD > = < SUMA deuda > (Arrienda)
6
4. Primero obtengo las casas y los duenos:
Ahora creo una tabla que tenga el numero de casas totales y la suma
de los arrendatarios:
CCCT A CT A o
n CC
7
7. Primero obtengo una relacion con arrendatarios y casas si es que el
arrendatario tiene casa
C3 (cuentaCasas3) (CA)
Ahora los duenos de dichas casas (duenos de casas que no tienen deu-
das):
DCSD RUT (CSD ? Casa)
Ahora, los duenos que no estan en este conjunto entonces son los que
tienen deudores en todas las casas o tambien quienes no tienen casas
sin deudores (sin deudas):
R D DCSD
D RUT (Duenos)
9.
8
3 Problema de transporte
Una empresa rural de transporte de pasajeros tiene una base de datos de in-
formacion acerca de los recorridos de sus buses. Un recorrido es una secuen-
cia de paradas que comienzan en un terminal. El numero de paradas varia de
un recorrido a otro pero hay al menos una parada. El modelo relacional con-
siste del siguiente diagrama:
Salida(NumRecorrido, idLocalidad)
Parada(NumRecorrido, idLocalidad, TiempoLlegada)
Donde NumRecorrido e idLocalidad identifican completamente un recor-
rido y una localidad. El atributo TiempoLlegada indica cuanto tarda en
promedio en llegar un bus a la localidad desde su salida. Ahora conteste:
2. Indique los recorridos con ciclos, ie, aquellos recorridos en que se visita
una localidad mas de una vez.
1
Los acentos han sido omitidos por un tema de tiempo/comodidad dado el contexto
Latex del documento. :P