Pular para o conteúdo principal

Questão de Banco de Dados — Modelo relacional — IF-PA 2022

Banco de DadosModelo relacional
Código
qq759884
Banca
IF-PA
Órgão
IF-PA
Ano
2022
Nível
Superior
Cargo
Professor EBTT - Informática
A figura, a seguir, apresenta o modelo relacional para um esquema de banco de dados, cujo objetivo é registrar funcionários, departamentos e projetos de uma empresa, conforme a descrição resumida do minimundo.Imagem associada para resolução da questãoI. A empresa é organizada em departamentos. Cada departamento tem um nome exclusivo, um número exclusivo e um funcionário, em particular, que o gerencia. Registramos a data inicial em que esse funcionário começou a gerenciar o departamento. Um departamento pode ter vários locais.II. Um departamento controla uma série de projetos, sendo cada um deles com um nome exclusivo, um número exclusivo e um único local.III. Armazenamos o nome, número do Cadastro de Pessoa Física (CPF), endereço, salário, sexo (gênero) e data de nascimento de cada funcionário. Um funcionário é designado para um departamento, mas pode trabalhar em vários projetos, que não necessariamente são controlados pelo mesmo departamento. Registramos o número atual de horas, por semana, que um funcionário trabalha em cada projeto. Também registramos o supervisor direto de cada funcionário (que é outro funcionário).Para listar todos os números de projeto, para o funcionário cujo último nome é ‘Brito’ ou ‘Silva’, seja este um trabalhador ou um gerente do departamento que controla o projeto, utilizou-se o seguinte comando SQL.(SELECT DISTINCT PROJNUMERO FROM PROJETO, DEPARTAMENTO, FUNCIONARIO WHERE DNUM=DNUMERO AND CPF_GERENTE=CPF AND NOME IN (‘Brito’, ‘Silva’ ) )UNION ( SELECT DISTINCT PROJNUMERO FROM PROJETO, TRABALHA_EM, FUNCIONARIO WHERE PROJNUMERO = PNR AND FCPF = CPF AND NOME IN ( ‘Brito’, ‘Silva’ ) );Para obter o mesmo resultado da consulta acima, qual o comando equivalente deve ser escrito:
  1. ASELECT PROJNUMERO FROM PROJETO, DEPARTAMENTO, FUNCIONARIO WHERE DNUM=DNUMERO AND CPF_GERENTE=CPF AND NOME IN (‘Brito’, ‘Silva’) AND EXISTS (SELECT PNR FROM TRABALHA_EM, FUNCIONARIO WHERE FCPF=CPF AND NOME IN (‘Brito’,’Silva’) GROUP BY PNR);
  2. BSELECT PROJNUMERO FROM PROJETO INNER JOIN DEPARTAMENTO ON DNUM=DNUMERO INNER JOIN FUNCIONARIO ON CPF_GERENTE=CPF WHERE NOME IN (‘Brito’, ‘Silva’) AND PROJNUMERO = ANY (SELECT PNR FROM TRABALHA_EM, FUNCIONARIO WHERE FCPF=CPF AND NOME IN (‘Brito’,’Silva’));
  3. CSELECT DISTINCT PROJNUMERO FROM PROJETO WHERE PROJNUMERO IN (SELECT PROJNUMERO FROM PROJETO,DEPARTAMENTO,FUNCIONARIO WHERE DNUM=DNUMERO AND CPF_GERENTE=CPF AND NOME IN (‘Brito’, ‘Silva’)) OR PROJNUMERO IN (SELECT PNR FROM TRABALHA_EM, FUNCIONARIO WHERE FCPF=CPF AND NOME IN (‘Brito’,’Silva’ ));
  4. DSELECT PROJNUMERO FROM PROJETO,DEPARTAMENTO,FUNCIONARIO WHERE DNUM=DNUMERO AND CPF_GERENTE=CPF AND NOME IN (‘Brito’,‘Silva’) UNION ALL SELECT PROJNUMERO FROM PROJETO, TRABALHA_EM, FUNCIONARIO WHERE PROJNUMERO = PNR AND FCPF = CPF_SUPERVISOR AND NOME IN ( ‘Brito’, ‘Silva’ ) ;
  5. ESELECT DISTINCT PROJNUMERO FROM PROJETO LEFT JOIN DEPARTAMENTO ON DNUM=DNUMERO AND CPF_GERENTE IS NOT NULL INTERSECT SELECT DISTINCT PROJNUMERO FROM PROJETO,DEPARTAMENTO,FUNCIONARIO WHERE DNUM=DNUMERO AND CPF_GERENTE=CPF AND NOME IN(‘Brito’,‘Silva’) ;
Revelar gabarito e comentário

GabaritoC — SELECT DISTINCT PROJNUMERO FROM PROJETO WHERE PROJNUMERO IN (SELECT PROJNUMERO FROM PROJETO,DEPARTAMENTO,FUNCIONARIO WHERE DNUM=DNUMERO AND CPF_GERENTE=CPF AND NOME IN (‘Brito’, ‘Silva’)) OR PROJNUMERO IN (SELECT PNR FROM TRABALHA_EM, FUNCIONARIO WHERE FCPF=CPF AND NOME IN (‘Brito’,’Silva’ ));

Link permanente: /questoes/qq759884