UTNianos

Versión completa: Final Gestión de Datos 28/02/2012
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Es una mezcla de aporte y pedido .. Me presenté pero no me quedé a rendirlo .. Me acuerdo esto:

1.a) V o F: No se pueden crear índices sobre vistas (V)

2.a) ¿Cuál es la ventaja de usar índices? Indique un ejemplo práctico de la utilización de un índice compuesto.
2.b) Describa el metodo heap sort

--

Después de ese humilde y casi patético aporte, va el pedido: alguien tiene el final ?? .. al menos el ejercicio, que me resultó un poco rebuscado el enunciado, no lo podía entender, por eso no quise arriesgarme al 2 ..

la libreta no se mancha ..
Me sumo al pedido
Lo conseguí y lo comparto ..

1.a) V (los indices son al modelo físico, las vistas no son físicas)
1.b) F (puede haber nulls)

Alguien entiende el ejercicio ??
3a) Consulta que se fija cuales son los importes de los cuales los inquilinos no le hayan pagado a los duenios, o sea, tener una entrada 'E' con un número de cuenta perteneciente a un inquilino, la cual no tenga una entrada 'S'. Una posible solución sería (sino me equivoco, claro, cualquier error chifla) :

SELECT T1.importe as Importe_Pendiente /* Importe que le debe el inquilino al dueño*/
FROM Transferencias T1, Relacion R1
WHERE T1.Cuenta = R1.Cta_inquilino /*(La cuenta tiene que ser una de un inquilino)*/ AND R1.Cta_duenio NOT IN
(SELECT T2.Cuenta
FROM Transferencias T2, Relacion R2
WHERE T2.Cuenta = R1.Cta_duenio AND YEAR(T2.fecha) = YEAR(T1.fecha) AND MONTH(T2.fecha) = MONTH(T1.fecha))
/*Esto significa que el dueño que está relacionado con el inquilino no tiene una transferencia en el mismo año y mismo mes. Se consideraba en el examen que si un inquilino le pagaba un mes, ese mes se lo "acreditaban" al dueño */

3b) Trigger after INSERT que controle que el importe del dueño sea menor al del inquilino.

Saludos y cualquier error avisa che
3a) no se entendia mucho el modelo.. lo del mes ni estaba enterado que habia que usarlo.. en la tabla tranferencias las cuentas son solo de inquilinos no?
habiamos hecho asi

select importe from transferencia T inner join relacion R on cuenta = cta_inquilino
where T.direccion = 'E' and T.cuenta not in (select cuenta from transferencia T2 where T.Direccion = 'S')

supuse que un inquilino tiene 1 dueño pero 1 dueño puede tener muchos inquilinos.. ahora si la cuenta del inquilino se repite ya varias veces (mas de 2) estaria mal.. pasa que como esta tan poco claro e inentendible el enunciado vaya a saber uno como es el modelo.. mas que ni aclaran que es fk, etc..

3b) si.. after insert con rollback, sino before
Con respecto al 1)a). En SLQServer se puede http://msdn.microsoft.com/es-es/library/ms191432.aspx
(04-03-2012 15:31)guidoakd escribió: [ -> ]3a) no se entendia mucho el modelo.. lo del mes ni estaba enterado que habia que usarlo.. en la tabla tranferencias las cuentas son solo de inquilinos no?
En la tabla transferencias hay de todo, inquilinos y dueños.

Cita:habiamos hecho asi

select importe from transferencia T inner join relacion R on cuenta = cta_inquilino
where T.direccion = 'E' and T.cuenta not in (select cuenta from transferencia T2 where T.Direccion = 'S')

No me cierra esto, o sea, acá T.cuenta not in (select cuenta from transferencia T2 where T.Direccion = 'S') estás diciendo que la cuenta del inquilino no tenga una salida y no es así, tiene que ser la cuenta del dueño que está relacionada con el inquilino mediante la tabla Relación. O sea, tenes que matchear en la tabla Relacion y ver cual le corresponde

Cita:supuse que un inquilino tiene 1 dueño pero 1 dueño puede tener muchos inquilinos..ahora si la cuenta del inquilino se repite ya varias veces (mas de 2) estaria mal.. pasa que como esta tan poco claro e inentendible el enunciado vaya a saber uno como es el modelo.. mas que ni aclaran que es fk, etc..

La posta?, fué cualquiera... O sea, cada alumno en el final asumió lo suyo y puso en el final: "Asumo que bla bla bla...".

chinomol escribió:Con respecto al 1)a). En SLQServer se puede http://msdn.microsoft.com/es-es/library/ms191432.aspx

Por eso me desaprobaron el final, por poner eso... Según ellos: "La vista materializada no es un tipo de vista, es algo diferentes". Yo estudié del tech de Microsoft y no les gusto eso, me dijeron: "Para eso hay apuntes. Además cada fabricante le pone el nombre que quiere". No me parece que sea así, pero bueno, ellos en teoría me aprueban o no...

Che, si se quieren juntar más temprano el día del final para "repasar un poco" o para debatir algo, avisenme que me prendo, no hay problema...

Saludos che
Yo lo rendi e hice toda la teoria bien...

mi problema fue que no termine de entender el modelo... veremos ahora en mayo...

