UTNianos

Versión completa: [PEDIDO] Gestion de Datos final 13/12/2011
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Gente ,
alguien rindio el final de gestion de Datos de ayer Martes 13/12/2011 y lo puede subir o comentar que cosas tomaron mas o menos?

Muchas Gracias!!
Saludos.
Aca está

El último salió cortado, pero eran una serie de sentencias y tenías que decir si había error y si no había, que resultado daba... (medio molesto para tenerlo perfecto).

La teoría era chamullable y el otro ejercicio un trigger medio obvio.. pero había estudiado poco asique me levanté y me fui. Las V o F, creo que eran V y F. Me levanté y me fui, pero si habías estudiado, se aprobaba.
Justo lo llevé al trabajo hoy para escanearlo y subirlo.
Me saque un 8 por suerte =)
Contesté lo siguiente:

1.a) Verdadero.
1.b)Falso.
2.a) Escribí sobre los diferentes tipos de constraints y del trigger.
2.b) Escribí mñas que nada de la Fact Table, la otra no tenía ni idea para qué era.
3.a)Lo resolví con un trigger.
3.b) Acá mientras esperábamos habían diferentes puntos de vista. Yo puse que fallaba en la línea nº3 ya que el '3' se suponía que tenía que ser tipo int. Otro pusieron que fallaba más adelante, creo que en la línea 5, ya que si no considerabas el '3' como error, fallaba por la constraint UNIQUE.
Al final me comentaron que un profesor dijo que al insertar el '3' por más que sea del tipo int la columna, el motor de la base lo toma bien el valor y no falla.

Espero que te haya servido, éxitos!
Genial, muchas gracias a los 2!!!
Vamos a ver que pasa el Martes que viene...

Saludos!!
Hola.
Estuve probando el ejercicio 4 directamente en el motor de SQL Server.
La línea 3 (insert into numeros values (3,3,'3');) no falla. Inserta bien el número 3 por mas que tenga las comillas simples.
La que falla es la línea 5 (insert into numeros (select max(numero3) + 2, numero2 + 5, 7 from numeros where numero3 = 3 group by numero2);).
Ejecuté la subselect (select max(numero3) + 2, numero2 + 5, 7 from numeros where numero3 = 3 group by numero2);) y me devuelve lo siguiente:
5 8 7
5 9 7
Como verán la subselect ejecuta bien y devuelve resultados razonables.
Si bien estos resultados no podrían ser insertados en la tabla porque estaría duplicando una PK con el valor "5"; el error que devuelve al ejecutar el insert de la línea 5; es un error de sintaxis.
Leyendo documentación de la sentencia "insert" pude detectar que el error son los paréntesis. La sintaxis correcta es: INSERT INTO table SELECT columna1, columna2 FROM table WHERE ...
Por lo tanto, la respuesta correcta sería: "No se ejecuta por error de sintaxis en línea 5"
Espero sirva de ayuda.
Saludos.
Ignacio.
Si, yo lo estuve probando y vi lo mismo que comentas vos Ignacio. Es como muy puntilloso el tema de los parentesis, me hace acordad los finales de sintaxis, medio de terror. Espero que no sean tan estrictos en la correccion.

Saludos, gracias a todos por los aportes.Suerte!!
(18-12-2011 14:40)ignaciofc escribió: [ -> ]Hola.
Estuve probando el ejercicio 4 directamente en el motor de SQL Server.
La línea 3 (insert into numeros values (3,3,'3');) no falla. Inserta bien el número 3 por mas que tenga las comillas simples.
La que falla es la línea 5 (insert into numeros (select max(numero3) + 2, numero2 + 5, 7 from numeros where numero3 = 3 group by numero2);).
Ejecuté la subselect (select max(numero3) + 2, numero2 + 5, 7 from numeros where numero3 = 3 group by numero2);) y me devuelve lo siguiente:
5 8 7
5 9 7
Como verán la subselect ejecuta bien y devuelve resultados razonables.
Si bien estos resultados no podrían ser insertados en la tabla porque estaría duplicando una PK con el valor "5"; el error que devuelve al ejecutar el insert de la línea 5; es un error de sintaxis.
Leyendo documentación de la sentencia "insert" pude detectar que el error son los paréntesis. La sintaxis correcta es: INSERT INTO table SELECT columna1, columna2 FROM table WHERE ...
Por lo tanto, la respuesta correcta sería: "No se ejecuta por error de sintaxis en línea 5"
Espero sirva de ayuda.
Saludos.
Ignacio.

