13-12-2018, 23:51
16-12-2018, 19:23
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)
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
07-01-2019, 11:45
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
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
18-05-2019, 21:37
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?
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?
19-05-2019, 18:44
(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.
17-10-2019, 11:33
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)
por supuesto necesito confirmacion de si está bien mi 3b.
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.
17-10-2019, 20:45
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
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
18-10-2019, 08:34
(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