UTNianos

Versión completa: [APORTE] Final Gestion de Datos 06/10/2016
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Les comento como fue el final:

V o F:
1.a) La ejecución de una query sin filas de resultado dentro de un trigger genera la cancelación de la transacción.
1.b) La unica manera de establecer la integridad de los datos es mediante el CHECK (algo asi era)


Teoria:
2.a) Dar las ventajas de tener tablas desnormalizadas dentro de un DW
2.b) Definir los elementos que brindan integridad en una BD, por orden de importancia


Ejercicios: (Misma practica que final 12-07-2016)

3.a) Daban un DER y tenias que decir que retornaba la consulta:
SELECT T1.t1_id, (SELECT COUNT(distinct T2.t3_id) from T2 where T2.t1_id = T1.t1_id)
FROM T1

3.b)
Reescribir la query pero sin subselects, y que devuelva el mismo resultado.




Dieron los 5 minutos para verlo como siempre. Si alguno le saco foto y lo puede subir, buenisimo.
Las respuestas para el 1) a y el 1.b) Ambas eran falsas.

En el 3)a Escribí que se obtienen dos columnas. La primera tiene todos los id que se encuentran en la tabla T1 y la segunda columna tiene la cantidad de valores unicos de t3_id que se encuentran en la tabla T2 y que además cumplen la condición que t1.id de la tabla T2 es igual al id de la tabla T1

Con respecto al 3.B)

SELECT T1.t1_id, COUNT(distinct T2.t3_id) FROM
T1 LEFT JOIN T2 ON T2.t1_id = T1.t1_id
GROUP BY T1.id

(seguro me esta faltando algo)
Hola gente, cómo andan?
Les dejo unas consultas sobre este final:

2)b) Definir los elementos que brindan integridad en una BD, por orden de importancia

cual sería el orden de importancia?

Primero integridad de entidad (primary key) después integridad referencial(foreign key), después integridad semántica(data type, default, unique,not null check)
y el trigger sería el más importante?

3)b) Qué solución sería más performante?

SELECT T1.t1_id, COUNT(distinct T2.t3_id)
FROM T1 LEFT JOIN T2
ON T2.t1_id = T1.t1_id
GROUP BY T1.id

o

SELECT T1.t1_id, COUNT(distinct T2.t3_id)
FROM T1 JOIN T2
WHERE T2.t1_id = T1.t1_id
GROUP BY T1.id
Las consultas que hiciste devuelven cosas distintas.
Con el Left Join vos aceptas que si en T2 no hay nada, devuelva NULL, mientras que con el JOIN forzas a que en ambos casos exista el registro id.

La correcta es la primera, ya que si no tenes registros en T2, el count te devuelve 0.
URLs de referencia