Buenas!
Les traigo el final que me tomaron hoy en Gestión de Datos. Fue, según mi opinión, bastante fácil. No tengo una copia así que si alguien tiene agradeceré que la suba. Por lo pronto les dejo escrito qué tomaron (no me lo acuerdo textual, obvio):
VoF:
a) Como la carga de elementos en un árbol crece de manera exponencial, siempre los tiempos de búsqueda son de orden logarítmico (apoximadamente así era)
b) El árbol binario de búsqueda está implementado sobre un árbol principal derecho y balanceado.
Teoría. Contestar en no más de 10 renglones
1) Diferencias entre Funciones y Stored Procedures
2) Defina de forma clara y concisa OLAP DataWarehouse y Data Mining y cómo se relacionan entre sí.
Práctica
a)Se tiene una tabla de facturas :
num_factura (PK)
importe
num_cliente
anio
mes
dia
Anio es un campo int de 4 dígitos con el año, día y mes son char(2) y se completan con un cero a la izquierda para días y meses de un
[/code]solo dígito.
Se pide realizar una consulta SQL que dé como resultado un listado de los num_clientes y su importe total (sumado) de las facturas del
período en cuestión, ordenados por importe total.
Se debe tener en cuenta que el período en cuestión se cuenta de un año para atrás desde la fecha actual. Es decir que si la consulta se
hace el 26 de mayo de 2009 se deben tener en cuenta las facturas hasta desde el 26 de mayo del 2008 hasta el 26 de mayo del 2009.
Además sólo se deben contemplar aquellos clientes que también hayan comprado en el período anterior (entre 2 y 1 año atrás, en el
ejemplo anterior sería entre el 26 de mayo de 2007 y 26 de mayo de 2008) y que en el período en cuestión (desde hace un año al
presente, de 26 de mayo de 2008 a 26 de mayo de 2009 en el ejemplo) tengan más de 30 compras.
3) b) Dada la consulta
SELECT * FROM localidades, provincias
Sabiendo que provincias tiene 25 registros y localidades es una tabla vacía elegir la opción correcta y justificar:
I) Cancela al ejecutar la query
II) No trae registros
III) Trae 25 registros
--------------------------------------------
Posible resolución:
Les comento cómo resolví yo el examen, diez no me saqué así que algún error debe haber (sospecho del 2-a o el 3-a) pero no estuve demasiado lejos así que creo que mis respuestas son aceptablemente confiables.
1-a) Falso. Depende de como estén distribuidos los datos, si tomamos el ejemplo de un ABB donde los datos a cargar ya vienen
ordenados el arbol se convierte en una lista y el tiempo de búsqueda se hace lineal.
1-b) Falso. Un ABB esta implementad como un árbol principal derecho pero que esté o no balanceado depende de cómo se carguen los
datos (vale el mismo ejemplo del 1-a).
*Por la nota infiero que estos dos VoF están correctos.
2-a) (Resumido)Una función siempre devuelve un valor mientras que un SP no necesariamente, aunque la implementación lo puede
permitir. Un SP se ejecuta usando exec como una sentencia más, mientars que las funciones son asignadas a variables o utilizadas
dentro de un select (no puedo hacer eso último con un SP). Además un Sp tiene sentido que pueda tener un efecto perdurable en los
datos de la base mientras que esto no es así con una función.
2-b) (Aproximadamente)Los OLAP son On Line Analytic Processes, orientados a sujetos y temas, trabajan con datos poco normalizados,
sumarizados, grandes volúmenes de datos y se ultilizan en los altos niveles organizacionales. Los DW son bases unicas en una
organización compuestas por Data Marts que proveen información para la toma de decisiones. Acumulan datos de toda la organización
unificados, integrados, almacenados de forma multidimensional. se basan en los OLAP. El Data Minning consiste en usar estos datos para
descubrir patrones ocultos de comportamiento (tales como "Qué clientes tienen más probabilidades de aceptar otra tarjeta de crédito?")
mediante algoritmos de redes neuronales, vecino más cercano, reglas de inducción y árboles de decisión.
*Me costó un huevo tratar de resumir el 2b en "no más de 10 renglones". En ambos puntos usé 11 y 12 renglones, así que tampoco es tan estricta la cosa
.
3-a)
SELECT num_cliente, SUM(ISNULL(importe,0)) FROM facturas f1
WHERE DATEDIFF(D,TO_DATE('dd/mm/yyyy', dia+'/'+mes+'/'+ CAST( anio AS CHAR(4))), GETDATE())<365
AND EXISTS ( SELECT 1 FROM FROM facturas f2 WHERE f1.num_cliente=f2.num_cliente
AND DATEDIFF(D,TO_DATE('dd/mm/yyyy', dia+'/'+mes+'/'+ CAST( anio AS CHAR(4))), GETDATE())
BETWEEN 366 AND 730)
GROUP BY num_cliente
HAVING COUNT(num_cliente)>30
ORDER BY 2
*Lo copié textual para que sea fiable, pero creo que me faltó aclarar de qué tabla eran los dia mes y anio (f2.dia , etc).
aparte seguro algún error de sintaxis o de alguna función mal usada debe haber jaj.
3-b)
III: No devuelve nada. Porque al no haber cláusulas de join implícito en el Where, realiza el producto cartesiano en el cuals e cumple que
dados dos conjuntos A y B |AxB|=|A|.|B| => si |B| = 0, |AxB|=|A|.0=0. Es decir, la cardinalidad del conjunto producto cartesiado es el
producto de las cardinalidades de los conjuntos originales, como uno de los dos tiene cardinalidad cero, el producto cartesiano tiene
cardinalidad cero.
-----------------------
Bueno, espero que les sirva. Avisen cualquier cosa
Saludos!