la idea del query era usar 2 veces la tabla transferencias para resolverlo...
Mi solución del 3.a. es esta:
select importe from transferencia T inner join relacion R on cuenta = cta_inquilino
where T.direccion = 'E' and T.cuenta not in
(select r2.cta_inquilino from transferencias t2
inner join relacion r2 on r2.cta_dueño=t2.cuenta
where t2.direccion='S')

O sea que no haya relacion entre la cuenta del inquilino y la del dueño.

3.b.
alguien me puede decir como se hacen el trigger? en mi cursada no lo vi, y estoy medio en pelotas. con T-SQL.
Saludos y gracias!
(22-07-2012 13:46)AGUSTIN27 escribió: [ -> ]Mi solución del 3.a. es esta:
select importe from transferencia T inner join relacion R on cuenta = cta_inquilino
where T.direccion = 'E' and T.cuenta not in
(select r2.cta_inquilino from transferencias t2
inner join relacion r2 on r2.cta_dueño=t2.cuenta
where t2.direccion='S')

O sea que no haya relacion entre la cuenta del inquilino y la del dueño.

Pero ahi no estas tomando en cuenta que puede haber distintos pagos del mismo inquilino al mismo dueño, osea, uno por mes por ejemplo.

A partir del segundo mes, tu subconsulta no va a devolverlo nunca a ese inquilino, porque ya va a tener una transferencia de Salida asociada, la del primer mes.

Creo que ahi entra en juego el campo fecha, sino otra forma no se me ocurre.

Y otra cosa, estas usando una subconsulta, no dice el enunciado que no se puede hacer eso? Confused
El enunciado dice que no puede haber una subconsulta en un from.
Yo entendí que no se puede hacer algo así: select * from (select * from tabla1)
Revisé lo que me dijiste y concluí en esto:

select t.importe from transferencias t
where t.direccion='E' and
t.cuenta not in
(select r.cta_inquilino from transferencias t2
inner join relacion r on r.cta_dueño=t2.cuenta
where t2.direccion='S' and year(t2.fecha)=year(t.fecha)
and month(t2.fecha)=month(t.fecha))

Creo que así estaría bien o al menos para que te aprueben jaja la verdad que es medio choto el modelo de datos.

El punto que le sigue con el trigger, me darías una ayuda de como hacerlo?

Lo pensé así:

create trigger final
on transferencias
after insert
as
begin
declare @importe numeric(18,2)
declare @cuenta int
declare @fecha datetime
declare @direccion varchar(1)

set @importe=(select importe from inserted)
set @cuenta=(select cuenta from inserted)
set @fecha=(select fecha from inserted)
set @direccion=(select direccion from inserted)

if(@direccion='s')
begin
if((select t.importe from relacion r
inner join transferencias t on r.cta_dueño=t.cuenta
where r.cta_dueño=@cuenta and year(t.fecha)=year(@fecha) and month(t.fecha)=month(@fecha))<@importe)
begin
rollback transaction
end
end

Saludos!
No existen las subconsultas dentro del from, las podes insertar en el select como un campo mas [ select *, (select * from A) from B ] o en el where para filtrar [ select * from A where id IN (select id from B) ].
No esta muy bien explicitado que es lo que NO se puede usar, si una de esas 2 formas de subconsulta o directamente ninguna de las 2.

En cuanto a la query que hiciste, habria que ver por ejemplo si el tipo hace la transferencia de Entrada el ultimo dia del mes por ejemplo, y el sistema hace la Salida al otro dia, ya estarian en meses distintos, por lo que no matchearian.
Se que estoy siendo muy detallista pero cabe la opcion.

Yo estando en ese final le preguntaria al profesor que entiende por NO USAR SUBCONSULTA EN EL FROM y ademas le preguntaria el tema de la fecha.

En cuanto al trigger no seria de este tipo?



CREATE TRIGGER insert_transferencias BEFORE INSERT ON transferencias
FOR EACH ROW
BEGIN
( query SELECT del punto anterior )
END


Gente,

A mi se me ocurrio esto:

select trasnf_ent.idtransf Trasnf_no_pagas
from relacion rel, transferencia trans_ent, transferencia trans_sal
where trans_ent.direccion = 'E'
and trasn_sal.direccion = 'S'
and rel.cta_inquilino = trans_ent.cuenta
and rel.cta_duenio = trans_sal.cuenta
group by trasn_ent.cuenta, transf_sal.cuenta
having count(trasn_ent.cuenta) != count(transf_sal.cuenta)

Osea cuento la cantidad de trasnf salientes y entrantes para el par Inquilino-Dueño. Si la cantidad me da diferente es porq le falta pagar a algun dueño.

La sintaxis es una cagada. Consulta: te desaprueban si mi SQL es un poco de T-SQL y PLSQL ???

Gracias.
A que llamas que tu SQL es un poco de T-SQL y PL/SQL ?
En la consulta lo que no te dejan es usar ni funciones ni procedimientos, y hasta a veces no te dejan usar subselects...
Después todo lo que sea atributo = 'X' , atributo != 'Y' lo podes usar tranquilamente...
(27-07-2012 00:16)shecoop escribió: [ -> ]A que llamas que tu SQL es un poco de T-SQL y PL/SQL ?

A que no me acuerdo bien T-SQL o PL SQL... por eso aveces lo escribo mezclado. Por eso te pueden llegar a desaprobar? O la sintaxis tiene q estar perfecta?

El ejercicio, mi manera de resolverla esta bien? Confused

Gracias.
Páginas: 1 2
URLs de referencia