Bancos de dados para concursos Questões comentadas Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Prefácio Banco de Dados é um dos conceitos mais importantes de Ciência da Computação. Ele agrupa informações utilizadas para um mesmo m, ou melhor, podemos entender um banco de dados como um conjunto de informações estruturadas e que podem ser organizadas para facilitar operações como inserção, busca e remoção. Em geral, um software é responsável em gerenciar a estrutura dessas informações e as operações que nelas possam ser realizadas. Devido a sua grande importância, torna-se, sem dúvida, um dos assuntos mais cobrados nos concursos de TI. Ligado na importância do assunto, o Grupo Handbook de TI preparou este volume, que traz uma série de questões comentadas sobre Banco de Dados para você se preparar muito bem nessa área. Bons estudos, Grupo Handbook de TI Página 1 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Direitos Autorais Este material é registrado no Escritório de Direitos Autorais (EDA) da Fundação Biblioteca Nacional. Todos os direitos autorais referentes a esta obra são reservados exclusivamente aos seus autores. Os autores deste material não proíbem seu compartilhamento entre amigos e colegas próximos de estudo. Contudo, a reprodução, parcial ou integral, e a disseminação deste material de forma indiscriminada através de qualquer meio, inclusive na Internet, extrapolam os limites da colaboração. Essa prática desincentiva o lançamento de novos produtos e enfraquece a comunidade concurseira Handbook de TI. A série Handbook de Questões de TI Comentadas para Concursos Além do Gabarito produção independente e contamos com você para mantê-la sempre viva. Grupo Handbook de TI Página 2 de 120 www.handbookdeti.com.br é uma Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Canais de Comunicação O Grupo Handbook de TI disponibiliza diversos canais de comunicação para os concurseiros de TI. Loja Handbook de TI Acesse a nossa loja virtual em http://www.handbookdeti.com.br Serviço de Atendimento Comunique-se diretamente conosco através do e-mail [email protected] Twitter do Handbook de TI Acompanhe de perto promoções e lançamentos de produtos pelo nosso Twitter com/handbookdeti Página 3 de 120 www.handbookdeti.com.br http://twitter. Handbook de Questões de TI Comentadas para Concursos 1. Volume questões de TI Assuntos relacionados: Banco de Dados, SGBD, Dicionário de Dados (DD), Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 34 O catálogo (ou dicionário de dados) de um Sistema Gerenciador de Bancos de Dados Relacional (a). visa a propiciar o acesso rápido a dados com um determinado valor. (b). é um item opcional do banco de dados, que pode ser removido caso o usuário deseje. (c). é raramente utilizado, sendo sua organização pouco inuente no desempenho do sistema. (d). contém informações descritivas sobre os diversos objetos do sistema. (e). tem seus dados organizados segundo um esquema hierárquico, para maior eciência no acesso. Solução: O dicionário de dados (DD) é a parte do sistema gerenciador de bancos de dados (SGBD) responsável por armazenar informações sobre a estrutura geral do banco de dados, incluindo cada um dos seus elementos de dados. Tais informações são conhecidas como metadados. Diz-se que o DD é um banco de dados sobre o banco de dados. No contexto dos bancos de dados relacionais, exemplos de elementos de dados são tabelas, colunas, relacionamentos, índices, entre outros. No DD são armazenados os nomes das tabelas, os relacionamentos entre elas, bem como os nomes das colunas, os tipos e os domínios de dados. Além de informações estruturais, o DD também armazena informações de segurança, que indicam as permissões de acesso aos elementos de dados, assim como informações físicas, indicando onde e como os dados são armazenados. Elementos como funções e stored procedures também são armazenados nos dicionários de dados do SGBD. As implementações de dicionário de dados podem variar de acordo com a tecnologia do SGBD. No caso dos bancos de dados relacionais, os dicionários de dados, geralmente, são implementados como tabelas. A forma como essas tabelas são indexadas e organizadas em disco é fator fundamental para o desempenho do banco de dados, pois elas são acessadas na maior parte das operações realizadas pelos SGBD. Página 4 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 2. Volume questões de TI Assuntos relacionados: Banco de Dados, Oracle, Banca: FCC Instituição: TRT 15a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2009 Questão: 30 Cada database Oracle tem I um ou mais datales. II um control le. III um conjunto de dois ou mais redo log les. Está correto o que consta em (a). I, II e III. (b). I, somente. (c). II, somente. (d). I e II, somente. (e). I e III, somente. Solução: A resposta da questão é a alternativa A. Primordialmente, um banco de banco Oracle é formado por três tipos de arquivos que são: datales, redo log les e control les. Um banco de dados Oracle contém uma ou mais unidades lógicas de armazenamento chamadas tablespaces, que coletivamente armazenam os dados do banco de dados. Cada tablespace, por sua vez, consiste de um ou mais arquivos chamados datales, que são arquivos físicos estruturados de acordo com o sistema operacional em que o Oracle está rodando. Os Redo Log Files armazenam os logs do sistema. Esse arquivo consiste de um buer circular assim como o redo log buer, que é mantido em memória pelo Oracle. A função primária dos redo log les é armazenar toda e qualquer mudança realizada nos dados do banco de dados. Se houver alguma falha, como o corrompimento de um datale, as informações podem ser recuperadas utilizando o redo log les e os datales de backup. O Oracle grava os redo log les de forma circular. Isto signica que, quando o arquivo redo log le atual ca cheio o banco de dados passa para o próximo arquivo redo. Quando o último arquivo do redo log le for preenchido o banco de dados volta para o primeiro, apagando informações já existentes e continuando o ciclo. Para que não se percam informações quando o ciclo for reiniciado, os arquivos de redo são arquivados periodicamente. A quantidade de arquivos de redo utilizados e a frequência do processo de arquivamento devem ser denidas de acordo com as características do banco de dados, de modo que dados não sejam perdidos e nem seja prejudicado o desempenho do sistema. Já os Control Files servem para descrever a estrutura e o status do banco de dados. São eles que contém a identicação dos arquivos de log e de dados, o nome do banco e informações de sincronismo entre os arquivos que o compõe. Como regra geral, cada banco de dados Oracle possui um único control le associado. No entanto, o Oracle possui um recurso chamado multiplexed control les, que permite o armazenamento de múltiplas cópias do control le Página 5 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI em vários discos diferentes, com o objetivo proporcionar redundância. Embora na arquitetura do Oracle o banco de dados seja composto somente por esses três arquivos, uma série de outros arquivos são importantes para colocar uma instância no ar. Exemplos desses arquivos são: • Parameter File: Arquivo texto que contém todos os parâmetros necessários para colocar uma instância do Oracle no ar, por exemplo, quantidade de memória alocada para o SGA, nome e localização de arquivos de controle, tamanho de buers e de blocos etc; • Alert File: Arquivo de log onde são registrados os erros ocorridos (processo, blocos corrompidos, deadlock etc.), tarefas administrativas além dos valores de parâmetros de inicialização no momento em que a instância é colocada no ar; • Trace File: Arquivo de log onde são armazenadas informações detalhadas sobre os problemas ocorridos. A utilização desse arquivo é opcional. Página 6 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 3. Volume questões de TI Assuntos relacionados: Banco de Dados, Oracle, Banca: FCC Instituição: TRT 15a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2009 Questão: 31 São apenas tipos de objetos de um schema Oracle: (a). table, index, cluster e prole. (b). table, index, cluster e view. (c). table, tablespace, index e cluster. (d). tablespace, index, cluster e directory. (e). tablespace, index, cluster e view. Solução: Conceitualmente, um schema é uma estrutura lógica, criada pelos usuários, utilizada para conter ou referenciar os seus dados. É importante lembrar que, boa parte, mas nem todos SGBDs, utilizam o conceito de schema. No caso do Oracle, exemplos de objetos que são armazenados em um schema são tabelas, visões, índices e clusters. No Oracle, não há relação entre os tablespaces e o schema, de modo que objetos do mesmo schema podem estar em diferentes tablespaces, e um único tablespace podem conter objetos de diferentes schemas. Portanto, a resposta da questão é a alternativa B. Agora, vamos aproveitar a questão para rever algumas denições importantes sobre os bancos de dados Oracle. • Table Uma table (tabela) é uma unidade básica de armazenamento do banco de dados Oracle, e são elas que contém possuem todos os dados acessíveis pelos usuário. Cada tabela é formada por um conjunto de colunas, cada um uma delas com um nome (ID, FULLNAME, BIRTHDAY etc) e um tipo de dado (NUMBER, VARCHAR2, DATE etc) associados. Uma linha (row) da tabela é formada pelas informações das colunas e corresponde a um registro único do banco de dados. Os usuários podem ainda especicar regras, chamadas restrições de integridade, para cada uma das colunas das tabelas. Um exemplo típico de regra é restrição de integridade NOT NULL, que força a coluna a conter um valor em todas as linhas. • Views As views (visões) são apresentações customizadas de dados de uma ou mais tabelas ou outras views. Um view pode ser considerada uma query de armazenamento. De modo geral, as views não contém dados, sendo os dados por ela apresentados derivados das chamadas base tables (tabelas base). Existem tipos especiais de views, as materialized views, que contém dados de fato. Esse tipo de view geralmente é utilizada para aumentar o desempenho de determinadas consultas. As views são utilizadas geralmente para responder a consultas, e também para proporcionar um nível adicional de segurança, restringido acesso a determinados conjunto de Página 7 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI linhas e colunas de uma tabela. No entanto, as views também podem ser denidas para aceitar inserções, atualizações e exclusões. Nesses casos, todas as operações efetuadas na view afetam também as base tables. • Index Os indexes (índices) são estruturas de dados utilizadas para melhorar o desempenho das operações sobre uma tabela do banco de dados. Os índices podem ser criados com base em uma ou mais colunas da tabela, sendo essa denição baseada nas consultas que o SGBD terá que responder com eciência. No Oracle, os índices mais populares são baseados em árvores B (b-trees) e nos mapas de bits (bitmaps), sendo que a melhor escolha depende do tipo de dado a ser indexado e, primordialmente, do perl de operações da aplicação. Um ótimo teste compara- tivo entre os índices b-tree e bitmap do Oracle pode ser vista no estudo disponível em http://www.oracle.com/technology/pub/articles/sharma_indexes.html. Embora sirvam para aumentar o desempenho das operações sobre as tabelas, o que é positivo, os índices também possuem aspectos negativos, como o consumo de espaço e a diminuição do desempenho das operações de inserção dados, já que, além das tabelas, os índices precisam ser atualizados. Portanto, os índices não devem ser utilizados indiscriminadamente, mas apenas nos casos em que os seus benefícios superem seus aspectos negativos. • Cluster Os clusters (agrupamentos) são grupos de duas ou mais tabelas que são sicamente armazenados próximas umas das outras, de modo a proporcionar maior desempenho das operações que referenciem ambas as tabelas. Assim como os índices, os clusters não afetam a lógica da aplicação. O fato de uma tabela pertencer ou não a um cluster é transparente para o usuário, sendo relevante apenas para ns de desempenho da aplicação. Por m, vamos falar um pouco sobre o conceito de Proles (pers) do Oracle, que foi mencionado na alternativa A da questão. O prole é um recurso do Oracle que permite denir limites de utilização de recursos do sistema e parâmetros de segurança para os usuários do SGBD. Quando um usuário é criado, por padrão ele recebe o prole Default, que dá acesso ilimitado aos recursos do sistema. Para limitar o acesso do usuário aos recursos, é necessário criar um prole e associá-lo ao usuário. Alguns exemplos de parâmetros (cujos nomes são auto-explicativos) que podem ser controlados através de prole são mostrados a seguir. Página 8 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Parâmetros de Recursos [SESSIONS_PER_USER [CPU_PER_SESSION [CPU_PER_CALL [CONNECT_TIME [IDLE_TIME [LOGICAL_READS_PER_SESSION [LOGICAL_READS_PER_CALL [COMPOSITE_LIMIT [PRIVATE_SGA n|UNLIMITED|DEFAULT] n|UNLIMITED|DEFAULT] n|UNLIMITED|DEFAULT] n|UNLIMITED|DEFAULT] n|UNLIMITED|DEFAULT] n|UNLIMITED|DEFAULT] n|UNLIMITED|DEFAULT] n|UNLIMITED|DEFAULT] n [K|M]|UNLIMITED|DEFAULT] Parâmetros de Password [FAILED_LOGIN_ATTEMPTS expr|UNLIMITED|DEFAULT] [PASSWORD_LIFE_TIME expr|UNLIMITED|DEFAULT] [PASSWORD_REUSE_TIME expr|UNLIMITED|DEFAULT] [PASSWORD_REUSE_MAX expr|UNLIMITED|DEFAULT] [PASSWORD_LOCK_TIME expr|UNLIMITED|DEFAULT] [PASSWORD_GRACE_TIME expr|UNLIMITED|DEFAULT] [PASSWORD_VERIFY_FUNCTION function_name|NULL|DEFAULT] Página 9 de 120 www.handbookdeti.com.br Volume questões de TI Handbook de Questões de TI Comentadas para Concursos 4. Volume questões de TI Assuntos relacionados: Banco de Dados, Oracle, Banca: FCC Instituição: TRT 15a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2009 Questão: 32 NÃO é um processo do tipo background contido em uma instância Oracle: (a). system monitor process. (b). checkpoint process. (c). archiver process. (d). server process. (e). recoverer process Solução: O Oracle possui três tipos básicos de processo que são: processos User, processos server e processos em background. Com isso, a resposta da questão é alternativa D, server process. Agora, vamos conhecer um pouco mais dos processos do Oracle. Os processos server recebem as requisições dos processos user, realizam o parse das instruções SQL, vericam as permissões de acesso do usuário, traz os dados do disco para o DBBC, caso necessário, e retorna os dados para o usuário. Um processo server pode ser dedicado para um processo user (dedicated server process) ou compartilhado entre múltiplos processos user (shared server process). Os processos server compartilhados só são possíveis em sistemas multithreaded. As funções desempenhadas pelos processos user são se conectar com os processos server, enviar instruções SQL e receber os resultados. Caso o servidor suporte processos server compartilhados, diversos processos server podem ser atendidos por um mesmo processo server. Já os os processo em background não realizam nenhuma comunicação com os processos user. Os processos em backgound são responsáveis pelas tarefas de apoio para garantir o funcionamento do sistema de gerenciamento de banco de dados como um todo. Um sistema Oracle tem inúmeros processos em background, porém apenas 4 deles são obrigatórios. São eles: • Process Monitor (PMON): Realiza a recuperação quando algum processo falha, além de liberar o cache, locks e demais recursos que o processo estava utilizando; • System Monitor (SMON): Realiza o processo de recuperação da instância durante o processo de inicialização, limpa segmentos temporários que não estão mais em uso, recupera transações terminadas de forma anormal e realiza desfragmentação nos arquivos de dados para facilitar a alocação; • Database Writer (DBWR): A função principal do DBWR é escreve os blocos de dados modicados (dirty) do DBBC para o disco. Isso é feito nas seguintes situações: (i) quando a lista de blocos modicados atinge um tamanho congurado; (ii) quando o processo percorre um quantidade congurada de blocos e não encontra nenhum bloco livre; (iii) quando ocorre um timeout; (iv) quando ocorre um checkpoint ou (v) quando Página 10 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI o DBWR recebe um sinal do processo LGWR. Dessa forma, o processo DBWR além de garantir que as alterações feitas em buer serão persistidas, também gerencia o espaço em buer para melhorar o desempenho do banco; • Log Writer (LGWR): é o responsável por copiar as informações do redo log buer para o o redo log le (arquivo de log com a mesma estrutura do redo log buer). O LGWR também é responsável por atualizar os headers dos arquivos de dados quando ocorre um checkpoint. O LGWR é disparado nas seguintes situações: (i) quando ocorre um commit; (ii) quando ocorre um checkpoint; (iii) quando ocorre um timeout ou (iv) quando o redo log buer atinge um terço de sua capacidade. Além desses quatro, o Oracle possui uma série de outros processos em background que são de instalação e uso opcionais. Os mais importantes são os seguintes: • CKPT: Atualiza os headers dos arquivos de dados quando ocorre um checkpoint. A utilização desse processo pode ajudar a melhorar o desempenho do sistema permitindo que o processo LGWR se concentre apenas na cópia do redo log buer para o disco; • RECO: Responsável pela recuperação de falhas envolvendo transações distribuídas. Esse processo é necessário quando o Oracle está rodando de forma distribuída; • ARCH: Responsável por copiar o redo log le (que é um buer circular) para um dispositivos de armazenamento oine para que os logs não sejam perdidos; • Pnnn: Processo responsável pela execução de consultas paralelas; • SNPn: Controla a replicação de objetos dos banco de dados em outro site. Essas cópias são chamadas snapshots. Esse processo pode ser escalonado para executar periodicamente; • LCKn: Realiza o controle de locks entre múltiplas instâncias; • Dnnn: Esse processo funciona como um dispatcher quando o sistema está utilizando processos server compartilhados. é necessário um dispatcher para cada protocolo de comunicação utilizado. Página 11 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 5. Volume questões de TI Assuntos relacionados: Oracle, SQL, Banca: FCC Instituição: TRT 16a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2009 Questão: 25 Os programas PL/SQL são constituídos por blocos que executam operações lógicas e cada bloco tem três partes que denem as: I. declarações de variáveis e itens. II. instruções procedurais e SQL. III. instruções de tratamento de erros. No bloco é obrigatória a presença da seção que se arma em (a). I e II, apenas. (b). II e III, apenas. (c). I, II e III (d). I, apenas. (e). II, apenas. Solução: A linguagem PL/SQL é uma linguagem procedural da Oracle. Ela é uma extensão da linguagem SQL padrão. Ela serve para criar programas complexos e poderosos, não só para o banco de dados, mas também em diversas ferramentas Oracle. Os blocos de PL/SQL são processados por um uma PL/SQL Engine, que ltra os comandos SQL e os manda individualmente para o SQL Statement Executor no Oracle Server. A unidade básica de um programa PL/SQL é um bloco, que possui a seguinte estrutura: DECLARE Seção para declaração de variáveis, tipos e subprogramas locais. BEGIN Seção executável. Nesta seção, cam as instruções procedurais e SQL. Esta é a única seção do bloco que é indispensável e obrigatória. EXCEPTION Seção onde cam as instruções de tratamento de erro. Por denição, apenas a seção executável é requerida. As outras seções são opcionais. Logo, somente a armativa II está correta e alternativa a ser marcada é a letra E. Aprofundando mais na linguagem, podemos dizer que as únicas instruções SQL que são permitidas em um programa PL/SQL são SELECT, INSERT, UPDATE, DELETE e várias Página 12 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI outras instruções de manipulação de dados e de controle de transação. Além disso, PL/SQL não é caso sensitivo, ou seja, não diferencia maiúsculas de minúsculas. Instruções de denição de dados como CREATE, DROP ou ALTER não são permitidas. A seção executável, citada anteriormente, também contém construções tais como atribuições, desvios, loops, chamadas a procedimentos e triggers. A capacidade de usar laços(loops) é uma das principais diferenças entre SQL e PL/SQL. A instrução SELECT no PL/SQL funciona apenas se o resultado da consulta contém uma única tupla. Se a consulta retorna mais do que uma tupla, será necessário usar um cursor. Um cursor é uma variável que itera sobre as tuplas de alguma relação. Essa relação pode ser uma tabela armazenada ou pode ser a resposta para alguma consulta. Enm, a linguagem PL/SQL possui mais recursos que o padrão e visa fornecer mais exibilidade e aproveita o poder das linguagens procedurais para o desenvolvimento de programas complexos que envolvam acesso ao banco de dados Oracle. Página 13 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 6. Volume questões de TI Assuntos relacionados: Banco de Dados, Commit, Savepoint, Rolling Back, Rolling Forward, Banca: FCC Instituição: TRT 18a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2008 Questão: 46 Antes do Oracle terminar uma transação deve acontecer explicitamente uma operação de (a). commit ou savepoint, apenas. (b). commit ou rolling back, apenas. (c). commit ou rolling forward, apenas. (d). rolling back ou rolling forward, apenas. (e). commit, rolling back, rolling forward ou savepoint. Solução: Vamos, primeiramente, apresentar o que cada operação signica: • commit: operação que efetiva, no banco de dados, as alterações (insert, delete e update) realizadas em uma transação. Ou seja, as alterações de uma transação somente são enxergadas por outras transações de outras sessões após um commit. Veja abaixo um exemplo de utilização deste operador: SQL> insert into alunos (matricula, nome) values (1, `Ricardo Vargas`); 1 row created. SQL> commit; Commit complete. • savepoint: rollback. marca um ponto (estado) na transação para onde se pode voltar com um Portanto, em transações mais complexas, se utiliza alguns savepoints para marcar pontos para os quais seja possível realizar rollback. Dessa forma, estrategicamente, apenas parte das alterações da transação é desfeita. Veja abaixo um exemplo de utilização deste operador: SQL> insert into alunos (matricula, nome) values (2, `Diogo Gobira`); 1 row created. SQL> savepoint estado_1; Savepoint created. SQL> insert into alunos (matricula, nome) values (3, `André Camatta`); 1 row created. SQL> savepoint estado_2; Savepoint created. • rolling back: em uma transação sem savepoints, esta operação desfaz todas as alte- rações realizadas. Já em um transação com savepoints, um rollback desfaz todas as alterações realizadas após o último savepoint (volta-se ao estado do último savepoint). Veja abaixo um exemplo de utilização deste operador: SQL> rollback to estado_1; Rollback complete. Página 14 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos • rolling forward: Volume questões de TI é um recurso utilizado em caso de falha de banco de dados para que o seu estado imediatamente antes da falha seja restabelecido. Durante o funcionamento normal de um banco de dados, todas as informações sobre operações são armazenadas em arquivos do tipo RedoFiles. Em situações de falha, logo após o banco de dados voltar a operar, esses arquivos são lidos e, então, as operações são refeitas. Como se pode concluir dos itens acima, as operações savepoint e rolling forward não são obrigatórios até o término de cada transação. Isso porque savepoint é opcional e rolling forward somente é utilizado em casa do falha de bando de dados. Tendo em vista o exposto, para que toda operação seja atômica e o banco de dados seja mantido consistente, é necessária ao nal de cada transação a execução de um commit ou um rollback. Portanto, a alternativa que deve ser escolhida é a letra B. Página 15 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 7. Volume questões de TI Assuntos relacionados: Banco de Dados, PL/SQL, Banca: FCC Instituição: TRT 18a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2008 Questão: 47 A estrutura de controle Iteração pode ser utilizada em PL/SQL com os comandos (a). LOOP, CASE-LOOP, WHILE-LOOP e FOR-LOOP. (b). LOOP, CASE-LOOP e WHILE-LOOP. (c). LOOP, CASE-LOOP e FOR-LOOP. (d). CASE-LOOP, WHILE-LOOP e FOR-LOOP. (e). LOOP, WHILE-LOOP e FOR-LOOP. Solução: PL/SQL é o acrônimo para Procedural Language/Structured Query Language. Ou seja, PL/SQL é uma linguagem procedural que estende SQL. Ela foi desenvolvida pela Oracle Corporation e, portanto, é utilizada em banco de dados Oracle. O surgimento da PL/SQL aconteceu em 1991 para o Oracle 6.0. Antes disso, os desen- volvedores tinham que embutir instruções do tipo SQL nos códigos-fonte procedurais (por exemplo, dentro de códigos C). Com o aparecimento da PL/SQL isso mudou. Todo o código procedural e também as instruções relacionadas ao banco podem ser escritos diretamente em PL/SQL. Essa linguagem suporta variáveis, condições, loops, arrays, exceções, funções e procedimentos. A estrutura básica do PL/SQL é chamada de bloco. Portanto, um programa escrito nessa linguagem é composto por blocos. Geralmente, um bloco é desenvolvido para efetuar uma ação lógica no programa. Cada bloco é estruturado da seguinte forma: DECLARE Seção onde são feitas as declaradas locais: subprogramas e variáveis e seus tipos. Esta seção não é obrigatória. BEGIN Seção que contém o que será executado de fato: instruções procedurais e SQL. Esta seção é obrigatória. EXCEPTION Seção onde ficam as instruções de tratamento de erro. Esta seção também não é obrigatória. END Um exemplo bem básico é apresentado a seguir: DECLARE i NUMBER := 1; BEGIN LOOP Página 16 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI INSERT INTO T1 VALUES(i,i); i := i+1; EXIT WHEN i>100; END LOOP; END; Especicamente com relação a estrutura de controle do tipo iteração, PL/SQL possui os seguintes recursos: LOOP, WHILE, FOR e Cursor FOR. Os três primeiros são bem conhecidos e geralmente estão presentes nas linguagem procedurais. Já o quarto é um tipo especial de FOR em que uma variável assume o lugar de registros de uma relação. Abaixo um exemplo para facilitar o entendimento. DECLARE CURSOR cursor_person IS SELECT person_code FROM people_table; BEGIN FOR RecordIndex IN cursor_person LOOP DBMS_OUTPUT.PUT_LINE(RecordIndex.person_code); END LOOP; END; Nesta questão, a alternativa E é a única que traz apenas comandos PL/SQL relacionados a controle de iteração. Portanto, é essa a alternativa correta. Página 17 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 8. Volume questões de TI Assuntos relacionados: Banco de Dados, Triggers, Gatilhos, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas - Infraestrutura Ano: 2008 Questão: 59 Para os gatilhos (triggers) utilizados em bancos de dados, são feitas as armativas a seguir. I - Os triggers podem ser congurados para disparar antes ou após a execução de uma ação de Update, Delete ou Insert em uma tabela. II - A cláusula When no comando Create Trigger é válida somente para triggers de nível de linha. III - Os chamados triggers autônomos são executados como uma transação autônoma, sendo que as modicações no banco de dados por eles efetuadas podem ser conrmadas ou revertidas, independente do estado da instrução que desencadeou a chamada do trigger. Está(ão) correta(s) as armativas (a). I, apenas. (b). II, apenas. (c). I e II, apenas. (d). II e III, apenas. (e). I, II e III. Solução: Um gatilho (trigger) é um tipo especial de procedimento armazenado (stored procedure ) que está associado a uma tabela, e é executado pelo sistema de banco de dados automaticamente quando um determinado evento ocorre para a tabela a qual o gatilho está associado. Para um gatilho ser implementado em um banco de dados, duas exigências devem ser satisfeitas: i) especicar as condições sob as quais o gatilho deve ser executado; e ii) especicar as ações que devem ser realizadas quando um gatilho for disparado. Por exemplo, suponha que em vez de permitir saldos negativos em uma conta corrente, o banco crie condições para que a conta seja zerada e o saldo negativo seja transferido para a conta empréstimo de mesmo número que a conta corrente. Neste exemplo, a condição para o disparo do gatilho é o saldo negativo da conta corrente, e a ação a ser realizada é a transferência do saldo negativo para a conta empréstimo. CREATE [DEFINER = {user | CURRENT_USER}] TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt Tabela 1: exemplo de CREATE TRIGGER em MySQL. Os eventos no banco de dados que ativam um gatilho são os comandos de Linguagem de Manipulação de Dados (DML - Data Manipulation Language ): Página 18 de 120 www.handbookdeti.com.br INSERT, DELETE e UPDATE. Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Um gatilho é criado utilizando a função CREATE TRIGGER que especica a tabela a qual está associado, a condição para ocorrência do evento e o tipo de ação (nome da função) que será executada com o evento. A sintaxe da função CREATE TRIGGER no MySQL e no Postgree é apresentada na Tabela 1 e na Tabela 2, respectivamente. Note que os sistemas de bancos de dados possuem seus próprios recursos de gatilho não padronizados. A seguir, explicamos cada um dos parâmetros: • DEFINER: cláusula opcional para denir o usuário para criar o gatilho; • trigger_name: dene o nome do gatilho; • trigger_time: dene se o gatilho será ativado antes (BEFORE) ou depois (AFTER) do comando que o disparou; • trigger_event: dene qual será o evento: INSERT, DELETE ou UPDATE. Podem ser especicados vários eventos utilizando OR; • table_name: nome da tabela cujos eventos podem disparar o gatilho; • trigger_stm: uma função fornecida pelo usuário, declarada como não recebendo nenhum argumento e retornando o tipo TRIGGER, que é executada quando o gatilho dispara; • FOR EACH ROW / FOR EACH STATEMENT: especica se o procedimento do gatilho deve ser disparado uma vez para cada linha afetada pelo evento do gatilho, ou apenas uma vez por comando SQL; • arguments: uma lista opcional de argumentos, separados por vírgula, a serem fornecidos para a função quando o gatilho for executado. O gatilho pode ser especicado para disparar antes (BEFORE) de realizar uma operação na linha (antes das restrições serem vericadas e os respectivos comandos de DML serem executados), ou após a operação estar completa (após as restrições serem vericadas e os respectivos comandos terem completado). Se o gatilho for disparado antes do evento, o gatilho pode fazer com que a operação não seja realizada para a linha corrente, ou pode modicar a linha sendo inserida. Se o gatilho for disparado depois (AFTER) do evento, todas as mudanças, incluindo a última inserção, atualização ou exclusão, estarão visíveis para o gatilho. Um gatilho que está marcado FOR EACH ROW é chamado uma vez para cada linha que a operação modica. Diferentemente, um gatilho que está marcado FOR EACH STATEMENT somente executa uma vez para uma determinada operação, não importando quantas linhas foram modicadas. Em particular, uma operação que não modica nenhuma linha ainda assim resulta na execução de todos os gatilhos FOR EACH STATEMENT aplicáveis. CREATE TRIGGER trigger_name {BEFORE | AFTER} {trigger_event [OR...]} ON table_name [ FOR [ EACH ] { ROW | STATEMENT }] EXECUTE PROCEDURE trigger_stm (arguments) Tabela 2: exemplo de CREATE TRIGGER em Postgree. Os gatilhos são usados com enorme eciência para impor e manter integridade referencial de baixo nível, e não para retornar resultados de consultas. A principal vantagem é que eles podem conter uma lógica de processamento complexa. Os sistemas de bando de dados possuem algumas restrições em relação aos gatilhos: Página 19 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI • Não se pode chamar diretamente um gatilho; • Não é permitido iniciar ou nalizar transações em meio a execução de um gatilho; • Não se pode criar um gatilho para uma tabela temporária ou para uma visão; • Não é possível criar gatilhos para o comando SELECT, pois este comando não modica nenhuma linha. Com base no explicado anteriormente, analisaremos as armações da questão: I - Os triggers podem ser congurados para disparar antes ou após a execução de uma ação de UPDATE, DELETE ou INSERT em uma tabela. Isso é especicado no comando CREATE TRIGGER com os parâmetros BEFORE ou AFTER, respectivamente. Portanto, armativa correta. II - Conforme apresentamos, a cláusula WHEN não está presente no comando CREATE TRIGGER para o MySQL e PostgreeSQL. Entretanto, no Oracle SQL e SQLite é possível utilizar a cláusula WHEN no comando CREATE TRIGGER. Quando a condição da cláusula WHEN é válida, o gatilho é executado para cada linha modicada, isto é, a execução do gatilho ocorre em nível de linha. Portanto, alternativa correta. III - Os triggers autônomos (autonomous triggers ) estão presentes no sistema de banco de dados Oracle SQL. Diferente dos triggers normalmente existentes nos sistemas de banco de dados, os triggers autônomos são executados como uma transação autônoma. Por meio das transações autônomas, um trigger pode conter comandos de controle de transação como COMMIT e ROLLBACK. Com os comandos COMMIT E ROLLBACK as modicações no banco de dados efetuadas por um gtilho podem ser conrmadas ou revertidas, independente do estado da instrução que desencadeou a chamada do trigger. Os triggers autônomos também podem executar comandos de Linguagem de Denição de Dados( DDL - Language ). Data Denition Portanto, armativa correta. Todas as armativas feitas estão corretas. Logo, a resposta desta questão é a Página 20 de 120 www.handbookdeti.com.br letra E. Handbook de Questões de TI Comentadas para Concursos 9. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Transact SQL, Banca: ESAF Instituição: Superintendência de Seguros Privados (SUSEP) Cargo: Analista Técnico da SUSEP - Tecnologia da Informação Ano: 2010 Questão: 33 Em relação às operações em bancos de dados SQL, é correto armar que (a). o Transact-SQL não permite alterar a credencial de login. (b). o Transact-SQL permite redenir a senha desde que seja fornecida a senha antiga. (c). para executar consultas de Transact-SQL pode-se emitir instruções ao se iniciar o SQL/CMD. (d). pode-se criar bancos de dados utilizando-se Transact-SQL, por meio do comando START DATABASE. (e). pode-se restaurar bancos de dados utilizando-se Transact-SQL, por meio dos comandos REUSE DATABASE e RESET BLOG. Solução: A Structured Query Language, ou SQL é uma linguagem de banco de dados desenvolvida para gerenciar dados em Sistemas de Gerência de Banco de Dados Relacional (RDBMS), e foi originalmente baseada em álgebra relacional. Seu escopo inclui inserção, remoção, consulta de dados, criação e modicação de esquemas e controle de acesso a dados. SQL é uma linguagem declarativa, ao contrário de linguagens de programação como C ou Pascal que são imperativas. Apesar de haver padrões para o SQL (ANSI SQL92, SQL99 por exemplo), a maioria das implementações utilizam extensões que incluem funcionalidades de linguagens de programação procedural, como controle de uxo, por exemplo. Transact SQL ou TSQL é a extensão proprietária Microsoft e Sybase do SQL. Para a utilização do T-SQL é necessário o Microsoft SQL Server. Toda aplicação que se comunique com um SQL Server utiliza instruções T-SQL. Entre as funcionalidades adicionais que o Transact SQL oferece em relação ao SQL, pode-se citar: Controle de uxo, variáveis locais, funções adicionais para tratamento de strings, processamento de datas, funções matemáticas etc. a) ERRADO: uma credencial é um registro que contém informações de autenticação necessárias para se conectar a serviços fora do SQL Server. É criada pelo comando CREATE CREDENTIAL e as propriedades das credenciais podem ser alteradas pelo comando ALTER CREDENTIAL. Uma credencial pode ser mapeada para um login do SQL Server através do comando CREATE LOGIN; b) ERRADO: transact-SQL permite redenir a senha através da instrução ALTER LOGIN. Para alterar senha de outros usuários é necessário a permissão ALTER ANY LOGIN. Se o usuário atual tiver permissão CONTROL SERVER, ele não precisa informar o antigo password; c) CORRETO: o SQL/CMD é um utilitário que permite que instruções SQL e TSQL sejam escritas e enviadas ao servidor SQL Server, inclusive consultas; Página 21 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos d) Volume questões de TI ERRADO: cria-se banco de dados através do comando CREATE DATABASE. START DATABASE não é um comando T-SQL; e) ERRADO: o comando para restaurar backups é o RESTORE. Ele permite restaurar banco de dados inteiros, fazer restaurações parciais, apenas arquivos ou grupo de arquivos de banco de dados. REUSE DATABASE e RESET BLOG não são comandos T-SQL. Página 22 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 10. Volume questões de TI Assuntos relacionados: Banco de Dados, Modelo Entidade-Relacionamento, Banca: CESGRANRIO Instituição: Petrobras Cargo: Analista de Sistemas - Eng. de Software Ano: 2008 Questão: 24 Um modelo entidade-relacionamento foi reestruturado conforme mostrado na gura acima. Concluiu-se que todos os usuários eram funcionários, embora nem todos os funcionários fossem usuários. O modelo relacional derivado desse modelo conceitual possuía originalmente duas variáveis de relação básicas, com os mesmos nomes das entidades correspondentes, tendo ambas EMAIL como chave primária. Considerando que a variável de relação FUNCIONARIO não será modicada e que a independência de dados lógica será honrada, a variável de relação USUARIO (a). terá que manter todos os seus atributos originais. (b). dispensará o uso de chaves candidatas. (c). será substituída por uma variável de relação básica e uma derivada. (d). será substituída por uma variável de relação básica, apenas. (e). será substituída por uma variável de relação derivada, apenas. Solução: O modelo entidade-relacionamento é um padrão para modelagem conceitual de banco de dados. Na gura da questão, os objetos representados por retângulos são conjuntos de entidades e os objetos representados por elipses são atributos. Página 23 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Uma entidade é um objeto que pode ser identicado de forma unívoca a todos os outros objetos. A entidade pode representar tanto algo concreto, como uma pessoa, ou algo abstrato, como um empréstimo, por exemplo. Um conjunto de entidades reúne todas as entidades de um mesmo tipo, ou seja, que possuem as mesmas propriedades: atributos. Os atributos são propriedades que descrevem cada entidade de um conjunto de entidades. Dizemos ainda que cada entidade pode ter seu próprio valor para cada atributo. Exemplo: uma determinada entidade que representa uma pessoa pode ter o valor João Assis para o atributo nome e o número 2367727 para o atributo número de inscrição. O modelo entidade-relacionamento pode descrever diversos outros objetos importantes para a modelagem de banco de dados, como os conjuntos de relacionamentos, os atributos multivalorados e a participação de entidades em um conjunto de relacionamentos. Há, ainda, os conceitos de generalização e especialização. Generalização é o resultado da união de dois ou mais conjuntos de entidades, produzindo um conjunto de entidades de nível mais alto. Por outro lado, especialização é o resultado da separação de um subconjunto de entidades, formando conjuntos de entidades de nível mais baixo. A generalização é usada para enfatizar as semelhanças entre entidades de nível mais baixo e ocultar suas diferenças. A especialização é o inverso: ela enfatiza as diferenças entre as entidades. Verica-se que, no primeiro modelo, existem duas entidades independentes com seus respectivos atributos. A transformação realizada para se chegar ao segundo modelo conceitual nada mais é do que um processo de generalização. Já o modelo relacional ao qual a questão se refere é uma maneira de representar o banco de dados logicamente, e não conceitualmente. No modelo relacional, os dados são representados como relações matemáticas, isto é, como um subconjunto do produto cartesiano de n conjuntos. Na etapa de transformação do modelo conceitual para o modelo lógico, será permitido ao projetista criar um modelo consistente da informação a ser armazenada por meio do processo de normalização, por exemplo. No modelo relacional, uma variável relacional, também conhecida como relvar, é uma variável que representa uma relação. Para tornarmos a explicação bem simples, podemos dizer que uma variável relacional básica representa uma tabela no SQL e uma variável relacional derivada representa uma visão ou o resultado de uma consulta. O modelo relacional derivado do primeiro modelo entidade-relacionamento pode ser descrito da seguinte maneira: Funcionario(email, nome) Usuario(email, nome, login) Segundo o enunciado, após a generalização, a variável de relação Funcionario será mantida sem modicações. Já, para a variável de relação Usuario, criaremos uma nova variável de relação básica da seguinte forma: UsuarioTabela(email, login) Página 24 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Isso pode ser feito, já que, na generalização, foi criado um relacionamento de muitos-paraum com a variável de relação Funcionario. Sendo assim, o campo e-mail será suciente para representar o usuário na variável de relação Funcionario. Note que, dessa maneira, a independência lógica ainda não está honrada, já que a variável de relação UsuarioTabela não possui a informação do atributo nome. Para garantirmos a independência lógica, precisamos criar uma variável relacional derivada que chamaremos de UsuarioVisao ou simplesmente Usuario. No SQL, essa variável de relação representará uma junção das tabelas geradas pelas variáveis de relação básica Funcionario e UsuarioTabela e representará todos os usuários, mas, dessa vez, com o atributo nome advindo da tabela que representa o conjunto de funcionários. Dada as explicações imediatamente acima, a resposta correta é a alternativa C. Página 25 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 11. Volume questões de TI Assuntos relacionados: Banco de Dados, Modelo Entidade-Relacionamento, Banca: FCC Instituição: TRT 2a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2008 Questão: 39 Em um diagrama entidade relacionamento, uma situação de composição tal qual empregado gerencia empregado, geralmente é apresentada como (a). entidade fraca. (b). relacionamento associativo. (c). auto relacionamento. (d). relacionamento interativo. (e). relacionamento restritivo. Solução: A resposta da questão é a alternativa C, auto relacionamento. O Modelo de Entidades e Relacionamentos (MER) é um modelo abstrato cuja nalidade é descrever, de maneira conceitual, os dados a serem utilizados no projeto de um sistema de informação. A principal ferramenta do modelo é o diagrama Entidade Relacionamento. O primeiro conceito fundamental do MER é o de entidade. Uma entidade corresponde à representação de todo e qualquer substantivo, concreto ou abstrato, sobre o qual precisase armazenar e recuperar informações. Em um sistema de vendas, por exemplo, algumas entidades comuns seriam Vendas, Produtos e Clientes. O segundo conceito fundamental é o de relacionamento. mostra como as entidades se relacionam entre si. No MER, um relacionamento Em um sistema de vendas, a entidade Vendas estaria relacionada com a entidade Produtos, bem como com a entidade Clientes. Os auto relacionamentos (também chamados relacionamentos recursivos) são casos especiais onde uma entidade se relaciona com si própria. Apesar de serem relacionamentos muito raros, a sua utilização é muito importante em alguns casos. Os auto relacionamentos podem ser do tipo 1:1, 1:N ou N:M. Exemplos deste relacionamento podem ser encontrados nas chamadas explosões de materiais, nas quais são formados por muitos itens componentes. itens compostos Os itens compostos, por sua vez, podem ser componentes de outros itens maiores. Para exemplicar melhor, vamos utilizar um exemplo concreto. O item automóvel é composto pelo chassis, motor, direção, câmbio etc. O motor, por sua vez, é formado pelo carburador, velas, platinado etc. Esta explosão de composição dos itens pode ser representada por um auto relacionamento N:M da entidade itens, sendo que o papel de um determinado item ora é de componente, ora é de composto. Um outro exemplo típico de auto relacionamento é o gerenciamento de funcionários, trazido na questão. Um gerente nada mais é que um funcionário que possui um relacionamento com Página 26 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI outros funcionários que lhe são subordinados. Esta relação pode ser representada por um auto relacionamento 1:N da entidade funcionários, sendo que o papel de um determinado funcionário ora é de gerente, ora é de subordinado. Página 27 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 12. Volume questões de TI Assuntos relacionados: Banco de Dados, DER, Banca: Cesgranrio Instituição: BNDES Cargo: Analista de Sistemas - Desenvolvimento Ano: 2008 Questão: 48 Um analista de sistemas recebe o seguinte trecho de descrição de um sistema: Uma empresa contrata um prossional para trabalhar em um projeto recebendo um determinado salário. Sabe-se que um projeto pode ter a participação de diversas empresas e que um prossional pode desempenhar várias atividades nesse projeto (p.ex. operador de guindaste e pedreiro). Que modelo ER representa corretamente essa descrição? (O símbolo (*) representa atributo multivalorado). (a). Modelo 1 (b). Modelo 2 (c). Modelo 3 (d). Modelo 4 (e). Modelo 5 Figura 1: Modelos ER Solução: Esta é uma questão polêmica, pois seu enunciado é um tanto quanto pobre de informações. Quando isso acontece, a melhor estratégia é tentar identicar quais alternativas estariam mais erradas e eliminá-las. Uma consideração muito importante para uma resolução consciente desta questão que o Página 28 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI enunciado deveria trazer seria a denição se um prossional pode ser contratado por mais de uma empresa e, por consequência, poder trabalhar em mais de um projeto. Se o candidato zer uma consideração diferente da imaginada pelo autor desta questão, suas chances de acertar esta questão diminuem consideravelmente. Vamos às alternativas. (A) ERRADA Considerando que um determinado prossional pode ser contratado por diferentes empresas para trabalhar em diversos projetos, este modelo é inapropriado. Isso por conta do atri- buto atividade, que está relacionado ao prossional. Em outras palavras, teríamos que um determinado prossional somente poderia exercer as mesmas atividades em todos os seus eventuais contratos, o que não é apropriado. Por outro lado, caso a consideração acima não seja feita, este modelo se mostra adequado, porém limitado. (B) ERRADA A argumentação para esta alternativa é similar à feita na alternativa anterior. Se a con- sideração supracida for feita, um determinado prossional somente poderia ter um único salário para seus eventuais contratos, o que não é apropriado. Caso contrário, o modelo desta alternativa também atende, apesar de ser limitado. (C) e (D) ERRADA Estas deveriam ser as primeiras alternativas a serem eliminadas. Perceba que a relação existente entre os conjuntos de entidades empresa e projeto, denominada possui, não se encaixa na descrição do sistema apresentada no enunciado. (E) CORRETA Esta é a alternativa menos errada e, portanto, a escolha mais segura possível. Como o atributo atividade está associado ao conjunto de relacionamentos contrato, este modelo não se limita ao cenário de que um prossional somente pode ter um contrato para trabalhar em apenas uma empresa para participar de um único projeto. De qualquer forma, cabe ressaltar que o nível de normalização deste modelo não é bom. Em um banco de dados relacional, o conjunto de relacionamentos contrato seria implementado por meio de uma tabela. Imagine o caso em que um prossional execute 5 tarefas em um contrato com uma determinada empresa. Nesse caso, teríamos nessa tabela 5 linhas com os 4 campos com valores repetidos: salário e chaves estrangeiras dos conjuntos de entidades envolvidos. Essa repetição desnecessária de valores pode ser onerosa, mas ela pode ser eliminada com um processo de normalização deste modelo, que resultaria em outro modelo mais adequado. Página 29 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 13. Volume questões de TI Assuntos relacionados: Banco de Dados, Modelo Entidade-Relacionamento, Modelo Relacional, Projeto Lógico de Banco de Dados, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas Pleno - Processos Ano: 2006 Questão: 23 Considere o modelo entidade-relacionamento representado abaixo. Na transformação deste modelo conceitual Entidade-Relacionamento em um modelo lógico relacional, as cardinalidades do relacionamento entre as entidades exercem papel importante. Dado que se deseja gerar um modelo relacional que atenda à terceira forma normal, pode-se armar que sempre darão origem a uma tabela para cada uma das entidades relacionadas os relacionamentos do tipo: (a). (0,n) x (0,n), podendo ou não gerar uma tabela para o relacionamento. (b). (0,1) x (0,n), podendo ou não gerar uma tabela para o relacionamento. (c). (0,1) x (1,1), gerando uma tabela para o relacionamento. (d). (1,n) x (1,n), podendo ou não gerar uma tabela para o relacionamento. (e). (1,1) x (1,n), devendo gerar uma tabela para o relacionamento. Solução: Uma entidade corresponde à representação de todo e qualquer substantivo, concreto ou abstrato, sobre o qual precisa-se armazenar ou recuperar informações. No modelo EntidadeRelacionamento é representado por um retângulo. Já o relacionamento é a forma como os objetos que compõem a realidade se relacionam. É representado por um losango, mas há um conceito importante a ser entendido que é a cardinalidade do relacionamento. Consiste de números cardinais colocados ao lado do nome do relacionamento e dimensiona o número de ocorrências de uma entidade que pode estar envolvido em um relacionamento, sendo útil para extrair daí regras de consistência e integridade dos dados. Existem 3 (três) tipos básicos de relacionamento entre as entidades de acordo com a cardinalidade: • Um-para-um (1:1): representa que uma única ocorrência de uma entidade pode se relacionar com apenas uma única ocorrência de outra entidade; • um-para-muitos (1:N): representa que uma ocorrência de uma entidade pode se relacionar com muitas ocorrências de outra entidade. No entanto, a recíproca não é verdadeira; • muitos-para-muitos (N:M): representa que várias ocorrências de uma entidade pode se relacionar com muitas ocorrências de outra entidade. Página 30 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Há ainda os relacionamentos recursivos onde uma entidade se relaciona com si própria e são relacionamentos mais raros. Para que o modelo E-R pudesse representar melhor os conceitos foi observado que cardinalidades genéricas do tipo 1:N (um-para-muitos) e N:M (muitos-para-muitos) não são sucientes. Isto porque o conceito de muitos é um conceito vago, podendo ser um ou qualquer número acima de um, existindo, ainda, o valor zero, pois, em alguns casos, nem todas as ocorrências das entidades participam do relacionamento. Para que isso seja resolvido, o modelo E-R propõe que seja utilizado o conceito de dade Máxima. Cardinalidade Mínima e de Cardinali- Para um melhor entendimento das Cardinalidades Mínimas e Máximas, vamos analisar os tipos de relacionamento de cada uma das alternativas aplicadas ao problema do enunciado. Na letra (A), a cardinalidade do tipo (0,n) x (0,n) quer dizer o seguinte: uma pessoa pode lavar um, vários carros ou nenhum e um carro pode não ser lavado ou ser lavado por uma ou mais pessoas. Já na letra (B), uma pessoa pode lavar nenhum, um ou vários carros, mas um carro pode não ser lavado ou ser lavado por, no máximo, uma pessoa. A letra (C) indica que um carro deve ser levado por exatamente uma pessoa, mas que uma pessoa pode não ter lavado nenhum carro. Na letra (D), uma pessoa deve ter lavado, no mínimo, um carro e todo carro deve ter sido lavado por uma ou mais pessoas. E, para nalizar, na letra (E): um carro deve ter sido lavado por exatamente uma pessoa e uma pessoa deve ter lavado um ou mais carros. Ao passarmos um relacionamento para o modelo relacional, temos três opções: 1. Entidades relacionadas podem ser fundidas em uma única tabela; 2. tabelas podem ser criadas para o relacionamento; 3. chaves estrangeiras podem ser criadas em tabelas a m de representar adequadamente o relacionamento. Na letra (C), que é o único caso de mapeamento um-para-um, a melhor alternativa para atender a terceira forma normal é incluir a chave primária de Pessoa como chave estrangeira na tabela Carro (opção 3). Sendo assim, todo registro da tabela Carro terá representado uma pessoa, que será a pessoa que lava o carro. Caso o relacionamento fosse do tipo (1,1) x (1,1), uma tabela poderia representar as duas entidades sem problemas (opção 1). Neste caso, não haveria o problema de redundância indesejado para a terceira forma normal e nenhum dado seria perdido. Gerar uma tabela denitivamente não é uma opção para a letra (C), que está incorreta. Os relacionamentos muitos-para-muitos estão representados nas letras (A) e (D). Nestes casos, a única solução possível é utilizar uma tabela para o relacionamento (opção 2). Não é possível representar esse tipo de relacionamento através de uma chave-estrangeira em uma tabela que representa uma entidade e nem mesmo fundir tabelas de entidade sem que haja problemas de redundância. As alternativas (A) e (D) estão erradas, pois a tabela deve ser criada para o relacionamento e não é uma opção não tê-la. Na letra (E), a melhor alternativa é criar chave estrangeira para representar a pessoa que lavou o carro na tabela Carro (opção 3). Entretanto, ainda é necessário garantir que uma pessoa só exista na tabela Pessoa se já houver lavado um carro. Isso pode ser feito com inclusão de regra adicional de integridade. A opção 1 não é aceitável, pois representaria dados redundantes. A opção (2) também tem a possibilidade de representar um modelo relacional Página 31 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI que atenda o que a questão está pedindo e também deve ter adicionada a restrição de que toda pessoa da tabela Pessoa tenha um registro na tabela que representa o relacionamento Lava. Sem dúvida, é uma opção, mas não deve gerar uma tabela conforme diz o enunciado. A letra (E) está errada. Na alternativa (B), só o fato de não ser um relacionamento muitos-para-muitos, sabemos que o uso de tabela para representar o relacionamento Lava não é obrigatório. Há a possibilidade de se criar uma chave estrangeira que represente uma pessoa na tabela Carro (opção 3). Neste caso, a tabela Carro deve permitir que o valor da chave estrangeira também possa ser nulo, pois um carro não necessariamente é lavado por alguma pessoa. Há controvérsias se, neste caso, a terceira forma normal é obedecida. Se optássemos por criar uma tabela para o relacionamento, não haveria problemas, pois, para garantir que um carro seja lavado por no máximo uma pessoa, basta adotar a chave primária de Carro para garantir a unicidade do mesmo. A opção 1 não é adequada para o caso, pois as informações das pessoas iriam ser redundantes na nova tabela fundida. Embora haja a controvérsia de a permissão do uso de valor nulo não garantir a terceira forma normal e nem mesmo a primeiro, vamos adotar que o uso de chave estrangeira é factível para o problema e que o uso de tabela para o relacionamento também é possível. Sendo assim, a alternativa (B) é a alternativa correta. Página 32 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 14. Volume questões de TI Assuntos relacionados: Banco de Dados, Modelo Entidade-Relacionamento, Modelo Relacional, Banca: Cespe Instituição: Petrobras Cargo: Analista de Sistemas Júnior - Infraestrutura Ano: 2007 Questão: 8082 Considerando que, nas tabelas acima, FK e PK sejam, respectivamente, chaves estrangeira e primária em um banco relacional, julgue os itens subseqüentes. 80 Se ALUNO em MATRICULAS referencia MATRICULA em ALUNOS, e TURMA em MATRICULAS referencia CODIGO em TURMAS, então a cada registro em ALUNOS podem estar associados vários registros em TURMAS e a cada registro em TURMAS podem estar associados vários registros em ALUNOS. 81 Se DEPARTAMENTO em CURSOS referencia CODIGO em DEPARTAMENTOS, então a cada registro em DEPARTAMENTOS podem estar associados vários registros em CURSOS e a cada registro em CURSOS podem estar associados vários registros em DEPARTAMENTOS. 82 Em um diagrama de entidades-relacionamentos do banco de dados composto pelas tabelas apresentadas, MATRICULAS será representada por uma classe de entidades e será muitos para muitos o relacionamento entre as classes de entidades que representem DISCIPLINAS e CURSOS. Solução: Os itens 80, 81 e 82 estão relacionados ao conceito de mapeamento de um esquema E-R (Entidade-Relacionamento) em tabelas no banco de dados no modelo relacional. Um banco de dados de acordo com o modelo E-R pode ser representado por uma coleção de tabelas. Para cada conjunto de entidades e para cada conjunto de relacionamentos, existe uma tabela única registrando o nome do conjunto de entidade ou relacionamento dentro de um banco de dados. Página 33 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Para realizar a conversão da representação do banco de dados em um modelo E-R para um banco de dados relacional, as seguintes regras gerais devem ser seguidas: • conjunto de entidades fortes: seja E um conjunto de entidades fortes descrito pelos atributos a1, a2, . . . , an. Representamos essa entidade por uma tabela E com n colunas distintas, cada uma delas correspondendo a um dos atributos de E; • conjunto de entidades fracas: seja A um conjunto de entidades fracas com os atri- butos a1, a2, . . . , an. Seja B um conjunto de entidades fortes, do qual A é dependente. Representamos a entidade fraca por uma tabela A, onde as colunas dessa tabela são atributos da entidade A mais os atributos que formam a chave primária do conjunto B; • relacionamentos: seja R um conjunto de relacionamentos; seja a1, a2, . . . , an o conjunto de atributos formados pela união das chaves primárias de cada conjunto de entidades participantes de R; e seja os atributos descritivos b1, b2, . . . , bn (se existir) de R. Representamos o conjunto R por uma tabela R, onde as colunas dessa tabela são as chaves primárias da entidades participantes mais os atributos descritivos de R, caso existam; • atributos multivalorados: para um atributo multivalorado, criamos uma tabela T com uma coluna que corresponde ao atributo multivalorado e as colunas correspondentes à chave primária do conjunto de entidades ou conjunto de relacionamentos do qual o atributo multivalorado é atributo. No caso dos relacionamentos no modelo E-R, existem alguns tratamentos especiais em função da cardinalidade do relacionamento entre as entidades como forma de eliminar tabelas redundantes: • um conjunto de relacionamentos que possuem cardinalidade um para um não precisa ser representado no modelo relacional, pois esse relacionamento não cria uma nova relação. Em geral, caso existam atributos descritivos do relacionamento, esses são acrescentados como atributos da tabela de uma das entidades participantes; • um conjunto de relacionamentos que possuem cardinalidade muitos para um e não possui atributos descritivos não precisa ser representado por uma tabela no modelo relacional. Em geral, isso ocorre no relacionamento entre um conjunto de entidades fracas e um conjunto de entidades forte. A chave primária do conjunto de entidades fortes funciona como um atributo no conjunto de entidades fracas (chave estrangeira); • um conjunto de relacionamentos que possuem cardinalidade muitos para muitos é representado no modelo relacional por uma tabela, pois esse relacionamento cria uma nova relação, conforme descrito anteriormente na regra geral. No nosso caso, em vez de partirmos do modelo E-R para o modelo relacional, temos que partir do modelo relacional para o modelo E-R para resolvermos os itens 80, 81 e 82. Em nosso modelo relacional temos as tabelas ALUNOS, MATRICULAS, TURMAS, DISCIPLINAS, CUROS e DEPARTAMENTOS. Por inferência nossa, acreditamos que as setas indicam o sentido do relacionamento entre as tabelas: • ALUNOS está inscrito em CURSOS. Um aluno se inscreve em um curso, e em um curso pode estar inscrito vários alunos. Ou seja, temos um relacionamento um para muitos. Note que a tabela ALUNOS possui uma chave estrangeira CURSO, o que demonstram a relação de dependência entre as entidades ALUNOS e CURSOS. Neste relacionamento, CURSOS é uma entidade forte e ALUNOS é uma entidade fraca; Página 34 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos • Volume questões de TI CURSOS é administrado por DEPARTAMENTOS. Um curso é administrado por departamento. Um curso é administrado por um departamento, e um departamento pode administrar vários cursos. Ou seja, temos um relacionamento um para muitos. Note que a tabela CURSOS possui uma chave estrangeira DEPARTAMENTO, o que demonstram a relação de dependência entre as entidades CURSOS e DEPARTAMENTOS. Neste relacionamento, CURSOS é uma entidade fraca e DEPARTAMENTOS é uma entidade forte; • DISCIPLINAS está vinculada a CURSOS. Uma disciplina pode está vinculada somente a um curso ou mais de um curso, e um curso possui várias disciplinas. Note que neste relacionamento surge a dúvida se temos um relacionamento um para muitos ou muitos para muitos. Caso tivéssemos um relacionamento muitos para muitos, outra tabela representa o relacionamento entre CURSOS e DISCIPLINAS deveria existir no modelo relacional. Porém, não existe essa tabela, e portanto, o relacionamento entre CURSOS e DISCIPLINAS é um para muitos. Note que a tabela DISCIPLINAS possui uma chave estrangeira CURSO, o que demonstram a relação de dependência entre as entidades CURSOS e DISCIPLINAS. Neste relacionamento, CURSOS é uma entidade forte e DISCIPLINAS é uma entidade fraca; • TURMAS está vinculada a DISCIPLINAS. Uma turma está vinculada a uma disciplina, e uma disciplina pode ter várias turmas. Ou seja, temos um relacionamento um para muitos. Note que a tabela TURMAS possui uma chave estrangeira DISCIPLINA, o que demonstram a relação de dependência entre as entidades TURMAS e DISCIPLINAS. Neste relacionamento, DISCIPLINAS é uma entidade forte e TURMAS é uma entidade fraca; • ALUNOS está matriculado em TURMAS. Um aluno pode estar matriculado em diversas turmas, e uma turma pode ter vários alunos. Ou seja, temos um relacionamento muitos para muitos. Como temos esse tipo de relacionamento, devemos representá-lo no modelo relacional como uma tabela, no caso MATRICULAS. Observe que, a tabela MATRICULAS possui as chaves primárias de ALUNOS e CURSOS. De acordo com os relacionamentos descritos e as respectivas cardinalidade, podemos montar o nosso modelo E-R. A Figura 2 ilustra o modelo E-R obtido a partir do modelo relacional. Figura 2: Modelo Entidade-Relacionamento com base no modelo relacional. Página 35 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI A seguir analisamos os itens: 80 CERTO Conforme descrevemos anteriormente, o relacionamento entre ALUNOS e TURMAS é muitos para muitos, isto é, cada registro em ALUNOS pode estar associado a vários registros em TURMAS. Assim como, cada registro em TURMAS pode estar associado a vários registros em ALUNOS. A tabela MATRICULAS representa o relacionamento entre as entidades ALUNOS e TURMAS. Portanto, este item está certo. 81 ERRADO Conforme descrevemos anteriormente, o relacionamento entre CURSOS e DEPARTAMENTOS é um para muitos, isto é, um registro em CURSOS pode estar associado a um único registro em DEPARTAMENTO, e um registro em DEPARTAMENTOS pode estar associado a vários registros em CURSOS. Portanto, este item está errado, pois arma que cada registro em CURSOS pode estar associado a vários registros em DEPARTAMENTOS. 82 ERRADO Conforme mostrado no modelo E-R a partir do modelo relacional, a tabela MATRICULAS é representada como um relacionamento de ALUNOS e TURMAS no modelo E-R, e não como uma entidade. No caso do relacionamento entre DISCIPLINAS e CURSOS, o relacionamento não é muitos para muitos, mas um para muitos, pois no modelo relacional não existe uma tabela representando o relacionamento entre DISCIPLINAS e CURSOS. Portanto, este item está errado. Página 36 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 15. Volume questões de TI Assuntos relacionados: Banco de Dados, Modelagem de Dados, Superchave, Chave Se- cundária, Segurança da Informação, Criptograa, Chave Assimétrica, Chave Simétrica, Banca: ESAF Instituição: Agência Nacional de Águas (ANA) Cargo: Analista Administrativo - Tecnologia da Informação e Comunicação / Desenvolvimento de Sistemas e Administração de Banco de Dados Ano: 2009 Questão: 17 Um conjunto de um ou mais atributos, tomados coletivamente, para identicar unicamente uma tupla numa relação, é denominado (a). chave assimétrica. (b). chave simétrica. (c). superchave. (d). chave secundária. (e). chave de tupla. Solução: (A) INCORRETA Algoritmos que usam chaves assimétricas fazem parte da criptograa de chave pública. As chaves assimétricas são usadas para a criação de um par de chaves criptográcas relacionadas: uma chave pública e uma chave privada (secreta). Com o uso da criptograa de chave pública é possível vericar a autenticidade de mensagens, através da criação de assinaturas digitais e, também, proteger a condencialidade e integridade da mensagem, através da cifragem com o uso da chave pública e decifragem através da chave privada. O enunciado do problema se refere a bancos de dados relacionais, não a criptograa e, portanto, essa opção é incorreta. (B) INCORRETA Assim como as chaves assimétricas, chaves simétricas também são conceitos de criptograa. No entanto, nos algoritmos de criptograa de chave simétrica, chaves semelhantes, normalmente idênticas, são usadas para cifrar e decifrar uma mensagem, donde decorre o nome simétrica. (C) CORRETA Uma superchave é qualquer subconjunto de atributos de um esquema de relação com a propriedade de que duas tuplas, em qualquer estado de relação r de R, não tenham a mesma combinação de valores para esse subconjunto de atributos. Em outras palavras, sejam e tuplas distintas e seja SK um subconjunto de atributos de um esquema de relação. Neste caso, para quaisquer e. Note, ainda, que toda relação possui ao menos uma superchave: a padrão (default), o conjunto de todos os atributos da relação. Superchaves mais úteis, no entanto, são as superchaves mínimas. tos redundantes. Nelas, não há atribu- Ou seja, não é possível remover qualquer atributo desse conjunto sem quebrar a restrição da superchave identicar tuplas distintas. Página 37 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI (D) INCORRETA Uma chave secundária é uma chave que, normalmente, não identica unicamente um registro e que pode ser utilizada para buscas simultâneas de vários registros. Normalmente implementadas como índices em bancos de dados, são usadas para busca e recuperação de dados. (E) INCORRETA O conceito chave de tupla não é amplamente conhecido na literatura e há outra alternativa que responde de maneira correta esta questão. Por esse motivo, esse conceito não será discutido. Página 38 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 16. Volume questões de TI Assuntos relacionados: Banco de Dados, Modelo Relacional, Modelo Entidade-Relacionamento, Modelo Objeto-Relacionamento, Banca: ESAF Instituição: Agência Nacional de Águas (ANA) Cargo: Analista Administrativo - Tecnologia da Informação e Comunicação / Desenvolvimento de Sistemas e Administração de Banco de Dados Ano: 2009 Questão: 22 O modelo de dados baseado numa coleção de tabelas que representam dados e as relações entre eles é denominado modelo (a). relacional. (b). entidade/relacionamento. (c). baseado em objetos. (d). de dados semiestruturados. (e). objeto/relacionamento. Solução: (A) CORRETA O modelo relacional usa o conceito de uma relação matemática como seu bloco de construção básica e tem sua base teórica na teoria dos conjuntos e na lógica de predicados de primeira ordem. No modelo relacional, o banco de dados é representado como uma coleção de relações. Quando uma relação é pensada como uma tabela de valores, cada linha na tabela representa uma coleção de valores de dados relacionados. Nessa representação, cada linha na tabela representa um fato que corresponde a uma entidade ou relacionamento do mundo real. O nome da tabela e os nomes das colunas são usados para auxiliar na interpretação dos dados da coluna e todos os valores em uma coluna são do mesmo tipo de dado. Por isso, essa é a solução correta para a questão. (B) INCORRETA O modelo de entidade-relacionamento é um modelo abstrato com a nalidade de descrever, conceitualmente, as entidades e os relacionamentos de um domínio. Esse modelo, e suas variações, é normalmente empregado para o projeto conceitual de aplicações de um banco de dados, e muitas ferramentas de projeto de um banco de dados também aplicam seus conceitos. Neste modelo, uma entidade é um objeto que existe no mundo e que é facilmente distinguível de outros. Uma entidade pode ser tanto concreta, como um livro, uma pessoa ou um lugar, quanto abstrata, como um feriado. Uma entidade, por sua vez, é composta por atributos. Um atributo é uma função que mapeia um conjunto de entidades em um domínio em particular. Cada entidade é descrita por um conjunto de pares (atributo, valor) e existe um par para cada um dos atributos da entidade. Um relacionamento, por sua vez, é uma associação qualquer entre diversas entidades. Um Página 39 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI relacionamento trabalha para, por exemplo, pode relacionar empregador e empregados. A principal ferramenta do modelo de entidade-relacionamento é o diagrama de entidaderelacionamento. Nele, retângulos representam entidades, elipses representam atributos, losangos representam relacionamentos e linhas ligam atributos a entidades e entidades a relacionamentos. A Figura 3 exibe um exemplo de diagrama entidade-relacionamento. Nela, existem duas entidades, Cliente e Conta. A entidade Cliente possui os atributos Nome, Endereço e CPF, já a entidade Conta possui os atributos Número e Balanço. Ambas são relacionadas pela relação Possui, que indica que um ou mais clientes podem possuir uma ou mais contas (que, por sua vez, podem ser possuídas por um ou mais clientes). Figura 3: exemplo de diagrama entidade-relacionamento. (C) INCORRETA Modelos baseados em objetos têm sua origem nas linguagens orientadas a objetos. Nelas, um objeto possui, tipicamente, dois componentes: estado (valor) e comportamento (operações). Em linguagens de programação, objetos existem somente durante a execução do programa. Já em bancos de dados orientados a objetos, a existência dos objetos pode ser estendida de modo que sejam armazenados de forma permanente; portanto, os objetos continuam a existir mesmo após o término do programa, podendo ser posteriormente recuperados e compartilhados por outros programas. No modelo orientado a objetos, um conceito comum é o de classe, que representa um conjunto de objetos com características ans e dene o comportamento dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos. Alguns conceitos importantes em orientação a objetos são: • Encapsulamento: os aspectos internos e externos de um objeto são separados, impe- dindo o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas métodos que alteram esses estados; • Herança: permite a especicação de novos tipos ou classes que herdam parte de suas estruturas e/ou operações de classes ou tipos previamente denidos, o que torna mais fácil desenvolver os tipos de dados de um sistema de modo incremental e reutilizar denições de tipos na criação de novos tipos de objetos; • Sobrecarga de operador: se refere à propriedade de uma operação de ser aplicada a diferentes tipos de objetos. Em tal situação, um nome de operação pode se referir a várias implementações diferentes, dependendo do tipo de objetos aos quais é aplicada. Essa característica também é conhecida como polimorsmo de operador. Página 40 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Em bancos de dados tradicionais, a informação sobre objetos complexos é, normalmente, distribuída em várias relações ou registros, levando à perda de correspondência direta entre um objeto do mundo real e sua representação no banco de dados. O mesmo não ocorre em bancos de dados orientados a objetos, que são capazes de manter estruturas de objetos com complexidade arbitrária. (D) INCORRETA O modelo de dados semiestruturados é um modelo de bancos de dados em que não há separação entre dados e esquema e sua estruturação depende do propósito da aplicação. Por não haver essa separação, o esquema é normalmente associado em conjunto com os dados. Em outros casos, o esquema existe apenas para denir restrições fracas aos dados. Um compromisso feito quando bancos de dados que usam esse modelo são adotados é que as consultas podem não ser tão ecientes quanto a alternativa em bancos de dados relacionais, devido à forma típica como esses bancos de dados são implementados. Neles, os registros são normalmente armazenados com identicadores únicos referenciados por ponteiros para suas posições no disco. Como é necessário percorrer o disco seguindo os ponteiros, suas consultas podem não ser tão ecientes. (E) INCORRETA O modelo objeto-relacionamento (OR) é baseado no modelo de entidade-relacionamento (ER). No modelo OR, o mundo é visto como um conjunto de objetos e seus relacionamentos. A diferença entre esse e o modelo de ER é que no modelo OR os atributos são tratados como objetos e, com isso, os benefícios da orientação a objetos são unidos aos benefícios do modelo relacional (ambos modelos descritos acima). Essa resposta é incorreta porque o modelo objeto-relacional é usado para modelagem de sistemas de bancos de dados, não para representar os dados. Fonte: Symposium on Applied Computing Proceedings of the 1992 ACM/SIGAPP Symposium on Applied computing: technological challenges of the 1990's table of contents Kansas City, Missouri, United States Páginas: 299 - 307 Ano de publicação: 1992 ISBN:0-89791502-X Disponível em: http://portal.acm.org/citation.cfm?id=143655 Página 41 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 17. Volume questões de TI Assuntos relacionados: Banco de Dados, Álgebra Relacional, SGBD, Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 56 Sobre bancos de dados relacionais é INCORRETO armar que (a). fornecem outra tabela, como resultado de consulta a uma tabela. (b). possuem um otimizador que é responsável por implementar de forma eciente as consultas relacionais realizadas pelo usuário. (c). armazenam dados organizados logicamente em tabelas e sicamente em arquivos. (d). disponibilizam estruturas para manutenção de integridade dos dados. (e). permitem a realização de operações de junção e união de conjuntos, mas não de projeção e restrição. Solução: Em bancos de dados relacionais as tabelas são estruturas lógicas que têm por objetivo simplicar a modelagem e a visualização dos dados, que sicamente são armazenados como arquivos. O diagrama de tabelas é um nível de abstração de dados também conhecido como modelo lógico de dados. Independente do formato dos arquivos e dos métodos de acesso utilizados, o usuário nal sempre enxerga os dados organizados em tabelas. Quando uma consulta é submetida ao SGBD relacional, pode ser necessário unir dados de vários arquivos para fornecer o resultado. No entanto, o usuário nal não precisa tomar conhecimento dessa necessidade, pois o resultado da consulta será fornecido como uma tabela, essa montada dinamicamente de acordo com os critérios da operação. A otimização das consultas, assim como a manutenção da integridade dos dados, é papel do SGBD. Como atribuições dos SGBDs, podemos citar também a manutenção da segurança e o controle de concorrência, permitindo que vários usuários ou processos usem o banco de dados simultaneamente sem prejuízo aos dados. Em grande parte dos sistemas, os projetistas não precisam se preocupar com aspectos físicos do armazenamento de dados. Geralmente, isso se faz necessário quando o otimizador de consultas do SGBD por si só não é suciente para responder aos requisitos de desempenho do sistema. Com base nos argumentos apresentados, podemos dizer que as alternativas A, B, C e D apresentam informações corretas sobre os SGBDs relacionais. Portanto, por eliminação chegamos à alternativa E. A resposta também pode ser alcançada de forma direta, sendo necessário para isso o conhecimento das operações básicas da Álgebra Relacional, base conceitual dos bancos e da linguagem de SQL. As operações de junção nada mais são que as realizadas pelo operador JOIN, da linguagem SQL. Enquanto as operações de união são realizadas pelo operador UNION. As restrições são denidas pela cláusula WHERE. Página 42 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Já as projeções se referem a seleção de um subconjunto N de colunas, onde N é menor que o número total de colunas da relação. Ou seja, se tabela ALUNOS possui 5 colu- nas, o comando SELECT NOME,IDADE FROM ALUNOS é uma projeção, pois só foram selecionadas 2 das 5 colunas na consulta. Página 43 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 18. Volume questões de TI Assuntos relacionados: Banco de Dados, Nível de Abstração, Nível Físco, Nível de Visão, Nível Lógico, Banca: ESAF Instituição: Agência Nacional de Águas (ANA) Cargo: Analista Administrativo - Tecnologia da Informação e Comunicação / Desenvolvimento de Sistemas e Administração de Banco de Dados Ano: 2009 Questão: 18 O nível de abstração, que visa simplicar a interação entre usuários e o sistema de banco de dados, é o (a). físico. (b). de visão. (c). lógico. (d). de esquema. (e). de modelo. Solução: Um sistema de banco de dados é a junção de uma coleção de arquivos inter-relacionados com um conjunto de programas que permitem aos usuários acessarem e modicarem tais arquivos. Seu maior objetivo é proporcionar aos usuários uma visão abstrata dos dados, o que signica ocultar determinados detalhes de como os dados são efetivamente armazenados e gerenciados. Para que o sistema tenha um bom nível de usabilidade, é preciso que os dados sejam recuperados ecientemente. A necessidade de eciência levou os desenvolvedores a utilizar estruturas de dados complexas para representar os dados na base de dados. Para ocul- tar dos usuários essa complexidade, níveis de abstração foram denidos, simplicando a interação com o sistema: • Nível Físico. Nível mais baixo de abstração que descreve como os dados são verdadei- ramente armazenados. O nível físico descreve detalhadamente as complexas estruturas de dados de baixo nível; • Nível Lógico. Nível intermediário de abstração que descreve quais dados são arma- zenados na base de dados, além dos relacionamentos existentes entre tais dados. Neste nível, todo o banco de dados é descrito em termos de um pequeno número de estruturas relativamente simples. Os administradores de bancos de dados usam os nível lógico de abstração para decidir quais informações serão armazenadas; • Nível de Visão. Nível mais alto de abstração, descreve apenas parte do banco de da- dos. Apesar de utilizar estruturas simples, o nível lógico possui bastante complexidade, haja vista a variedade de informações armazenadas. Muitos usuários não necessitam de toda essa informação e, assim, o nível de visão proporciona diversas visões para a mesma base de dados, simplicando a interação com o sistema. O esquema de um banco de dados diz respeito aos objetos (tabelas, visões, índices, procedimentos armazenados, etc.) disponibilizados para um determinado grupo de usuários, não guardando relação com os níveis de abstração. Semelhantemente, o modelo de um banco de dados é a especicação das estruturas de dados e regras de negócio de um banco de dados, Página 44 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI incluindo Modelo Conceitual, Modelo Lógico e Modelo Físico. A armativa de acordo com a teoria apresentada encontra-se na opção B. Página 45 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 19. Volume questões de TI Assuntos relacionados: Banco de Dados, Indexação de Registros, Banca: ESAF Instituição: Secretaria do Tesouro Nacional (STN) Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de Sistemas de Informação Ano: 2008 Questão: 17 Em termos de Bancos de Dados, a indexação mais adequada para o acesso eciente aos registros, em consultas que considerem intervalos, para um pequeno número de linhas, corresponde ao uso de índices (a). de junção. (b). de hashing. (c). em árvores B. (d). booleanos. (e). funcionais. Solução: (A) INCORRETA Um índice de junção é uma estrutura de dados usada para o processamento de consultas de junção (join queries) em bancos de dados. Os índices de junção usam técnicas de pré-computação para aumentar o desempenho do processamento online de consultas e são úteis para conjuntos de dados que são atualizados com pouca frequência. Como essa opção apresenta uma restrição aos bancos de dados (e como há uma opção melhor, como será 1 visto), essa alternativa é incorreta. (B) INCORRETA Índices de hashing são índices que usam tabelas hash para indexação. Neles, as chaves de pesquisa são organizadas como uma tabela hash, em que as chaves de pesquisa são associadas às entradas onde essas chaves ocorrem. Uma tabela hash (ou tabela de dispersão), por sua vez, é uma estrutura de dados que associa chaves de pesquisa a valores. Seu objetivo é, a partir de uma chave simples, fazer uma busca rápida e obter o valor desejado. Por mapearem uma chave de pesquisa a um determinado índice de forma direta, as tabelas hash proporcionam um tempo médio de busca constante, ou seja, O(1). Em virtude de seu alto desempenho, as tabelas hash são tipicamente utilizadas na indexação de grandes volumes de informações em bancos de dados e na criação de esquemas associativos de acesso às memória cache. Após a construção do índice, quando uma consulta é realizada, a função hash é aplicada à chave de pesquisa para identicação do slot onde as chaves ocorrem. As entradas das ocorrências são, então, recuperadas. Apesar de ecientes para buscar um único valor e como valores próximos são normalmente mapeados para posições distantes na tabela, uma abordagem de tabelas hash para consultas Fonte: Ecient Join-Index-Based Join Processing: A Clustering Approach, disponível em http://www.cs.umn.edu/tech_reports_upload/tr1999/99-030.pdf 1 Página 46 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI com intervalos se mostrará ineciente, visto que a conferência dos valores nos intervalos será custosa. (C) CORRETA Índices em árvores B, como o nome diz, são índices que usam árvores B. Uma árvore B é uma estrutura de dados baseada em árvores que mantém os dados ordenados e que permite buscas, acesso sequencial, inserções e remoções em tempo logarítmico amortizado. Por ser otimizada para sistemas que leem e escrevem grandes quantidades de dados, elas são bastante utilizadas na implementação de bancos de dados e sistemas de arquivos. As árvores B são uma generalização das árvores de busca binárias, pois cada nó pode possuir mais de dois lhos. Mais formalmente, uma árvore B de ordem m (com m o número máximo de lhos de um nó) é uma árvore que satisfaz as seguintes propriedades: 1. Cada nó possui, no máximo, m lhos; 2. Cada nó (exceto a raiz), possui, no mínimo, m/2 lhos; 3. A raiz possui pelo menos dois lhos quando não for um nó folha; 4. Todas as folhas aparecem no mesmo nível; 5. Um nó não folha com k lhos possui k-1 chaves. Como exemplo, a Figura 4 exibe o desenvolvimento de uma árvore B de ordem 3 à medida que os elementos 1, 2, 3, 4, 5, 6 e 7 são adicionados a ela. Como exibido, sempre que um nó não é capaz de armazenar mais elementos, aquele nó é dividido e a árvore, rebalanceada, de modo que suas propriedades ainda sejam mantidas. A altura de uma árvore B é, sempre, O(log n) e uma busca por um valor exato em uma árvore B é, também, O(log n). No entanto, quando é necessário buscar por um intervalo, como, internamente os nós das árvores B estão ordenados e a busca pelos limites é O(log n), a recuperação dos valores do intervalo buscado é feita rapidamente, tornando as árvores B a melhor estrutura de dados para criação do índice nesse caso e, portanto, a alternativa c é a correta. (D) INCORRETA Índice booleano não é um conceito amplamente divulgado na literatura. No entanto, existem índices chamados índices bitmap que armazenam seus dados como vetores de bits e respondem a consultas através da execução de operações lógicas bit a bit nesses vetores de bits. Esse tipo de índice foi projetado para casos em que os valores de uma variável se repetem com grande frequência. Devido a forma como são construídos, o índice de bitmap possui vantagens de desempenho para esse caso, mas não na busca de intervalos. (E) INCORRETA Índices funcionais são índices denidos pelo usuário do sistema de banco de dados. Com eles, é possível que o usuário do banco de dados dena suas próprias funções de indexação. Esse tipo de índice adiciona exibilidade ao banco de dados e pode ser usado com tipos denidos pelo usuário. Por poderem ser implementados da forma que melhor convier ao usuário e não um algoritmo propriamente dito, índices funcionais não são a solução para esta questão. Página 47 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Figura 4: desenvolvimento de uma árvore B de ordem 3 à medida que os elementos 1, 2, 3, 4, 5, 6 e 7 são adicionados. Página 48 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 20. Volume questões de TI Assuntos relacionados: Banco de Dados, ACID, Banca: ESAF Instituição: Controladoria-Geral da União (CGU) Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de Sistemas de Informação Ano: 2008 Questão: 54 O termo integridade se refere à precisão ou correção de dados. Em um banco de dados relacional, as restrições de integridade têm importância crucial, pois fornecem uma forma de garantir que as mudanças realizadas pelos usuários não resultem na perda de consistência dos dados. Com relação às restrições de integridade, é incorreto armar que uma restrição de (a). variável de relação especica os valores válidos para uma determinada variável de relação, e é vericada quando essa variável de relação é atualizada. (b). tipo especica os valores válidos para um determinado tipo, e é vericada durante invocações do seletor correspondente. (c). atributo especica os valores válidos para um determinado atributo, e nunca deve ser violada. (d). banco de dados especica os valores válidos para um determinado banco de dados, e é vericada no instante de COMMIT. (e). domínio especica que o valor de um atributo não pode pertencer a mais de um domínio. Solução: Autores diferentes costumam classicar as restrições de integridade de forma diferente. Em [1], por exemplo, as restrições de integridade são classicadas como restrições de tipo (domínio), de atributo, de variáveis de relação, de banco de dados, de transição de estados, de chaves, de integridade referencial e restrições quanto ao momento de vericação. Em [2] as encontramos como restrições de domínio, de chave, de formas de relacionamento e de integridade referencial. Já em [3] elas são classicadas como restrições de domínio, de chave, de integridade referencial, de integridade de entidade e não-nulo. Para a elaboração desta questão, há indícios de que as denições encontradas em [1] foram usadas. Nela, o conceito apresentado de maneira incorreta é o descrito na alternativa e, dado que a descrição apresentada dene, de maneira errônea, o que é uma restrição de domínio. Uma restrição de domínio é uma restrição que especica que, dentro de cada tupla do banco de dados relacional, o valor de cada atributo A deve ser um valor pertencente ao domínio de A. Em outras palavras, uma restrição de domínio testa os valores inseridos no banco de dados e as consultas realizadas para garantir que os valores inseridos sejam condizentes com os domínios das variáveis armazenadas. O domínio de um atributo envolve seu tipo de dados, o intervalo de valores possível que esse atributo pode possuir, seu tamanho máximo, e se existe a possibilidade de valores nulos em A. Os tipos de dados associados aos domínios incluem os tipos de dados numéricos padrão (como inteiros e números reais de representados por ponto utuante), caracteres, booleanos, Página 49 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI strings de comprimento xo e variável, data, hora, timestamp e, em alguns casos, moeda. É possível, também, como citado, especicar subconjuntos de valores de um tipo de dado ou por uma enumeração de valores. Um domínio, por sua vez, é um conjunto de valores atômicos. Por atômico entendemos que cada valor no domínio é indivisível no que diz respeito ao modelo relacional. Um método comum para a especicação de um domínio é denir um tipo de dados do qual os valores de dados que formam o domínio sejam retirados. Também é útil especicar um nome para esse domínio, de modo a ajudar na interpretação de seus valores. Alguns exemplos de domínio são (com o nome do domínio à esquerda e sua descrição à direita): • Número de CPF: o conjunto de onze dígitos válidos do número de CPF; • Média de pontos: possíveis valores de médias computadas para um determinado aluno. As médias devem ser não-negativas e inferiores à média máxima atingível. Em SQL é possível criar um domínio através do comando CREATE DOMAIN. No exemplo abaixo, é exibido um comando para a criação do domínio NUMERO_CPF em SQL: CREATE DOMAIN NUMERO_CPF AS CHAR(11); Esclarecimentos sobre as outras Alternativas Apesar de sabermos que as outras alternativas estão corretas, convém fazer comentários adicionais sobre cada uma delas para melhor compreensão dos conceitos. Restrição de variável de relação A restrição de variável de relação, ou de tuplas, é uma restrição sobre uma tupla individual e pode incorporar restrições sobre atributos da mesma. Como essa restrição é vericada sempre que a variável de relação é atualizada, é possível adicionar restrições como um aluno somente poder ter estado de formado caso tenha cumprido o número mínimo de créditos de um curso. Restrição de tipo Uma restrição de tipo, como o nome diz, especica que um atributo deva pertencer ao tipo especicado e, portanto, a suas restrições. Restrição de atributo Uma restrição de atributo, como descrito no enunciado da questão, descreve os possíveis valores válidos que o atributo deve assumir. Um exemplo é que o atributo SEXO só faça sentido para os valores F (feminino) e M (masculino). Restrição de banco de dados Uma restrição de banco de dados é uma restrição que relaciona duas ou mais tuplas distintas e, portanto, é necessário que todas as restrições das tuplas envolvidas sejam atendidas. Um exemplo desse tipo de restrição é um pedido em uma loja virtual: o somatório das quantidades de todos os itens não pode ser maior que a quantidade total de elementos do pedido. Página 50 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Referências [1] [2] [3] Introdução a Sistemas de Banco de Dados, C. J. Date. 7a edição. Sistemas de Banco de Dados, A. Silberchatz et al. 3a edição. Sistemas de Banco de Dados, Ramez Elmasri e Shamkant B. Navathe. 4a edição. Página 51 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 21. Volume questões de TI Assuntos relacionados: Banco de Dados, ACID, Banca: ESAF Instituição: Secretaria do Tesouro Nacional (STN) Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de Sistemas de Informação Ano: 2008 Questão: 14 Se uma restrição de integridade, classicada como restrição de banco de dados, ocorrer no momento de um COMMIT de uma transação, imediatamente é executado um (a). DROP. (b). ROLLBACK. (c). BEGIN_TRANSACTION. (d). END_TRANSACTION. (e). LOCKING. Solução: A integridade é a qualidade de garantir que os dados em um banco de dados estejam corretos. Geralmente, as restrições de integridade são denições de valores permitidos de serem atribuídos a determinadas variáveis. No momento de uma inserção de dados, ou mesmo de uma atualização em dados já existentes, as restrições de integridade devem ser respeitadas e, para tanto, vericações são efetuadas antes da inserção/atualização serem concretizadas. A questão natural que surge é o momento da vericação e da consequente execução da operação solicitada (inserção/atualização). A concorrência de operações em um banco de dados, isto é, a execução simultânea de operações sobre uma mesma parte da base de dados disponível, é situação corriqueira a ser tratada por SGBDs (Sistemas de Gerenciamento de Banco de Dados). Essa concorrência sobre a base de dados, se mal gerenciada, pode provocar inconsistências nos dados alterados. Neste contexto, o conceito de transação surge como uma opção de solução ao problema da manutenção da integridade face a concorrência de operações. A transação, isto é, um conjunto de operações sobre uma base de dados, deve possuir 4 características essenciais com o intuito de auxiliar a garantia da integridade dos dados. Uma transação deve ser atômica, ou seja, todas as operações (ou comandos) que a compõem são executadas de uma maneira única (todas as operações são executadas com sucesso ou nenhuma delas é executada). Uma transação deve ser isolada de outras transações e, consequentemente, ser executada de forma independente das demais. Além disso, toda transação precisa ser durável, característica que garante a manutenção das alterações decorrentes de uma transação concluída, mesmo que ocorra alguma falha após essa conclusão (inclusive de fornecimento de energia elétrica). E, por m, mas não com menos importância, uma transação deve ser consistente, ou seja, deve fornecer a garantia de consistência dos dados em relação a um conjunto de regras de negócio previamente estabelecidas. Para uma adequada execução, operações de controle sobre as transações são utilizadas. São elas: • BEGIN_TRANSACTION: sinaliza o início da execução de uma transação; Página 52 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos • END_TRANSACTION: Volume questões de TI determina o término das operações de uma transação. Contudo, a partir deste ponto é necessário vericar se as modicações introduzidas pela transação podem ser permanentemente aplicadas à base de dados (comando COMMIT) ou se a transação deve ser abortada (comando ROLLBACK) devido a algum problema ocorrido; • COMMIT (ou COMMIT_TRANSACTION): indica o término da transação com sucesso, isto é, todas as alterações na base de dados foram executadas e não serão desfeitas; • ROLLBACK (ou ABORT): sinaliza que a transação terminou sem sucesso e ne- nhuma modicação na base de dados foi efetuada. Nas opções de resposta fornecidas na questão, os itens b), c) e d) citam operações de transações dentre as quais encontra-se a operação ROLLBACK, resposta para a pergunta, conforme a teoria explanada até aqui. Mesmo de posse da resposta, cabe um comentário sobre os outros dois termos citados dentre as opções de resposta: DROP e LOCKING. O comando DROP faz parte da DDL (Data Denition Language) de um banco de dados, sendo responsável por apagar itens do catálogo do banco em conjunto com outras diretivas, como pode ser observado, por exemplo, no comando DROP TABLE que serve para apagar uma tabela do banco de dados, ou ainda no comando DROP DATABASE que serve para apagar o próprio banco de dados. LOCKING (ou congelamento) é um mecanismo presente em SGBDs para tentar garantir o controle de concorrência. Nada mais é do que a ação, tomada mediante uma transação, de indisponibilizar temporariamente parte da base de dados para as demais transações. É uma atitude que deve ser evitada por propiciar a ocorrência de deadlocks, isto é, impasses gerados por várias transações que disputam recursos e acabam provocando uma dependência circular, sem conseguirem atingirem o nal de suas execuções. Página 53 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 22. Volume questões de TI Assuntos relacionados: Banco de Dados, Categorias de Linguages de Banco de Dados, Data Denition Language (DDL), Data Manipulation Language (DML), Data Control Language (DCL), Data Query Language (DQL), Transaction Control Language (TCL), SQL, Banca: ESAF Instituição: Secretaria do Tesouro Nacional (STN) Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de Sistemas de Informação Ano: 2008 Questão: 11 Um SBGD (Sistema Gerenciador de Bancos de Dados) possui um compilador para uma determinada linguagem, cuja função é o processamento de declarações, a m de identicar as descrições dos componentes do esquema conceitual do Banco de Dados. Tal linguagem é de (a). consulta estrutura (SQL). (b). denição de armazenamento (SDL). (c). manipulação de dados (DML). (d). denição de visão (VDL). (e). denição de dados (DDL). Solução: Os sistemas gerenciadores de bancos de dados utilizam diferentes linguagens para denir e manipular o banco de dados, além de realizar outras atividades. Tais linguagens podem ser classicadas diversas categorias, entre as quais as mais populares são: • DDL (Data Denition Language) ou (Linguagem de Denição de Dados); • DML (Data Manipulation Language) ou (Linguagem de Manipulação de Dados); • DCL (Data Control Language) ou (Linguagem de Controle de Dados); • DQL (Data Query Language) ou (Linguagem de Consulta de Dados); • TCL (Transaction Control Language) ou (Linguagem de Controle de Transações). Para denir e exemplicar cada uma das categorias, vamos nos ater aos bancos de dados relacionais, pois são estes os mais populares e cobrados em provas de concursos. No entanto, vale ressaltar que estas e outras categorias de linguagens de SGBDs existem para as demais tecnologias de bancos de dados, como a hierárquica, a de rede, a orientada a objetos etc. DDL (Data Defnition Language) Em termos conceituais, a DDL contém o conjunto de comandos utilizados para descrever e criar a estrutura do banco de dados. Os comandos que compõe a DDL são os que permitem criar novas tabelas, views, índices, e outros elementos de dados. Exemplos típicos de comandos DDL são mostrados a seguir. CREATE TABLE (Cria uma tabela) DROP TABLE (Exlui uma tabela) ALTER TABLE ADD COLUMN (Adiciona uma coluna a uma tabela) CREATE INDEX (Cria um índice) ALTER INDEX (Altera um índice) CREATE VIEW (Cria uma view) Página 54 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI DML (Data Manipulation Language) A DML contém o conjunto de comandos utilizados para manipular os dados, o que deve ser entendido como a criação de novos registros nas tabelas, além da atualização e da exclusão de registros já existentes. Os comandos que compõe a DML são, basicamente, os seguintes. INSERT (Cria um novo registro de dados) UPDATE (Atualiza um registro de dados) DELETE (Exclui um registro de dados) DCL (Data Control Language) Os comandos que compõe a DCL têm por nalidade, basicamente, permitir o controle de aspectos não funcionais do banco de dados, como a segurança dos dados. São os comandos DCL que permitem a criação e exclusão de usuários, a criação de pers de acesso, a alteração de senhas, e as operações de concessão e revogação de acesso aos diversos elementos de dados. Exemplos típicos de comandos DCL são mostrados a seguir. GRANT (Autoriza ao usuário executar uma operação sobre algum elemento de dado) REVOKE (Revoga do usuário o direito de executar uma operação) ALTER PASSWORD (Altera a senha de um usuário) CREATE ROLE (Cria um perfil de acesso) DQL (Data Query Language) A DQL é formada pelo conjunto de comandos e operadores que permitem a realização de consultas no banco de dados. No âmbito dos bancos de dados relacionais, o único comando DQL é o SELECT. No entanto, a DQL engloba uma vasta quantidade de cláusulas e operadores, que permite consultar o banco de dados de inúmeras formas. As principais cláusulas da DQL são as seguintes: FROM (Utilizada para especificar a tabela que se vai selecionar os registros) WHERE (Utilizada para especificar as condições que devem reunir os registros que serão selecionados) GROUP BY (Utilizada para separar os registros selecionados em grupos específicos) HAVING (Expressar a condição que deve ser satisfeita por cada grupo selecionado) ORDER BY (Ordena os registros selecionados) DISTINCT (Selecionar dados sem repetição) Com relação aos operadores lógicos e de comparação, merecem destaque os seguintes: AND (E lógico) OR (OU lógico) NOT (Negação lógica) < (Menor que) > (Maior que) <> (Diferente de) <= (Menor ou Igual que) >= (Maior ou Igual que) = (Igual a) BETWEEN (Utilizado para especificar um intervalo de valores) LIKE (Utilizado na comparação de padrões de cadeias de caracteres) Página 55 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Por m, merecem destaque as funções de agregação, que adicionam à DQL a capacidade de agregar os resultados de uma consulta em um único valor. As principais funções de agregação são as seguintes: AVG (Calcula a COUNT (Calcula SUM (Calcula a MAX (Calcula o MIN (Calcula o média dos valores de um campo determinado) o número de registros da seleção) soma de todos os valores de um campo determinado) valor mais alto de um campo determinado) menor valor de um campo determinado) TCL (Transaction Control Language) Finalizando as categorias de linguagens, temos a TCL, cujos comandos permitem controlar a execução das transações em um SGBD. Os comandos TCL mais comuns são os seguintes: BEGIN TRANSACTION (Define o início de uma transação de banco de dados) COMMIT (Confirma todas as mudanças permanentemente) ROLLBACK (Descarta todas as mudanças nos dados desde que o último COMMIT) SET TRANSACTION (Modifica opções da transação, como o nível de isolamento) Diante de toda a teoria exposta, podemos armar que a resposta da questão é a alternativa E DDL (Data Denition Language). Página 56 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 23. Volume questões de TI Assuntos relacionados: SGBD, Otimizador de Consultas, Data Manipulation Language (DML), Data Denition Language (DDL), Banca: ESAF Instituição: Secretaria do Tesouro Nacional (STN) Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de Sistemas de Informação Ano: 2008 Questão: 13 Em um SGBD (Sistema Gerenciador de Bancos de Dados), as requisições de manipulação de dados são processadas por um componente capaz de determinar uma maneira eciente de implementá-las. Tal componente é o (a). processador da linguagem de manipulação de dados (DML). (b). gerenciador tem tempo de execução. (c). otimizador. (d). processador da linguagem de denição de dados (DDL). (e). esquema físico. Solução: Um Sistema Gerenciador de Bancos de Dados (SGBD) é composto por vários módulos, com atribuições especícas. A Linguagem de Denição de Dados (DDL Data Denition Language), responsável por construções declarativas dos objetos da base de dados, precisa de um processador de DDL (ou compilador) que lhe interprete os comandos. Tal compi- lador processa as denições de esquema, especicados na DDL, e armazena descrições dos esquemas (meta-dados) no catálogo do SGBD. Da mesma forma, a Linguagem de Mani- pulação de Dados (DML Data Manipulation Language), que permite o processamento ou manipulação dos dados armazenados, faz uso de um processador de DML dedicado à tarefa de compilar os comandos DML em códigos-objeto para acesso à base de dados. Essas requisições de acesso são gerenciadas pelo execução processador da base de dados em tempo de (runtime database processor), que recebe as operações de atualização ou obten- ção de dados e, quando necessário, transporta tais dados para fora do banco de dados, em atendimento às consultas efetuadas. Um consulta expressa em uma linguagem de alto-nível, como a linguagem SQL, deve primeiramente ser escaneada, parseada e validada. O processo de escaneamento identica os tokens da linguagem no texto da consulta, ao passo que o parser verica a sintaxe da pesquisa para determinar se houve uma formulação segundo as regras gramaticais impostas. A etapa de validação verica se os atributos e relações presentes na consulta são válidos e se fazem sentido semanticamente face ao esquema do banco de dados. Em seguida, uma estratégia de execução para recuperação do resultado da consulta precisa ser denida. Geralmente, uma consulta possui diversas estratégias de execução. O módulo consultas otimizador de é responsável por elaborar um plano de execução mais adequado para obter o resultado desejado da forma mais eciente possível. As quatro primeiras alternativas apresentadas como possíveis respostas à questão apresentam elementos que constituem um SGBD, sendo que o item c) exibe a resposta correta, conforme à teoria explanada. A alternativa e) exibe não um elemento de SGBD, mas sim um componente da arquitetura de um banco de dados baseada em três esquemas: esquema Página 57 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI físico (ou esquema interno, ou nível interno), esquema conceitual (ou nível conceitual) e esquema(s) externo(s) (ou nível de visão). O objetivo dessa arquitetura em três esquemas é separar as aplicações de usuário da estrutura física do banco de dados. Página 58 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 24. Volume questões de TI Assuntos relacionados: Bancos de Dados Distribuídos, Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 68 A fragmentação de dados utilizada em um banco de dados distribuído tem como objetivo dividir as informações de uma determinada relação R. Sobre essa fragmentação de dados, tem-se que (a). os dados estão sempre replicados pelos diversos nós existentes, no caso das fragmentações horizontal e vertical. (b). não é possível reconstruir a relação original R por meio dos diversos fragmentos existentes. (c). na fragmentação vertical, ocorre a decomposição de atributos de R em um ou mais fragmentos. (d). na fragmentação vertical, ocorre a decomposição de R em subconjuntos de dados selecionados a partir de um critério comum de ltragem relativo a um atributo de R. (e). a reconstrução dos dados de uma fragmentação horizontal é possível através da interseção dos subconjuntos de dados fragmentados. Solução: Como mencionado no enunciado da questão, a fragmentação de dados é uma técnica utilizada em bancos de dados distribuídos, e tem como objetivo dividir as informações de uma determinada relação R por vários servidores (chamados nós) de banco de dados. A fragmentação permite o processamento paralelo, que proporciona ganho de desempenho, especialmente, nas operações de consulta. Os dois métodos de fragmentação mais comuns são a fragmentação horizontal e a fragmentação vertical, ilustrados na Figura 5. Figura 5: fragmentação de dados. As características da fragmentação horizontal são as seguintes: • cada fragmento contém um subconjunto das tuplas da relação completa; • cada tupla de uma relação precisa ser armazenada em pelo menos um servidor; • a relação completa pode ser obtida fazendo a união dos fragmentos; • não há necessidade de replicação de dados entre os nós. Página 59 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Já na fragmentação vertical: • relações são decompostas em conjuntos de atributos mantidos em servidores diferentes; • cada fragmento é uma projeção da relação completa; • a relação completa pode ser obtida fazendo a junção de todos os fragmentos; • há necessidade de replicação da chave primária entre os nós para que seja possível a operação de junção. Como podemos notar, para se obter a relação completa é necessário realizar operações de união (no caso da fragmentação horizontal) ou de junção (no caso da fragmentação vertical). Tais operações são de responsabilidade do SGBD, de modo a permitir aos usuários utilizarem o banco de dados de forma transparente, como se estivessem utilizando um SGBD nãodistribuído. Página 60 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 25. Volume questões de TI Assuntos relacionados: Sistemas Distribuídos, Independência de Localização, Independência de Fragmentação, Independência do Sistema Operacional, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas - Processos de Negócio Ano: 2008 Questão: 64 Sistemas de informações distribuídos são aqueles em que dados são armazenados e processados em diferentes localizações. Um banco de dados distribuído é um exemplo deste tipo de sistema. Para o usuário, um sistema de banco de dados distribuído deve parecer exatamente como um sistema não distribuído. Para que tal meta seja alcançada, alguns objetivos secundários são normalmente estabelecidos, entre os quais NÃO se inclui a (a). independência de localização. (b). independência de fragmentação. (c). independência do sistema operacional. (d). operação contínua. (e). coordenação em um nó central. Solução: Operação contínua Uma vantagem dos sistemas distribuídos (SD) é que eles devem fornecer maior conabilidade e maior disponibilidade. A conabilidade em SD implica no funcionamento sem queda em qualquer momento, isto acontece, porque sistemas distribuídos podem continuar a funcionar mesmo diante da falha de algum componente individual, como um servidor isolado. A disponibilidade refere se ao funcionamento continuamente sem queda do sistema durante um período, isso porque existe a possibilidade de replicação dos dados. Não será preciso desligar o sistema para a execução de alguma tarefa, como adicionar um servidor ou atualizar o sistema de banco de dados. Esta característica é fundamental, uma vez que os sistemas garantem o funcionamento/acesso dos dados/metadados, independente do tempo necessário para manipulá-los. Como os metadados estarão distribuídos (replicados) em todos os servidores, mesmo na presença de uma falha, algum servidor disponibilizará os metadados para serem manipulados. Independência de localização Também conhecida por transparência de localização, é quando os usuários não precisam saber onde estão sicamente armazenados os dados. É uma característica desejável, pois simplica programas e atividades em aplicações e permite que dados migrem de um servidor para outro, sem invalidar qualquer desses programas e atividades. Essa capacidade de migração é desejável porque permite que dados sejam deslocados pela rede em resposta a alterações de exigências de desempenho. Utilizando-se de metadados, a transparência de armazenamento faz com que os usuários das aplicações desconheçam a forma (em que local) como os metadados são mantidos, simplicando a adição de novos servidores no sistema distribuído. Página 61 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Independência de fragmentação Um sistema admite fragmentação de dados se uma dada variável de relação armazenada pode ser dividida em pedaços (fragmentos) para ns de armazenamento físico. A fragmentação é desejável por razões de desempenho: os dados podem ser armazenados no local em que são mais freqüentemente utilizados, de modo que a maior parte das operações seja apenas local e o tráfego na rede seja reduzido. Independência de sistema Operacional O suporte a um sistema de banco de dados distribuídos implica que uma única aplicação seja capaz de operar de modo transparente sobre dados dispersos em uma variedade de banco de dados diferentes, gerenciados por vários SGBDs diferentes, em execução em uma variedade de máquinas diferentes que podem estar rodando em diversas plataformas diferentes e uma variedade de sistemas operacionais. Onde o modo transparente diz respeito à aplicação operar sob um ponto de vista lógico como se os dados fossem gerenciados por um único SGBD, funcionando em uma única máquina com apenas um sistema operacional. Assim, um sistema distribuído consiste em adicionar o poder computacional de diversos computadores interligados por uma rede de computadores ou mais de um processador trabalhando em conjunto no mesmo computador, para processar colaborativamente determinada tarefa de forma coerente e transparente, ou seja, como se apenas um único e centralizado computador estivesse executando a tarefa, portanto a alternativa Página 62 de 120 www.handbookdeti.com.br E está incorreta. Handbook de Questões de TI Comentadas para Concursos 26. Volume questões de TI Assuntos relacionados: Banco de Dados, Normalização de Banco de Dados, Primeira Forma Normal (1FN), Segunda Forma Normal (2FN), Terceira Forma Normal (3FN), Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 46 A relação Vendas, apresentada a seguir, foi montada para armazenar os dados de um sistema de vendas. Considere que atributo sublinhado representa o identicador da relação, e item marcado com * representa atributo multi-valorado. Vendas(NumeroNota, CodProduto, DescProduto, NomeCliente, CPFCliente, Data, QtdeVendida, ValorUnitVendido, Peso, Telefone*) Foram especicadas as seguintes dependências funcionais: CodProduto → DescProduto, Peso NumeroNotaFiscal → Data, CPFCliente NumeroNotaFiscal, CodProduto CPFCliente → → QtdeVendida, ValorUnitVendido NomeCliente Considerando-se que para um dado valor em CPFCliente podem existir vários telefones associados e vice-e-versa, qual o conjunto de tabelas que armazena as informações apresentadas, atende às dependências funcionais e se encontra na terceira forma normal? (a). Produtos(CodProduto, DescProduto, Peso) Vendas(NumeroNota, CodProduto, CPFCliente, QtdeVendida, ValorUnitVendido) Clientes(CPFCliente, NomeCliente, Data, Telefone*) (b). Clientes(CPFCliente, NomeCliente) Telefone(CPFCliente, Telefone) NotasDeVenda(NumeroNota, CodProduto, CPFCliente, Data) Produtos(CodProduto, DescProduto, ValorUnitVendido, Peso) ProdutosVendas(NumeroNota, CodProduto, CPFCliente, QtdeVendida) (c). Clientes(CPFCliente, NomeCliente) Telefone(CPFCliente, Telefone) Nota(NumeroNota, CPFCliente, Data) Produtos(CodProduto, DescProduto, Peso) NotasProdutos(NumeroNota, CodProduto, QtdeVendida, ValorUnitVendido) (d). Vendas(NumeroNota, CodProduto, QtdeVendida, ValorUnitVendido, CPFCliente, Data) Produtos(CodProduto, DescProduto, Peso) Cliente(CPFCliente, NomeCliente) Telefone(CPFCliente, Telefone) (e). Cliente(CPFCliente, Telefone, NomeCliente) Nota(CPFCliente, NumeroNota, CodProduto, QtdeVendida, ValorUnitVendido, Data) Produtos(CodProduto, DescProduto, Peso) Solução: Página 63 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Uma dependência funcional da forma A Volume questões de TI → B revela que cada valor do atributo A determina exatamente um valor do atributo B. Por exemplo, na dependência funcional CodProduto → DescProduto, Peso, supomos CodProduto = 1001, a esse CodProduto estará associada exatamente uma dupla da forma DescProduto, Peso, por exemplo: Sabão em Pó Mix, 500g. Nenhuma outra dupla será permitida para ser representada pelo CodProduto 1001. Um conjunto de tabelas está na terceira forma normal se todas as suas relações satisfazem as condições da terceira forma normal. Uma relação que está na terceira forma normal necessariamente satisfaz as condições previstas na primeira e na segunda forma normal. A primeira forma normal proíbe a existência de campos multivalorados. Logo, a alternativa A já pode ser eliminada, visto que o atributo Telefone da tabela Clientes é multivalorado. Uma relação satisfaz as condições da segunda forma normal se atender as condições da primeira forma normal e, além disso, respeitar a seguinte restrição: todos os atributos nãoprimo (atributos que não fazem parte de nenhuma chave candidata) só podem depender funcionalmente de conjuntos formados por todos os campos de qualquer chave candidata, e não somente de uma parte deles. Exemplo: na tabela NotasDeVenda, os campos CPFCliente e Data dependem funcionalmente somente do campo NumeroNota, e não de toda a chave primária (NumeroNota, CodProduto), que por denição é uma chave candidata. Logo, a alternativa B também pode ser eliminada, uma vez que não atende nem à segunda forma normal. Analisando a denição acima, podemos concluir que as relações da alternativa C satisfazem às condições da segunda forma normal. O que mais é necessário para que essas relações estejam na terceira forma normal? Para responder essa pergunta é necessário conhecer mais algumas denições. A primeira delas é o de atributo não-primo, que, basicamente, é um atributo que não pertence a nenhuma chave candidata da relação. Outro conceito é o de → Z é determinada → Y e Y → Z. Voltando à denição da terceira forma normal. Ela dependência funcional transitiva: quando uma dependência funcional X indiretamente da forma X exige que todo atributo não-primo da relação seja diretamente dependente (ou seja, não seja transitivamente dependente) de qualquer chave candidata. Não existe nenhuma relação transitiva dos atributos não-primo nas relações descritas na alternativa C. Logo, essa é a resposta correta para a questão. Finalizando, a relação Vendas da alternativa D e as relações Cliente e Nota da alternativa E não satisfazem as condições da segunda forma normal. Portanto, também não estão na terceira forma normal. Página 64 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 27. Volume questões de TI Assuntos relacionados: Banco de Dados, Modelo Relacional, Normalização de Banco de Dados, Primeira Forma Normal (1FN), Banca: CESGRANRIO Instituição: Petrobras Cargo: Analista de Sistemas - Eng. de Software Ano: 2008 Questão: 23 É correto armar que qualquer relação válida de um modelo relacional: (a). pode apresentar tuplas duplicadas, desde que não haja chaves candidatas denidas. (b). em seus atributos ordenados da esquerda para a direita, de acordo com a denição. (c). tem suas tuplas naturalmente ordenadas, para ns de localização. (d). tem um índice físico para cada chave candidata, incluindo a chave primária. (e). está, pelo menos, na primeira forma normal. Solução: Conceitualmente, em um banco de dados relacional, as relações podem ser denidas como um conjunto de tuplas. Uma tupla é uma sequência ordenada de atributos e representa, usualmente, um objeto do mundo real e suas informações. Todas as tuplas em uma mesma relação possuem o mesmo conjunto de atributos. Entretanto, em uma relação, elas devem preservar o que é chamado de integridade existencial, que, basicamente, implica que tuplas iguais (com todos os valores dos seus atributos iguais) não são permitidas. Caso contrário, não temos uma relação. A forma de garantir a integridade existencial é denir uma chave primária, que, obrigatoriamente, deve ser não-nula e única em toda relação. Logicamente, sendo a chave primária única, as tuplas duplicadas não serão permitidas e a relação estará garantida. Deve car clara a diferença entre tabela e relação. Uma tabela nada mais é do que um conjunto de linhas e colunas. Já as relações, que já foram denidas acima, são implementadas sicamente em tabelas, que, obviamente, devem atender às condições exigidas em uma relação. Ou seja, nem toda tabela representa uma relação. Na denição da primeira forma normal dada por Date, uma tabela está na primeira formal normal se, e somente se, for isomórca à alguma relação. Isso quer dizer que, especicamente, a tabela deve atender às cinco condições abaixo: • não existe uma ordenação das linhas de cima para baixo; • não existe uma ordenação das colunas da direita para esquerda; • não existem linhas duplicadas; • qualquer interseção linha-coluna deve conter exatamente um valor no domínio aplicável e nada mais; • todas as colunas são regulares, no sentido de não possuírem componentes ocultos como identicadores de linhas, identicadores de colunas, identicadores de objetos ou timestamps ocultos. Veja nas Tabelas 3, 4 e 5 um exemplo de cenário em que a informação contida em uma tabela que não está na 1FN é transportada para outras tabelas que estão na 1FN. Página 65 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI idPessoa nmPessoa dtAniversario nrTelefones 1 João Roberto 01/05/1980 9311-9654 - 3698-5741 2 Juliana Gomes 28/02/1985 3232-4521 - 6352-9821 - 3987-8855 3 Talita Brandão 03/12/1988 5561-9874 Tabela 3: exemplo de tabela que não está na 1FN. idPessoa nmPessoa dtAniversario 1 João Roberto 01/05/1980 2 Juliana Gomes 28/02/1985 3 Talita Brandão 03/12/1988 Tabela 4: exemplo de tabela que está na 1FN. idTelefone idPessoa nrTelefone 1 1 9311-9654 2 1 3698-5741 3 2 3232-4521 4 2 6352-9821 5 2 3987-8855 6 3 5561-9874 Tabela 5: exemplo de tabela que está na 1FN. Dada a exposição teórica, podemos analisar as alternativas da questão: a. falsa, uma relação válida não permite tuplas duplicadas. b. falsa, a ordenação dos atributos não dene a relação. c. falsa, a ordenação das linhas não dene a relação. d. falsa, a relação é uma denição no nível conceitual. Os índices físicos são denidos no nível físico e não inuenciam no conceito de relação. Geralmente, esses índices podem ser livremente criados para qualquer conjunto de atributos, já a obrigação citada de serem criados para cada chave candidata não existe e não faz nenhum sentido. e. verdadeira, pois, por denição, uma tabela representa uma relação se, e somente se, a tabela está na primeira forma normal. Página 66 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 28. Volume questões de TI Assuntos relacionados: Banco de Dados, Normalização de Banco de Dados, Primeira Forma Normal (1FN), Segunda Forma Normal (2FN), Terceira Forma Normal (3FN), Banca: CESGRANRIO Instituição: Petrobras Cargo: Analista de Sistemas - Eng. de Software Ano: 2008 Questão: 25 As informações a seguir são comuns às questões de número 5 ao 8 Considere as tabelas de um banco de dados relacional descritas abaixo, onde os campos que compõem chaves primárias estão assinalados com *. TABELA CAMPOS CLIENTE *CODIGO_C, CPF, NOME, CIDADE PRODUTO *CODIGO_P, DESCRICAO, PRECO VENDA *CODIGO_C, *CODIGO_P, CPF, DATA, QUANTIDADE Há uma chave estrangeira de VENDA para CLIENTE com base nos campos CODIGO_C e de VENDA para PRODUTO com base nos campos CODIGO_P. O campo CPF é chave candidata para CLIENTE e também é armazenado na tabela VENDA. Os campos NOME e DESCRICAO também são chaves candidatas de suas respectivas tabelas. Os campos CIDADE, PRECO, DATA e QUANTIDADE admitem valores repetidos. Sobre as formas normais a que as tabelas satisfazem, assinale a armativa correta. (a). CLIENTE satisfaz à segunda forma normal (2FN), mas não à terceira (3FN). (b). PRODUTO satisfaz à segunda forma normal (2FN), mas não à terceira (3FN). (c). VENDA satisfaz à segunda forma normal (2FN), mas não à terceira (3FN). (d). VENDA não satisfaz à segunda forma normal (2FN). (e). As três tabelas satisfazem à terceira forma normal (3FN). Solução: Primeiramente, vamos denir o que é dependência funcional. Dizemos que B é funcionalmente dependente de A (A → B) se, para cada valor de A, existe exatamente um atributo B. ← estado, uma cidade A implicará em exatamente um estado Um exemplo prático é cidade B correspondente. No caso, A é o determinante e B é o dependente. A dependência funcional trivial indica que um determinante com mais de um atributo pode determinar seus próprios membros quando isolado. Exemplo: {banco, agencia} → {agencia}. A dependência funcional não-trivial indica que um determinante identica outro atributo qualquer {banco, agencia} → {cidade}. Se um atributo A determina B e se B determina C, podemos dizer que A determina C de forma transitiva. Isto é, existe uma dependência funcional transitiva de A para C. Exemplo: cidade → estado, estado → pais, então cidade → pais. Uma chave candidata é um atributo ou conjunto de atributos que é único dentre todos os registros. Já a chave primária é uma chave escolhida entre as chaves candidatas para ser o identicador principal da tabela. Página 67 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Outra denição importante é a do atributo não-primo, que é um atributo que não ocorre em nenhuma das chaves candidatas da tabela. Sabemos que uma tabela está na segunda forma normal se ela está na primeira forma normal e não existe atributo não-primo na tabela que seja funcionalmente dependente de algum subconjunto próprio de qualquer chave candidata. Melhor dizendo: todas as colunas que não fazem parte de nenhuma chave candidata dependem de todas as colunas que compõem qualquer chave candidata. Quando só há uma chave candidata (no caso a primeira) e ela é composta por somente um atributo, automaticamente a tabela estará na segunda forma normal se já tiver atendido às condições da primeira forma normal. Sendo assim, já podemos notar que a tabela CLIENTE e a tabela PRODUTO estão na segunda forma normal garantidamente. Já ao analisarmos a tabela VENDA poderíamos nos enganar ao acharmos que pelo fato de CPF ser dependente funcionalmente de CODIGO_C, estaríamos violando a condição exigida da segunda forma normal, já que CODIGO_C é um subconjunto próprio da chave primária. Essa conclusão seria verdadeira se não fosse pelo fato de {CPF,CODIGO_P} ser uma chave candidata, tornando o atributo CPF primo, ou seja não não-primo. Concluímos, assim, que a tabela VENDA está na segunda forma normal. Uma tabela está na terceira forma normal se qualquer atributo não-primo é não transitivamente dependente de qualquer chave candidata da tabela. Ao analisarmos a tabela CLIENTE, notamos que o atributo CIDADE é o único não-primo, sendo impossível, dessa maneira, haver dependência funcional em que uma chave candidata não seja o atributo determinante. Ou seja, todas as dependências funcionais são diretas a partir de qualquer chave candidata e a tabela CLIENTE está na terceira forma normal. O único atributo não-primo da tabela PRODUTO é PRECO. Portanto, seguindo o mesmo raciocínio anterior, concluímos que PRODUTO está na terceira forma normal. A tabela VENDA tem 2 atributos não-primo: DATA e QUANTIDADE. Como não há dependência funcional entre eles, essa tabela também está na terceira forma normal. Logo, concluímos que todas as tabelas satisfazem à terceira forma normal e a alternativa a ser marcada é a alternativa E. Se continuássemos a analisar quais formas normais são atendidas pelas tabelas da questão, chegaríamos à conclusão de que as tabelas CLIENTE e PRODUTO satisfazem à forma normal de Boyce Codd (FNBC), ao contrário da tabela VENDA, que não satisfaz. Uma tabela que não satisfaz a forma normal de Boyce Codd (FNBC) pode ser identicada com as seguintes características: • encontramos duas ou mais chaves candidatas ({CODIGO_C, CODIGO_P} e {CPF, CODIGO_P}, no caso da tabela VENDA); • as chaves candidatas apresentam mais de um atributo (são compostas); • todas as chaves candidatas têm um atributo em comum (CODIGO_P, no caso das chaves candidatas da tabela VENDA). Página 68 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 29. Volume questões de TI Assuntos relacionados: Modelo Relacional, Banco de Dados, Normalização de Banco de Dados, Banca: FCC Instituição: TRT 2a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2008 Questão: 40 Para eliminar a condição de existência de valores não atômicos em uma coluna de tabela relacional, (a). deve ser aplicada, no mínimo, a primeira Forma Normal. (b). devem ser aplicadas, no mínimo, as quatorze regras de Codd. (c). deve ser aplicada, no mínimo, a Forma Normal Boyce-Codd. (d). deve ser aplicada, no mínimo, a terceira Forma Normal. (e). devem ser aplicadas, no mínimo, as regras de integridade referencial. Solução: Para resolvermos a presente questão é bom relembrarmos alguns tipos de atributos existentes no Modelo Entidade-Relacionamento (MER), o signicado de Normalização de Dados, Super-chave, Chave-candidata, Chave-primária, dependência Funcional e dependência nãoTransitiva entre atributos: • cada entidade em um MER tem propriedades particulares, chamadas a descrevem. Por exemplo, uma entidade EMPREGADO atributos, que pode ser descrita pelo seu nome, o trabalho que realiza, idade, endereço e salário. Uma entidade em particular terá um valor para cada um de seus atributos. Alguns atributos podem ser divididos Endereço de uma entidade Endereço da Rua, Cidade, Estado e CEP. Um atributo que é em subpartes com signicados independentes. Por exemplo, pode ser dividido em composto de outros atributos mais básicos é chamado não são divisíveis são chamados simples ou composto. Já, atributos que atômicos. Muitos atributos têm apenas univalorados (exemplo, Data um único valor. Tais atributos são chamados atributos de Nascimento de uma entidade qualquer). um conjunto de valores. (exemplo, Em outros casos, um atributo pode ter Tais atributos são chamados de atributos Telefone de Contato multivalorados de uma entidade qualquer). Atributos multivalorados podem possuir uma multiplicidade, indicando as quantidades mínima e máxima de valores; • a Normalização de Dados é um processo formal, passo a passo, de análise dos atributos de uma relação com o objetivo de evitar redundância de informação, eliminando as chamadas anomalias de atualização (Inclusão, Exclusão Modicação). Baseia-se no conceito de FORMAS NORMAIS. Uma relação (tabela) é dita estar em uma determinada forma normal, se ela satiszer a um conjunto especíco de restrições; • Super-chave: é qualquer subconjunto dos atributos de uma relação R cujos valores não se repetem em R; • Chave-candidata: é uma super-chave que possua a menor quantidade possível de atributos (uma das Chaves-Candidatas deve ser eleita como Chave-primária); • Dependência Funcional entre Atributos: se o valor de uma Atributo A permite descobrir o valor de um outro Atributo B, dizemos que A determina funcionalmente B (A → B). Por exemplo: NroMatricula → NomeAluno, idade, curso. Assim, sempre que o NroMatricula se repetir tem-se a repetição de NomeAluno, idade e curso; Página 69 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos • Dependência Não-Transitiva: Volume questões de TI ocorre quando cada atributo for funcionalmente de- pendente apenas dos atributos componentes da chave primária ou se todos os seus atributos não chave forem independentes entre si. (A) CORRETA Uma relação se encontra na Primeira Forma Normal (1FN) se todos os domínios de atributos possuem apenas valores atômicos (indivisível), e que o valor de cada atributo na tupla seja simples. A 1FN não permite a construção de relações que apresentem atributos compostos e nem possibilita a existência de atributos multivalorados em suas tuplas. Os únicos valores de atributos permitidos devem ser simples e atômicos. Para normalizar para a Primeira Forma Normal deve-se: • Atributos compostos: cada um dos atributos compostos (ou não atômicos) deve ser dividido em seus atributos componentes; • Atributos multivalorados: quando a quantidade de valores for pequena e conhecida a priori, substitui-se o atributo multivalorado por um conjunto de atributos de mesmo domínio, cada um monovalorado representando uma ocorrência do valor; quando a quantidade de valores for muito variável, desconhecida ou grande, retirase da relação o atributo multivalorado, e cria-se uma nova relação que tem o mesmo conjunto de atributos chave, mais o atributo multivalorado também como chave, porém agora tomado como monovalorado. (B) ERRADA Na verdade, Edgard F. Codd, em 1985, estabeleceu 12 regras (As 12 Regras de Codd) que determinam o quanto um banco de dados é relacional. São elas: 1. Regra das informações em tabelas; 2. Regra de acesso garantido; 3. Regra de tratamento sistemático de valores nulos; 4. Regra do catálogo relacional ativo; 5. Regras de atualização de alto-nível; 6. Regra de sublinguagem de dados abrangente; 7. Regra de independência física; 8. Regra de independência lógica; 9. Regra de atualização de visões; 10. Regra de independência de integridade; 11. Regra de independência de distribuição; 12. Regra não-subversiva. Algumas vezes as regras se tornam uma barreira e nem todos os SGBDs relacionais fornecem suporte a elas. Além de o número de regras estar errado, tal alternativa também não representa a aplicação mínima necessária para atender o requisito da questão. Logo, a alternativa está ERRADA. Página 70 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI (C) ERRADA Um relação é considerada estar na Forma Normal de Boyce-Codd (FNBC), quando: • estiver na Primeira Forma Normal (1FN); e • para cada chave candidata, todos os atributos que não participam da chave candidata são dependentes não transitivos de toda a chave candidata. Para Normalizar para a Forma Normal de Boyce-Codd seguem-se os mesmos passos da Terceira Forma Normal (3FN). No entanto, tal alternativa, assim como a alternativa D, também não representa a aplicação mínima necessária para atender o requisito da questão. Logo, a alternativa também está ERRADA. (D) ERRADA Que tal antes relembrarmos um pouco sobre relação na Segunda Forma Normal (2FN) e na Terceira Forma Normal (3FN)? Uma relação está na 2FN quando: • estiver na Primeira Forma Normal e; • todos os atributos que não participam da chave primária são dependentes funcionalmente (diretos ou transitivos) de toda a chave primária. Um relação é considerada estar na 3FN, quando: • estiver na Segunda Forma Normal e; • todos os atributos que não participam da chave primária são dependentes não transitivos de toda a chave primária. Como vimos, uma relação que está na 3FN também estará na 2FN. Do mesmo modo, uma relação na 2FN também estará na 1FN. Como mencionamos na alternativa A, basta estar na 1FN para atender ao requisito da questão. Assim, concluímos que a alternava está ERRADA por aplicar duas operações de normalização a mais do que o mínimo necessário. (E) ERRADA A Integridade Referencial é utilizada para garantir a Integridade dos dados entre as tabelas relacionadas. Por exemplo, considere um relacionamento do tipo Um-para-Vários entre a tabela Clientes e a tabela Pedidos (um cliente pode fazer vários pedidos). Com a Integridade Referencial, o banco de dados não permite que seja cadastrado um pedido para um cliente que ainda não foi cadastrado. Em outras palavras, ao cadastrar um pedido, o banco de dados verica se o código do cliente que foi digitado já existe na tabela Clientes. Se não existir, o cadastro do pedido não será aceito. Assim, a integridade referencial garante a não corrupção dos dados, de modo a não haver como existir um registro lho sem um registro pai. Página 71 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 30. Volume questões de TI Assuntos relacionados: Banco de Dados, Primeira Forma Normal (1FN), Segunda Forma Normal (2FN), Terceira Forma Normal (3FN), Banca: FCC Instituição: TRT 18a Região Cargo: Analista Judiciário - Tecnologia da Informação Ano: 2008 Questão: 45 Dadas as tabelas abaixo com os respectivos atributos, sendo chave os atributos grifados: I PEDIDO (num-ped, data-ped, total-ped, cod-cliente, nome-cli, endereço-cli) II ITEM (num-ped, cod-produto, qtde-prod, preço-total) III PRODUTO (cod-produto, nome-prod, preço-unitário) Encontra-se na 3FN o que consta em (a). I, II e III. (b). I, apenas. (c). II, apenas. (d). III, apenas. (e). II e III, apenas. Solução: Como este assunto é muito cobrado nos concursos em geral, vamos explorar diversos conceitos importantes para se resolver esta questão com conança. • superchave: é um conjunto de um ou mais atributos que permite a identicação uní- voca de cada entidade em um conjunto de entidades. Na nomenclatura desta questão, uma superchave identica de forma única cada linha de uma tabela. Por exemplo, na relação (conceito que o enunciado deveria utilizar no lugar de tabela) ITEM, o conjunto {num-ped; preço-total} é uma superchave, pois ele pode identicar de forma única cada item dessa relação. É importante perceber que toda relação tem pelo menos uma superchave: conjunto de todos os seus atributos; • chave candidata: é uma superchave tal que nenhum dos seus subconjuntos de atri- butos é uma superchave. Ou seja, se pudermos retirar pelo menos um atributo de uma superchave e ela continuar sendo uma superchave, a superchave inicial não é uma chave candidata. Por exemplo, quando tiramos o atributo preço-total da superchave {numped; preço-total}, continuamos com uma superchave num-ped, pois num-ped identica univocamente cada elemento da relação ITEM. Portanto, {num-ped; preço-total} não é uma chave candidata. Outra forma de entender o signicado de chave candidata é pensar que ela é um subconjunto mínimo de atributos capaz de identicar de forma única cada item de uma relação. Não se esqueça que um relação pode ter mais de uma chave candidata; • chave primaria: é simplesmente uma das chaves candidatas de uma relação. É o projetista que faz essa escolha, quando há mais de uma chave candidata; • dependência funcional: se para cada valor de um atributo A, existe exatamente um valor para o atributo B, dizemos que B é dependente funcional de A (A → B) e que A é o determinante de B. Um bom exemplo é formado pelos atributos CIDADE A e ESTADO B. Como toda cidade implica em somente um estado, temos que A Página 72 de 120 www.handbookdeti.com.br → B; Handbook de Questões de TI Comentadas para Concursos • dependência funcional parcial: Volume questões de TI em uma dependência do tipo A → B, se existir um subconjunto de A tal que ele determine B, dizemos que B é dependente funcional parcial de A. Exemplo: em {CIDADE; BAIRRO} → ESTADO, como CIDADE → ESTADO, dizemos que ESTADO é dependente funcional parcial de {CIDADE; BAIRRO}. Caso não exista esse tipo de subconjunto de A, dizemos que B é dependente funcional total de A; • dependência funcional trivial: indica que um determinante com mais de um atri- buto determina seus próprios membros quando isolado. Exemplo: {banco; agencia} → {agencia} • dependência funcional não-trivial: indica que atributo qualquer {banco; agencia} → {cidade}; • dependência funcional transitiva: um determinante identica outro se um atributo A determina B e B determina C, então, A determina C de forma transitiva. Exemplo: cidade país, então cidade • atributo primo: → → estado, estado → país; atributo membro de qualquer chave candidata (pelo menos uma). Dois exemplos dentro desta questão são: cod-produto e num-ped. Perceba que todos os atributos de uma chave primária são primos; • atributo não-primo: atributo que não ocorre em nenhuma chave candidata de uma relação. O atributo preço-unitário da relação PRODUTO é um exemplo de atributo não-primo; • 1FN: ela diz respeito a atributos. Para que uma relação esteja na 1FN, ela não pode ter nem atributos multivalorados nem relações aninhadas (objetos representados em mais de um registro); • 2FN: ela diz respeito a dependência funcional parcial. Uma relação somente está na 2FN se não houver atributo não-primo dependente funcional parcial de qualquer chave candidata. Ou seja, se houver pelo menos um atributo não-primo dependente funcional parcial de pelo menos uma chave candidata, a relação não estará na 2FN. Lembrando também que para uma relação estar na 2FN, ela também deve estar na 1FN; • 3FN: ela diz respeito a dependência funcional transitiva. Para que uma relação esteja na 3FN, ela não pode ter atributo não-primo dependente transitivamente de qualquer chave candidata. Ou seja, se houver pelo menos um atributo não-primo com dependência funcional transitiva de pelo menos uma chave candidata, a relação não estará na 3FN. Uma consequência é que para uma relação estar na 3FN, todos os atributos não-primo devem depender somente de atributos primos. Lembrando também que para uma relação estar na 3FN, ela também deve estar na 2FN e na 1FN; As dependência funcional de uma relação são determinadas pelo negócio, e não pelo o banco de dados em si. Por isso, o ideal seria o enunciado trazer quais são as dependências funcionais existentes em cada relação. Na falta dessa especicação, o que nos resta é apelar para o bom-senso. Vamos analisar agora cada relação. Como o enunciado não menciona que algum atributo pode ser multivalorado, concluímos que as 3 relações estão na 1FN. PEDIDO (num-ped, data-ped, total-ped, cod-cliente, nome-cli, endereço-cli) Como não há nenhuma chave candidata composta por mais de um atributo nesta relação, não há como existir dependência funcional parcial. Portando, esta relação está na 2FN. Perceba que cod-cliente → nome-cli e que esses dois atributos são não-primos. Isso já basta Página 73 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI para concluirmos que esta relação NÃO está na 3FN. ITEM (num-ped, cod-produto, qtde-prod, preço-total) Nesta relação, há dois atributos não-primos (qtde-prod e preço-total) e uma chave candidata {num-ped; cod-produto}. Veja que (1) num-ped não determina nem qtde-prod nem preço-total; (2) cod-produto não determina nem qtde-prod nem preço-total. Portanto, não há dependência funcional parcial e, por consequência, esta relação está na 2FN. Como não há dependência funcional transitiva, esta relação está na 3FN. PRODUTO (cod-produto, nome-prod, preço-unitário) Pelo mesmo motivo da relação PEDIDO, concluímos também que esta relação está na 2FN. Como só há um atributo não-primo, não há como existir dependência funcional transitiva. Concluímos, portanto, que esta relação também está na 3FN. Pelo o exposto, é possível identicar facilmente que a alternativa correta é a letra e. Página 74 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 31. Volume questões de TI Assuntos relacionados: Banco de Dados, Consulta SQL, Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 60 As relações abaixo compõem uma base de dados em que atributos sublinhados são identicadores e atributos em itálico são chaves estrangeiras. Autor (CPFAutor, Nome, DataNascimento) Obra (TituloObra, DataConclusao, CPFAutor, CodigoAssunto ) Editora (CNPJEditora, Nome, Local) Publicacao (TituloObra, CNPJEditora , DataLancamento ) Assunto (CodigoAssunto, Descricao) Que comando SQL apresenta como resultado a quantidade de publicações do assunto `Policial' por editora? (a). Select P.CNPJEditora, count(P.TituloObra) from Publicacao P inner join Obra O on P.TituloObra = Obra.TituloObra inner join Assunto A on O.CodigoAssunto = A.CodigoAssunto where A.Descricao = `Policial' (b). Select P.CNPJEditora, count(P.TituloObra) from Publicacao P, Obra O, Assunto A where P.TituloObra = O.TituloObra and O.CodigoAssunto = A.CodigoAssunto and A.Descricao = `Policial' group by P.CNPJEditora (c). Select P.CNPJEditora, count(P.TituloObra) from Publicacao P, Obra O, Assunto A, Editora E group by P.CNPJEditora having A.Descricao = `Policial' (d). Select P.CNPJEditora, sum(P.TituloObra) from Publicacao P inner join Obra O on P.TituloObra = Obra.TituloObra inner join Assunto A on O.CodigoAssunto = A.CodigoAssunto where A.Descricao = `Policial' group by P.CNPJEditora (e). Select P.CNPJEditora, count(P.TituloObra) from Publicacao P left outer join Obra O on P.TituloObra = Obra.TituloObra left outer join Assunto A on O.CodigoAssunto = A.CodigoAssunto group by P.CNPJEditora Solução: Para encontrarmos o resultado da quantidade de publicações do assunto Policial por editora, devemos ter em mente que precisamos utilizar a função de agrupamento groupby para Página 75 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI agrupar as editoras com mesmo CNPJ, e a função agregada count para contabilizar o número de registros de um determinado CNPJ. (A) ERRADA Inner join é uma operação de composição de relações condicionais e é usada na cláusula from. Sua sintaxe é relacao1 inner join relacao2 on condição. O select em questão explora as relações de chave estrangeira entre os relacionamentos, e a execução dos dois inner join produzem um relacionamento de onde é possível extrair os CNPJs cujos valores do atributo Descricao de Assunto são Policial. O problema desse select é que ele não agrupa os registros para contabilizar a quantidade de um determinado CNPJ. Portanto, esta alternativa é errada. (B) CORRETA Os predicados da cláusula where do select em questão produzem a mesma relação obtida na alternativa A. Com uma diferença, ao obter os registros que contém a Descricao de Assunto igual a Policial, agrupa-se as editoras de mesmo CNPJ para contabilizar a quantidade de editoras para cada CNPJ por meio da função count no select. Portanto, esta é a alternativa correta. Vale destacar que na cláusula where as operações de = exploram os relacionamentos entre as relações existentes. Então, quando selecionamos os registros com Descricao igual a Policial, as operações de = garantem que estamos selecionando registros com mesmo TituloObra e CodigoAssunto. (C) ERRADA O candidato desatento tende a marcar esta alternativa, pois se esquece dos relacionamentos existentes entre as relações. O select desta alternativa agruparia atributos CNPJEditora da relação Publicacao diferentes do atributo CNPJEditora da relação Editora. O mesmo é válido para os atributos de TituloObra de Obra e Publicacao. Portanto, esta alternativa não é a correta. (D) ERRADA O select desta alternativa utiliza a função sum para contabilizar a quantidade de um determinado CNPJ. Primeiramente, a função correta para essa nalidade é a count, e segundo, a função sum aceita como entrada um conjunto de números. Nesse select, a função sum recebe o parâmetro P.TituloObra, que não é um número. Portanto, esta alternativa é errada. (E) ERRADA O select desta alternativa não possui uma cláusula where que restringe o atributo Descrição da relação Assunto à palavra Policial. Portanto, esta alternativa também não é a correta. Página 76 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 32. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Banca: CESGRANRIO Instituição: Petrobras Cargo: Analista de Sistemas - Eng. de Software Ano: 2008 Questão: 26 Considere o comando em SQL apresentado a seguir. SELECT C.CIDADE, AVG(P.PRECO) FROM CLIENTE C, PRODUTO P, VENDA V WHERE C.CODIGO_C = V.CODIGO_C AND P.CODIGO_P = V.CODIGO_P AND P.PRECO > 100 GROUP BY C.CIDADE HAVING AVG(P.PRECO) < 200 O que exibe esse comando? (a). Para cada cidade, a média de preço de produtos vendidos a clientes da cidade com valores acima de 100, se a média for menor que 200. (b). Para cada cidade, a média de preço dos produtos vendidos a clientes da cidade com valores entre 100 e 200. (c). Para cada cidade, a quantidade de produtos vendidos com valores entre 100 e 200. (d). Para cada cidade, a média de preço dos produtos vendidos a clientes da cidade que compraram produtos de valores maiores do que 100 e cuja média de compra é menor do que 200. (e). Apenas a cidade cuja média de preço dos produtos vendidos é a mais alta dentre as que tiveram média menor do que 200 e produtos vendidos com valores acima de 100. Solução: A primeira cláusula WHERE (C.CODIGO_C = V.CODIGO_C) irá implementar uma junção entre as tabelas CLIENTE e VENDA. Essa junção, caso fosse considerada sozinha, iria listar registros em que cada um iria representar uma venda de produto, mas com informações adicionais do cliente: NOME e CIDADE. Adicionando mais uma cláusula de junção (P.CODIGO_P = V.CODIGO_P ), será re- alizada uma junção com a relação já obtida anteriormente. Nesse caso, todos os produtos vendidos serão listados com suas respectivas informações de descrição, preço, data de quando foi realizada a venda e as informações completas do cliente. Entretanto, ao se usar a cláusula P.P RECO > 100, nem todos os produtos vendidos serão listados. Serão listados somente aqueles cujo valor preço unitário for superior a 100. A cláusula GROUP BY reunirá informações, de C.CIDADE irá agrupar as vendas dos produtos por cidade e acordo com AV G(P.P RECO), do preço médio unitário de cada produto, dentro, é claro, dos produtos que já possuem valor unitário maior do que 100. Exemplicando: caso os clientes de uma determinada cidade X tenham comprado exatamente 6 produtos com os preços 1000, 500, 120, 120, 100 e 50, somente serão considerados os produtos com valor maior do que 100, que são os de 1000, 500, 120 e 120. Página 77 de 120 www.handbookdeti.com.br A média Handbook de Questões de TI Comentadas para Concursos unitária desses produtos é Volume questões de TI (1000 + 500 + 120 + 120)/4 = 435. Já a última cláusula HAVING AV G(P.P RECO) < 200 irá permitir que somente as cidades cujo preço médio dos produtos adquiridos seja menor que 200. A cidade X anteriormente citada não irá entrar na relação nal, já que a média dos preços unitários de seus produtos adquiridos é maior do que 200 (435). Podemos concluir que a alternativa correta é a letra A. A letra D pode confundir um pouco, mas ela está errada, pois o que está sendo considerado é a média do preço do produto HAVING AV G(P.P RECO) < 200 e não a média de compra. Página 78 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 33. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Banca: FCC Instituição: MPU Cargo: Analista de Desenvolvimento de Sistemas Ano: 2007 Questão: 64 Funções de um banco de dados relacional que operam contra uma coleção de valores, mas retornam um único valor, são (a). agregadas tal como, por exemplo, MAX. (b). escalares tal como, por exemplo, COUNT. (c). escalares tal como, por exemplo, SUM. (d). agregadas tal como, por exemplo, MID. (e). agregadas tal como, por exemplo, LEFT. Solução: Um banco de dados relacional usa um conjunto de tabelas para representar tanto os dados como as relações entre eles. As consultas em um sistema de banco de dados, tipicamente, são realizadas segundo a linguagem SQL (Structured Query Language Linguagem de Consulta estruturada), que possui diversas partes, sendo que as principais são a: • Linguagem de denição de dados (DDL). A DDL proporciona comandos para a denição de esquemas de relações, exclusão de relações, criações de índices e modicação nos esquemas das relações; • Linguagem interativa de manipulação de dados (DML). A DML engloba comandos para inserção, exclusão e modicação de registros no banco de dados. A estrutura básica de uma expressão em SQL é formada por três cláusulas: e where. A cláusula select é utilizada from associa das consultas. A cláusula select, from para relacionar atributos desejados nos resultados as relações que serão pesquisadas, e cláusula where consiste em um predicado (expressão booleana). Tipicamente, uma consulta tem a seguinte forma: select a1, a2 from r1, r2 where p Onde a1 e a2 representam os atributos a serem mostrados no resultado da consulta, r1 e r2 as relações (tabelas) do banco e p o predicado. As funções escalares são funções que retornam um único valor como resultado, baseado sobre um valor de entrada. Estão relacionadas à manipulação de strings, de números, de data, funções do sistema e funções de conversão de tipos de dados. Alguns exemplos de funções escalares: UCASE (converte uma string para maiúsculo), LCASE (converte uma string para minúsculo) e LEN (retorna o tamanho da string). As funções agregadas são funções que tem como entrada um conjunto de valores (valores Página 79 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI de uma coluna de uma tabela), e retornam um valor simples. Algumas funções agregadas: AVG (average média), MIN (minimum minímo), MAX (maximum máximo), SUM (total - total) e COUNT (contagem). (A) A função MAX é uma função agregada da linguagem SQL. Portanto, alternativa correta. (B) A função COUNT também é uma função agregada. lizada para contar o número de registros de uma tabela. função COUNT com a cláusula A função COUNT é muito utiA SQL não permite utilizar a distinct. (C) A função SUM também é uma função agregada. A entrada para SUM e para AVG precisa ser um conjunto de números, mas as outras funções agregadas aceitam também tipos de dados não-numéricos (como strings). (D) A função MID é uma função escalar que extrai caracteres de uma string. (E) A função LEFT é uma função escalar que retorna os caracteres mais a esquerda de uma string de acordo com a quantidade especicada. Página 80 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 34. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Banca: FCC Instituição: TCE/CE Cargo: Analista de Controle Externo - Auditoria de Tecnologia da Informação Ano: 2008 Questão: 75 Considere o seguinte requisito: Para cada departamento com menos de 1000 funcionários devem ser listados os salários médios de cada departamento. As cláusulas SQL-ANSI vinculadas a uma única expressão SELECT, uma que calcula o salário médio e a outra que restringe a quantidade de empregados são, respectivamente, (a). MID e COUNT. (b). AVG e COUNT. (c). AVG e HAVING. (d). MID e WHERE. (e). MID e HAVING. Solução: No SQL-ANSI, a função que calcula a média de um conjunto de valores é a AVG (que vem de average, que em inglês signica média). Portanto, essa já é uma pista de que a resposta só pode ser a alternativa B ou C. A função COUNT, que aparece na alternativa B, é utilizada para fazer uma contagem simples da quantidade de elementos retornados em uma consulta SQL. Portanto, por eliminação, já seria possível chegar a resposta da questão, que é a alternativa C. No entanto, ela será necessária a consulta para contar o número de empregados por departamento. A cláusula HAVING, assim como a cláusula WHERE, é utilizada para restringir os resultados das consultas SQL. No entanto, o HAVING só é utilizado em consultas que retornam resultados agrupados pela cláusula GROUP BY. Pensemos no que poderia ser um modelo de dados para o caso ilustrado na questão: DEPARTAMENTOS (DPTO_ID, DPTO_NOME) FUNCIONARIOS (FUNC_ID, FUNC_NOME, FUNC_SALARIO) DEPARTAMENTOS_FUNCIONARIOS (DPTO_ID, FUNC_ID) Portanto, a consulta que retornaria o nome e o salário médio dos departamentos com menos de 1000 funcionários seria: SELECT D.DPTO_NOME, AVG(F.FUNC_SALARIO) AS SALARIO_MEDIO // Calcula média salarial FROM FUNCIONARIOS F, DEPARTAMENTOS_FUNCIONARIOS DF, DEPARTAMENTOS D, ( SELECT DPTO_ID, COUNT(FUNC_ID) AS FUNCS_POR_DPTO // Contagem de funcionários Página 81 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos FROM DEPARTAMENTOS_FUNCIONARIOS GROUP BY DPTO_ID // Agrega contagem por departamento HAVING FUNCS_POR_DPTO < 1000 // Restringe resultado ) AS T1 WHERE F.FUNC_ID = DF.FUNC_ID AND DF.DPTO_ID = T1.DPTO_ID AND T1.DPTO_ID = D.DPTO_ID GROUP BY D.DPTO_NOME // Agrega média salarial por departamento Página 82 de 120 www.handbookdeti.com.br Volume questões de TI Handbook de Questões de TI Comentadas para Concursos 35. Volume questões de TI Assuntos relacionados: Banco de Dados, Consulta SQL, Operações de Composição de Relações, Banca: Cesgranrio Instituição: BNDES Cargo: Analista de Sistemas - Desenvolvimento Ano: 2008 Questão: 42 Observe as seguintes tabelas de um sistema: Pessoa (nomePessoa, endereço) Filme (nomeFilme, estúdio, verba) Trabalha (nomePessoa(FK), nomeFilme(FK), atividade, salário) Um administrador de dados deseja fazer o seguinte relatório: Todas as pessoas, os lmes nos quais já trabalharam e o total recebido por cada lme. Se uma pessoa nunca trabalhou num lme, ela deve aparecer no relatório. A atividade que a pessoa exerceu no lme (ex: ator, diretor, câmera etc.) não é importante para o relatório. Qual consulta retorna o conjunto resposta correto? (a). (b). (c). (d). (e). SELECT P.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P LEFT OUTER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa GROUP BY P.nomePessoa, T.nomeFilme SELECT T.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P INNER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa GROUP BY T.nomePessoa, T.nomeFilme SELECT P.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P LEFT OUTER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa GROUP BY P.nomePessoa, T.nomeFilme HAVING sum(T.salário) > 0 SELECT P.nomePessoa, F.nomeFilme, sum(T.salário) total FROM Pessoa P INNER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa INNER JOIN Filme F ON F.nomeFilme = T.nomeFilme WHERE T.atividade IS NOT NULL AND T.salário > 0 GROUP BY P.nomePessoa, F.nomeFilme SELECT T.nomePessoa, T.nomeFilme, sum(T.salário) total FROM Pessoa P LEFT OUTER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa LEFT OUTER JOIN Filme F Página 83 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI ON F.nomeFilme = T.nomeFilme Solução: Esta questão tenta explorar o conhecimento do candidato em relação às operações INNER JOIN e LEFT OUTER JOIN devido à restrição se uma pessoa nunca trabalhou num lme, ela deve aparecer no relatório. A operação INNER JOIN é usada tipicamente na cláusula FROM para composição de relações. Sua sintaxe é <tabela A> INNER JOIN <tabela B> ON <condição desejada>. A operação INNER JOIN cria uma nova tabela, combinando os valores das duas tabelas (tabela A e tabela B ) com base na condição desejada de junção das tabelas. A consulta com A com cada linha da tabela B para encontrar INNER JOIN compara cada linha da tabela todos os pares de linhas que satisfazem a condição desejada. Quando a condição desejada é satisfeita, valores da coluna para cada par de linha encontrado das tabelas A e B são combinados em uma linha da nova tabela. Note que, a operação INNER JOIN retorna as linhas das tabelas somente quando a condição desejada é satisfeita, isto é, se na tabela A existe uma linha que não satisfaz a condição desejada, esta linha não aparece no resultado da operação INNER JOIN. Como na operação INNER JOIN, a operação LEFT OUTER JOIN também é usada tipicamente na cláusula FROM para composição de relações. LEFT OUTER JOIN <tabela B> ON <condição desejada>. Sua sintaxe é <tabela A> O LEFT OUTER JOIN é processado conforme mostrado anteriormente para o INNER JOIN. Entretanto, o LEFT OUTER JOIN retorna todas as linhas da tabela da esquerda (tabela A), mesmo se a condi- ção desejada não encontrar nenhuma linha correspondente na tabela da direita (tabela B ). Ou seja, o LEFT OUTER JOIN retorna todas linhas da tabela da esquerda, mais as linhas da tabela da direita que satisfazem a condição desejada ou, nulo caso não satisfaça. Se a tabela da esquerda retorna uma linha e a tabela da direita retornar mais que uma linha para a condição desejada, a linha da tabela esquerda será repetida para cada linha encontrada da tabela da direita. Existem outras operações relacionadas à cláusula JOIN, como: • EQUI-JOIN - mesma funcionalidade do operador INNER JOIN, mas aceita somente comparação de igualdade na condição desejada • NATURAL JOIN - uma especialização da operação EQUI-JOIN, porém a condição desejada está implícita na operação. Por exemplo, TURAL JOIN department • SELECT * FROM employee NA- CROSS JOIN - retorna o produto cartesiano do conjunto de linhas das tabelas associadas. É equivalente à operação INNER JOIN, onde a condição desejada é sempre verdadeira • RIGHT OUTER JOIN - retorna todas as linhas da tabela da direita, mesmo se a condição desejada não encontra nenhuma linha correspondente na tabela da esquerda • FULL OUTER JOIN é uma combinação dos tipos das operações LEFT OUTER JOIN e RIGHT INNER JOIN, isto é, ao resultado nal são adicionadas as linhas da tabela esquerda que não correspondem a nenhuma linha da tabela direita, e similarmente para as linhas da tabela da direita Conforme explicado anteriormente, para a nossa consulta retorna o conjunto de resposta correto, devemos utilizar a operação LEFT OUTER JOIN para satisfazer a restrição se uma Página 84 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI pessoa nunca trabalhou num lme, ela deve aparecer no relatório, pois existe a possibilidade uma pessoa nunca ter trabalho em um lme. Então, a operação LEFT OUTER JOIN deve ser entre as tabelas P essoa e T rabalha, ON P.nomePessoa = T.nomePessoa. P essoa é a tabela esquerda, isto é, Pessoa P LEFT OUTER JOIN Trabalha T onde a tabela a consulta SQL deve conter a seguinte trecho: A seguir, analisamos as alternativas desta questão: (A) CORRETA Esta consulta retorna o conjunto de resposta correto, pois faz uso da operação LEFT OUTER JOIN entre as tabelas P essoa P essoa e T rabalha na cláusula FROM, sendo que a tabela está do lado esquerdo da operação, satisfazendo a restrição do enunciado. disso, esta consulta utiliza a cláusula GROUP BY para formar grupos de e T.nomeP essoa. Além P.nomeP essoa Isso é utilizado para somar os salários das pessoas que trabalharam nos lmes na cláusula SELECT (sum(T.salário) ). E, por m, esta consulta exibe o resultado na cláusula SELECT P.nomePessoa, T.nomeFilme, sum(T.salário) total como o enunciado solicitou. Portanto, alternativa correta. (B) ERRADA Esta consulta não retorna o conjunto de resposta correto, pois faz uso da operação INNER JOIN na cláusula FROM, conforme explicado anteriormente. Então, alternativa errada. (C) ERRADA Esta consulta é semelhante à consulta da alternativa (A), com a diferença do uso da cláusula HAVING com a condição sum(T.salário) > 0. A utilização desta condição na consulta, não satisfaz a restrição imposta pelo enunciado (se uma pessoa nunca trabalhou num lme, ela deve aparecer no relatório), pois o resultado nal não conterá as pessoas que nunca trabalharam em um lme. Portanto, alternativa errada. (D) ERRADA Esta consulta não retorna o conjunto de resposta correto, pois faz uso da operação INNER JOIN na cláusula FROM, conforme explicado anteriormente. Então, alternativa errada. (E) ERRADA Esta consulta faz uso duas vezes da operação LEFT OUTER JOIN. Uma nova tabela (tabela A) é produzida pela operação Pessoa P LEFT OUTER JOIN Trabalha T ON P.nomePessoa = T.nomePessoa. Esta nova tabela (tabela A) é utilizada para gerar outra nova tabela (tabela B ) pela operação tabela A LEFT OUTER JOIN Filme F ON F.nomeFilme = T.nomeFilme. Observe que esta última operação é desnecessária, pois com a primeira operação é possível gerar o conjunto resposta correto. A alternativa está errada, pois não utiliza a cláusula GROUP BY para formar grupos P.nomeP essoa e T.nomeP essoa para somar os salários das pessoas que trabalharam nos lmes na cláusula SELECT (sum(T.salário) ). Página 85 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 36. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, JOIN, HAVING, Banca: Cesgranrio Instituição: BNDES Cargo: Analista de Sistemas - Desenvolvimento Ano: 2008 Questão: 49 Seja o seguinte grupo de tabelas de um sistema: fabricante (idfabricante, nome, endereço) peça (idmodelo, nome, descrição) constrói (idmodelo (FK), idfabricante (FK), data, quantidade, cor) Um programador monta a seguinte consulta SQL: SELECT f.nome, count(distinct c.idmodelo) as num FROM fabricante f \textbf{INNER JOIN} constroi c ON f.idfabricante = c.idfabricante WHERE c.cor = 'VERMELHO' GROUP BY f.nome HAVING count(distinct c.idmodelo) > 10 ORDER BY num DESC Qual o retorno dessa consulta? (a). Os nomes dos fabricantes e a respectiva quantidade total de peças construídas na cor vermelha, desde que, em cada data, a quantidade construída seja maior que 10; o relatório estará ordenado de forma descendente pela quantidade de peças construídas. (b). Os nomes dos fabricantes que já construíram mais de 10 modelos diferentes de peças na cor vermelha e a quantidade de modelos diferentes, mostrando a lista ordenada de forma descendente pela quantidade. (c). Os nomes dos fabricantes que já construíram pelo menos uma peça na cor vermelha; o relatório estará ordenado de forma descendente na quantidade de modelos diferentes construídos. (d). Todos os nomes dos fabricantes e a respectiva quantidade de modelos diferentes de peças vermelhas que já construíram; se um fabricante nunca construiu uma peça na cor vermelha, a contagem mostrará zero. (e). Todos os nomes dos fabricantes e a respectiva quantidade de modelos diferentes construídos, não importando a quantidade de peças, cor ou a data da construção; o relatório estará ordenado de forma descendente na quantidade de peças. Solução: Para resolver esta questão, é necessário conhecer os conceitos de chave primária, chave estrangeira e, por m, entender o que os principais comandos SQL fazem e o resultado deles sobre os dados manipulados de uma ou mais tabelas. Por ser mais essencial, vamos começar entendendo o que são chave primária e estrangeira. Tabelas são coleções de dados que possuem identidade entre si pela semântica. Isso signica Página 86 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI que as linhas (ou tuplas) de uma tabela referem-se a coisas que guardam semelhança entre si. Entretanto, apesar das semelhanças, cada tupla é única e deve ser assim, para que os dados armazenados façam sentido à aplicação e ao usuário. Para garantir essa unicidade, foi desenvolvido o conceito de chave primária nos bancos de dados. A chave primária pode ser composta por um ou mais campos da tabela. O SGBD (Sistema Gerenciador de Banco de Dados) irá garantir que haverá apenas uma tupla com uma determinada combinação dos campos que compõe a chave primária. Ilustrando como exemplo, podemos supor uma tabela que armazene os produtos de uma mercearia. A tabela, poderia ser: produto (nome, quantidade, precoUnitario) O campo nome foi utilizado como chave primária. Sabemos disso, pois, por convenção, os campos de uma tabela que aparecem sublinhados são os considerados como chave primária. Nesse exemplo, o SGBD, ao tratar as operações de inserção permitiria que cada produto aparecesse uma vez na tabela. Isso quer dizer que, se por descuido, o usuário já tivesse cadastrado o produto 'banana' e tentasse cadastrar novamente 'banana' o sistema receberia um erro por chave duplicada. Repare que isso é extremamente útil. Na hora de fazer a contabilidade e de gerar relatórios de reposição de estoque, 'banana' é um único produto da mercearia e não queremos que ela apareça repetidamente. Para entender o conceito de chave estrangeira, podemos utilizar o exemplo da mercearia também. Sabemos que, além do cadastro do estoque, o comerciante precisa manter o histórico de suas vendas, de modo que possa atualizar sua contabilidade e prestar contas ao governo. Para tal, podemos supor que o desenvolvedor do aplicativo de controle comercial tenha criado uma tabela que irá registrar todas as vendas feitas. Para isso, ele criará as tabelas: venda (idVenda, data) itemVenda (idVenda (FK), nomeProduto (FK), quantidade) Veja que a tabela venda possui também um campo de chave primária. Como vendas não possuem nomes, podemos imaginar que esse campo pode ser numérico e sequencial, de modo a impedir que vendas sejam sobrescritas. A tabela itemVenda é criada por um motivo muito simples: repare que cada venda poderá ter mais de um item nela; o freguês pode levar, na mesma compra, 6 bananas e 3 maçãs. Se não tivéssemos a tabela itemVenda, para cada produto vendido teríamos que, além de armazenar o identicador da venda, armazenar também a data dela. Isso causaria uma repetição de valores indesejada, aumentando desnecessariamente o tamanho do banco, além de prejudicar a velocidade de processamento de algumas consultas sobre ele. Repare que a tabela itemVenda possui uma chave primária composta de 2 campos: Venda e nomeProduto. Ambas aparecem com um (FK) após seu nome. esses campos são chaves estrangeiras importadas de outras tabelas. id- Isso indica que no caso de idVenda, ela é importada da tabela venda, do campo de mesmo nome; nomeProduto vem da tabela produto, do campo 'nome'. O controle realizado pelo SGBD sobre chaves estrangeiras visa a garantir a integridade referencial entre os diversos dados armazenados no banco de da- dos. No caso de nosso exemplo, a existência das chaves estrangeiras na tabela itemVenda pretende garantir que só existam itens de venda para vendas que realmente existam e que Página 87 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI os produtos das vendas estejam cadastrados antes de serem vendidos. (Além desse controle, há também outros sobre a exclusão de itens em cascata, onde, por exemplo, a remoção de um produto poderia desencadear a deleção dos itens de venda cadastrados para ele). A chave primária composta, conforme o exemplo da tabela itemVenda tem a seguinte semântica: para cada item de venda cadastrado na tabela itemVenda só poderá existir uma única referência a um produto para cada venda distinta. Em outras palavras, na venda de número '10' poderá aparecer apenas uma vez o item 'banana'. Veja que isso não limita a compra do cliente a apenas uma banana, pois o campo 'quantidade' permite que várias bananas sejam vendidas para o cliente. A diferença estará apenas no armazenamento dessa informação no sistema, pois o item banana aparecerá apenas uma vez, com a quantidade comprada registrada no campo especíco para isso. Fica claro que essa medida evita que várias linhas para o mesmo produto sejam repetidas para expressar a mesma compra. Utilizando esse artifício, economiza-se muito espaço, além de se aumentar também a velocidade das consultas, visto que, em qualquer hipótese, uma quantidade maior de linhas em uma tabela resultará, impreterivelmente, em maior tempo de consulta. (Este tipo de preocupação com otimização de tempos de consulta e quantidade de armazenamento deu origem ao estudo das formas normais. Complemente seu aprendizado buscando por essa informação). Com essas informações, passamos a entender a estrutura das tabelas apresentadas: fabricante (idfabricante, nome, endereço) • Cada fabricante cadastrado será identicado pelo seu id (idFabricante) respectivo. peça (idmodelo, nome, descrição) • Cada peça cadastrada será identicada pelo seu id (idModelo) respectivo. constrói (idmodelo (FK), idfabricante (FK), data, quantidade, cor) • Cada linha da tabela constrói terá a quantidade e a cor de uma única peça fabricada por um fabricante especíco em uma determinada data. Além disso, em uma determinada data, um fabricante só produzirá uma determinada peça em uma única cor. Com essas denições, podemos passar à segunda parte da questão que envolve entender os comandos SQL. Nessa questão são utilizados os seguintes comandos: • SELECT: indica quais os campos das tabelas que são listadas no comando exibir; • FROM: indica as tabelas que fazem parte da consulta em questão; • INNER JOIN: esse comando, sempre que aparecer, estará entre duas FROM se deseja após o comando tabelas e logo FROM. Ele é um indicador que informa que os dados da tabela anterior a ele serão cruzados com os dados da tabela posterior, utilizando a comparação descrita no campo ON. Este comando é um caso especíco do comando JOIN. O prexo INNER indica que apenas os registros que casarem na comparação do campo ON deverão ser retornados; • WHERE: dene os ltros que deverão ser aplicados na consulta. De todos os registros resultantes da junção das tabelas envolvidas na consulta, apenas aqueles que atenderem às restrições descritas aqui deverão ser considerados para o resultado; • GROUP BY: o resultado da consulta será agrupado pelo(s) campo(s) indicados neste comando. Este comando é utilizado em conjunto com funções de agregação, que, de Página 88 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI modo geral, geram estatísticas sobre outros campos que não os listados aqui. No caso de nosso exemplo, deseja-se contar os modelos diferentes resultantes da consulta agrupados pelo nome do fabricante; • HAVING: esta é outra cláusula de restrição ao resultado da consulta. Aqui, pode-se denir parâmetros para os campos HAVING e WHERE agregados. A diferença primordial entre a cláusula é que os ltros descritos na segunda são aplicados no cálculo da consulta enquanto que os da primeira são aplicados apenas ao resultado pronto. De um modo geral, ltros colocados em aqueles denidos em • ORDER BY: HAVING ; WHERE geram consultas mais rápidas do que os campos aqui descritos serão utilizados como parâmetro de orde- nação do resultado da consulta. Por padrão, os campos são ordenados seguindo em que aparecem. Assim, o SGBD ordena o resultados sobre o primeiro campo, depois, considerando essa primeira ordem, sobre o segundo e assim por diante. A ordenação pode ser ascendente - do menor para o maior - utilizando o suxo ASC após o campo em questão, ou descendente - utilizando o suxo DESC. Por padrão, a ordenação é ascendente em todos os campos listados. Vistos os comandos utilizados, basta agora que analisemos a consulta em questão combinandoa com as informações que são armazenadas nas tabelas de acordo com o estudo das chaves. Vejamos a Figura 6. Figura 6: cláusulas SQL e suas interpretações. Portanto, a resposta da questão é a letra (B). Página 89 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 37. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Consulta SQL, Banca: Cesgranrio Instituição: IBGE Cargo: Analista de Sistemas - Suporte Ano: 2010 Questão: 45 Considere uma tabela em um banco de dados relacional. A tabela apresenta três atributos do tipo texto, sendo CPF o campo chave. Cliente(CPF, Nome, Endereco) Considerando-se que homônimos são pessoas que possuem o mesmo nome, mas CPF diferentes, a expressão SQL que resulta na lista dos Clientes que têm homônimos, juntamente com o número de homônimos, é: (a). (b). (c). (d). (e). SELECT DISTINCT C1.Nome, C1.CPF, COUNT(C2) FROM Cliente C1, Cliente C2 WHERE C1.Nome = C2.Nome AND C1.CPF <> C2.CPF SELECT Nome, CPF, (SELECT COUNT(*) FROM Cliente C1 WHERE C.Nome = C1.Nome AND C.CPF <> C1.CPF) FROM Cliente C SELECT Nome, CPF, COUNT(Cliente) FROM Cliente GROUP BY Nome, CPF HAVING COUNT(*) > 1 SELECT TOP 1 C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.Nome = C2.Nome AND C1.CPF <> C2.CPF SELECT C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.CPF <> C2.CPF AND C1.Nome = C2.Nome GROUP by C1.Nome, C1.CPF HAVING count(*) > 0 Solução: A resposta da questão é alternativa E. Para compreendê-la, vamos analisar cada uma das partes da consulta mostrada na alternativa. Para facilitar a explicação, abaixo a consulta é mostrada novamente, porém com as linhas numeradas. 1 2 3 4 5 SELECT C1.Nome, C1.CPF, COUNT(*) FROM Cliente C1, Cliente C2 WHERE C1.CPF <> C2.CPF AND C1.Nome = C2.Nome GROUP by C1.Nome, C1.CPF HAVING count(*) > 0 Página 90 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Na linha 1, é utilizado o comando SELECT, que indica quais serão as colunas retornadas pela consulta. Foram selecionadas as colunas CPF, NOME. A terceira coluna que será retornada na consulta é a coluna COUNT(*). Na linguagem SQL, o operador COUNT serve para contar a quantidade de ocorrências de uma determinada combinação de valores das colunas. Na consulta em questão, a expressão COUNT(*) irá retornar a quantidade de vezes que uma determinada combinação dos valores da colunas NOME e CPF se repete no resultado da consulta. Para que o operador COUNT funcione, é necessário ainda que se utilize a cláusula GROUP BY, enumerando a combinação de colunas que se deseja agrupar. Na consulta em questão, essa exigência é cumprida na linha 4. Já na linha 2, temos a cláusula FROM, que é utilizada para enumerar as tabelas que serão necessárias para a execução da consulta. Como deseja-se descobrir os clientes homônimos, é necessário que se compare o nome de um cliente com o nome dos demais. Portanto, na cláusula FROM o programador teve que trabalhar com duas tabelas CLIENTE. Em outras palavras, na linha 2 gerou um produto cartesiano da tabela CLIENTE com ela mesma. Para restringir o produto cartesiano mencionado, na linha 3 o programador teve que adicionar algumas restrições. Na primeira delas (C1.CPF <> C2.CPF), o programador garante que o nome de um dado cliente (que é identicado unicamente pelo CPF) só será comparado com o nome dos demais, e não com seu próprio nome. Já na segunda restrição (C1.Nome = C2.Nome), o programador verica se os clientes possuem o mesmo nome. Na linha 5 o programador faz uso da cláusula HAVING, que tem como função restringir os resultados em consultas que façam uso de operadores de agregação, como SUM, COUNT, MEDIA, DEVPAD, entre outros. Na consulta em questão, a expressão utilizada foi HA- VING count(*) > 0, que garante que a consulta só retornará combinações de NOME e CPF que possuam no mínimo 1 ocorrência. Ou seja, só retornará clientes que possuam no mínimo 1 homônimo. Por m, vale ressaltar que a consulta retornará um registro para cada cliente que possuir um homônimo, contendo o CPF do cliente, o seu nome, e a quantidade de homônimos associada. Um exemplo do resultado que poderia ser retornado pela consulta segue abaixo: JOSE DA JOSE DA JOSE DA MICHAEL MICHAEL ALEX DA ALEX DA ALEX DA ALEX DA SILVA SILVA SILVA PAULO PAULO COSTA COSTA COSTA COSTA 03556236920 23698563222 78946123362 45632152875 78542635985 45896325644 45823666999 45236698888 78542666666 2 2 2 1 1 3 3 3 3 Página 91 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 38. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Banca: ESAF Instituição: Agência Nacional de Águas (ANA) Cargo: Analista Administrativo - Tecnologia da Informação e Comunicação / Desenvolvimento de Sistemas e Administração de Banco de Dados Ano: 2009 Questão: 23 Em SQL, a cláusula check aplicada a uma declaração de domínio (a). permite especicar um predicado que deve ser satisfeito por qualquer valor atribuído a uma variável de determinado domínio. (b). especica um predicado que deve ser satisfeito por uma tupla em uma relação. (c). proíbe a inserção de um valor nulo para as variáveis do domínio. (d). verica se os atributos considerados formam uma chave candidata. (e). não tem efeito, pois não se aplica esta cláusula a declarações de domínio. Solução: Uma tabela em um banco de dados é denida por um nome e pelos seus campos (atributos) e restrições. Por exemplo: create table carro ( nome char (20) not null, placa char (7) not nul, marca char (50) not nul, ano integer ) Como pode ser observado, o nome da tabela é carro e possui os seguintes atributos: nome, placa, marca e ano cada um com seu tipo de dado. Cada tipo de dado representa um domínio (intervalo) de valores para um determinado atributo. Assim, um domínio é a coleção de valores permitidos para um atributo. A cláusula check na SQL pode ser aplicada a declarações de domínio. Quando aplicado a um domínio, a cláusula check permite especicar um predicado que precisa ser satisfeito para qualquer valor atribuído a uma variável cujo tipo é o domínio. Por exemplo, uma cláusula check pode garantir que um domínio de idade permita apenas valores maiores do que um valor especicado (pessoa maior de idade). create domain Idade numeric (5,2) constraint teste-valor-idade check (value >= 18) O domínio Idade possui uma restrição que garante que o atributo idade seja maior ou igual a 18 anos. A cláusula constraint teste-valor-idade é opcional usada para atribuir o nome teste-valor-idade a restrição. O nome é usado pelo sistema para indicar a restrição que uma atualização violou. Outro exemplo sobre a cláusula check: um domínio pode ser restrito para conter apenas um conjunto especicado de valores usando a cláusula in: Página 92 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI create domain TipoConta char(10) constrait teste-valor-idade check(value in ('Corrente','Poupança') ) Desse modo, a cláusula check permite que atributos e domínios sejam restritos, descrevendo um predicado que deve ser satisfeito por qualquer valor atribuído a uma variável de domínio. Portanto, a questão correta é a letra A. Página 93 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 39. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Data Manipulation Language (DML), Data Denition Language (DDL), Data Control Language (DCL), Banca: ESAF Instituição: Controladoria-Geral da União (CGU) Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de Sistemas de Informação Ano: 2008 Questão: 51 Em um banco de dados que utiliza a linguagem SQL para denição, manipulação e controle de dados, é correto armar que os comandos (a). CREATE, DROP e INSERT fazem parte da DML (Linguagem de Manipulação de Dados). (b). GRANT e REVOKE fazem parte da DCL (Linguagem de Controle de Dados). (c). INSERT, UPDATE e SELECT fazem parte da DDL (Linguagem de Denição de Dados). (d). ALTER, DELETE e REVOKE fazem parte da DML (Linguagem de Manipulação de Dados). (e). CREATE, GRANT e DROP fazem parte da DCL (Linguagem de Controle de Dados). Solução: Os Bancos de Dados, em geral, possuem diversos tipos de usuários, desde administradores de bancos de dados (DBAs) até usuários casuais, passando por projetistas de bancos de dados e programadores/analistas de sistemas. Para cada uma desta variedade de usuários, o Sistema de Gerenciamento de Banco de Dados (SGBD) deve proporcionar linguagens e interfaces apropriadas. Em muitos SGBDs onde não há uma clara separação entre os níveis interno e conceitual, uma linguagem chamada Linguagem de Denição de Dados (DDL Data Denition Language) é utilizada pelo DBA e pelos projetistas para denir ambos os esquemas. Em SGBDs onde é mantida uma separação clara entre os dois níveis, a DDL é utilizada para especicar apenas o esquema conceitual e uma outra linguagem, a Linguagem de Denição de Armazenamento (SDL Storage Denition Language), é utilizada para especicar o esquema interno. Para especicar visões de usuários e seus mapeamentos para o esquema conceitual, a Linguagem de Denição de Visão (VDL View Denition Language). Entretanto, na maioria dos SGBDs a DDL é utilizada para denir tanto o esquema conceitual quanto o esquema externo. Os SGBDs oferecem um conjunto de operações para manipulação de dados, como pesquisa, inserção, exclusão e modicação, através de uma linguagem conhecido por Linguagem de Manipulação de Dados (DML Data Manipulation Language). A SQL (Structured Query Language Linguagem de Consulta Estruturada) representa uma combinação de DDL, VDL e DML, além de diretivas para especicar restrições e outras características. A SDL foi um componente da SQL em versões antigas, mas foi removida da linguagem para mantê-la apenas nos níveis conceitual e externo. Em SQL, a DML é composta pelos comandos INSERT, UPDATE e DELETE, que são Página 94 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI utilizados para inserir, atualizar e excluir registros de uma tabela, respectivamente. Já a DDL possui os comandos básicos CREATE, ALTER e DROP que criam, alteram ou apagam objetos (tabelas, índices e visões) do banco de dados. Para alguns autores, os comandos CREATE VIEW e DROP VIEW comporiam a VDL de SQL. Um outro grupo de comandos de SQL serve para controlar aspectos de autorização de acesso de dados por usuários. Este grupo é chamado de DCL (Data Control Language Linguagem de Controle de Dados) e é composto pelas diretivas GRANT e REVOKE. A primeira, autoriza um usuário a executar operações e a segunda remove ou restringe o acesso. Tem-se ainda a DTL (Data Transaction Language Linguagem de Transação de Dados) que controla as transações em SQL e é composta por BEGIN WORK, COMMIT e ROLLBACK. A primeira diretiva inicia uma transação e as outras duas nalizam, sendo que COMMIT conclui a execução dos comandos e ROLLBACK desfaz as operações executadas. Embora com apenas um único comando (o comando SELECT), a DQL (Data Query Language Linguagem de Consulta de Dados) é a parte da SQL mais utilizada, permitindo que consultas sejam efetuadas ao banco de dados. Pela teoria exposta, percebe-se que a alternativa b) é a única que apresenta o correto agrupamento de comandos componentes de uma das partes da SQL, sendo a resposta para a questão. Página 95 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 40. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Triggers, Banca: ESAF Instituição: Receita Federal (RF) Cargo: Técnico da Receita Federal - Tecnologia da Informação Ano: 2006 Questão: 32 Analise as seguintes armações relacionadas a Bancos de Dados e à linguagem SQL: I. A cláusula GROUP BY do comando SELECT é utilizada para dividir colunas em conjuntos maiores de dados relacionados entre si. II. Uma view é uma forma predeterminada de visualizar dados de uma ou mais tabelas como se fosse apenas uma tabela. III. Quando o comando DROP TABLE é executado, as estruturas da tabela e os dados são excluídos. Porém, quando o DROP VIEW é executado, nenhum dado referenciado pela view é afetado. IV. O trigger é um tipo de view criado quando um evento em particular ocorre. Indique a opção que contenha todas as armações verdadeiras. (a). I e II (b). III e IV (c). II e III (d). I e III (e). II e IV Solução: Para esta questão o melhor caminho é tratar item por item para chegar na tão esperada resposta correta. I. ERRADA. A cláusula GROUP BY do comando SELECT é utilizada para agrupar LINHAS em conjuntos de dados relacionados entre si. Cada grupo será formado por linhas que tenham o mesmo valor do atributo denido pela cláusula; II. CORRETA. A view facilita a vida para o usuário sendo que ele pode fazer consultas ou atualizações e estas vão reetir nas respectivas tabelas que estão sendo utilizadas. Uma view proporciona mais segurança, ajuda na prevenção de erros, melhora a performance e faz com que os dados sejam mais compreensíveis para o usuário; III. CORRETA. O comando DROP é utilizado para eliminar tabelas, esquemas, domínios ou restrições. No caso do DROP TABLE duas opções de comportamento podem ser selecionadas: CASCADE: todas as restrições e views que referenciam a tabela são eliminadas juntamente com os dados da tabela e suas estruturas; RESTRICT: a tabela será eliminada somente se ela não for referência em ne- nhuma restrição ou view. O comando DROP VIEW elimina a view e, como este tipo de tabela é virtual e seus dados são referencia à dados existentes em outras tabelas, nenhum conteúdo será perdido. Uma view também pode ser atualizada e esta atualização é reetida nas tabelas utilizadas na denição da mesma, porém alguns fatores devem ser observados: Página 96 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI caso seja for formada a partir de uma única tabela, ela deve conter a chave primária e todos os outros atributos com restrição NOT NULL que não tenham um valor DEFAULT especicado; normalmente não é atualizável se for formada por diversas tabelas utilizando-se JOIN; não é atualizável se for denida utilizando a função GROUP BY, HAVING ou funções agregadas (ex.: COUNT, SUM, MAX, MIN e AVG); deve-se adicionar a cláusula WITH CHECK OPTION no momento da especicação da view para que o sistema verique a capacidade de atualização e dena uma estratégia de atualização da view. IV. ERRADA. O trigger é uma função e é utilizada para executar uma ação (execução de SQL's ou de algum programa externo ao Banco de Dados) após a ocorrência de um evento (operações de atualização por exemplo) que atenda uma condição (expressão que retorna um valor VERDADEIRO ou FALSO) especicada durante a denição do trigger. Sendo assim, a resposta correta é a letra C. Página 97 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 41. Volume questões de TI Assuntos relacionados: Banco de Dados, Níveis de Isolamento, Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 49 Considere o ambiente de uma aplicação multiusuário que acessa um sistema de gerência de banco de dados relacional. Os usuários acessam a aplicação em simultâneo, submetendo transações concorrentes ao banco de dados. Todas as transações realizadas na base de dados, pela referida aplicação, estão denidas com o nível de isoladamente READ COMMITTED (leitura com efetivação). O usuário João está executando, através da aplicação, uma transação T1, composta por vários comandos SQL. Neste caso, é correto armar que (a). o nível de isolamento adotado não irá impedir o aparecimento de linhas fantasmas (phantom) durante a execução de T1. (b). as atualizações de dados realizadas por João dentro de T1 podem ser lidas por outros usuários imediatamente, mesmo antes de João efetivar sua transação. (c). se João abortar a execução de T1 após ter executado, como parte da transação, comandos de atualização de dados, as referidas atualizações não poderão ser desfeitas. (d). no ambiente descrito, a execução intercalada de qualquer conjunto de transações será serializável. (e). devido à utilização do nível de isolamento especicado, enquanto João executar T1, nenhum outro usuário poderá executar comandos no banco de dados. Solução: (A) CORRETA O nível de isolamento de uma determinada transação dene o tipo de bloqueio em relação às operações de leitura. No caso de um nível de isolamento READ UNCOMMITTED (leitura sem efetivação), a transação poderá ler dados que foram modicados por outras transações e que ainda não foram conrmadas. Esses são fenômenos conhecidos como dirty reads (leituras sujas). Já o nível de isolamento READ COMMITTED impede que ocorra dirty reads. Há dois tipos de anomalias que não são resolvidas por esse nível de isolamento: leitura não-repetível e leitura fantasma (phantom). Suponha que duas consultas sejam executadas uma após a outra dentro da mesma transação. No nível de isolamento READ COMMITTED, nada impede que outra transação efetive suas alterações durante a execução da primeira consulta. O comando SELECT, nesse nível de isolamento, enxerga apenas os dados conrmados antes da consulta ser executada. Nesse caso, os resultados das duas consultas realizadas uma após a outra, mesmo pertencentes à mesma transação, podem ser diferentes. Já o fenômeno de leitura fantasma é semelhante à leitura não-repetível no sentido em que Página 98 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI são necessárias duas consultas com os mesmos critérios para que o fenômeno possa ser observado. Quando os retornos contém as mesmas linhas, mas com dados diferentes, o fenômeno é de leitura não-repetível. Quando a diferença no resultado indica que as linhas não são as mesmas, diz-se que ocorreu uma leitura fantasma. O padrão ISO dene mais dois níveis de isolamento: leitura repetível e leitura serializável. O fenômeno de leitura fantasma só é eliminado no nível serializável, que é o nível mais restrito. (B) ERRADA Para que o citado ocorra, o nível de isolamento deveria ser READ UNCOMMITTED. (C) ERRADA Todo sistema gerenciador de banco de dados deve garantir que uma transação possa ser desfeita para manter a propriedade de atomicidade, que é essencial para a recuperação dos dados em casos de desastre e para a resolução de conitos entre transações. Logo, tal fato é impensável. (D) ERRADA O nível de isolamento citado não permite a serialização em relação as outras transações. Mas vale lembrar que tal nível propicia melhoria do desempenho do sistema. (E) ERRADA Várias transações podem ser executadas simultaneamente, mas respeitando-se os bloqueios que garantem o modo de serialização adotado. Página 99 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 42. Volume questões de TI Assuntos relacionados: Banco de Dados, Concorrência entre Transações, SGBD, Banca: CESGRANRIO Instituição: BNDES Cargo: Analista de Suporte Ano: 2008 Questão: 67 Em ambiente de Sistema Gerenciador de Banco de Dados (SGBD) multi-usuários, bloqueios e controles por timestamp (registro de tempo) são mecanismos utilizados para a manutenção da integridade das transações. Sobre tais mecanismos e sua utilização em SGBD relacionais, tem-se que (a). a utilização de intenções de bloqueio visa aumentar a capacidade de concorrência do sistema, no qual são permitidos somente bloqueios e intenções de bloqueio em linhas individuais. (b). a utilização de bloqueios pode ocorrer tanto em linhas de dados quanto em estruturas de maior granularidade, como tabelas, podendo, também, ocorrer em estrutura de índices. (c). o protocolo de bloqueio em duas fases foi desenvolvido para utilização em banco de dados distribuídos, e nele um nó coordenador realiza uma eleição para que cada nó participante indique se pode ou não concluir uma transação. (d). o protocolo de ordenação por timestamp (registro de tempo) é baseado no momento em que um bloqueio foi obtido por uma transação, indicando que esse bloqueio somente pode ser mantido por determinado período de tempo. (e). o protocolo de ordenação por timestamp (registro de tempo) garante que não ocorrerão deadlocks, pois esse protocolo impede que transações mantenham o bloqueio de um objeto por tempo indenido. Solução: Bloqueios permitem que apenas uma única transação manipule (altere) um item de dados em um momento particular. Também é possível o bloqueio multigranular, que permite a uma transação bloquear diferentes tipos de recursos como tabelas e estruturas de índices e, geralmente, esse bloqueio se dá de forma hierárquica, onde o bloqueio explícito de um determinado objeto implica no bloqueio implícito dos seus sub-objetos. Concluímos, assim, que a alternativa B é a alternativa correta e excluímos a alternativa A. O protocolo de bloqueio de duas fases pode ser utilizado em qualquer SGBD, ou seja, ele não foi especicamente desenvolvido para uso em bancos de dados distribuídos, e sim para garantir a serialização de transações. Logo, a alternativa C está errada. O protocolo de ordenação por timestamp atribui um timestamp para cada transação antes que ela inicie e serve para garantir que quaisquer execuções de leitura e escrita sejam executadas por ordem de timestamp. Nesse protocolo não é possível que ocorram deadlocks, pois não é um método baseado em bloqueios de recursos. Entretanto, uma transação pode ser cancelada várias vezes. A alternativas D e E estão erradas, pois não há bloqueios no processo de ordenação por timestamp. O que existem são métodos que se baseiam em timeout para a manutenção do bloqueio por um tempo denido e são especicamente para manuseio de deadlocks, e não um protocolo que garanta a serialização como o protocolo de timestamp. Página 100 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 43. Volume questões de TI Assuntos relacionados: Banco de Dados, ACID, Banca: FCC Instituição: MPU Cargo: Analista de Desenvolvimento de Sistemas Ano: 2007 Questão: 63 A classicação das propriedades ACID, em transações de BD, signicam (a). Activity, Commit, Integrity e Direccion. (b). Apresentação, Conclusão, Inferência e Diálogo. (c). Atomicidade, Consistência, Isolamento e Durabilidade. (d). Alteração, Consulta, Inserção e Deleção. (e). Apresentação, Consistência, Independência e Duração. Solução: Uma transação é uma unidade de execução de programa que acessa e, possivelmente, atualiza vários itens de dados em um banco de dados. Para assegurar a integridade dos dados e da própria transação, o sistema de banco de dados deve manter as seguintes propriedades: Atomicidade, Consistência, Isolamento e Durabilidade. Essas propriedades são chamadas de ACID. Para um sistema garantir a propriedade de Atomicidade, ou todas as operações da transação são reetidas corretamente no banco de dados ou nenhuma será, ou seja, uma transação é indivisível. Qualquer ação que constitui falha no sistema, a transação deve ser desfeita (rollback). Quando todas as ações são efetuadas com sucesso, a transação pode ser efetivada (commit). A Atomicidade é garantida pelo próprio sistema de banco de dados, mais especicamente do componente chamado de Gerenciamento de Transações. Na propriedade de Consistência, a execução de uma transação isolada (isto é, sem a execução concorrente de outra transação) preserva a consistência do banco de dados. A Consistência garante que uma transação deve ser um programa correto, e suas ações não devem resultar em violações de restrições de integridade denidas para o banco de dados. Assegurar a propriedade de Consistência após uma transação é tarefa do programador que codica a transação. Embora diversas transações possam ser executadas de forma concorrente (simultânea), o sistema garante que cada transação não toma conhecimento de outras transações concorrentes no sistema. Isto é, a propriedade de isolamento garante que nenhuma outra transação, operando no mesmo sistema, pode interferir no funcionamento da transação corrente. Assegurar a propriedade de Isolamento é de responsabilidade de um componente do sistema de banco de dados chamado Controle de Concorrência. Na propriedade de Durabilidade, depois de uma transação completar com sucesso (commit), as mudanças que ela fez no banco de dados persistem, até mesmo se houver falhas no sistema. A Durabilidade é assegurada também pelo próprio sistema de banco de dados, mais especicamente pelo componente de Gerenciamento de Recuperação. Conforme explicado anteriormente, a alternativa correta da questão é a letra C. Página 101 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 44. Volume questões de TI Assuntos relacionados: Banco de Dados, Transações de Banco de Dados, Serialização, Controle de Concorrência, Grafo de Precedências, Banca: Cesgranrio Instituição: BNDES Cargo: Analista de Sistemas - Desenvolvimento Ano: 2008 Questão: 41 Duas transações (T1 e T2) de banco de dados executam as seguintes seqüências de operações: T1: Na tabela DEPARTAMENTO, bloqueia a linha N em modo compartilhado; Na tabela DEPARTAMENTO, lê a coluna DESPESA da linha N; Na tabela DEPARTAMENTO, desbloqueia a linha N; Na tabela PROJETO, bloqueia a linha M em modo compartilhado; Na tabela PROJETO, lê a coluna VERBA da linha M; Na tabela PROJETO, desbloqueia a linha M; Na tabela PROJETO, bloqueia a linha M em modo exclusivo; Na tabela PROJETO, escreve a coluna VERBA da linha M com o valor VERBA + DESPESA; Na tabela PROJETO, desbloqueia a linha M; T2: Na tabela PROJETO, bloqueia linha M em modo compartilhado; Na tabela PROJETO, lê a coluna VERBA da linha M; Na tabela PROJETO, desbloqueia a linha M; Na tabela DEPARTAMENTO, bloqueia a linha N em modo compartilhado; Na tabela DEPARTAMENTO, lê a coluna DESPESA da linha N; Na tabela DEPARTAMENTO, desbloqueia a linha N; Na tabela DEPARTAMENTO, bloqueia a linha N em modo exclusivo; Na tabela DEPARTAMENTO, es creve a coluna DESPESA da linha N com o valor DESPESA + VERBA; Na tabela DEPARTAMENTO, desbloqueia a linha N; É correto armar que essas transações (a). não são serializáveis e, portanto, não podem ser executadas concorrentemente. (b). não podem entrar em bloqueio innito porque obedecem ao protocolo de bloqueio em duas fases (two-phase locking). (c). podem entrar em bloqueio innito (deadlock) se executadas concorrentemente. (d). obedecem ao protocolo de bloqueio em duas fases (two-phase locking). (e). são serializáveis e obedecem ao protocolo de bloqueio em duas fases (two-phase locking). Solução: Para resolvermos essa questão, é necessário conhecer, primeiramente o conceito de serialização e concorrência de transações. Todo sistema gerenciador de banco de dados (SGBD) deve garantir que qualquer transação executada por ele atenda aos 4 atributos ACID das transações: Página 102 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos • A Volume questões de TI - Atomicidade: uma transação é considerada como um elemento único. Isso quer dizer que ela só pode ser efetivada quando todos os comandos nela contidos forem executados sem falhas e na ordem em que foram programados. Em caso de erro, todas as operações devem ser desfeitas. A atomicidade garante que a ideia do usuário de estar executando uma única ação se concretize, muito embora, no banco de dados, essa ação se traduza em uma sequência de comandos e operações; • C - Consistência: ao nal de uma transação o banco de dados deve estar em um estado consistente; um estado que esteja de acordo com o esperado pelo sistema a que ele atende, considerando o estado inicial logo anterior à transação; • I - Isolamento: as transações não devem afetar o funcionamento umas das outras nem devem enxergar os resultados parciais entre si; • D - Durabilidade: o resultado nal de cada transação deve ser permanente. Uma vez completa, o SGBD deve garantir que o novo estado do banco seja o mesmo para qualquer outra transação seguinte. Para garantir essas características das transações, os SGBD's implementam mecanismos de controle de concorrência. Há várias propostas de mecanismos de controle de concor- rência. A concorrência de transações é algo desejado, uma vez que possibilita um melhor aproveitamento dos recursos computacionais. Na maioria dos casos, transações irão atuar em dados distintos e, portanto, a paralelização delas permite que os recursos computacionais disponíveis sejam administrados entre elas, aumentando a eciência da máquina. Por exemplo, enquanto uma transação busca dados no disco, outra pode trabalhar com os que já buscou realizando cálculos no processador. A capacidade de um SGBD de paralelizar transações garantindo que o resultado nal do banco seja consistente, ou seja, equivalente a execução serial das transações (isto é, uma após a outra) é conhecida como seriabilidade. A ordem que as operações de transações concorrentes é executada dene um escalonamento dessas transações. Quem dene o escalonamento é o SGBD. A seriabilidade de um escalonamento de transações é ditada pelo grafo de precedência gerado a partir dos tipos de acesso aos dados comuns envolvidos nas transações. Grafos de precedência que gerem ciclos não são serializáveis. Para montar o grafo de precedências de um escalonamento deve-se seguir os seguintes passos: 1. para cada transação Ti participante do esquema S criar um nó Ti no grafo de precedência; 2. para cada operação em S onde Tj executa um read (X) após um write (X) executado por Ti, criar um arco Ti -> Tj no grafo; 3. para cada operação em S onde Tj executa um write (X) após um read (X) executado por Ti, criar um arco Ti -> Tj no grafo; 4. para cada operação em S onde Tj executa um write (X) após um write (X) executado por Ti , criar um arco Ti -> Tj no grafo; 5. um esquema S é serializável se e somente se o grafo de precedência não contiver ciclos. Para chegarmos ao gabarito da questão, o conceito de seriabilidade e a ideia contida na análise de grafos de precedência será essencial. B, D e E) A questão em tela menciona em 3 de suas opções ( um tipo de mecanismo de controle de concorrência conhecido como two-phase locking. Este mecanismo prevê duas fases durante a execução da transação: fase de expansão e fase de encolhimento. Página 103 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Na fase de expansão, a transação vai realizando bloqueios (locks) nos objetos em que precisa de acesso e não os desbloqueia até a fase seguinte. Esses bloqueios podem ser de 2 tipos: • Compartilhado (shared) - onde a própria transação e todas as outras concorrentes podem apenas ler os objetos bloqueados e nenhuma pode alterá-los; • Exclusivo (exclusive) - o objeto ca acessível apenas para a transação tendo ela direitos de alterá-lo inclusive. Na fase de encolhimento, a transação não executa mais nenhum bloqueio sobre nenhum objeto e vai gradativamente liberando os bloqueios que conseguiu na fase de expansão conforme não necessita mais deles. Considerando essa característica, é possível ver com um simples exemplo que esse tipo de controle de concorrência pode levar a casos de bloqueio innito (deadlock). Suponha duas transações T3 e T4 escalonadas conforme Figura 7: Figura 7: escalonamento. Nesse escalonamento, ambas as transações cam esperando a liberação de recursos comuns a elas que já foram previamente alocados transversalmente. Nenhuma das duas conseguirá o recurso esperado e nunca terminarão. Esse tipo de problema pode ser corrigido através de outros mecanismos de controle de transações, mas não estão no escopo da questão. Retornando à análise das opções da questão, vemos claramente que as assertivas (B), (D) e (E) estão erradas, visto que as transações não utilizam o mecanismo de two-phase locking. A letra (B) inclusive diz que tal mecanismo impede a ocorrência de bloqueio innito, o que já foi visto que está errado. A letra (E) menciona ainda que as transações são serializáveis, o que também é falso e será mostrado em breve. A opção (C) diz que há possibilidade de bloqueio innito na execução concorrente das transações. Entretanto isso é completamente impossível. As transações da questão mantém bloqueado apenas um objeto por vez. Logo, mesmo que o escalonamento levasse uma a precisar do objeto bloqueado pela outra, eventualmente a transação que detinha o bloqueio o liberaria, permitindo o retorno da execução da que aguardava. Página 104 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Durante a prova, é importante utilizar a eliminação de opções erradas como feito acima pois nesse caso os erros estão bastante visíveis. Isso economiza um tempo precioso que você poderá gastar em outras questões ou revisando a prova. A conclusão da exatidão da assertiva (A) depende da análise das operações contidas nas transações e da geração dos grafos de precedência de vários escalonamentos possíveis. Isso demanda muito tempo e, dependendo da situação, pode ser até mesmo impossível. Nesse caso, deve-se reparar que, em qualquer escalonamento proposto, alguma das transações terminará escrevendo em um dos dados que foi lido anteriormente pela outra. Esta, por sua vez, utilizará um dado inconsistente para seus cálculos. Esse fenômeno é conhecido como leitura suja (dirty read), e também deve ser impedido pelos SGBDs. Dessa observação, vê-se que as transações não são serializáveis. Página 105 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 45. Volume questões de TI Assuntos relacionados: Banco de Dados, SQL, Gerência de Transações, Visões de Banco de Dados, Banca: Cesgranrio Instituição: BNDES Cargo: Analista de Sistemas - Desenvolvimento Ano: 2008 Questão: 46 Um funcionário, encarregado de vericar o correto funcionamento de uma base de dados relacional, faz o seguinte teste: select nome from emp where matr = 123; O resultado é vazio. Então ele executa: insert into emp(matr, nome, salario, ativo) values (123, `José da Silva', 2000, `N'); commit; O banco de dados não retorna erro e informa que inseriu uma linha. Por m, para ve- ricar, ele consulta novamente: select nome from emp where matr = 123; O resultado continua vazio. Supondo que o sistema gerenciador de banco de dados esteja funcionando corretamente, que opção explica o ocorrido? (a). Como o funcionário executou o primeiro SELECT momentos antes de executar o INSERT, o resultado cou na memória cache do computador e não foi executado pelo banco de dados na segunda vez. Somente após protocolo LRU ter retirado do cache o resultado do SELECT é que ele será novamente executado. (b). Como emp é uma visão e uma visão é nada menos que uma consulta gravada no banco de dados, nunca é possível usá-la em operações de manipulação de dados. O COMMIT ignora a inserção anterior. (c). emp é uma visão que retorna todos os empregados ativos (ativo='S'), mas foi criada sem a expressão WITH CHECK OPTION, que evitaria o problema acima. (d). emp não é uma tabela, mas uma visão que retorna todos os empregados ativos (ativo='S') e foi criada com a expressão WITH CHECK OPTION. Dessa forma, como o empregado José da Silva não está ativo, o banco de dados não gravou o registro no momento do COMMIT. (e). O funcionário executou o SELECT pouco tempo após a inserção do registro. Mesmo nalizando a transação com o COMMIT, o registro está em memória e ainda não foi gravado no disco. Somente após o CHECKPOINT é que o registro estará disponível para consulta. Solução: O comando COMMIT efetiva a transação sendo executada. Todas as modicações efetuadas pela transação se tornam visíveis para os outros, e existe a garantia de permanecerem se uma falha ocorrer, pois o sistema gerenciador de banco de dados mantém um registro, chamado log, de todos os dados que foram escritos no bando de dados. O log é utilizado Página 106 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI para garantir a propriedade de durabilidade se o sistema sofrer uma queda antes que as alterações geradas por uma transação que foi executada satisfatoriamente forem persistidas em disco, o log é utilizado para restaurar essas informações quando o sistema for normalizado. Eventualmente, a transação pode não ter sido efetivada com sucesso, neste caso o sistema gerenciador de banco de dados se encarrega em desfazer as alterações. Entretanto, não é o caso da questão, pois a informação de que uma linha foi inserida e a existência do COMMIT indica que a transação foi efetivada com sucesso. No COMMIT, os dados que foram alterados ou inseridos na transação são imediatamente visíveis para consultas que são executadas depois. Esse fato elimina as alternativas (A) e (E) . Views são consultas SQL que, em situações diversas, podem ser utilizadas no papel de tabelas relacionais. Entretanto, diferentemente das tabelas, os registros de uma view não são armazenados na base de dados. Podemos imaginar uma view como uma tabela que tivesse uma instância virtual, que é construída cada vez que a mesma é invocada. Quando uma view é referenciada em expressões SQL, o gerenciador de bancos de dados manipula o resultado da consulta que dene a view como se fosse uma tabela normal. A similaridade com tabelas estende-se ao ponto de permitir atualizações sobre os virtuais registros de uma view. Quando um novo registro é inserido, ou quando um registro existente é alterado ou removido, na verdade o SQL inclui, altera ou remove registros nas tabelas que compõem a view. Esse fato elimina a alternativa (B). Cada implementação tem critérios ligeiramente diferentes para decidir se uma view pode ou não ser atualizada. Como norma geral, entretanto, as seguintes restrições devem ser observadas na construção de uma view para que a mesma seja atualizável. Uma coluna atualizável não pode ser resultante de: • funções de agregação, tais como sum, avg, etc.; • funções escalares, tais como sin, trim, etc.; • expressões aritméticas; • expressões condicionais, tais como case, iif, etc.; • literais; • subconsultas. Uma view atualizável deve conter • pelo menos uma fonte de registros atualizável referenciada na cláusula from. Uma view atualizável não pode conter: • operadores algébricos, tais como union; • a cláusula group by; • a cláusula distinct. As restrições acima formam um conjunto genérico de características das views atualizáveis. Essas regras, entretanto, devem ser analisadas à luz das operações pretendidas. Por exemplo, uma view que tenha algumas colunas baseadas em expressões aritméticas talvez não possa ser objeto de um comando update nesses atributos, mas pode permitir a remoção de registros. Por este e outros motivos, a lida de cada implementação com essa questão varia bastante, e cada caso merece uma análise cuidadosa. Página 107 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Em views atualizáveis, temos a opção CHECK OPTION no momento de sua criação. Todos os comandos INSERT e UPDATE em uma view serão vericadas para garantir que os dados satisfazem as condições que denem a visão. Se não satiszer, a atualização será rejeitada. Analisando as alternativas que ainda não foram eliminadas (C e D), supomos que a view em questão representa todos empregados ativos (ativo='S'). Como a inserção trata da inserção de um empregado inativo, a existência da opção CHECK OPTION impediria a sua inserção, mas não foi o que ocorreu, já que fomos informados de que uma linha foi inserida. Logo, concluímos que a opção CHECK OPTION não foi utilizada na denição da view emp e, portanto, a alternativa C representa a alternativa correta. Página 108 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 46. Volume questões de TI Assuntos relacionados: Banco de Dados, Escalonamento de Banco de Dados, Serializabi- lidade, Durabilidade, Leitura Limpa, Clean Read, Leitura Suja, Dirty Read, Missing Deadlock, Deadlock Ausente, Commit Alcançado, Reached Commit, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas - Processos de Negócio Ano: 2008 Questão: 28 A execução de um conjunto de transações em um banco de dados é chamado de escalonamento. O critério para um escalonamento ser considerado correto é a(o) (a). serializabilidade. (b). durabilidade. (c). leitura limpa (clean read). (d). deadlock ausente (missing deadlock). (e). commit alcançado (reached commit). Solução: A serializabilidade consiste em, dado um conjunto de transações, independentemente da forma como seus comandos são intercalados na execução, o resultado obtido equivale à execução serial das transações. O escalonamento de transações em um SGBD (Sistema Gerenciador de Bancos de Dados) deve ter como alvo a serializabilidade, de forma a garantir a integridade das informações. Sendo assim, a opção correta é a letra (A). As demais opções tratam de características das transações em si ou mesmo de características que, juntas, traduzem a intenção da serializabilidade. A durabilidade, citada na letra (B), é uma das 5 características ACID desejadas para as transações em si. Ela diz que as alterações geradas por uma transação devem permanecer no banco após a efetivação da mesma, garantindo sua efetivação real. No caso de uma falha do sistema, a transação que tiver sido efetivada deve permanecer efetivada no banco para que a durabilidade seja atendida. Repare que essa característica é imprescindível para as transações e não para o escalonamento. A leitura limpa é uma das características que compõe a serializabilidade. Ela prevê que, diferentemente da leitura suja, os dados lidos pelas transações estejam sempre coerentes com o estado do início da transação e sejam sempre coerentes. O deadlock ausente é outra característica que compõe a serializabilidade. Nesse caso, o escalonamento, tal qual a execução serial das transações, deve impedir que os recursos cedidos à transações concorrentes não gerem conitos de interesse entre ambas e impeça mutuamente a execução destas. Estas características são tratadas no controle de concorrência. Entretanto, estão intimamente ligadas ao escalonamento, visto que inuenciarão diretamente nele. Página 109 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 47. Volume questões de TI Assuntos relacionados: Banco de Dados, Concorrência entre Transações, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas - Infraestrutura Ano: 2008 Questão: 57 Considere as duas transações (T1 e T2) de banco de dados abaixo. read_lock - implementa bloqueio compartilhado no item de banco de dados write_lock implementa bloqueio exclusivo no item de banco de dados unlock - desbloqueia o item de banco de dados read_item - executa a leitura do item write_item - executa a escrita do item É correto armar que estas transações (a). seguem o protocolo de bloqueio em duas fases e não entram em impasse (deadlock), se executadas concorrentemente. (b). podem entrar em impasse (deadlock), se executadas concorrentemente. (c). são serializáveis e não seguem o protocolo de bloqueio em duas fases. (d). não são serializáveis e, portanto, podem ser executadas concorrentemente. (e). não seguem o protocolo de bloqueio em duas fases, não sendo portanto serializáveis. Solução: Uma transação é uma unidade lógica de processamento que pode incluir uma ou mais operações sobre o Banco de Dados. Entende-se por transações concorrentes aquelas que são executadas ao mesmo tempo e pelo menos uma operação WRITE é executada por alguma das transações. Podemos observar que estas duas transações implementam o protocolo de bloqueio de duas fases (Two-Phase Locking - 2PL), pois ambas possuem uma fase de crescimento (growning ) e uma fase de encolhimento (shrinking ), em que todos os read_locks e write_locks ocorrem na primeira fase, enquanto que os unlocks ocorrem na segunda fase (na verdade, tão logo a transação libera um bloqueio, ela entra na fase de encolhimento e não poderá solicitar novos bloqueios). Portanto, podemos descartar as alternativas C e E. Lembre-se que a instrução read_lock permite que outras transações apenas leiam o mesmo item de dado e a write_lock impede que qualquer operação de escrita ou leitura possa ser realizada por outra transação sobre um item que esteja bloqueado para escrita. Além disso, a qualquer hora podem ser feitos diversos bloqueios compartilhados (read_lock) simultaneamente (por diferentes transações) sobre um item de dado particular. Já uma solicitação de Página 110 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI bloqueio exclusivo (write_lock) precisa esperar até que um bloqueio compartilhado termine para ser efetivada. Considere o caso em que estas duas transações são executadas simultaneamente, isto é, as instruções de cada transação podem ser intercaladas. instruções é conhecida como escala de execução. A atribuição da ordem dessas Suponha que o sistema de controle de concorrência tenha gerado a seguinte escala de execução: T1 T2 read_lock(Y) read_lock(X) read_item(Y) write_lock(X) read_item(X) write_lock(Y) unlock(Y) read_item(X) X := X + Y write_item(X) unlock(X) unlock(X) read_item(Y) Y := Y + X write_item(Y) unlock(Y) 1. a transação T1 requer o bloqueio compartilhado sobre o item de dados Y. Como não há nenhum bloqueio exclusivo sobre este item, o sistema de controle de concorrência concede o bloqueio a T1; 2. a transação T2 requer o bloqueio compartilhado sobre o item de dados X. Como não há nenhum bloqueio exclusivo sobre este item, o sistema de controle de concorrência concede o bloqueio a T2; 3. a transação T1 requer o bloqueio exclusivo sobre o item de dados X. Esta transação precisa esperar até que bloqueio compartilhado sobre X termine para que, somente assim, o bloqueio seja efetivado; 4. a transação T2 requer o bloqueio exclusivo sobre o item de dados Y. Esta transação precisa esperar até que bloqueio compartilhado sobre X termine para que, somente assim, o bloqueio seja efetivado. Podemos observar, neste ponto, que T1 está parada esperando que T2 libere X, e esta também está parada à espera que T1 libere Y. A esta situação de impasse damos o nome de deadlock. Descartamos, assim, a alternativa A. Por m, lembre-se que o protocolo de bloqueio em duas fases garante a serialização de conitos (onde uma sequência de instruções pertencentes a uma única transação aparecem juntas), porém não garante a ausência de deadlocks. Além disso, uma forma de garantir a consistência em execução simultânea (concorrente) é cuidar para que qualquer escala executada seja, de certa forma, equivalente a uma escala serial. Eliminamos, assim, a alternativa D. Portanto, a alternativa B está correta. Página 111 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 48. Volume questões de TI Assuntos relacionados: Banco de Dados, Isolamento entre Transações, Escala de Execução, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas - Infraestrutura Ano: 2008 Questão: 60 Uma transação em um sistema de banco de dados pode ser descrita como uma unidade de execução de programa que acessa e, possivelmente, atualiza vários itens de dados. Para o gerenciamento de transações em sistemas de bancos de dados, assinale a armação correta. (a). Atomicidade para uma transação signica que cada operação de uma transação é reetida na base de dados ou nenhuma operação o é. (b). Um escalonamento é a ordem de execução de várias transações de forma concorrente, mas nunca entrelaçada. (c). Integridade para uma transação signica que a execução de uma transação de forma isolada (sem sofrer concorrência de outra transação) preserva a consistência da base de dados. (d). Mesmo após a execução de um comando commit, é possível a uma transação retornar a seu estado inicial com a utilização de rollback. (e). Em transações que ocorrem simultaneamente, não existe qualquer garantia de que os dados lidos em um determinado momento são consistentes, independente do nível de isolamento utilizado. Solução: Como o enunciado bem mencionou, uma transação em um sistema de banco de dados pode ser descrita como uma unidade de execução de programa que acessa e, possivelmente, atualiza vários itens de dados. As quatro propriedades fundamentais das transações, usualmente conhecidas como ACID, são as seguintes: • atomicidade: o conjunto de operações de uma transação é indivisível, de modo que só faz sentido se for executado por completo. Ou seja, para que a transação faça sentido, todas as operações que a compõe devem ser executadas; • consistência: cada transação deve levar o banco de dados de um estado consistente para outro estado também consistente; • isolamento: a execução de uma transação não deve ser prejudicada pela execução de outras transações que sejam executadas de forma concorrente; • durabilidade: as alterações realizadas por uma transação conrmada devem persistir no banco de dados. Com base no princípio de Atomicidade (que vem de atômico, ou seja, indivisível) apresentado, podemos armar que a alternativa A está correta. Portanto, ela é a resposta da questão. Na alternativa B, é abordado o conceito de escala (ou escalonamento) de execução de transações. Quando várias transações são executadas de forma concorrente, as operações de cada transação podem ser intercaladas. Portanto, a alternativa B está errada. A ordem de execução das operações das múltiplas transações que executam de forma concorrente é Página 112 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI chamada escala de execução. É responsabilidade do SGDB escolher uma escala de execução que deixe o banco de dados em estado consistente. A armativa trazida na alternativa C, diz respeito a propriedade Consistência. Repare que no início da armativa é citado o termo Integridade, que não é uma das propriedades das transações. Ao m, o elaborador da questão tenta confundir o candidato usando o termo Consistência, que por sua vez é uma das propriedades da questão. De todo modo, a armativa está errada. A alternativa D está errada pois o comando COMMIT é utilizado justamente para conrmar as operações realizadas pela transação. Após a sua utilização, a transação está concluída, não sendo mais possível levar a transação ao seu estado inicial. Já a alternativa E trata do conceito de níveis de isolamento na execução de transações. Como vimos, o isolamento diz respeito a interferência das transações entre si quando são executadas de forma concorrente. Para lidar com essa propriedade, o padrão SQL dene quatro níveis de isolamento que podem ser implementados pelos SGBDs em termos de três fenômenos que devem ser evitados entre transações concorrentes. Os fenômenos são os seguintes: • leitura suja (dirty read): uma transação lê valores que foram escritos por outra transação ainda não conrmada; • leitura não-repetitiva (nonrepeatable read): uma transação lê o valor de um mesmo objeto mais que uma vez e encontra valores diferentes nas leituras realizadas; • leitura fantasma (phantom read): caso uma consulta seja realizada mais que uma vez, e em cada execução, sejam retornados resultados com conjuntos diferentes de registros, modicados por outras transações. Para lidar com estes fenômenos, os quatro níveis de isolamento estabelecem políticas que, quanto mais abertas, mais estimulam a concorrência, tornando a ocorrência destes fenômenos mais provável. Os níveis com políticas mais restritivas evitam a ocorrência desses fenômenos, porém tornam a execução mais lenta. Nível de Isolamento Dirty Read Nonrepeatable Read Phantom Read Read uncommitted Possível Possível Possível Read committed Impossível Possível Possível Repeatable read Impossível Impossível Possível Serializable Impossível Impossível Impossível Tabela 6: níveis de isolamento de transações. A Tabela 6 mostra os quatro níveis e suas respectivas susceptibilidades aos fenômenos. Com isso, a alternativa E está errada, já que a consistência dos dados lidos em um cenário de execução concorrente de transações depende do nível de isolamento empregado. Página 113 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 49. Volume questões de TI Assuntos relacionados: Banco de Dados, ACID, Atomicidade em Transação, Consistência em Transação, Isolamento entre Transações, Durabilidade em Transação, Banca: Cesgranrio Instituição: Petrobras Cargo: Analista de Sistemas Pleno - Processos Ano: 2006 Questão: 22 T1 1 Ler(A); 2 A = A 30; 3 Escrever(A); 4 Ler(B); 5 B = B + 30; 6 Escrever(B); A transação T1, pertencente a um sistema bancário e denida pelas operações listadas acima, é responsável pela transferência de R$ 30,00 da conta A para a conta B. Considere também uma transação T2 que esteja sendo executada simultaneamente a T1. Caso a transação T2 realize uma operação Escrever(B) após a execução da operação 4 e antes da execução da operação 6 por T1, qual das propriedades das transações estará sendo violada no banco de dados do sistema bancário? (a). Atomicidade. (b). Distributividade. (c). Consistência. (d). Durabilidade. (e). Isolamento. Solução: O cerne desta questão está relacionado às propriedades de um transação em banco de dados. Uma transação é um conjunto de operações em banco de dados, possivelmente de leitura e/ou alteração, que devem ser executadas como uma única unidade de trabalho. Elas devem ser processadas de forma conável, de tal forma que nenhum dado se perca, ou seja indevidamente alterado, em decorrência de múltiplos usuários e possíveis falhas de sistema. Um exemplo típico de transação é a uma transferência bancária entre contas. Ela exige várias operações (débito na conta de origem, crédito na conta de destino, cobrança de taxas, etc.), mas todas são processas como uma única unidade. É dessa forma que se elimina a possibilidade de situações indesejadas no que se refere a banco de dados, como: débito na conta de origem sem o devido crédito na conta de destino; crédito na conta de destino sem o devido débito na conta de origem; cobrança de taxas sem a devida efetivação da transferência. São os Sistemas de Gerenciamento de Banco de Dados (SGBD) que devem assegurar que transações obedeçam certas propriedades. Anal de contas, são eles que são responsáveis pelo gerenciamento do banco de dados (como o seu próprio nome já diz). garante-se que sempre os dados do banco estarão íntegros. Página 114 de 120 www.handbookdeti.com.br Dessa forma, Handbook de Questões de TI Comentadas para Concursos Volume questões de TI As propriedades mais importantes e mais difundidas entre os SGBDs são as que formam o acrônimo ACID: • atomicidade: ela assegura que a transação é indivisível. Ou todas as operações que a compõem são concluídas ou nada é realizado. Isso implica que quando uma transação tem que ser abortada, por qualquer motivo, as suas operações que eventualmente forma concluídas devem ser desfeitas. Essa forma de desfazer uma transação recebe o nome de rollback. No nosso exemplo acima, é esta a propriedade que garante que nenhuma situação não desejada citada acima ocorra; • consistência: ela garante que as regras de integridade do banco de dados, denidas pelo seu projetista, serão sempre preservadas. Caso uma transação tente levar o banco a uma estado não-íntegro, o SGBD abortará essa transação. Vejamos um exemplo no caso de uma transferência bancária. Caso haja hipoteticamente uma restrição de integridade que diga que qualquer conta bancária não possa car com saldo negativo e uma transação tente transferir R$500,00 a partir de uma conta com apenas R$200,00, o SGBD não permitirá a conclusão dessa transação; • isolamento: ela garante que transações não interferem umas com as outras, exceto de forma permitida. De maneira geral, uma transação nunca deve sobrescrever alterações feitas por outra transação. Além disso, outras restrições podem ser estabelecidas, como por exemplo habilitar/desabilitar leitura de mudanças temporárias realizadas por outras transações. Esta propriedade é assegurada pelo componente chamado de Controle de Concorrência. Este é justamente o caso descrito no enunciado. Como a transação T2 escreve na conta B após a leitura dessa conta pela transação T1, quanto T1 for escrever na conta B (linha 6), a escrita feita por T2 será simplesmente sobrescrita. Portanto, é a alternativa E que o candidato deve marcar; • durabilidade: permanente. ela assegura que qualquer alteração resultante de uma transação será E isso deve ser verdade mesmo em caso de falha de sistema após a conclusão da transação. Imagine que uma transferência bancária seja feita em um caixa eletrônico e que 30 segundos depois da sua conclusão o equipamento falhe. É a propriedade de durabilidade que garante que a tal transferência permanece válida na sua conta. Já a alternativa B nos traz a propriedade de distributividade, que não tem um relacionamento direto com transações de banco de dados. Essa propriedade está relacionada a operações algébricas (da Matemática ou Relacional). Um exemplo bem simples de distributividade é visto entre operações de soma: (3+6)+5 = 3+(6+5) = 14. Ou seja, como a ordem entre as execuções dessas operações não interfere no resultado, se diz que esse tipo de operação respeita a propriedade de distribuitividade. Página 115 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos 50. Volume questões de TI Assuntos relacionados: SGBD, Consulta SQL, Modelo Relacional, Concorrência entre Transações, Controle de Concorrência, Two-Phase Locking (2PL), Banca: Cespe Instituição: ANAC Cargo: Analista Administrativo - Tecnologia da Informação Ano: 2009 Questão: 6870 Segundo Abraham Silberschatz, um Sistema Gerenciador de Banco de Dados (SGBD) é constituido por um conjunto de dados associados a um conjunto de programas para acesso (Silberschatz, Abraham; Korth, Henry F e Sudarshan, S. Sistema de Banco de Dados. Makron Books, 1999. p. 1.) a esses dados. Acerca dos conceitos e características do Sistema Gerenciador de Banco de Dados, julgue os itens a seguir. 68 No processamento de uma consulta expressa em uma linguagem de alto nível, como a SQL, o SGBD deve planejar uma estratégia de execução para recuperar o resultado da consulta, a partir dos arquivos do banco de dados. 69 Um banco de dados relacional é um banco de dados em que a estrutura tem a forma de tabelas. Formalmente uma relação R denida sobre n conjuntos D1, D2, . . . , Dn (Dominio - conjunto de valores obrigatoriamente distintos) é um conjunto de n-tuplas (ou simplesmente tuplas) <d1, d2, . . . , dn> tais que 70 d1 ∈ D1, d2 ∈ D2, ..., dn ∈ Dn. Para o SGBD viabilizar a execução de transações concomitantemente existem diversas técnicas de controle de concorrência que são utilizadas para garantir propriedade de não-interferência ou isolamento de transações. Uma dessas técnicas é o controle de concorrência baseado em ordenamento de registro de timestamp que utiliza o bloqueio combinado com o Protocol Two-Phase locking (2PL). Solução: Um Sistema Gerenciador de Banco de Dados (SGBD) é uma coleção de arquivos e programas que estão inter-relacionados, permitindo ao usuário acesso a consultas e alterações desses dados. Essa coleção de arquivos ou conjunto de dados é chamado de banco de dados. O principal objetivo de SGDB é oferecer um ambiente tão eciente quanto conveniente para armazenamento e recuperação das informações que estão no banco de dados. O maior benefício de um SGBD é proporcionar uma visão abstrata dos dados, isto é, o sistema oculta alguns detalhes de como esses dados estão armazenados e como são mantidos. A seguir analisamos os itens referentes ao SGBD: 68 CERTO Dentre as funções básicas desempenhadas pelo SGBD, está a de processamento de consultas. Uma consulta nada mais é que uma solicitação para recuperação de informação no banco de dados. Nos processamentos de consultas são realizadas diversas tarefas para extrair informação do banco de dados. As tarefas básicas envolvidas são: análise sintática e tradução; otimização; e avaliação. Página 116 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Antes do processamento de uma consulta, o SGBD deve traduzir uma linguagem de alto nível, como a SQL, para uma representação interna de uma consulta ao sistema. Ou seja, nesta geração da forma interna é realizada uma análise sintática da sintaxe da consulta, e, então uma tradução para uma expressão algébrica relacional (representação interna). A tarefa de otimização compreende em selecionar um plano de avaliação de consulta que seja mais eciente para a consulta. Ou seja, são realizadas tentativas de encontrar uma expressão equivalente e mais eciente a consulta dada. Uma vez o plano de consulta selecionado, a consulta é avaliada com esse plano e resultado da consulta é produzido. Então, conforme explicado anteriormente, o SGBD dene uma estratégia de execução (análise sintática e tradução, otimização e avaliação) para execução de consultas. Portanto, este item está certo. 69 ERRADO Sob a estrutura de um banco de dados está o modelo de dados. Existem vários modelos, mas o principal é o modelo relacional. O modelo relacional, que é um modelo com base em registros, utiliza um conjunto de tabelas para representar tanto os dados quanto as relações entre eles. Cada tabela possui múltiplas colunas, cada uma com nome único. Cada coluna da tabela é chamada de atributo. Formalmente, dado uma coleção de conjuntos D1, D2, . . . ,Dn, não necessariamente distintos, uma relação R é denida sobre esses n conjuntos se for constituída por um subconjunto de n-tuplas <d1, d2, . . . , dn> tal que d1 E D1, d2 E D2, . . . , dn E Dn. Note que, o enunciado deste item arma que domínio é um conjunto de valores obrigatoriamente distintos. Portanto, este item está errado. 70 ERRADO Entende-se por transações concorrentes aquelas que desejam executar ao mesmo tempo e pelo menos uma operação de escrita no banco de dados. Embora diversas transações possam ser executadas de forma concorrente, o SGDB deve garantir que uma transação não tome conhecimento de outras transações concorrentes no sistema com forma de garantir a consistência dos dados. Ou seja, O SGBD deve garantir o isolamento entre as transações concorrentes. O isolamento de uma transação garante que a execução de transações concorrentes resulte em uma situação no SGBD equivalente caso as transações tivessem sido executadas uma de cada vez. Note que a execução concorrente de transações aumenta o desempenho do SGBD em termos do número de transações que o sistema pode executar em um determinado período e do tempo médio de resposta. Página 117 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI A forma mais simples de implementar um controle de concorrência é por meio da utilização de mecanismos de bloqueios baseados em locks binários, como operações de lock e unlock. Porém, os locks binários têm o inconveniente de não permitir que duas ou mais transações que desejam realizar uma operação de leitura no banco de dados acessem o item simultaneamente, o que reduz o desempenho do SGBD. Para contornar esse problema, foi criado outro mecanismo de lock baseado em 3 ope- read_lock é utilizada quando uma transação deseja ler um item no banco de dados. A write_lock é utilizada quando uma transação deseja escrever no banco de dados. E, a unlock é utilizada após o término das operações read_lock e write_lock. rações: read_lock, write_lock Embora, os locks e binários e os unlock. A locks read/write garantam a exclusividade de execu- ção de uma transação, eles não garantem a serialização das transações concorrentes. A serialização é uma propriedade do SGBD que garante que independente da ordem dos acessos aos dados feitos pelas transações, o resultado nal será o mesmo (vide Figura 8). Figura 8: exemplo de transações serializáveis. Outra técnica que visa solucionar o problema de exclusividade e de serialização é a utilização do algoritmo de bloqueio de duas fases (Two-Phase Locking - 2PL). Este al- goritmo tem duas fases: a primeira consiste na obtenção de locks, chamada de growing; e a segunda consiste na liberação de locks. O principal problema desse tipo de controle de concorrência é a possibilidade de deadlocks. Uma técnica para prevenção de deadlocks é a baseada em timestamp. Nesta técnica, a cada transação do sistema é associado um único timestamp xo. Esse timestamp é criado pelo SGBD antes que uma transação inicie sua execução. Os timestamps das transações determinam a ordem de serialização das transações e são atualizados a cada nova execução de leitura ou de escrita. Conforme explicamos anteriormente, este item está errado, pois o timestamp não utiliza o algoritmo 2PL. Caso deseje aprofundar no assunto sobre SGBD, recomendamos a seguinte referência Página 118 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Volume questões de TI Sistema de banco de dados - Silberschatz, Abraham; Korth, Henry F e Sudarshan. Página 119 de 120 www.handbookdeti.com.br Handbook de Questões de TI Comentadas para Concursos Questão 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 Página 120 de 120 Volume questões de TI Resposta D A B D E B E E C C C E B 80 CERTO 81 ERRADO 82 ERRADO C A E B C E B E C C E C E E A E B A A C A B E A B C A B C A C A B A E 68 CERTO 69 ERRADO 70 ERRADO Handbook de TI Além do Gabarito Índice Remissivo Indexação de Registros, 46 Isolamento entre Transações, 112, 114 JOIN, 86 Álgebra Relacional, 42 Leitura Limpa, 109 ACID, 49, 52, 101, 114 Leitura Suja, 109 Atomicidade em Transação, 114 Banco de Dados, 4, 5, 7, 10, 14, 16, 18, 21, 23, 26, 28, 30, 33, 37, 39, 42, 44, 46, 49, 52, 54, 63, 65, 67, 69, 72, 75, 77, 79, 81, 83, 86, 90, 92, 94, 96, 98, 100102, 106, 109, 110, 112, 114 Missing Deadlock, 109 Modelagem de Dados, 37 Modelo Entidade-Relacionamento, 23, 26, 30, 33, 39 Modelo Objeto-Relacionamento, 39 Modelo Relacional, 30, 33, 39, 65, 69, 116 Bancos de Dados Distribuídos, 59 Categorias de Linguages de Banco de Dados, 54 Níveis de Isolamento, 98 Nível de Abstração, 44 Nível de Visão, 44 Chave Assimétrica, 37 Nível Físco, 44 Chave Secundária, 37 Nível Lógico, 44 Chave Simétrica, 37 Normalização de Banco de Dados, 63, 65, 67, Clean Read, 109 69 Commit, 14 Commit Alcançado, 109 Operações de Composição de Relações, 83 Concorrência entre Transações, 100, 110, 116 Oracle, 5, 7, 10, 12 Consistência em Transação, 114 Otimizador de Consultas, 57 Consulta SQL, 75, 83, 90, 116 Controle de Concorrência, 102, 116 PL/SQL, 16 Criptograa, 37 Primeira Forma Normal (1FN), 63, 65, 67, 72 Projeto Lógico de Banco de Dados, 30 Data Control Language (DCL), 54, 94 Data Denition Language (DDL), 54, 57, 94 Reached Commit, 109 Data Manipulation Language (DML), 54, 57, Rolling Back, 14 94 Data Query Language (DQL), 54 Deadlock Ausente, 109 DER, 28 Dicionário de Dados (DD), 4 Dirty Read, 109 Durabilidade, 109 Durabilidade em Transação, 114 Escala de Execução, 112 Escalonamento de Banco de Dados, 109 Gatilhos, 18 Gerência de Transações, 106 Grafo de Precedências, 102 HAVING, 86 Rolling Forward, 14 Savepoint, 14 Segunda Forma Normal (2FN), 63, 67, 72 Segurança da Informação, 37 Serialização, 102 Serializabilidade, 109 SGBD, 4, 42, 57, 100, 116 Sistemas Distribuídos, 61 SQL, 12, 21, 54, 77, 79, 81, 86, 90, 92, 94, 96, 106 Superchave, 37 Terceira Forma Normal (3FN), 63, 67, 72 Transações de Banco de Dados, 102 Transact SQL, 21 Transaction Control Language (TCL), 54 Triggers, 18, 96 Independência de Fragmentação, 61 Independência de Localização, 61 Independência do Sistema Operacional, 61 Two-Phase Locking (2PL), 116 121 Visões de Banco de Dados, 106