UTNianos

Versión completa: [APORTE][FINAL][GDD] 17-07-18
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Utnianos! Les subo el final de GDD del 17-07-18.

[Imagen: hWvF5Zp.png]

No se olviden de agradecer! thumbup3
Buenas tiro mi solucion, las correcciones seran bienvenidas.

1.a) Verdadera (los AB se representan en arrays)
1.b) Falsa (el grafo tiene que ser aciclico y no dirigido)

2.a) Transaccion: conjunto de opoeraciones tratas de forma atomica.
Lockeos: es cuando de bloquea una tabla o filas, hasta completar una transaccion (commit o rollback).
Aislamiento: es el nivel que se aisla una transaccion de las modificaciones de los datos por otras transacciones.
La realcion entre los 3 conceptos es que los lockeos garantizan el aislamiento de las transaccion en escritura y en lectura depende del nivel que se utilice (READ UNCOMMITED, READ COMMITED, REPITEBLE READ o SERIALIZABLE ), SQL SERVER por defecto READ COMMITED.

2.b) Arquitectura interna de BD (ANSI-SPARC): posee tres niveles
1.-Nivel Externo: se refiere a como los usuarios ven los datos o tienen acceso a ellos, vistas, permisos, etc.
2. Nivel Conceptual: es el modelo logico de la DB, como se relacionan las entidades, cuales son sus restricciones, etc.
3. Nivel Interno: es como se almacenan los datos en la DB y el HW a nivel fisico.

3.a) para mi es la "D"

3.b)

SELECT DISTINCT e.id_empresa, COUNT (a.id_area),
(SELECT COUNT (emp1.cuit)
FROM empleado AS emp1
WHERE emp1.id_empresa = a.id_empresa AND emp1.id_area = a.id_area)
FROM empresa AS e, area AS a, empleado AS em
WHERE e.id_empresa = a.id_empresa AND
a.id_empresa = em.id_empresa AND
(SELECT COUNT (emp2.cuit)
FROM empleado AS emp2
WHERE emp2.id_empresa = a.id_empresa AND emp2.id_area = a.id_area) > 10
GROUP BY e.id_empresa


3a)
Para mi es D pero en la columna 2 en lugar de lo que dice eso es "Cantidad de Areas distintas por Empresa" y columna 3 "Cantidad de empleados por empresa".

EDIT:
Lo codifique , lo corri y me dio asi como dije.


CREATE TABLE ASDempresa
(
id_empresa nvarchar(5) NOT NULL ,
descr nvarchar(11) NOT NULL ,
CONSTRAINT FK_id_empresa_RP PRIMARY KEY (id_empresa) )

INSERT INTO ASDempresa VALUES ('Coto','Comercio' )

CREATE TABLE ASDarea
(
id_area nvarchar(5) NOT NULL ,
id_empresa nvarchar(5) NOT NULL ,
descr nvarchar(11) NOT NULL ,
CONSTRAINT FK_id_area2_RP PRIMARY KEY (id_area),
CONSTRAINT FK_id_empresa2_RP FOREIGN KEY (id_empresa) REFERENCES ASDempresa (id_empresa) )

INSERT INTO ASDarea VALUES ('SIS','Coto','sistemas' )
INSERT INTO ASDarea VALUES ('CONT','Coto','contaduria' )
INSERT INTO ASDarea VALUES ('FIN','Coto','finanzas' )

CREATE TABLE ASDempleado
(
id_Empleado int NOT NULL identity,
id_area nvarchar(5) NOT NULL ,
id_empresa nvarchar(5) NOT NULL,
cuit nvarchar(11) NOT NULL,
CONSTRAINT FK_id_Empleado_RP PRIMARY KEY (id_Empleado),
CONSTRAINT FK_id_empresa3_RP FOREIGN KEY (id_empresa) REFERENCES ASDempresa (id_empresa),
CONSTRAINT FK_id_area3_RP FOREIGN KEY (id_area) REFERENCES ASDarea (id_area))

