Administração e Projeto de Banco de Dados Exercícios - Prof. Bulla
1) O que é o projeto físico de banco de dados ? 2) Por que, muitas vezes, é necessária a „desnormalização‟ de tabelas ? Cite um exemplo. 3) Qual é o modelo de dados utilizado como entrada no projeto físico ? 4) O que é uma „restrição de integridade referencial‟ ? 5) Cite mais dois tipos de restrição de integridade suportados pelos SGBDs relacionais. 6) „Mesmo que exista uma coluna na tabela, cujo valor para o negócio em questão, nunca seja duplicado ( p. ex., número do CPF ), sempre devemos criar uma chave primária artificial, ou seja, um valor numérico sequencial, sem significado para o negócio‟. Você concorda com esta afirmação ? Por que ? 7) Identifique, se houver, os erros no comando abaixo: Create tb_alunos ( nu_aluno, int, null, primary key, no_aluno, decimal(30), null, cd_curso, char(6), not null, foreing key references tb_cursos ) 8) Em relação à tabelas, qual é a diferença entre os comandos Delete e Drop ? 9) Quais são os comandos SQL da categoria DML ? 10) Uma coluna pode, ao mesmo tempo, ser uma FK e parte de uma PK ? Caso afirmativo, dê um exemplo 11) Uma coluna, numa determinada tabela, pode ter valores vazios ou nulos. Ela pode ser uma FK ? 12) Indique, abaixo, quais afirmações são verdadeiras, quais são falsas e quais são incertas ( faltam elementos para se afirmar a veracidade ou a falsidade das mesmas): a) Numa tabela, obrigatoriamente, as linhas estão classificadas pelo valor de alguma coluna; b) Além de „select‟, podemos utilizar subconsultas com „insert‟, „update‟ e „delete‟; c) O „update‟ pode atualizar diversas colunas de uma tabela, quando utilizamos a cláusula „where‟; d) Num modelo lógico de dados, haviam oito tabelas normalizadas. Após algumas análises, decidiu-se criar fisicamente, apenas seis „desnormalizadas‟. Podemos concluir que esta decisão trouxe maiores benefícios à performance do sistema. e) Quando realizamos um „ inner join‟ entre duas tabelas, podemos obter valores de todas as colunas de ambas as tabelas; f) Num „ join’, caso uma das tabelas tenha 10 linhas e a outra 50, podemos obter como resultado uma tabela de 5000 linhas; g) Em relação às tabelas do item anterior, foi executado um „full join‟ em que foram recuperadas 9 linhas. 13) Quando, num „insert‟, não é necessário especificar os nomes das colunas da tabela ? 14) Qual a semelhança e a principal diferença entre as cláusulas „where‟ e „having‟ ? 15) Para que poderíamos utilizar um „full join‟ ? Dê um exemplo.
Estudo de caso: Multas de trânsito.
Abaixo, quatro tabelas de um sistema de controle de multas.
Veiculos ( cd_placa A7, nu_renavam N9, nu_cpf_prop N11 ), Categorias ( cd_categ N3, ds_categ A20, vl_multa N11,2 , qt_pontos N2 ), Multas ( nu_multa N12, dt_multa, ds_local A40, cd_placa, nu_cnh, cd_categ ), Mororistas ( nu_cnh N11, no_motorista, nu_cpf_mot )
16) Utilizando SQL, criar as tabelas Multas e Motoristas, indicando PK, FKs ( não se esqueça da integridade referencial ! ). Para as colunas numéricas, utilizar o tipo que possibilite economia de armazenamento. Suponha que as duas outras tabelas já estejam criadas.
17) Utilizando SQL: a) Obter os dados das multas de categoria igual a 01; b) Obter a quantidade de multas p/ código de categoria, em ordem ascendente de código; c) Quantas multas tem a cnh de número 34526324 e qual é o nome do motorista ?; d) Qual o valor total das multas, emitidas nos anos de 2002 a 2007, em que o motorista não era o proprietário do veículo ?
18). Utilizando SQL: a) Escolha três tabelas e inclua uma linha em cada uma delas ( Atenção ! A sequência de inclusão deve respeitar a integridade referencial entre as tabelas ! ) b) O veículo de placa BGV1433, que pertencia a outro proprietário, foi comprado pelo cpf número 04522300224, que tirou a sua habilitação, de número 35555667. O nome dele é “Amadeu Kraulitz”. Atualize as informações no banco de dados.
19) Em SQL, comandos DML são constituídos por: a) apenas select b) create, select, insert, update e delete c) insert, update, remove e select d) select, insert, update e delete
20) Um índice “cluster” ou “clustered”: a) sempre tem que ser único b) nunca pode ser composto ( mais de uma coluna ) c) normalmente, é utilizado para recuperar linhas de uma tabela ordenadas por seu valor d) é definido somente para chaves primárias de tabelas
21) Num JOIN entre uma tabela A ( 1000 linhas ) e uma tabela B ( 4000 linhas ) foram recuperadas 4.000.000 de linhas. Qual o tipo de encadeamento utilizado ? a) INNER JOIN b) CROSS JOIN c) RIGHT JOIN d) FULL JOIN
22) Assinale a afirmação incorreta: a) uma pk, ao migrar para outra tabela será uma fk podendo ou não fazer parte da pk da tabela destino b) a cláusula COUNT ( DISTINCT sg_uf ) irá recuperar a quantidade de estados que não se repetem c) a utilização de ORDER BY é obrigatória, num SELECT com GROUP BY d) uma restrição de integridade nem sempre é definida no momento da criação de uma tabela
Estudo de caso – Viagens aéreas.
Abaixo, quatro tabelas de um sistema que fornece dados sobre viagens aéreas. Voos ( nu_voo N5, cd_aerop_orig , dt_partida, hr_partida ), Aeroportos ( cd_aerop A4, no_aerop A30, no_cidade A30, sg_pais A3 ), Assentos ( nu_voo, nu_assento N3, in_ocupado A1, cd_classe ), in_ocupado = “S” ou “N” Classes ( cd_classe N2, vl_passag N11,2 )
23) Utilizando SQL, criar as tabelas Voos e Assentos, indicando PK, FKs ( não se esqueça da integridade referencial ! ). Para as colunas numéricas, utilizar o tipo que possibilite economia de armazenamento. Suponha que as duas outras tabelas já estejam criadas.
24) Utilizando SQL: a) Obter os dados dos vôos que partem do aeroporto “AERD”; b) Quantos aeroportos existem em cada país ? c) Qual a receita bruta total obtida com os vôos, no ano de 2007 ? d) Obter p/ cada aeroporto, entre 13/09/2008 e 14/10/2008, os dados dos vôos que partem do mesmo. Recuperar, também, o nome do aeroporto.
25) Utilizando SQL: a) Escolha três tabelas e inclua uma linha em cada uma delas ( Atenção ! A sequência de inclusão deve respeitar a integridade referencial entre as tabelas ! ); b) A companhia aérea não ira mais operar no aeroporto “SPOA”. Exclua-o, bem como os vôos programados a partir de 20/10/2008.
26) Numa determinada tabela, um índice não único é composto por duas colunas. Com certeza: a) estas duas colunas foram definidas como „null‟ b) as duas colunas são fk
c) é um índice “cluster” ou “clustered” d) não há elementos para se concluir que a), b) ou c) esteja correta
27) Em SQL, a diferença entre ADD e INSERT é: a) nenhuma, pois são equivalentes, dependendo apenas do SGBD utilizado b) um inclui dados de negócio ( como informações de clientes ) numa tabela e outro, uma nova informação na estrutura de uma tabela c) a cláusula ADD não existe d) um inclui dados de negócio e a outro, pode alterar estes dados
28) “Excluir os pedidos cancelados dos estados do RJ e SP e, também, os pedidos pendentes do estado do RS. TODAS as condições citadas são válidas apenas para o cliente 1256”. O comando correto seria: a) delete from pedidos where ( estado = „RJ‟ or „SP‟ and status = „C‟ and cliente = 1256) or ( estado = „RS‟ and status = „P‟ and cliente = 1256 ) b) delete from pedidos where cliente = 1256 and (( estado in ( „RJ‟, „SP‟ ) and status = „C‟ ) or ( estado = „RS‟ and status = „P‟ )) c) delete from pedidos where cliente = 1256 and (estado in ( „RJ‟, „SP‟ ) and status = „C‟ ) or status = „P‟ d) delete from pedidos where (( estado = „RJ‟ or estado = „SP‟ and status = „C‟ ) or ( estado = „RS‟ and status = „P‟ )) and cliente = 1256
29) Três das funções agregadoras são: a) AVG, SUM, ORDER BY b) SUM, COUNT, WHERE c) COUNT, SUM, MIN d) COUNT, MED, SUM
Estudo de caso – Eleições.
Abaixo, quatro tabelas de um sistema eleitoral. Candidatos ( nu_candid N7, no_candid A20, sg_uf A2 ), Apuracoes ( nu_candid, an_eleicao N4, sg_uf, qt_votos N9 ), Candidaturas ( nu-candid, an_eleicao, sg_partido A3 , cd_cargo N2 ), Cargos ( cd_cargo N2, no_cargo A20 )
30) Utilizando SQL, criar as tabelas Candidatos e Candidaturas, indicando PK, FKs ( não se esqueça da integridade referencial ! ). Para as colunas numéricas, utilizar o tipo que possibilite economia de armazenamento. Suponha que as duas outras tabelas já estejam criadas.
31) Utilizando SQL: a) Obter os dados dos candidatos nascidos em “SP”; b) Qual a soma total de votos obtidos por cada candidato ( somente o número do mesmo ), nas eleições de 2002 ? c) Obter os nomes dos candidatos do “PRR” nas eleições de 1998; d) Qual a votação de cada candidato à “presidente”, em seu estado natal, nas eleições de 1994 ?
32) Utilizando SQL: a) Escolha três tabelas e inclua uma linha em cada uma delas ( Atenção ! A sequência de inclusão deve respeitar a integridade referencial entre as tabelas ! ); b) Foi solicitada a recontagem de votos no estado RS, nas eleições de 1994 e, com isso, o candidato número 4562 recebeu mais 4500 votos e o de número 3465, mais 1200. Atualize a(s) tabela(s) correspondente(s).