Coincido. Ahora la línea 6 y 7 también son cualquiera. "Commit", no hay transacción nada, obvio error. Y la 6 tampoco da.
Subo mi resolucion ( el punto 3b lo arme con lo que hay aca pq no tenia idea).
Saludos

1.a
VERDADERO: ya que puede pasar de n log n a n al cuadrado en el peor de los casos

1.b
FALSO: ya que para que un arbol de gardo N este lleno/completo los nodos internos deben tener N cantidad de hijos (excepto las hojas/terminales/maximales) y asi y todo puede que no quede balanceado ya que pueden quedar dos ramas llenas pero de diferente profundidad.

2.a
Los objetos que pueden asegurar integridad referencial son
Constraints: son controles de integridad que se le pueden agregar a la BD, por ejemplo PK para que un no se repitan un legajo dentro de una tabla Alumno, FK para que no se puedan incribir alumnos/legajos que no existen.
Transacciones: son una unidad logica de trabajo. Permiten mantener de la DB en estado correcto partiendo de un estado correcto. Asegurando que el la operacion se ejecuta completa o falle dejando todo como estaba de un principio.
Triggers: es un procedimiento que se ejecuta ante un determinado evento (delete,update,insert) sucedido en una detereminada tabla el cual se ejecuta antes, despues o reemplazando dicho evento (begin,after o insteadof).
LogicalLogs: Es un registro donde el motor almacena lo sucedido en cada operacion con los datos.

2.b
FACT TABLE: es la tabla primaria del modelo y contiene las metricas del negocio. Cada tabla Fact o tabla de hechos representa una relacion muchos a muchos y contiene 2 o mas FK que hacen referencia a sus respectivas tablas de dimension.
Dimension Table (lookup table): restringe los criterios de seleccion de los datos de la tabla fact. Cada dimension esta definida por su clave primaria que sirve como base para la integridad referencial con la Fact table con la cual hace join. Contienen atributos textuales, los cuales son la base para agrupar y restringir consultas.

3.a

create trigger TotalFact on ITEMS
after update
as
Begin
declare c cursor for
(select distinct nro_factura from inserted)

decalre @total numeric(10,2)
declare @fact numeric(10,2)

open c

fetch next from c into @fact

while (@@fetch_status=0)
begin
@total=(select sum(cant_art*precio_unitario) from items where nro_factura=@fact group by nro_factura)
update factura set total_factura=@total where nro_factura=@fact
fetch next c into @fact
end
close c
deallocate c
End

3.b
Se produce un error de sintaxis en la sentencia
(insert into numeros (select max(numero3) + 2, numero2 + 5, 7 from numeros where numero3 = 3 group by numero2)
En la cual no deberian ir los parentecis en el (select...)
Igualmente si no estuviera este error, tambien habria otro al intentar insertear los valores
5 8 7
5 9 7
y dado q el primer campo es PK no se puede insertar dos veces el 5
Hola chicos, hacía falta hacer un cursor sí o sí para resolver el ejercicio 3.a. ?
Pregunto esto porque no estoy muy ejercitado con el tema de los triggers.
Saludos
En el 3.b.
Uno de los errores está en la sintaxis del select con los paréntesis.
Y otro que yo probé fue este:
declare @x int
select count(distinct numero3) into @x from numeros

a mi no me deja hacerlo, a uds si?
Digo esto, porque nadie lo menciono como un error.

Saludos!
Yo el 3a lo resolvi con el siguiente trigger:


CREATE TRIGGER update_item AFTER UPDATE ON items
FOR EACH ROW
BEGIN
UPDATE factura f
SET f.total_factura=(f.total_factura - (OLD.cant_articulo * OLD.precio_unitario) + (NEW.cant_articulo * NEW.precio_unitario))
WHERE f.nro_factura=NEW.nro_factura;
END


Lo probe en el motor mysql y funciona correctamente!
ayer aprobe asi que ya no importa jaja gracias por la ayuda ! quedara para los que sigan
URLs de referencia