INSERT INTO ASDempleado VALUES ('SIS','Coto','121' )
INSERT INTO ASDempleado VALUES ('CONT','Coto','122' )
INSERT INTO ASDempleado VALUES ('FIN','Coto','123' )
INSERT INTO ASDempleado VALUES ('FIN','Coto','124' )


select e.id_empresa,count(distinct a.id_area),count( em.cuit)
from ASDempresa e join ASDarea a on e.id_empresa=a.id_empresa
left join ASDempleado em on (a.id_area=em.id_area and a.id_empresa=em.id_empresa)
group by e.id_empresa


Resultado:
Coto 3 4
Buenas, por si alguien esta estudiando para la próxima fecha y lo ve:

En el 3a, si por ejemplo hubiera 1 solo empleado trabajando en la misma empresa en 3 áreas distintas, el count(em.id_empresa), no da como resultado 3 cuando en realidad hay 1 solo empleado?
(18-05-2019 21:37)ferhaspert escribió: [ -> ]Buenas, por si alguien esta estudiando para la próxima fecha y lo ve:

En el 3a, si por ejemplo hubiera 1 solo empleado trabajando en la misma empresa en 3 áreas distintas, el count(em.id_empresa), no da como resultado 3 cuando en realidad hay 1 solo empleado?

Si, es correcto.
Para que de 1 solo debería ser count(distinct em.id_empresa). Al no quitar duplicados en el count contabiliza como si son empleados distintos, ya que trabaja en varias áreas a la vez.
3a)
Siguiendo con el analisis...
La respuesta de este ejercicio debe ser que ninguna es la correcta y justificaría con:
Retorna 1 fila por empresa con almenos 1 area.
Y las columnas vienen dadas :
Empresas agrupadas distintas.
cantidad de areas de esa empresa.
cantidad de empleados en esa area de esa empresa. Como dijo ferhaspert , si hay un empleado en 3 areas se cuenta 3 veces ese empleado. Lo cual no ocurre porque la relacion es 1 empleado pertenece a 1 area, segun el DER.


3b)

Select id_empresa,
count(distinct a.id_area) as 'cantidad de areas',
count(distinct e.cuit) as 'cantidad de empleados'
from empresa e, area a, empleado e
where
e.id_empresa=a.id_empresa and a.idarea=e.id_area
Group by id_empresa
having count(distinct e.cuit)>10


por supuesto necesito confirmacion de si está bien mi 3b.
Paso el 3b) select e.id_empresa , COUNT(a.id_area), (select count(em.cuil) from empleados1 em where em.id_area = a.id_area and e.id_empresa = em.id_empresa group by em.cuil)
from empresa e join area a on e.id_empresa = a.id_empresa join empleados1 em on e.id_empresa = em.id_empresa and em.id_area = a.id_area
group by e.id_empresa , a.id_area
having ( select count(em.cuil) from empleados1 em1 where em1.id_area = a.id_area and e.id_empresa = em1.id_empresa) >10
order by e.id_empresa
(17-10-2019 20:45)Soy escribió: [ -> ]Paso el 3b) select e.id_empresa , COUNT(a.id_area), (select count(em.cuil) from empleados1 em where em.id_area = a.id_area and e.id_empresa = em.id_empresa group by em.cuil)
from empresa e join area a on e.id_empresa = a.id_empresa join empleados1 em on e.id_empresa = em.id_empresa and em.id_area = a.id_area
group by e.id_empresa , a.id_area
having ( select count(em.cuil) from empleados1 em1 where em1.id_area = a.id_area and e.id_empresa = em1.id_empresa) >10
order by e.id_empresa

En el Having yo le pondria el Group By tmb !

Edit: no va group by en el having. tira error.. estoy creando las tablas y metiendole datos asi tiro una respuesta que esté chequeada xD
URLs de referencia