UTNianos

Versión completa: [Aporte] [Gestión de Datos] Final del 09/12/2014
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas gente, les comento el final de hoy (9/12/14)

V o F
1a) Dado el grafo G (E,P); E({a}), P({a,a}) se puede decir que es un árbol
1b) El orden de complejidad del quicksort depende de como vienen ordenados los datos

Teoricos
2a) Explique que objetos de BD se implementan para brindar integridad de entidad, referencial y semántica
2b) Explique el concepto de Tabla de Fact y Dimensiones de un DTW

Practicos
[attachment=9958]

--------------------------------------------------
Mi resolución

1a) Falso. Tiene un ciclo, por ende no es arbol
1b) Verdadero...esta en el apunte, el orden de complejidad puede ser n^2, log2 n...y depende de como venga ordenado el set de datos

2a) explicar todas las constraints...
las de integridad de entidad => PK constraint
las de integridad referencial => FK constraint
las de integridad semántica => Not null/ unique / check/ data type/ default
También explicar que se puede hacer con triggers...

3a) La consulta está bien hecha...el resultado final de la tabla tiene los siguientes datos:

2,4,8,16,32,64,128,256

3b) explicado acá:
http://www.utnianos.com.ar/foro/tema-apo...29-07-2014


Saludos!
geniooo!!!

muchas gracias!! thumbup3thumbup3
Muchas gracias x las rtas!!!!

Una consulta con respecto al
3a)
Para mi es incorrecto que devuelve 2,4,8,16,32,64,128,256 y funciona bien, debido a que el campo es unique

creo que pasaria esto:

Entra en la primera ejecución, primero inserta el 2, después en el insert into tabla select numero*2 termina insertando el 4. (la tabla quedaria conformada por 2 filas con los numeros 2 y 4)
Despues entra en el if(select max(... y la llama recursivamente, en esta llamada recursiva, no inserta 2 ya que el if(select count(* hasta ahi todo bien, pero cuando vuelve a entrar en el insert into tabla numero*2 va a querer insertar 2 valores, que provienen de la tabla, osea hace 2*2 y quiere insertar un 4. y hace 2*4 y quiere insertar un 8. Aca es donde se romperia todo porque el campo numero es UNIQUE y estoy queriendo insertar un 4 que ya estaba en la tabla...

Espero que se pueda entender, si hay algo de lo que dije mal porfa corrijan =)
(03-03-2015 01:08)agusbrand escribió: [ -> ]Muchas gracias x las rtas!!!!

Una consulta con respecto al
3a)
Para mi es incorrecto que devuelve 2,4,8,16,32,64,128,256 y funciona bien, debido a que el campo es unique

creo que pasaria esto:

Entra en la primera ejecución, primero inserta el 2, después en el insert into tabla select numero*2 termina insertando el 4. (la tabla quedaria conformada por 2 filas con los numeros 2 y 4)
Despues entra en el if(select max(... y la llama recursivamente, en esta llamada recursiva, no inserta 2 ya que el if(select count(* hasta ahi todo bien, pero cuando vuelve a entrar en el insert into tabla numero*2 va a querer insertar 2 valores, que provienen de la tabla, osea hace 2*2 y quiere insertar un 4. y hace 2*4 y quiere insertar un 8. Aca es donde se romperia todo porque el campo numero es UNIQUE y estoy queriendo insertar un 4 que ya estaba en la tabla...

Espero que se pueda entender, si hay algo de lo que dije mal porfa corrijan =)

Acabo de ejecutar el stored en SQL y la respuesta es 2-4-8-16-32-64-128
Tu error está en la parte de NOT EXISTS, porque en esa sección valida que algún valor de la tabla T2 dividido 2 sea igual al valor de la T1
Para tu caso en particular tenemos lo siguiente:
T1: 2 - 4
T2: 2- 4

Para el exists ambos están, luego por el not exists lo que hace es: Para t1: 2 hay algún valor en t2 que al dividirlo por 2, sea 2?. Si, el 4, entonces lo excluye.
Para t1: 4 hay algún valor de t2 que al dividirlo, sea 4? NO.
Entonces devuelve el registro 4, que al multiplicarlo por 2 te da 8.
Luego sigue el mismo razonamiento hasta 128.
(03-03-2015 09:48)Martin. escribió: [ -> ]
(03-03-2015 01:08)agusbrand escribió: [ -> ]Muchas gracias x las rtas!!!!

Una consulta con respecto al
3a)
Para mi es incorrecto que devuelve 2,4,8,16,32,64,128,256 y funciona bien, debido a que el campo es unique

creo que pasaria esto:

Entra en la primera ejecución, primero inserta el 2, después en el insert into tabla select numero*2 termina insertando el 4. (la tabla quedaria conformada por 2 filas con los numeros 2 y 4)
Despues entra en el if(select max(... y la llama recursivamente, en esta llamada recursiva, no inserta 2 ya que el if(select count(* hasta ahi todo bien, pero cuando vuelve a entrar en el insert into tabla numero*2 va a querer insertar 2 valores, que provienen de la tabla, osea hace 2*2 y quiere insertar un 4. y hace 2*4 y quiere insertar un 8. Aca es donde se romperia todo porque el campo numero es UNIQUE y estoy queriendo insertar un 4 que ya estaba en la tabla...

Espero que se pueda entender, si hay algo de lo que dije mal porfa corrijan =)

Acabo de ejecutar el stored en SQL y la respuesta es 2-4-8-16-32-64-128
Tu error está en la parte de NOT EXISTS, porque en esa sección valida que algún valor de la tabla T2 dividido 2 sea igual al valor de la T1
Para tu caso en particular tenemos lo siguiente:
T1: 2 - 4
T2: 2- 4

Para el exists ambos están, luego por el not exists lo que hace es: Para t1: 2 hay algún valor en t2 que al dividirlo por 2, sea 2?. Si, el 4, entonces lo excluye.
Para t1: 4 hay algún valor de t2 que al dividirlo, sea 4? NO.
Entonces devuelve el registro 4, que al multiplicarlo por 2 te da 8.
Luego sigue el mismo razonamiento hasta 128.

Ahhh es verdad, no me estaba dando cuenta! Muchas gracias
Si pero no te olvides que el enunciado dice que el procedimiento se corre dos veces. Es un Script como el siguiente:

exec llena_tabla
GO
exec llena_tabla
GO

Por tanto, en la primera ejecucion se cargan 2,4,8,16,32,64,128
En la segunda ejecucion, se carga 256.

Saludos, atte.,
En el 3.a,

¿Soy el único que pensó que, al correr la consulta la segunda vez, el motor tira error porque ya existe el SP llena_tabla?
Que estás corriendo?.
Directamente si ya creaste el SP, deberías ejecutar exec llena_tabla.

A menos que estés haciendo otra cosa, ese error que mencionas debería ser trivial.
Asumiendo que lo que se ejecuta es lo siguiente



exec llena_tabla
GO
exec llena_tabla
GO



como dijo gaston monico
El resultado luego del primer excec será 2-4-8-16-32-64-128 como dijo Martin.
Cuando se ejecute la 2da vez le agregará el 256 luego del 128 quedando: 2-4-8-16-32-64-128-256 como dijeron varios compañeros.
URLs de referencia