Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

Prévia do material em texto

<p>. 1</p><p>IFMS</p><p>Técnico de Tecnologia da Informação</p><p>Algoritmos e Estruturas de Dados: Fundamentos de lógica de programação: tipos de dados,</p><p>operadores, expressões, estruturas de controle e repetição, fluxogramas e diagramas de bloco. Estruturas</p><p>de dados homogêneas e heterogêneas: vetores e matrizes, registros, listas, filas, pilhas e árvores.</p><p>Métodos de busca e ordenação, recursividade. Funções e procedimentos: variáveis locais e globais,</p><p>utilização de parâmetros........................................................................................................................... 1</p><p>Análise e projetos: Modelagem de dados: diagrama de fluxo de dados, modelo entidade-</p><p>relacionamento. Análise e projeto orientado a objetos com notação UML, análise e projeto estruturado de</p><p>sistemas. ................................................................................................................................................ 28</p><p>Banco de dados: Conceitos, linguagem de definição de dados, linguagem de manipulação de dados.</p><p>Dicionário de dados. Arquitetura de banco de dados. Bancos de dados relacionais, modelo lógico e</p><p>representação física, normalização, conceitos de concorrência, controle e transações, Integridade, Store</p><p>Procedures, Views, Triggers. Indexação. ............................................................................................... 47</p><p>Noções de SQL: uso do join, union, exists e subconsultas, distinct. ................................................ 114</p><p>Técnicas e Linguagem de Programação: Orientação a Objetos: fundamentos, classes, interfaces,</p><p>objetos, atributos, métodos, herança, polimorfismo, encapsulamento, construtores e destrutores.</p><p>Programação estruturada. Conceito de sistemas centralizados, descentralizados, distribuídos,</p><p>cliente/servidor e em camadas. ............................................................................................................ 142</p><p>Linguagens: Java EE 7 e PHP (versão 7+). Padrões: HTML5+, CSS (versão 2+), JAVASCRIPT (versão</p><p>1.8.5). ................................................................................................................................................... 187</p><p>Engenharia de Software: conceitos gerais, engenharia de sistemas e da informação, engenharia de</p><p>requisitos, projeto, codificação, verificação, validação e testes, inspeções, revisões técnicas, garantia de</p><p>qualidade de software. Modelos de ciclo de vida (cascata, prototipagem, espiral, incremental, RAD,</p><p>modelo orientado a reuso). ................................................................................................................... 289</p><p>Noções sobre controle de versões de software (CVS). .................................................................... 317</p><p>Gerência de projetos conforme padrão PMI. .................................................................................... 323</p><p>Segurança Computacional: Noções de sobre as principais técnicas e algoritmos de Criptografia</p><p>utilizados (MD5, SHA-1, RSA, simétrica e assimétrica). ....................................................................... 334</p><p>Direitos de Propriedades de Software – Lei de Software. ................................................................ 351</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 2</p><p>Candidatos ao Concurso Público,</p><p>O Instituto Maximize Educação disponibiliza o e-mail professores@maxieduca.com.br para dúvidas</p><p>relacionadas ao conteúdo desta apostila como forma de auxiliá-los nos estudos para um bom</p><p>desempenho na prova.</p><p>As dúvidas serão encaminhadas para os professores responsáveis pela matéria, portanto, ao entrar</p><p>em contato, informe:</p><p>- Apostila (concurso e cargo);</p><p>- Disciplina (matéria);</p><p>- Número da página onde se encontra a dúvida; e</p><p>- Qual a dúvida.</p><p>Caso existam dúvidas em disciplinas diferentes, por favor, encaminhá-las em e-mails separados. O</p><p>professor terá até cinco dias úteis para respondê-la.</p><p>Bons estudos!</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 1</p><p>Caro(a) candidato(a), antes de iniciar nosso estudo, queremos nos colocar à sua disposição, durante</p><p>todo o prazo do concurso para auxiliá-lo em suas dúvidas e receber suas sugestões. Muito zelo e técnica</p><p>foram empregados na edição desta obra. No entanto, podem ocorrer erros de digitação ou dúvida</p><p>conceitual. Em qualquer situação, solicitamos a comunicação ao nosso serviço de atendimento ao cliente</p><p>para que possamos esclarecê-lo. Entre em contato conosco pelo e-mail: professores@maxieduca.com.br</p><p>PROGRAMAÇÃO DE SOFTWARE</p><p>Lógica de Programação</p><p>“Lógica é uma área da filosofia que estuda o fundamento, a estrutura e as expressões humanas do</p><p>conhecimento. A lógica foi criada por Aristóteles no século IV a.C. para estudar o pensamento humano e</p><p>distinguir interferências e argumentos certos e errados.1”</p><p>Então o que Podemos Entender por Lógica de Programação?</p><p>Lógica de programação é necessária para que se possa trabalhar com desenvolvimentos de</p><p>programas de computador, para estes serem desenvolvidos são utilizados dois passos básicos,</p><p>sequencias lógica (os passos executados desde para a resolução de um problema) e instruções (conjunto</p><p>de regras e ações para execução de instruções lógicas), tais passos são denominados algoritmos.</p><p>Algoritmos</p><p>“Um conjunto finito de regras que provê uma sequência de operações para resolver um tipo de</p><p>problema específico.”</p><p>Ao analisar a frase acima, podemos notar que fazemos o uso constante de algoritmos para a resolução</p><p>de qualquer problema em nosso dia-a-dia, desde o simples fato de calçar um par de sapatos ou até os</p><p>procedimentos utilizados para enviar um e-mail.</p><p>Os algoritmos devem seguir algumas características básicas que seguem abaixo:</p><p>- Um algoritmos deve ter inicio e fim;</p><p>- Resolver qualquer problema proposto;</p><p>- Nuca um algoritmos deve ser ambíguo (ter dupla interpretação);</p><p>- Todo algoritmos deve ter fim;</p><p>Em lógica de programação, os algoritmos são representados por várias formas diferentes, mas as</p><p>principais representações são:</p><p>Programas</p><p>Os programas de computadores ou software são algoritmos escritos com o suporte de uma linguagem</p><p>de progrmação como Cobol, Fortran, Visual Basic, Pascal, etc. então são transformados e linguagem de</p><p>máquina e executados no computador.</p><p>Descrição Narrativa</p><p>A descrição narrativa é uma das formas mais simples de representar um algoritmo, com essa forma, o</p><p>narrador descreve o passo-a-passo da resolução de um problema proporcionado ao receptor um</p><p>entendimento do assunto mesmo não conhecendo algoritmos.</p><p>Vejamos alguns exemplos:</p><p>1 Gabriela Cabral - http://www.brasilescola.com/filosofia/o-que-logica.htm</p><p>Algoritmos e Estruturas de Dados: Fundamentos de lógica de programação:</p><p>tipos de dados, operadores, expressões, estruturas de controle e repetição,</p><p>fluxogramas e diagramas de bloco. Estruturas de dados homogêneas e</p><p>heterogêneas: vetores e matrizes, registros, listas, filas, pilhas e árvores.</p><p>Métodos de busca e ordenação, recursividade. Funções e procedimentos:</p><p>variáveis locais e globais, utilização de parâmetros.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 2</p><p>Problema 1:</p><p>Chupar uma bala.</p><p>Algoritmo:</p><p>Pegue a bala,</p><p>Retire-a do papel,</p><p>Coloque a bala na boca.</p><p>Problema 3:</p><p>Somar dois números.</p><p>Algoritmo:</p><p>Atribua o primeiro numero,</p><p>Atribua o segundo numero,</p><p>Obtenha a soma dos números.</p><p>Problema 2:</p><p>Enviar um e-mail</p><p>Algoritmo:</p><p>Abra o editor de e-mail,</p><p>Clique em redigir e-mail,</p><p>Selecione o destinatário,</p><p>Escreva o e-mail desejado,</p><p>Clique em Enviar.</p><p>Problema 4:</p><p>Algoritmo:</p><p>Fluxograma ou Diagrama de Bloco</p><p>São utilizados símbolos gráficos universais que auxiliam para a compreensão dos passos que os</p><p>algoritmos seguem para que o problema</p><p>Ela também mostra as interações ou colaborações entre os</p><p>vários elementos estruturais descritos nas visões do modelo do usuário e do modelo estrutural;</p><p>- Visão do modelo de implementação: Os aspectos estruturais e comportamentais do sistema são</p><p>representados da forma como devem ser construídos;</p><p>- Visão do modelo do ambiente: Os aspectos estruturais e comportamentais do ambiente, no qual o</p><p>sistema deverá ser implementado, devem ser representados.</p><p>A OOA pode ocorrer em muitos níveis de abstração diferentes. No nível de negócio ou de empresa,</p><p>as técnicas associadas com a OOA podem ser combinadas com uma abordagem de engenharia de</p><p>processos de negócio, num esforço para definir classes, objetos, relacionamentos e comportamentos que</p><p>modelem todo o negócio. Em seu nível mais baixo de abstração, cai no âmbito da engenharia de software</p><p>orientada a objetos.</p><p>Reuso e análise de domínio:</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 30</p><p>Firesmith descreve a análise de domínio de software do seguinte modo:</p><p>A análise de domínio de software é a identificação, análise e especificação dos requisitos comuns de</p><p>um domínio de aplicação específico, para reuso tipicamente em vários projetos dentro do domínio de</p><p>aplicação ... [Análise de domínio Orientado a Objetos é] a identificação, análise e especificação de</p><p>capacidades comuns, reusáveis dentro de um domínio de aplicação específico, em termos de objetos</p><p>comuns, classes, sub-montagens e frameworks ...</p><p>Componentes Genéricos do Modelo de Análise OO</p><p>Componentes Estáticos: são de natureza estrutural e indicam características que vigoram durante toda</p><p>a vida operacional de uma aplicação. Essas características distinguem um objeto de outros objetos.</p><p>Componentes dinâmicos: objetivam o controle e são sensíveis ao processamento de tempos e</p><p>eventos. Eles distinguem como um objeto interage com outros objetos ao longo do tempo.</p><p>O processo de OOA:</p><p>Casos de Uso: são criados com os seguintes objetivos:</p><p>- Estabelecer os requisitos funcionais e operacionais do sistema (produto) pela definição de um cenário</p><p>de uso que seja combinado entre o usuário final e a equipe de engenharia de software;</p><p>- Produzir uma descrição clara e não ambígua de como o usuário final e o sistema interagem um com</p><p>o outro;</p><p>- Produzir uma base para o teste de validação;</p><p>Modelagem classe-responsabilidade-colaboração: Fornece um meio simples para identificar e</p><p>organizar as classes que são relevantes aos requisitos do sistema ou produto. Um modelo CRC é na</p><p>realidade um conjunto de fichas padrão de indexação que representam as classes. As fichas são divididas</p><p>em três seções. No alto da ficha você escreve o nome da classe. No corpo da ficha você lista as</p><p>responsabilidades da classe à esquerda e os colaboradores à direita.</p><p>Classes: características de seleção:</p><p>- Informação retida;</p><p>- Serviços necessários;</p><p>- Atributos múltiplos;</p><p>- Atributos comuns;</p><p>- Operações comuns;</p><p>- Requisitos essenciais.</p><p>Responsabilidades: diretrizes para atribuir responsabilidades a classes:</p><p>- A inteligência do sistema deve ser distribuída uniformemente;</p><p>- Cada responsabilidade deve ser enunciada tão genericamente quanto possível;</p><p>- A informação e o comportamento relacionado devem residir dentro da mesma classe;</p><p>- A informação de uma coisa deve ser localizada numa única classe, não distribuída entre várias</p><p>classes;</p><p>- Responsabilidades devem ser compartilhadas por classes relacionadas, quando adequado;</p><p>Colaborações: as classes satisfazem as suas responsabilidades em um de dois modos: (1) uma classe</p><p>pode usar suas próprias operações para manipular seus próprios atributos, satisfazendo, assim, uma</p><p>responsabilidade específica, ou (2) uma classe pode colaborar com outras classes.</p><p>Colaborações representam solicitações de um cliente para um servidor, para satisfazer as</p><p>responsabilidades do cliente. Dizemos que um objeto colabora com outro objeto se, para satisfazer uma</p><p>responsabilidade, ele precisa mandar quaisquer mensagens a outro objeto. As colaborações identificam</p><p>relações entre as classes.</p><p>Três diferentes relacionamentos genéricos entre classes:</p><p>- O relacionamento é parte de;</p><p>- O relacionamento tem conhecimento de;</p><p>- O relacionamento depende de.</p><p>A revisão do modelo CRC pode utilizar a seguinte abordagem:</p><p>- A todos os participantes da revisão são dados subconjuntos das fichas de indexação do modelo CRC.</p><p>As fichas que colaboram devem ser separadas (i.e., nenhum revisor deve ter duas fichas que colaboram);</p><p>- Todos os cenários de casos de uso (e correspondentes diagramas de casos de uso) devem ser</p><p>organizados em categorias;</p><p>- O líder da revisão lê o caso de uso pausadamente. À medida que o líder da revisão chega a um</p><p>objeto especificado, passa a vez para a pessoa que está com a correspondente ficha de indexação. Por</p><p>exemplo:</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 31</p><p>O proprietário observa o painel de controle de Safe-Home para determinar se o sistema está pronto</p><p>para operar. Se não está, o proprietário precisa fechar fisicamente as janelas/portas de modo que o</p><p>indicador de pronto fique ligado. [Um indicador não-pronto implica que um sensor está aberto, isto é, que</p><p>uma porta ou janela está aberta.]</p><p>- Quando o líder da revisão chega a “painel de controle”, na narrativa do caso de uso, a vez é passada</p><p>para a pessoa que está com a ficha de indexação “painel de controle”. A frase “implica que um sensor</p><p>está aberto” exige que a ficha de indexação contenha uma responsabilidade que valide essa implicação</p><p>(a responsabilidade “determine-estado-sensor” realiza isso). Junto à responsabilidade, na ficha de</p><p>indexação, está o colaborador “sensor”. A vez é então passada ao objeto “sensor”;</p><p>- Quando a vez é passada, quem está de posse da ficha da classe deve descrever as</p><p>responsabilidades anotadas na ficha. O grupo determina se uma (ou mais) das responsabilidades satisfaz</p><p>a exigência do caso de uso;</p><p>- Se as responsabilidades e colaborações anotadas nas fichas de indexação não podem acomodar o</p><p>caso de uso, são feitas modificações nas fichas. Isso pode incluir a definição de novas classes (e</p><p>correspondentes fichas de indexação CRC), ou a especificação de responsabilidades, ou colaborações</p><p>novas ou revisadas nas fichas existentes. Esse modo de agir continua até que o caso de uso seja</p><p>finalizado.</p><p>Definição de estruturas e hierarquias: Uma vez identificados objetos e classes usando o modelo CRC,</p><p>o analista começa a focalizar a estrutura do modelo de classes e as hierarquias resultantes que surgem,</p><p>à medida que as classes e subclasses emergem;</p><p>Definição de assunto e subsistemas: Um modelo de análise para uma aplicação completa pode ter</p><p>centenas de classes e dúzias de estruturas. Por esta razão, é necessário definir uma representação</p><p>concisa que seja um resumo dos modelos CRC e da estrutura que acabaram de ser descritos. Quando</p><p>um grupo de classes colabora entre si, para satisfazer a um conjunto coesivo de responsabilidades, é</p><p>frequentemente referido como subsistema ou pacote (UML).</p><p>O modelo Objeto-relacionamento</p><p>O modelo objeto-relacionamento (como o modelo entidade-relacionamento) pode ser derivado em três</p><p>partes:</p><p>Usando as fichas CRC, uma rede de objetos colaboradores pode ser desenhada;</p><p>Revisando as fichas do modelo CRC, as responsabilidades e colaborações são avaliadas e cada linha</p><p>de conexão não rotulada é rotulada;</p><p>Uma vez estabelecidos relacionamentos rotulados, cada extremo é avaliado para determinar a</p><p>cardinalidade.</p><p>O modelo Objeto-comportamento</p><p>Representa o comportamento do sistema como uma função de eventos e tempo específicos.</p><p>Para criá-lo, o analista precisa executar os seguintes passos:</p><p>- Avaliar todos os casos de uso para entender plenamente a seqüência de interação dentro do sistema;</p><p>- Identificar os eventos que dirigem a seqüência de interação e entender como esses eventos se</p><p>relacionam a objetos específicos;</p><p>- Criar uma marcação de eventos em cada caso de uso;</p><p>-</p><p>Construir um diagrama de transição de estados para o sistema;</p><p>- Revisar o modelo objeto-comportamento para verificar a precisão e a consistência.</p><p>Projeto Orientado a Objetos (OOD)</p><p>O projeto Orientado a Objetos (OOD), transforma o modelo de análise criado, usando análise orientada</p><p>a objetos, num modelo de projeto que serve como documento para a construção do software. Exige uma</p><p>arquitetura de software multicamada, a especificação de subsistemas que realizam as funções</p><p>necessárias e fornecem a infraestrutura de apoio, uma descrição de objetos (classes) que formam os</p><p>blocos construtivos do sistema e uma descrição dos mecanismos de comunicação que permitem aos</p><p>dados fluir entre camadas, subsistemas e objetos.</p><p>1. A OOD estabelece uma documentação de projeto que permite ao engenheiro de software definir a</p><p>arquitetura OO de forma a maximizar o reuso, aumentando assim a velocidade de desenvolvimento e a</p><p>qualidade do produto final.</p><p>A OOD está dividida em duas atividades principais:</p><p>a. Projeto de Sistema: cria a arquitetura do produto definindo uma série de “camadas” que realizam</p><p>funções específicas do sistema e identificando as classes que são encapsuladas por subsistemas que</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 32</p><p>residem em cada camada. Também considera a especificação de três componentes: a interface com o</p><p>usuário, as funções de gestão de dados e as facilidades de gestão de tarefas;</p><p>b. O Projeto de Objetos: focaliza o detalhe interno de classes individuais, definindo detalhes de</p><p>atributos, operações e mensagem.</p><p>Como produto, um modelo de projeto OO inclui a arquitetura do software,a descrição da interface com</p><p>o usuário, os componentes de gestão de dados, as facilidades de gestão de tarefas e as descrições</p><p>detalhadas de cada classe a ser usada no sistema. Em cada estágio, os elementos do modelo de projeto</p><p>orientado a objetos são revisados quanto à clareza, correção, completeza e consistência com os</p><p>requisitos do usuário e entre si.</p><p>2. As quatro camadas do projeto OO são:</p><p>a. Camada de subsistema: contém uma representação de cada um dos subsistemas que permitem ao</p><p>software satisfazer os requisitos definidos pelo cliente e implementar a infra-estrutura técnica que suporta</p><p>esses requisitos;</p><p>b. Camada de classes e objetos: contém as hierarquias de classes que permitem a criação do</p><p>sistema usando generalizações e especializações cada vez mais focalizadas. Essa camada também</p><p>contém representações de cada objeto;</p><p>c. Camada de mensagens: contém os detalhes de projeto que permitem a cada objeto se comunicar</p><p>com seus colaboradores. Essa camada estabelece as interfaces externa e interna do sistema;</p><p>d. Camada de responsabilidade: contém as estruturas de dados e o projeto algorítmico de todos os</p><p>atributos e operações de cada objeto.</p><p>Essas camadas repousam sobre uma “base”, chamada de fundação e tem por objetivo o projeto de</p><p>objetos do domínio (chamados padrões de projeto).</p><p>3. O processo do projeto do sistema: inclui as seguintes atividades:</p><p>a. Particionar o modelo de análise em subsistemas;</p><p>b. Identificar a concorrência que é ditada pelo problema;</p><p>c. Alocar subsistemas a processadores e tarefas;</p><p>d. Desenvolver um projeto para a interface do usuário;</p><p>e. Escolher uma estratégica básica para implementar a gestão de dados;</p><p>f. Identificar os recursos globais e os mecanismos de controle necessários para ter acesso a eles;</p><p>g. Projetar um mecanismo de controle adequado para o sistema, incluindo gestão de tarefas;</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 33</p><p>h. Considerar como as condições limite devem ser manipuladas;</p><p>i. Revisar e considerar concessões.</p><p>Particionar o modelo de análise: No projeto de sistemas OO particionamos o modelo de análise para</p><p>definir coleções de classes, relacionamentos e comportamentos coesivos. Esses elementos de projeto</p><p>são empacotados como um subsistema;</p><p>Concorrência e alocação de subsistemas: quando subsistemas são concorrentes, existem duas</p><p>opções de alocação: alocar cada subsistema a um processador independente ou alocar os subsistemas</p><p>ao mesmo processador e providenciar suporte de concorrência através das características do SO. Tarefas</p><p>concorrentes são definidas examinando o diagrama de estados de cada objeto (thread);</p><p>O componente de gestão de tarefas: (para tarefas concorrentes)</p><p>- As características da tarefa são determinadas;</p><p>- Uma tarefa coordenadora e os objetivos associados são definidos;</p><p>- A coordenadora e as outras tarefas são integradas.</p><p>Podem ser dirigidas por eventos ou por relógio;</p><p>Template para definição dos atributos e operações, necessários para conseguir coordenação e</p><p>comunicação com outras tarefas:</p><p>Nome da tarefa – o nome do objeto</p><p>Descrição – uma narrativa descrevendo a finalidade do objeto</p><p>Prioridade – prioridade da tarefa (ex.: baixa, média, alta)</p><p>Serviços – uma lista de operações que são responsabilidade do objeto</p><p>Coordenada por – modo pelo qual o comportamento do objeto é invocado</p><p>Comunica-se através de – valores de dados de entrada e saída relevantes para a tarefa.</p><p>O componente de interface com o usuário: recebe como entrada os cenários de uso e uma descrição</p><p>dos papéis que os usuários desempenham (atores), à medida que interagem com o sistema. Ambos</p><p>desenvolvidos durante a OOA. Dado o grande número de ambientes de desenvolvimento de interface,</p><p>basta ao implementador instanciar os objetos que têm características adequadas para o domínio do</p><p>problema.</p><p>O componente de gestão de dados: inclui duas áreas distintas: (1) a gestão dos dados que são críticos</p><p>para a aplicação propriamente dita e (2) a criação de uma infraestrutura para armazenamento e</p><p>recuperação de objetos. Em geral, a gestão de dados é projetada numa disposição em camadas. A ideia</p><p>é isolar os requisitos de baixo nível por manipulação das estruturas de dados dos requisitos de alto nível,</p><p>para manejar os atributos do sistema. Dentro do contexto de sistema, um sistema de gestão de base de</p><p>dados é frequentemente usado como um armazém de dados comum para todos os subsistemas. Os</p><p>objetos necessários para manipular a base de dados são membros de classes reusáveis, que são</p><p>identificados usando análise de domínio ou são supridos diretamente pelo fornecedor da base de dados.</p><p>O projeto do componente de gestão de dados inclui o projeto dos atributos e as operações necessárias</p><p>para gerir os objetos. Os atributos relevantes estão associados a cada objeto no domínio do problema e</p><p>fornecem informação que corresponde à questão, “Como eu me armazeno?”. Uma alternativa é a criação</p><p>de uma classe objeto-servidor “com serviços para (a) dizer a cada objeto para se guardar e (b) recuperar</p><p>objetos guardados para uso por outros componentes de projeto”. Como exemplo de gestão de dados para</p><p>o objeto sensor (parte do sistema SafeHome), o projeto poderia especificar um arquivo plano chamado</p><p>de “sensor”. Cada registro iria corresponder a uma instância denominada de sensor e iria conter os valores</p><p>de cada atributo de sensor para aquela instância. As operações dentro da classe objeto-servidor iriam</p><p>permitir a cada objeto específico ser armazenado e recuperado quando necessário para o sistema. Para</p><p>objetos mais complexos, poderia ser necessário especificar uma base de dados relacional ou uma base</p><p>de dados orientada a objetos para realizar a mesma função.</p><p>O componente de gestão de recursos: subsistemas competem por recursos (ex.: unidades de disco,</p><p>processador, base de dados, ...). Deve-se implementar mecanismos que controlem o acesso a tais</p><p>recursos.</p><p>Comunicação entre subsistemas: pode-se adotar os seguintes passos de projeto para especificar um</p><p>contrato:</p><p>- Listar cada solicitação que pode ser feita por colaboradores do subsistema: organize as solicitações</p><p>por subsistema e defina-as dentro de um ou mais contratos adequados. Certifique-se de anotar os</p><p>contratos que são herdados de superclasses;</p><p>- Para cada contrato, anote as operações (tanto herdadas,</p><p>quanto privadas) que são necessárias para</p><p>implementar as responsabilidades implicadas pelo contrato: certifique-se de associar as operações a</p><p>classes específicas que residem dentro de um subsistema;</p><p>- Considere um contrato de cada vez: para cada contrato são feitas as seguintes entradas em uma</p><p>tabela:</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 34</p><p>Tipo – tipo de contrato (isto é, cliente/servidor ou fim a fim);</p><p>Colaboradores – nome dos subsistemas que são parte do contrato;</p><p>Classe – nomes das classes (contidas num subsistema) que suportam os serviços implicados pelo</p><p>contrato;</p><p>Operação – nomes das operações (dentro da classe) que implementam os serviços;</p><p>Formato da mensagem – o formato de mensagem necessário para implementar a interação entre</p><p>colaboradores;</p><p>Se os modos de interação entre subsistemas são complexos, é criado um diagrama de colaboração</p><p>de subsistemas.</p><p>4. O processo de Projeto de Objeto: Se o projeto de sistema OO for comparado a uma planta baixa</p><p>de uma casa, o projeto de objetos focaliza os detalhes para construir cada cômodo. É nesse estágio que</p><p>os conceitos e princípios básicos associados com o projeto em nível de componente vêm à baila.</p><p>Estruturas de dados locais são definidas (para atributos) e algoritmos (para operações) são projetados.</p><p>Descrição de objeto: deve conter (1) uma descrição de protocolo, que estabelece a interface de um</p><p>objeto pela definição de cada mensagem que o objeto pode receber e da operação relacionada que o</p><p>objeto realiza quando recebe a mensagem e (2) uma descrição de implementação, que mostra detalhes</p><p>de implementação de cada operação implicada por uma mensagem que é passada para um objeto.</p><p>Projeto de algoritmos e estruturas de dados: Procede-se á otimização do modelo dos objetos básicos:</p><p>(1) Revisas o modelo objeto-relacionamento para garantir que o projeto implementado leve à utilização</p><p>eficiente dos recursos e à facilidade de implementação. Adicionar redundância onde necessário. (2)</p><p>Revisar as estruturas de dados de atributos e os algoritmos correspondentes das operações, para</p><p>aperfeiçoar a eficiência de processamento. (3) Criar novos atributos para armazenar a informação</p><p>derivada, evitando assim o recálculo.</p><p>Componentes e interfaces de programa:</p><p>PACOTE nome-componente-programa É</p><p>TIPO especificação dos objetos de dados</p><p>. . .</p><p>PROC especificação das operações relacionadas . . .</p><p>PRIVADO</p><p>Detalhes das estruturas de dados dos objetos</p><p>CORPO DO PACOTE nome-componente-programa É</p><p>PROC operação.1 (descrição da interface) É</p><p>. . .</p><p>FIM</p><p>PROC operação.n (descrição da interface) É</p><p>. . .</p><p>FIM</p><p>FIM nome-componente-programa</p><p>TIPO – parte de especificação de componente que indica todos os objetos de dados;</p><p>PROC – parte da especificação de componente que indica as operações;</p><p>PRIVADO – fornece detalhes das estruturas de dados e processamentos;</p><p>PACOTE – é conceitualmente semelhante aos objetos.</p><p>PROCEDIMENTO Software SafeHome</p><p>PACOTE sistema É</p><p>TIPO dados do sistema</p><p>PROC instalar, definir, construir, carregar</p><p>PROC mostrar, reajustar, consultar, modificar, chamar</p><p>PRIVADO</p><p>CORPO DO PACOTE sistema É</p><p>PRIVADO</p><p>sistema.id É CADEIA COMPRIMENTO (8);</p><p>número.fone_verificação, telefone, número, ...</p><p>É CADEIA COMPRIMENTO (8);</p><p>sensor.tabela DEFINIDO</p><p>sensor.tipo É CADEIA COMPRIMENTO (2),</p><p>sensor.número, alarme.limiar É NUMÉRICO;</p><p>PROC instalar RECEBE (telefone.número)</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 35</p><p>{detalhe de projeto para a operação instalar}</p><p>. . .</p><p>FIM sistema</p><p>PACOTE sensor É</p><p>TIPO dados do sensor</p><p>PROC ler, ajustar, testar</p><p>PRIVADO</p><p>CORPO DO PACOTE sensor É</p><p>PRIVADO</p><p>sensor.id É CADEIA COMPRIMENTO (8);</p><p>sensor.estado É CADEIA COMPRIMENTO (8);</p><p>alarme.características DEFINIDO</p><p>limiar, tipo de sinal, nível de sinal É NUMÉRICO,</p><p>hardware.interface DEFINIDO</p><p>tipo, características.a/d, dados. Tempo É NUMÉRICO,</p><p>FIM sensor</p><p>. . .</p><p>FIM software SafeHome</p><p>PROC ler(sensor.id, sensor.estado: FORA);</p><p>PROC ajustar (alarme.características, hardware.interface: DENTRO);</p><p>PROC testar (sensor.id, sensor.estado, alarme.características: FORA);</p><p>Projeto detalhado</p><p>PROC ler (sensor.id, sensor.estado: FORA);</p><p>Bruto.sinal É CADEIA DE BIT</p><p>SE (hardware.tipo.interface = “s” & características.alarme.tipo.sinal = “B”</p><p>ENTÃO</p><p>PEGAR (sensor, exceção:sensor.estado := erro) bruto.sinal;</p><p>CONVERTER bruto.sinal PARA sinal.nível.interno;</p><p>SE sinal.nível.interno > limiar</p><p>ENTÃO sensor.estado := “evento”;</p><p>SENÃO sensor.estado := “não-evento”;</p><p>FIM-SE</p><p>SENÃO {processamento para outros tipos de interface seriam especificados}</p><p>FIM-SE</p><p>RETORNAR sensor.id, sensor.estado;</p><p>FIM ler</p><p>5. Padrões de Projeto: você vai encontrar padrões repetidos de classes e objetos comunicantes em</p><p>muitos sistemas OO. Esses padrões resolvem problemas de projeto específicos e tornam o projeto OO</p><p>mais flexível, elegante, e, em última análise, reusável. Em um sistema OO, padrões de projeto podem ser</p><p>usados pela aplicação de dois mecanismos diferentes: herança e composição. Sua descrição deve conter:</p><p>o nome do padrão, o objetivo do padrão, , as “influências de projeto” que motivam o padrão, a solução</p><p>que atenua tais influências, as classes que são necessárias para implementar a solução, as</p><p>responsabilidades e colaborações entre as classes da solução, diretrizes que levam à implementação</p><p>efetiva, código-fonte exemplo ou gabaritos de código-fonte e referências cruzadas a padrões de projeto</p><p>relacionados.</p><p>FUNDAMENTOS DO UML7</p><p>Este capítulo lhe fornecerá uma visão rápida dos fundamentos da UML. Tenha em mente que isto não</p><p>é um tutorial detalhado sobre UML, mas apenas uma rápida introdução a UML que pode ser lida como</p><p>um tutorial UML. Se você gostaria de aprender mais sobre a Linguagem de Modelagem Unificada, ou</p><p>generalidades sobre análise e desenho de software, consulte um dos muitos livros disponíveis sobre o</p><p>tópico. Existem também muitos tutoriais na Internet os quais você pode usar como ponto de partida.</p><p>7 Fonte: Fundamentos do UML</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 36</p><p>A Unified Modelling Language (UML) é uma linguagem ou notação de diagramas para especificar,</p><p>visualizar e documentar modelos de 'software' orientados por objetos. O UML não é um método de</p><p>desenvolvimento, o que significa que não lhe diz o que fazer primeiro ou o que fazer depois ou como</p><p>desenhar o seu sistema, mas ajuda-o a visualizar o seu desenho e a comunicar com os outros. O UML é</p><p>controlado pelo Object Management Group (OMG) e é a norma da indústria para descrever graficamente</p><p>o 'software'.</p><p>O UML está desenhado para o desenho de 'software' orientado por objetos e tem uma utilização</p><p>limitada para outros paradigmas de programação.</p><p>A UML é composta por muitos elementos de modelo que representam as diferentes partes de um</p><p>sistema de software. Os elementos UML são usados para criar diagramas, que representam um</p><p>determinada parte, ou um ponto de vista do sistema. Os seguintes tipos de diagramas são suportados</p><p>pelo Umbrello UML Modeller:</p><p>- Diagrama de Caso de Uso mostra atores (pessoas ou outros usuários do sistema), casos de uso (os</p><p>cenários onde eles usam o sistema), e seus relacionamentos</p><p>- Diagrama de Classe mostra classes e os relacionamentos entre elas</p><p>- Diagrama de Sequência mostra objetos e uma sequência das chamadas do método feitas para outros</p><p>objetos.</p><p>- Diagrama de Colaboração mostra objetos e seus relacionamentos, colocando ênfase nos objetos que</p><p>participam na troca de mensagens</p><p>- Diagrama de Estado mostra estados, mudanças de estado e eventos num objeto ou uma parte do</p><p>sistema</p><p>- Diagrama de Atividade mostra atividades e as mudanças de uma atividade para outra com os eventos</p><p>ocorridos em alguma parte do sistema</p><p>- Diagrama de Componente mostra os componentes de programação de alto nível (como KParts ou</p><p>Java Beans).</p><p>- Diagrama</p><p>de Distribuição mostra as instâncias dos componentes e seus relacionamentos.</p><p>- Os Diagramas de Entidade-Associação mostram os dados e as relações e as restrições entre os</p><p>dados.</p><p>Elementos UML</p><p>Diagrama de Caso de Uso</p><p>Diagramas de Caso de Uso descrevem relacionamentos e dependências entre um grupo de Caso de</p><p>Uso e os Atores participantes no processo.</p><p>É importante observar que Diagramas de Caso de Uso não são adequados para representar o</p><p>desenho, e não podem descrever os mecanismos internos de um sistema. Diagramas de Caso de Uso</p><p>são feitos para facilitar a comunicação com os futuros usuários do sistema, e com o cliente, e são</p><p>especialmente úteis para determinar os recursos necessários que o sistema deve ter. Diagramas de Caso</p><p>de Uso dizem o quê o sistema deve fazer, mas não fazem — e não podem — especificar como isto será</p><p>conseguido.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 37</p><p>O Umbrello UML Modeller mostrando um Diagrama de Caso de Uso.</p><p>Caso de Uso</p><p>Um Caso de Uso descreve — do ponto de vista dos atores — um grupo de atividades num sistema</p><p>que produz um resultado concreto e tangível.</p><p>Casos de Uso são descrições de interações típicas entre os usuários de um sistema e o sistema</p><p>propriamente dito. Eles representam a interface externa do sistema e especificam um conjunto de</p><p>exigências do que o sistema deve fazer (lembre-se: somente o quê, não como).</p><p>Quando trabalhar com Casos de Uso, é importante lembrar-se de algumas regras simples:</p><p>- Cada Caso de Uso está relacionado com no mínimo um ator</p><p>- Cada Caso de Uso possui um iniciador (isto é um ator)</p><p>- Cada Caso de Uso liga-se a um resultado relevante (um resultado com“valor de negócio”)</p><p>Casos de Uso também podem ter relacionamentos com outros Casos de Uso. Os três tipos mais</p><p>comuns de relacionamento entre Casos de Uso são:</p><p>> que especifica que um Caso de Uso toma lugar dentro de outro Caso de Uso</p><p>> que especifica que em determinadas situações, ou em algum ponto (chamado um</p><p>ponto de extensão) um Caso de Uso será estendido por outro.</p><p>Generalização especifica que um Caso de Uso herda as características do “Super” Caso de Uso, e</p><p>pode sobrepor algumas delas ou adicionar novas de maneira semelhante a herança entre classes.</p><p>Ator</p><p>Um ator é uma entidade externa (fora do sistema) que interage com o sistema participando (e</p><p>frequentemente iniciando) um Caso de Uso. Atores podem ser pessoas reais (por exemplo usuários do</p><p>sistema), outro sistema de computador ou eventos externos.</p><p>Atores não representam as pessoa física ou sistemas, mas sua regra. Isto significa que quando uma</p><p>pessoa interage com o sistema de diferentes maneiras (assumindo diferentes regras) ela será</p><p>representada por diversos atores. Por exemplo um pessoa que fornece suporte ao cliente por telefone e</p><p>recebe ordens do cliente para o sistema pode ser representado por um ator da“Equipe de Suporte” e um</p><p>ator “Representante de Vendas”</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 38</p><p>Descrição do Caso de Uso</p><p>Descrição do Caso de Uso são narrativas de texto do Caso de Uso. Elas usualmente tomam a forma</p><p>de uma nota ou um documento que é de alguma maneira ligado ao Caso de Uso, e explana o processo</p><p>ou atividades que tomarão lugar no Caso de Uso.</p><p>Diagrama de Classe</p><p>Diagramas de Classe mostram as diferentes classes que fazem um sistema e como elas se relacionam.</p><p>Os Diagramas de Classe são chamados diagramas“estáticos” porque mostram as classes, com seus</p><p>métodos e atributos bem como os relacionamentos estáticos entre elas: quais classes “conhecem” quais</p><p>classes ou quais classes “são parte” de outras classes, mas não mostram a troca de mensagens entre</p><p>elas.</p><p>O Umbrello UML Modeller mostrando um Diagrama de Classe.</p><p>Classe</p><p>Um Classe define os atributos e os métodos de um conjunto de objetos. Todos os objetos desta classe</p><p>(instâncias desta classe) compartilham o mesmo comportamento, e possuem o mesmo conjunto de</p><p>atributos (cada objeto possui seu próprio conjunto). O termo “Tipo” é algumas vezes usado ao invés de</p><p>Classe, mas é importante mencionar que estes dois termos não são a mesma coisa, e Tipo é um termo</p><p>mais genérico.</p><p>Em UML Classes são representadas por retângulos, com o nome da classe, e podem também mostrar</p><p>os atributos e operações da classe em dois outros“compartimentos” dentro do retângulo.</p><p>Representação visual de uma Classe em UML.</p><p>Atributos</p><p>Na UML, atributos são mostrados com pelo menos seu nome, e podem também mostrar seu tipo, valor</p><p>inicial e outras propriedades. Atributos podem também ser exibidos com sua visibilidade:</p><p>+ indica atributos públicos</p><p># indica atributos protegidos</p><p>- indica atributos privados</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 39</p><p>- Operações</p><p>Operações (métodos) também são exibidos com pelo menos seu nome, e podem também mostrar</p><p>seus parâmetros e valores de retorno. Operações podem, como os Atributos, mostras sua visibilidade:</p><p>+ indica operações públicas</p><p># indica operações protegidas</p><p>- indica operações privadas</p><p>- Modelos</p><p>Classes podem ter modelos, um valor que é usado para uma classe ou tipo não especificado. O tipo</p><p>de modelo é especificado quando uma classe é iniciada (isto é um objeto é criado). Modelos existem no</p><p>C++ moderno e foram introduzidos no Java 1.5 onde eles são chamados de Genéricos.</p><p>Associações de Classe</p><p>Classes podem relacionar-se (ser associada com) com outras de diferentes maneiras:</p><p>- Generalização</p><p>A herança é um dos conceitos fundamentais da programação orientada por objetos, nos quais uma</p><p>classe “ganha” todos os atributos e operações da classe que herda, podendo sobrepor ou modificar</p><p>algumas delas, assim como adicionar mais atributos ou operações próprias.</p><p>EM UML, uma associação Generalização entre duas classes coloca-as numa hierarquia representando</p><p>o conceito de herança de uma classe derivada de uma classe base. Em UML, Generalizações são</p><p>representadas por uma linha conectando duas classes, com uma seta no lado da classe base.</p><p>Representação visual de uma generalização em UML.</p><p>- Associações</p><p>Um associação representa um relacionamento entre classes, e fornece a semântica comum e a</p><p>estrutura para muitos tipos de “conexões” entre objetos.</p><p>Associações são o mecanismo que permite objetos comunicarem-se entre si. Elas descrevem a</p><p>conexão entre diferentes classes (a conexão entre os objetos atuais é chamada conexão do objeto,</p><p>ou link.</p><p>Associações podem ter um regra que especifica o propósito da associação e pode ser uni ou</p><p>bidirecional (indicando se os dois objetos participantes do relacionamento podem mandar mensagens</p><p>para o outro, ou se apenas um deles sabe sobre o outro). Cada ponta da associação também possui uma</p><p>valor de multiplicidade, que dita como muitos objetos neste lado da associação pode relacionar-se com o</p><p>outro lado.</p><p>Em UML, associações são representadas como linhas conectando as classes participantes do</p><p>relacionamento, e podem também mostrar a regra e a multiplicidade de cada um dos participantes. A</p><p>multiplicidade é exibida como um intervalo [min...máx] de valores não negativos, com uma estrela (*) no</p><p>lado máximo representando infinito.</p><p>Representação visual de uma Associação em UML.</p><p>- Agregação</p><p>Agregações são um tipo especial de associação no qual as duas classes participantes não possuem</p><p>em nível igual, mas fazem um relacionamento “todo-parte”. Uma Agregação descreve como a classe que</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 40</p><p>possui a regra do todo, é composta (tem) de outras classes, que possuem a regra das partes. Para</p><p>Agregações, a classe que age como o todo sempre tem uma multiplicidade de um.</p><p>Em UML, Agregações são representadas por uma associação que mostra um romboide no lado do</p><p>todo.</p><p>Representação visual de um relacionamento Agregação em UML.</p><p>- Composição</p><p>Composições são associações que representam</p><p>agregações muito fortes. Isto significa que</p><p>Composições formam relacionamentos todo-parte também, mas o relacionamento é tão forte que as</p><p>partes não pode existir independentes. Elas existem somente dentro do todo, e se o todo é destruído as</p><p>partes morrem também.</p><p>Em UML, Composições são representadas por um romboide sólido no lado do todo.</p><p>Outros Itens do Diagrama de Classe.</p><p>Diagramas de Classe podem conter diversos outros itens além das classes.</p><p>- Interfaces</p><p>Interfaces são classes abstratas que significam instâncias que não podem ser diretamente criadas</p><p>delas. Elas podem conter operações mas não podem conter atributos. Classes podem derivar de</p><p>interfaces (através da realização de uma associação) e instâncias podem então ser feitas destes</p><p>diagramas.</p><p>- Tipos de dados</p><p>Tipos de dados são primitivos uma vez que são tipicamente construídos numa linguagem de</p><p>programação. Exemplos comuns são inteiros e lógicos. Eles não podem ser relacionados a classes, mas</p><p>as classes podem se relacionar com eles.</p><p>- Enumerações</p><p>Enumerações são uma lista simples de valores. Um exemplo típico é uma enumeração para dias da</p><p>semana. As opções de uma enumeração são chamadas Literais de Enumeração. Como tipos de dados,</p><p>elas não podem ter relacionamentos para classes, mas as classes podem relacionar-se com elas.</p><p>- Pacotes</p><p>Pacotes representam um espaço de nomes numa linguagem de programação. Num diagrama eles são</p><p>usados para representar partes de um sistema que contém mais de uma classe, talvez centenas de</p><p>classes.</p><p>Diagramas de Sequência</p><p>Diagramas de Sequência mostram a troca de mensagens (isto é chamada de método) entre diversos</p><p>Objetos, numa situação específica e delimitada no tempo. Objetos são instâncias de classes. Diagramas</p><p>de Sequência colocam ênfase especial na ordem e nos momentos nos quais mensagens para os objetos</p><p>são enviadas.</p><p>Em Diagramas de Sequência objetos são representados através de linhas verticais tracejadas, com o</p><p>nome do Objeto no topo. O eixo do tempo é também vertical, aumentando para baixo, de modo que as</p><p>mensagens são enviadas de um Objeto para outro na forma de setas com a operação e os nomes dos</p><p>parâmetros.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 41</p><p>O Umbrello UML Modeller mostrando um Diagrama de Sequência.</p><p>Mensagens pode ser síncronas, o tipo normal de mensagem de chamada onde o controle é passado</p><p>para o objeto chamado até o método ter terminado sua execução, ou assíncronas onde o controle é</p><p>passado diretamente para o objeto chamado. Mensagens síncronas possui uma caixa vertical no lado do</p><p>objeto chamado para mostrar o controle do fluxo do programa.</p><p>Diagramas de Colaboração</p><p>Diagramas de Colaboração mostram as interações que ocorrem entre os objetos participantes numa</p><p>situação específica. Isto é mais ou menos a mesma informação mostrada pelos Diagramas de Sequência,</p><p>mas neste a ênfase é colocada em como as interações ocorrem no tempo, enquanto os Diagramas de</p><p>Colaboração colocam os relacionamentos entre os objetos e sua topologia em destaque.</p><p>Em Diagramas de Colaboração as mensagens enviadas de um objeto para outro são representadas</p><p>por setas, mostrando o nome da mensagem, parâmetros, e a sequência da mensagem. Diagramas de</p><p>Colaboração são especialmente indicados para mostrar um fluxo ou situação específica do programa e</p><p>são um dos melhores tipos de diagrama para rapidamente demonstrar ou explanar um processo na lógica</p><p>do programa.</p><p>O Umbrello UML Modeller mostrando um Diagrama de Colaboração.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 42</p><p>Diagrama de Estado</p><p>Diagramas de Estado mostram os diferentes estados de um Objeto durante sua vida, e o estímulo que</p><p>faz com que o Objeto mude seu estado.</p><p>Diagramas de Estado veem Objetos como máquinas de estado ou automatismos finitos que podem</p><p>ser um de um conjunto de estados finitos e que podem mudar seu estado através de um de um conjunto</p><p>finito de estímulos. Por exemplo um tipo de Objeto ServidorRede pode estar em um dos seguintes estados</p><p>durante sua vida:</p><p>- Pronto;</p><p>- Ouvindo;</p><p>- Trabalhando;</p><p>- Parado.</p><p>e os eventos que podem fazer com que o Objeto mude de estado são:</p><p>- Objeto é criado;</p><p>- Objeto recebe mensagem ouvir;</p><p>- Um Cliente solicita uma conexão através da rede;</p><p>- Um Cliente termina um pedido;</p><p>- O pedido é executado e terminado;</p><p>- Objeto recebe mensagem parar, etc.</p><p>O Umbrello UML Modeller mostrando um Diagrama de Estado.</p><p>Estado</p><p>Estados são os blocos construídos dos Diagramas de Estado. Um Estado pertence a exatamente uma</p><p>classe e representa um resumo dos valores dos atributos que uma classe pode tomar. Um</p><p>Estado UML descreve o estado interno de um objeto para uma classe em particular</p><p>Observe que nem toda mudança em um dos atributos de um objeto pode ser representada por um</p><p>Estado mas somente aquelas mudanças que podem afetar significativamente o trabalho do objeto</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 43</p><p>Existem dois tipos especiais de Estados: Inicial e Final. Eles são especiais porque nenhum evento</p><p>pode fazer com que um Objeto retorne para seu estado Inicial, e da mesma maneira nenhum evento pode</p><p>tirar um Objeto de seu estado Final uma vez que ele já o tenha alcançado.</p><p>Diagrama de Atividade</p><p>O Diagrama de Atividade descreve a sequência de atividades num sistema com a ajuda as Atividades.</p><p>Diagramas de Atividade são uma forma especial de Diagramas de Estado, que somente (ou</p><p>principalmente) contém Atividades.</p><p>O Umbrello UML Modeller mostrando um Diagrama de Atividade.</p><p>Diagramas de Atividade são similares as Diagramas de Fluxo de procedimentos, com a diferença de</p><p>que todas as Atividades são claramente anexas aos Objetos.</p><p>Diagramas de Atividade são sempre associados a um Classe, uma Operaçãoou um Caso de Uso.</p><p>Diagramas de Atividade suportam Atividades sequenciais bem como paralelas. A execução paralela é</p><p>representada pelos ícones Forquilha/Esperar, e para as Atividades executadas em paralelo, não é</p><p>importante a ordem na qual elas se executam (elas podem ser executadas ao mesmo tempo ou uma após</p><p>a outra).</p><p>Atividade</p><p>Uma Atividade é um passo simples num processo. Uma Atividade é um estado no sistema com</p><p>atividade interna e, pelo menos, uma transição de saída. Atividades podem também ter mais de uma</p><p>transição de saída se elas possuem condições diferentes.</p><p>Atividades podem formar hierarquias, isto significa que uma Atividade pode ser composta por diversas</p><p>Atividades em “detalhe”, na qual as transições de entrada e saída devem corresponder às transições de</p><p>entrada e saída do diagrama de detalhe.</p><p>Elementos Auxiliares</p><p>Existem dois elementos em UML que não possuem nenhum valor real semântico para o modelo, mas</p><p>auxiliam a elucidar partes do diagrama. Estes elementos são</p><p>- Linhas de texto</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 44</p><p>- Notas de Texto e âncoras</p><p>- Caixas</p><p>Linhas de texto são úteis para adicionar informações curtas de texto ao diagrama. São textos livres e</p><p>não possuem nenhum significado para o Modelo propriamente dito.</p><p>Notas são úteis para adicionar informações mais detalhadas sobre um objeto ou situação específica.</p><p>Elas possuem a grande vantagem de poderem ser ancoradas a Elementos UML para mostrar que a</p><p>nota “pertence” a um objeto específico ou situação.</p><p>Caixas são retângulos de forma livre que podem ser usados para agrupar itens tornando os diagramas</p><p>mais legíveis. Eles não possuem nenhum significado lógico no modelo.</p><p>Diagramas de Componente</p><p>Diagramas de Componente mostram os componentes do software (sejam componentes de tecnologias</p><p>como KParts, componentes CORBA ou Java Beans ou apenas seções do sistema que são claramente</p><p>distintas) e os artefatos de que eles são feitos como arquivos de código-fonte, bibliotecas de programação</p><p>ou tabelas de bancos de dados relacionais.</p><p>Componentes pode possui interfaces (isto é classes abstratas</p><p>com operações) que permitem</p><p>associações entre componentes.</p><p>Diagramas de Distribuição</p><p>Diagramas de distribuição mostram as instâncias dos componentes de tempo de execução e suas</p><p>associações. Eles incluem Nós que são recursos físicos, tipicamente um computador simples. Eles</p><p>também mostram interfaces e objetos (instâncias da classe).</p><p>Diagramas de Entidade-Associação</p><p>Os Diagramas de Entidade-Associação (Diagramas ER) mostram o desenho conceitual dos aplicativos</p><p>de bancos de dados. Eles definem as várias entidades (conceitos) no sistema de informação e as relações</p><p>e restrições entre eles. Uma extensão dos Diagramas Entidade-Associação, chamada 'Diagramas</p><p>Extendidos Entidade-Associação' (EER) são usados para incorporar as técnicas de desenho Orientado</p><p>por Objetos nos diagramas ER.</p><p>O Umbrello mostrando um Diagrama de Entidade-Associação.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 45</p><p>Entidade</p><p>Uma Entidade é qualquer conceito no mundo real com uma existência independente. Poderá ser um</p><p>objeto com uma existência física (exemplo, Computador, Robô) ou poderá ser um objeto com uma</p><p>existência conceitual ( p.ex.: Curso Universitário). Cada entidade possui um conjunto de atributos que</p><p>descrevem as propriedades da Entidade.</p><p>Nota: não existem ainda notações normalizadas para desenhar Diagramas ER. Os diferentes textos</p><p>sobre este assunto usam notações diferentes. Os conceitos e notações para os diagramas ER usados no</p><p>Umbrello são do seguinte livro: Elmasri R. e Navathe S. (2004). Fundamentals of Database Systems 4ª</p><p>ed. Addison Wesley</p><p>Num Diagrama ER, as Entidades são representadas por retângulos com o nome da classe, e poderão</p><p>também mostrar os atributos de uma entidade noutro “compartimento” dentro do retângulo.</p><p>Representação visual de uma entidade num Diagrama ER.</p><p>- Atributos da Entidade</p><p>Nos Diagramas ER, os Atributos das Entidades aparecem com o seu nome num compartimento</p><p>diferente da Entidade a que pertencem.</p><p>- Restrições</p><p>As restrições nos diagramas ER definem as limitações sobre os dados no esquema de informação.</p><p>Existem quatro tipos de restrições suportados no Umbrello :</p><p>- Chave Primária: O conjunto de atributos declarado como chave primária é único para a entidade. Só</p><p>poderá existir uma chave primária numa Entidade e nenhum dos seus atributos constituintes poderá ser</p><p>nulo.</p><p>- Chave Única: O conjunto de atributos declarado como chave única é único para a entidade. Poderão</p><p>existir várias restrições de chaves únicas. Os seus atributos constituintes poderão ser nulos. As Chaves</p><p>Únicas e Chaves Primárias identificam de forma única uma linha numa tabela (entidade)</p><p>- Chave Estrangeira: Uma Chave Estrangeira é uma restrição de referência entre duas tabelas. A chave</p><p>estrangeira identifica uma coluna ou conjunto de colunas numa tabela (de referência) que aponta para</p><p>uma coluna ou conjunto de colunas noutra tabela (referenciada). As colunas da tabela referenciada</p><p>deverão formar uma chave primária ou única.</p><p>- Restrição de Verificação: Uma restrição de verificação (também conhecida como restrição de</p><p>verificação de tabelas) é uma condição que define os dados válidos ao adicionar ou atualizar um item</p><p>numa tabela de um banco de dados relacional. Uma restrição de verificação é aplicada a cada linha na</p><p>tabela. A tabela deverá ser um predicado. Poderá fazer uma referência a uma ou várias colunas da tabela.</p><p>Exemplo: preço >= 0</p><p>Conceitos Extendidos dos Diagramas de Entidade-Associação (ER)</p><p>- Especialização</p><p>A especialização é uma forma de criar novas entidades com base em entidades que já tenham sido</p><p>definidas. As entidades novas, conhecidas como entidades derivadas, recebem (ou herdam) os atributos</p><p>das entidades pré-existentes, as quais são referenciadas como entidades de base. Pretende ajudar a</p><p>reutilizar os dados existentes com pouca ou nenhuma modificação.</p><p>No Umbrello, uma pessoa poderá definir Especializações Disjuntas e Sobrepostas</p><p>- Especialização Disjunta</p><p>A Especialização Disjunta especifique que as subclasses de especialização devem ser disjuntas. Isto</p><p>significa que uma entidade pode ser um membro de pelo menos uma das entidades derivadas da</p><p>especialização</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 46</p><p>Representação visual de uma Especialização Disjunta num Diagrama EER.</p><p>- Especialização Sobreposta</p><p>Quando as entidades derivadas não são forçadas a serem disjuntas, este conjunto de entidades são</p><p>ditos como sendo de uma especialização sobreposta. Isto significa que a mesma entidade do mundo real</p><p>pode ser membro de mais de uma entidade derivada de especialização.</p><p>Representação visual de uma Especialização Sobreposta num Diagrama EER.</p><p>- Categoria</p><p>Uma Entidade derivada é chamada de Categoria quando ela representa uma coleção de objetos que</p><p>é um subconjunto da União de tipos de entidade distintos. Uma Categoria é modelada quando existe a</p><p>necessidade de uma único relacionamento de superclasse/subclasse com mais de uma superclasse,</p><p>onde as superclasses representam diferentes tipos de entidade. (Como a herança múltipla em</p><p>Programação Orientada a Objeto).</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 47</p><p>Representação visual de uma Categoria num Diagrama EER.</p><p>BANCO DE DADOS8</p><p>Um banco de dados é uma ferramenta para coletar e organizar informações. Os bancos de dados</p><p>podem armazenar informações sobre pessoas, produtos, pedidos ou qualquer outra coisa. Muitos bancos</p><p>de dados começam como uma lista em um programa de processamento de texto ou planilha. Conforme</p><p>a lista cresce, começam a aparecer redundâncias e inconsistências nos dados. Os dados se tornam</p><p>difíceis de entender no formato de lista, e há limitações nas maneiras de pesquisar ou puxar subconjuntos</p><p>de dados para analisar. Quando esses problemas começam a aparecer, é conveniente transferir os dados</p><p>para um banco de dados criado por um sistema de gerenciamento de banco de dados (SGBD).</p><p>Um banco de dados pode ser formado por um conjunto de tabelas, que estejam relacionadas entre si.</p><p>Um banco de dados pode conter mais de uma tabela. Por exemplo, um sistema de rastreamento de</p><p>inventário que usa três tabelas não é três bancos de dados, mas um banco de dados que contém três</p><p>tabelas. A menos que ele tenha sido criado especificamente para usar dados ou código de outra fonte.</p><p>Tipos de SGBD9</p><p>Os Sistemas de Gerenciamento de Banco de Dados – SGBD são softwares que proporcionam</p><p>armazenamento e recuperação de dados com segurança. É um conjunto de ferramentas que facilitam as</p><p>operações e os resultados com segurança.</p><p>São diversos os fornecedores de SGBD. Entre os mais conhecidos estão o Oracle, o SQL Server, o</p><p>MySQL, o PostGre, Microsoft Access (para projetos mais simples) e muitos outros.</p><p>Para a classificação dos SGBD são utilizados três principais critérios:</p><p>8 Fonte: https://support.office.com/pt-br/article/No%C3%A7%C3%B5es-b%C3%A1sicas-do-banco-de-dados-a849ac16-07c7-4a31-9948-</p><p>3c8c94a7c204?CorrelationId=14eb69b5-b34a-4da4-8879-83b9b2d15ed2&ui=pt-BR&rs=pt-BR&ad=BR</p><p>9 https://sites.google.com/site/fkbancodedados1/sistemadebancodados/sgbd---sistemas-gerenciadores-de-banco-dados</p><p>Banco de dados: Conceitos, linguagem de definição de dados, linguagem de</p><p>manipulação de dados. Dicionário de dados. Arquitetura de banco de dados.</p><p>Bancos de dados relacionais, modelo lógico e representação física,</p><p>normalização, conceitos de concorrência, controle e transações, Integridade,</p><p>Store Procedures, Views, Triggers. Indexação.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 48</p><p>O Modelo de Dados</p><p>O Modelo de dados é basicamente um conjunto de conceitos utilizados para descrever um banco de</p><p>dados, existem diversas formas de representação dos dados, porém, qualquer forma que permita a</p><p>correta compreensão das estruturas de dados compreendidas no banco de dados,</p><p>pode ser considerada</p><p>adequada.</p><p>Atualmente os modelos mais utilizados na maioria dos SGBD comerciais são o modelo de dados</p><p>relacional, e o modelo de dados de objetos. Os SGBD relacionais vêm evoluindo constantemente, em</p><p>particular, vêm incorporando muitos dos conceitos que foram desenvolvidos nos modelos de banco de</p><p>dados de objetos. Essa evolução criou uma nova classe de SGBD conhecidos como SGBD relacional-</p><p>objeto.</p><p>O Número de Usuários</p><p>O número de usuários suportado pelo sistema é o segundo critério utilizado para classificar os SGBD.</p><p>São conhecidos como SGBD monousuários os sistemas que suportam apenas um usuário de cada vez</p><p>(sistemas raros e usados em computadores pessoais). Quando o sistema suporta múltiplos usuários de</p><p>forma concorrente (maioria dos sistemas) são conhecidos como SGBD multiusuário.</p><p>O Número de Servidores</p><p>O terceiro critério de classificação dos SGBD, se refere ao número de servidores em que o banco de</p><p>dados está distribuído. Denominamos como SGBD centralizado se os dados estão armazenados em um</p><p>único servidor, em um único computador. Apesar do banco de dados está em um único banco de dados</p><p>em um único computador, os SGBD centralizados suportam diversos usuários concorrentemente.</p><p>São classificados como SGBD distribuídos os sistemas de banco de dados cujo, o banco de dados e</p><p>o software de gerencia de banco de dados estão distribuídos através de diversos servidores conectados</p><p>por uma rede.</p><p>Composição de um Banco de Dados</p><p>Tabelas</p><p>Uma tabela de banco de dados é semelhante na aparência a uma planilha, pois os dados são</p><p>armazenados em linhas e colunas. Como resultado, geralmente é bem fácil importar uma planilha em</p><p>uma tabela de banco de dados. A principal diferença entre armazenar os dados em uma planilha e</p><p>armazená-los em um banco de dados é a maneira como os dados são organizados.</p><p>Para obter maior flexibilidade de um banco de dados, os dados precisam ser organizados em tabelas</p><p>de forma que não ocorram redundâncias. Por exemplo, se você armazenar informações sobre</p><p>funcionários, cada funcionário deverá ser inserido apenas uma vez em uma tabela que esteja configurada</p><p>apenas para manter dados de funcionários. Os dados sobre produtos serão armazenados em suas</p><p>próprias tabelas, e os dados sobre as filiais serão armazenados em outra tabela. Esse processo é</p><p>chamado normalização.</p><p>Registros</p><p>Cada linha em uma tabela é denominada um registro. Os registros são os locais onde os itens</p><p>individuais de informações são armazenados. Cada registro consiste em um ou mais campos.</p><p>Outra maneira de descrever registros e campos é visualizar um catálogo de cartões de biblioteca no</p><p>estilo antigo. Cada cartão do arquivo corresponde a um registro no banco de dados. Cada informação em</p><p>um cartão individual (autor, título e assim por diante) corresponde a um campo no banco de dados.</p><p>Campos</p><p>Os campos correspondem às colunas da tabela. Por exemplo, você pode ter uma tabela denominada</p><p>"Funcionários" em que cada registro (linha) contém informações sobre um funcionário diferente, e cada</p><p>campo (coluna) contém um tipo de informação diferente, como o nome, sobrenome, endereço e assim</p><p>por diante. Os campos devem ser designados com um determinado tipo de dados, seja texto, data ou</p><p>hora, número ou algum outro tipo.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 49</p><p>Tipos de Dados Mais Comuns em SGBD</p><p>Tipo de dados Armazena</p><p>Texto Caracteres alfanuméricos</p><p>Use para texto, ou texto e números que não são usados</p><p>em cálculos (por exemplo, a identificação de um produto).</p><p>Número Valores numéricos (valores inteiros ou fracionários).</p><p>Use para armazenar números a serem usados em</p><p>cálculos, exceto valores monetários (use Moeda como</p><p>tipo de dados para valores monetários).</p><p>Inteiro Apenas valores numéricos inteiros. (Muito usado em</p><p>campos que são chave primária com ou sem numeração</p><p>automática).</p><p>Data/Hora Datas e horas.</p><p>Use para armazenar valores de data/hora. Observe que</p><p>cada valor armazenado inclui um componente de data e</p><p>um componente de hora.</p><p>Moeda Valores monetários.</p><p>Use para armazenar valores monetários (moeda).</p><p>Sim/Não Valores Boolean.</p><p>Use para campos Verdadeiro/Falso, que podem conter</p><p>um de dois valores possíveis: Sim/Não ou</p><p>Verdadeiro/Falso, por exemplo.</p><p>Chave Primária10</p><p>Uma chave primária consiste num campo ou conjunto de campos da tabela que fornece ao SGBD um</p><p>identificador exclusivo para cada linha. Numa base de dados relacional, as informações são divididas em</p><p>tabelas baseadas em assuntos separados. Em seguida, as relações de tabela e as chaves primárias são</p><p>utilizadas para indicar ao SGBD como associar novamente as informações. Os SGBD utiliza os campos</p><p>de chave primária para associar rapidamente os dados a partir de várias tabelas e combinar os dados de</p><p>forma lógica.</p><p>Este método funciona, tendo em conta que, uma vez definida a chave primária, é possível utilizá-la em</p><p>outras tabelas para voltar a fazer referência à tabela utilizando a chave primária. Por exemplo, um campo</p><p>ID do Cliente na tabela Clientes também poderá ser apresentado na tabela Encomendas. Na tabela</p><p>Clientes, trata-se da chave primária. Na tabela Encomendas, denomina-se chave externa. Uma chave</p><p>externa, simplesmente indicada, trata-se da chave primária de outra tabela.</p><p>1- Chave primária e 2- chave estrangeira.</p><p>10 Fonte: https://support.office.com/pt-pt/article/Adicionar-definir-alterar-ou-remover-a-chave-prim%C3%A1ria-07b4a84b-0063-4d56-8b00-65f2975e4379?ui=pt-</p><p>PT&rs=pt-PT&ad=PT</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 50</p><p>Frequentemente, um número de identificação exclusivo, como, por exemplo, um número de ID ou um</p><p>número de série ou código, funciona como chave primária numa tabela. Por exemplo, poderá ter uma</p><p>tabela Clientes, na qual cada cliente tenha um número de ID de cliente exclusivo. O campo de ID de</p><p>cliente corresponde à chave primária.</p><p>Um bom candidato a chave primária apresenta várias características. Em primeiro lugar, identifica de</p><p>forma exclusiva cada linha. Em segundo lugar, nunca está vazio nem é nulo: contém sempre um valor.</p><p>Em terceiro lugar, raramente é alterado (idealmente, nunca). O SGBD utiliza os campos de chave primária</p><p>para associar rapidamente dos dados provenientes de várias tabelas.</p><p>Um exemplo de uma escolha pouco adequada para uma chave primária seria um nome ou endereço.</p><p>Ambos contêm informações que poderiam ser alteradas com o decorrer do tempo.</p><p>Deverá especificar sempre uma chave primária para uma tabela. O SGBD cria automaticamente um</p><p>índice para a chave primária, que permite ajudar a tornar mais rápidas as consultas, bem como outras</p><p>operações. Os SGBD também asseguram, que cada registro apresenta um valor no campo de chave</p><p>primária e que é sempre exclusivo.</p><p>Se não souber qual o campo ou conjunto de campos que possa constituir uma chave primária</p><p>adequada, considere a utilização de uma coluna com o tipo de dados Numeração Automática. Este tipo</p><p>de identificador não inclui fatos (não contém quaisquer informações fatuais que descrevam a linha que</p><p>representa). É recomendado utilizar identificadores que não incluam fatos, uma vez que os respectivos</p><p>valores não são alterados. Uma chave primária que contenha fatos sobre uma linha (por exemplo, um</p><p>número de telefone ou o nome de um cliente) tem maior probabilidade de ser alterada, uma vez que as</p><p>próprias informações fatuais podem ser alteradas.</p><p>Exemplo de chave primária na tabela produtos.</p><p>1. Frequentemente, uma coluna com o tipo de dados Numeração Automática constitui uma chave</p><p>primária adequada, uma vez que permite assegurar que não existem dois IDs de Produto idênticos.</p><p>Em determinados casos, poderá pretender utilizar dois ou mais campos que, em conjunto, forneçam a</p><p>chave primária de uma tabela. Por exemplo, uma tabela Detalhes da Encomenda que armazene itens de</p><p>linha para encomendas utilizaria</p><p>duas colunas na respectiva chave primária: ID da Encomenda e ID do</p><p>Produto. Quando uma chave primária emprega mais do que uma coluna, também é designada por chave</p><p>composta.</p><p>Chave Estrangeira</p><p>A chave estrangeira é uma chave primária de outra tabela.</p><p>Exemplo de chave estrangeira (note que a chave estrangeira é uma chave primária em outra tabela).</p><p>Quando duas ou mais tabelas estão relacionadas há campos comuns entre elas, este campo é definido</p><p>como chave primária quando ele define o identificador exclusivo de uma tabela, e chave estrangeira</p><p>quando o campo traz informações que estão armazenadas em outra tabela. Há casos em que uma chave</p><p>primária também pode ser uma chave estrangeira (ao mesmo tempo), isso ocorre quando há um</p><p>relacionamento N:N.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 51</p><p>A coluna Código do Fornecedor da tabela Produtos é uma chave estrangeira porque é também a chave</p><p>primária da tabela Fornecedores.</p><p>Relacionamento11</p><p>O Que São Relações Tabela?</p><p>Em um banco de dados relacional, as relações permitem que você evite dados redundantes. Por</p><p>exemplo, se você estiver desenvolvendo um banco de dados que irá rastrear informações sobre livros,</p><p>será necessário ter uma tabela chamada Títulos, que irá armazenar as informações sobre cada livro, tais</p><p>como o título do livro, a data de publicação e o editor. Também há informações sobre o editor que talvez</p><p>você deseje armazenar, tais como o número de telefone, o endereço e o código postal do editor. Se você</p><p>quisesse armazenar todas essas informações na tabela de títulos, o número de telefone do editor seria</p><p>duplicado para cada título que ele publicasse.</p><p>A melhor solução é armazenar as informações do editor somente uma vez em uma tabela separada,</p><p>Editores. Assim, você poderá colocar um ponteiro na tabela Títulos para referir a uma entrada na tabela</p><p>Editores.</p><p>Para certificar-se de que seus dados não estão fora de sincronismo, é possível reforçar a integridade</p><p>referencial entre as tabelas Títulos e Editores. As relações de integridade referencial ajudam a garantir</p><p>que as informações em uma tabela correspondem às informações em outra tabela. Por exemplo, cada</p><p>título na tabela Títulos deve estar associado a um editor específico na tabela Editores. Um título não pode</p><p>ser adicionado ao banco de dados para um editor que não existe no banco de dados.</p><p>Um dos objetivos de um bom design de banco de dados é remover a redundância de dados (dados</p><p>duplicados). Para alcançar esse objetivo, divida os dados em várias tabelas baseadas em tópicos para</p><p>que cada fato seja representado apenas uma vez. Depois, forneça ao SGBD os meios para reunir as</p><p>informações divididas — faça isso colocando campos em comum em tabelas que sejam relacionadas.</p><p>Para realizar essa etapa corretamente, entretanto, você deve primeiro compreender as relações entre as</p><p>tabelas e depois especificar essas relações no banco de dados.</p><p>Depois de criar uma tabela para cada assunto em seu banco de dados, você deverá fornecer ao SGBD</p><p>os meios pelos quais ele reunirá novamente essas informações quando for necessário. Isso é feito</p><p>colocando-se campos em comum nas tabelas que são relacionadas e definindo-se relações entre as</p><p>tabelas. Em seguida, você pode criar consultas, formulários e relatórios que exibam informações de várias</p><p>tabelas de uma só vez. Por exemplo, o formulário mostrado aqui inclui informações retiradas de várias</p><p>tabelas:</p><p>Tela de pedidos exibindo de uma só vez informações de quatro tabelas.</p><p>1. As informações desse formulário são originárias da tabela Clientes...</p><p>2. ...da tabela Pedidos...</p><p>11 Fonte: https://support.microsoft.com/en-us/kb/304466/pt-br</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 52</p><p>3. ...da tabela Produtos...</p><p>4. ...e da tabela Detalhes do Pedido.</p><p>O nome do cliente na caixa Cobrar é recuperado da tabela Clientes; os valores de Código do Pedido</p><p>e Data do Pedido vêm da tabela Pedidos; o nome do Produto vem da tabela Produtos; os valores de</p><p>Preço Unitário e Quantidade vêm da tabela Detalhes do Pedido. Essas tabelas são vinculadas umas às</p><p>outras de várias formas para trazer as informações de todas para o formulário.</p><p>No exemplo anterior, os campos das tabelas precisam estar coordenados de forma que mostrem</p><p>informações sobre o mesmo pedido. Tal coordenação é realizada usando-se relações de tabelas. Uma</p><p>relação de tabela funciona pela correspondência de dados em campos chave - geralmente um campo</p><p>com o mesmo nome em ambas as tabelas. Na maioria dos casos, esses campos correspondentes são a</p><p>chave primária de uma tabela, que fornece um identificador exclusivo para cada registro, e uma chave</p><p>estrangeira da outra tabela. Pode-se, por exemplo, associar funcionários aos pedidos pelos quais são</p><p>responsáveis criando-se uma relação de tabela entre os campos CódigoDoFuncionário nas tabelas</p><p>Funcionários e Pedidos.</p><p>IDFuncionario usado como chave primária na tabela Funcionários e como chave estrangeira na tabela pedidos.</p><p>1. CódigoDoFuncionário aparece em ambas as tabelas — como uma chave primária ...</p><p>2. ...e como uma chave estrangeira.</p><p>Tipos de Relações Tabela</p><p>Uma relação trabalha correspondendo dados nas colunas chave, geralmente as colunas com o mesmo</p><p>nome em ambas as tabelas. Na maioria dos casos, as relações correspondem a chave primária de uma</p><p>tabela, que fornece um identificador exclusivo para cada linha, à entrada na chave estrangeira da outra</p><p>tabela. Por exemplo, as vendas podem ser associadas aos títulos específicos vendidos criando uma</p><p>relação entre a coluna título_id na tabela Títulos (a chave primária) e a coluna título_id na tabela Vendas</p><p>(a chave estrangeira).</p><p>Há três tipos de relações de tabela:</p><p>Uma Relação Um-para-Muitos</p><p>Considere um banco de dados de controle de pedidos que inclua uma tabela Clientes e uma tabela</p><p>Pedidos. Um cliente pode fazer qualquer número de pedidos. Assim, para qualquer cliente representado</p><p>na tabela Clientes, pode haver vários pedidos representados na tabela Pedidos. A relação entre a tabela</p><p>Clientes e a tabela Pedidos é, portanto, uma relação um-para-muitos.</p><p>Para representar uma relação um-para-muitos em um design de banco de dados, tome a chave</p><p>primária do lado "um" da relação e adicione-a como um campo ou campos adicionais à tabela no lado</p><p>"muitos" da relação. Nesse caso, por exemplo, adicione um novo campo — o campo Código da tabela</p><p>Clientes — à tabela Pedidos e nomeie-o como Código do Cliente. O SGBD poderá então usar o número</p><p>do Código do Cliente na tabela Pedidos para localizar o cliente correto para cada pedido.</p><p>Uma Relação Muitos-para-Muitos</p><p>Considere a relação entre uma tabela Produtos e uma tabela Pedidos. Um único pedido pode incluir</p><p>mais de um produto. Por outro lado, um único produto pode constar em vários pedidos. Assim, para todos</p><p>os registros da tabela Pedidos, pode haver vários registros na tabela Produtos. Além disso, para cada</p><p>registro na tabela Produtos, pode haver muitos registros na tabela Pedidos. Esse tipo de relação é</p><p>denominado relação muitos-para-muitos porque com relação a todos os produtos pode haver vários</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 53</p><p>pedidos, e para todos os pedidos pode haver vários produtos. Observe que para detectar relações muitos-</p><p>para-muitos existentes entre as tabelas é importante considerar ambos os lados da relação.</p><p>Para representar uma relação muitos-para-muitos, você deve criar uma terceira tabela, geralmente</p><p>chamada de tabela de associação, que divide a relação muitos-para-muitos em duas relações um-para-</p><p>muitos. Insira a chave primária de cada uma das duas tabelas na terceira tabela. Como resultado, a</p><p>terceira tabela registra cada ocorrência, ou instância, da relação. Por exemplo, a tabela Pedidos e a tabela</p><p>Produtos possuem uma relação muitos-para-muitos que é definida criando-se duas relações um-para-</p><p>muitos com</p><p>a tabela Detalhes do Pedido. Um pedido pode ter muitos produtos, e cada produto pode</p><p>aparecer em muitos pedidos.</p><p>Uma Relação Um-para-Um</p><p>Em uma relação um-para-um, cada registro na primeira tabela pode ter somente um registro</p><p>correspondente na segunda tabela, e cada registro na segunda tabela pode ter somente um registro</p><p>correspondente na primeira tabela. Esse tipo de relação não é comum porque, geralmente, as</p><p>informações relacionadas dessa maneira são armazenadas na mesma tabela. A utilização de uma relação</p><p>um-para-um é recomendada para dividir uma tabela com muitos campos, isolar parte de uma tabela por</p><p>motivos de segurança ou armazenar informações que se apliquem somente a um subconjunto da tabela</p><p>principal. Quando você identificar esse tipo de relação, ambas as tabelas devem compartilhar um campo</p><p>em comum.</p><p>Por Que Criar Relações de Tabela?</p><p>Você pode criar relações de tabela explicitamente usando a janela Relações ou arrastando um campo</p><p>do painel Lista de Campos. O Office Access 2007 usa relações de tabelas para que elas possam ser</p><p>unidas quando for necessário utilizá-las em um objeto de banco de dados. Há várias razões que justificam</p><p>a criação de relações de tabelas antes da criação de outros objetos do banco de dados, como formulários,</p><p>consultas e relatórios.</p><p>As Relações de Tabela Informam os Designs de Consulta</p><p>Para trabalhar com registros de mais de uma tabela, você geralmente deve criar uma consulta que</p><p>associe as tabelas. A consulta faz a correspondência dos valores no campo de chave primária da primeira</p><p>tabela com um campo de chave estrangeira na segunda tabela. Por exemplo, para retornar linhas que</p><p>listem todos os pedidos de cada cliente, construa uma consulta que faça a associação da tabela Clientes</p><p>com a tabela Pedidos com base no campo Código do Cliente. Na janela Relações, você pode especificar</p><p>manualmente os campos a serem associados. Entretanto, se você já tiver uma relação definida entre as</p><p>tabelas, o SGBD fornece a associação padrão, com base na relação de tabela existente. Além disso, se</p><p>você usar um dos assistentes de consulta, o SGBD usa as informações coletadas das relações da tabela</p><p>já definidas para apresentá-lo opções informadas e para pré-definir configurações de propriedade com os</p><p>valores padrão adequados.</p><p>As Relações de Tabela Informam os Designs de Formulário e Relatório</p><p>Quando você cria um formulário ou relatório, o SGBD usa as informações coletadas das relações de</p><p>tabela já definidas para apresentá-lo opções informadas e para pré-definir configurações de propriedade</p><p>com os valores padrão adequados.</p><p>As relações de tabelas são a base através da qual você pode garantir a integridade referencial para</p><p>ajudar a evitar registros órfãos no banco de dados. Um registro órfão é um registro com uma referência a</p><p>outro registro que não existe — por exemplo, um registro de pedido que faça referência a um registro de</p><p>cliente que não existe.</p><p>Quando você cria um banco de dados, divide as informações em tabelas, cada uma com uma chave</p><p>primária. Depois, você adiciona chaves estrangeiras a tabelas relacionadas que façam referência a essas</p><p>chaves primárias. Esses pares chave estrangeira-chave primária formam a base das relações de tabelas</p><p>e consultas de várias tabelas. É importante, entretanto, que essas referências chave estrangeira-chave</p><p>primária permaneçam sincronizadas. A integridade referencial ajuda a garantir que as referências</p><p>permaneçam sincronizadas e depende das relações de tabelas.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 54</p><p>Noções Básicas sobre Integridade Referencial</p><p>Quando você cria um banco de dados, divide as informações em várias tabelas baseadas em tópicos</p><p>para minimizar a redundância de dados. Forneça, então, ao SGBD os meios necessários para reunir os</p><p>dados novamente colocando campos em comum em tabelas relacionadas. Por exemplo, para representar</p><p>uma relação um-para-muitos, tome a chave primária da tabela "um" e adicione-a como campo adicional</p><p>na tabela "muitos". Para reunir os dados novamente, o SGBD pega o valor na tabela "muitos" e procura</p><p>o valor correspondente na tabela "um". Dessa forma, os valores na tabela "muitos" fazem referência aos</p><p>valores correspondentes na tabela "um".</p><p>Suponha que você tenha uma relação um-para-muitos entre Expedidores e Pedidos e você deseje</p><p>excluir um Expedidor. Se o expedidor que você deseja excluir tiver pedidos na tabela Pedidos, esses</p><p>pedidos se tornarão "órfãos" quando você excluir o registro Expedidor. Os pedidos ainda conterão um</p><p>código de expedidor, mas ele não será mais válido, porque o registro ao qual ele faz referência não existe</p><p>mais.</p><p>O objetivo da integridade referencial é evitar órfãos e manter as referências em sincronia, para que</p><p>esta situação hipotética nunca ocorra.</p><p>Imponha a integridade referencial habilitando-a para uma relação de tabela (consulte Impor a</p><p>integridade referencial para obter instruções passo a passo). Depois que ela é imposta, o SGBD rejeita</p><p>qualquer operação que possa violar a integridade referencial dessa relação de tabela. Isso significa que</p><p>o SGBD rejeitará ambas atualizações que alterem o destino de uma referência e exclusões que removam</p><p>o destino de uma referência. Entretanto, é possível que você venha a ter uma necessidade perfeitamente</p><p>válida de alterar a chave primária de um expedidor que possua pedidos na tabela Pedidos. Nesses casos,</p><p>o que você realmente precisa é que o SGBD atualize automaticamente todas as linhas afetadas como</p><p>parte de uma única operação. Dessa forma, o SGBD garante que a atualização seja totalmente realizada,</p><p>de forma que o banco de dados não fique inconsistente, com algumas linhas atualizadas e outras não.</p><p>Por esse motivo, o SGBD oferece suporte à opção Propagar Atualização dos Campos Relacionados.</p><p>Quando você impõe a integridade referencial e escolhe a opção Propagar Atualização dos Campos</p><p>Relacionados, e depois atualiza uma chave primária, o SGBD atualiza automaticamente todos os campos</p><p>que fazem referência à chave primária.</p><p>É possível também que você venha a ter a necessidade válida de excluir uma linha e todos os registros</p><p>relacionados — por exemplo, um registro Expedidor e todos os pedidos relacionados a ele. Por isso, o</p><p>SGBD oferece suporte à opção Propagar Exclusão dos Registros Relacionados. Quando você impõe a</p><p>integridade referencial e escolhe a opção Propagar Exclusão dos Registros Relacionados e depois exclui</p><p>um registro no lado da chave primária da relação, o SGBD automaticamente exclui todos os registros que</p><p>fazem referência à chave primária.</p><p>Formulários</p><p>Às vezes refere-se aos formulários como "telas de entrada de dados". Eles são as interfaces usadas</p><p>para trabalhar com os dados e frequentemente contêm botões de comando que executam vários</p><p>comandos. Você pode criar um banco de dados sem usar formulários, simplesmente editando seus dados</p><p>nas folhas de dados da tabela. Contudo, a maioria dos usuários de bancos de dados prefere usar</p><p>formulários para exibir, inserir e editar dados nas tabelas.</p><p>Os formulários fornecem um formato fácil de usar para trabalhar com os dados, e você também pode</p><p>adicionar elementos funcionais, como botões de comando. Você pode programar os botões para</p><p>determinar quais dados aparecem no formulário, abrir outros formulários ou relatórios, ou executar várias</p><p>outras tarefas. Por exemplo, você pode ter um formulário chamado "Formulário do Cliente" no qual você</p><p>trabalha com dados de clientes. O formulário do cliente pode ter um botão que abre um formulário de</p><p>pedido no qual você pode inserir um novo pedido para esse cliente.</p><p>Os formulários também permitem controlar como outros usuários interagem com os dados no banco</p><p>de dados. Por exemplo, você pode criar um formulário que mostra apenas determinados campos e</p><p>permite que apenas determinadas operações sejam executadas. Isso ajuda a proteger dados e a garantir</p><p>que os dados sejam inseridos corretamente.</p><p>Relatórios</p><p>Os relatórios</p><p>são usados para resumir e apresentar os dados nas tabelas. Geralmente, um relatório</p><p>responde a uma pergunta específica, como "Que valor recebemos de cada cliente este ano?" ou "Em</p><p>quais cidades nossos clientes estão localizados?" Cada relatório pode ser formatado para apresentar as</p><p>informações de maneira a melhor facilitar a leitura.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 55</p><p>Um relatório pode ser executado a qualquer momento e sempre refletirá os dados atuais no banco de</p><p>dados. De maneira geral, os relatórios são formatados para serem impressos, mas também podem ser</p><p>exibidos na tela, exportados para outro programa ou enviados como uma mensagem de e-mail.</p><p>Consultas</p><p>É nas consultas que reside o trabalho real de um banco de dados, e elas podem executar várias</p><p>funções diferentes. Sua função mais comum é recuperar dados específicos das tabelas. Geralmente, os</p><p>dados que você deseja ver estão espalhados em várias tabelas, e as consultas permitem exibi-los em</p><p>uma única folha de dados. Além disso, como geralmente você não deseja ver todos os registros de uma</p><p>vez, as consultas permitem adicionar critérios para "filtrar" os dados até obter somente os registros</p><p>desejados. Frequentemente as consultas servem como fonte de registros para formulários e relatórios.</p><p>Certas consultas são "atualizáveis", o que significa que você pode editar os dados nas tabelas base</p><p>por meio da folha de dados da consulta. Se estiver trabalhando em uma consulta atualizável, lembre-se</p><p>de que as alterações estão realmente sendo feitas nas tabelas e não apenas na folha de dados da</p><p>consulta.</p><p>As consultas têm duas variedades básicas: consultas seleção e consultas ação. Uma consulta seleção</p><p>simplesmente recupera os dados e os disponibiliza para uso. Você pode exibir os resultados da consulta</p><p>na tela, imprimi-los ou copiá-los para a área de transferência. Ou você pode usar a saída da consulta</p><p>como fonte de registros para um formulário ou relatório.</p><p>Uma consulta ação, como o nome indica, executa uma tarefa com os dados. As consultas ação podem</p><p>ser usadas para criar novas tabelas, adicionar dados a tabelas existentes, atualizar ou excluir dados.</p><p>Design de Banco de Dados12</p><p>Certos princípios guiam o processo de design do banco de dados. O primeiro princípio é que</p><p>informações duplicadas (também denominadas dados redundantes) são ruins porque consomem espaço</p><p>e aumentam a possibilidade de erros e inconsistências. O segundo princípio é que a correção e</p><p>completitude das informações é importante. Se o banco de dados contiver informações incorretas, todos</p><p>os relatórios que empregam informações do banco de dados também conterão informações incorretas.</p><p>Como resultado, todas as decisões tomadas a partir desses relatórios serão errôneas.</p><p>Um bom design de banco de dados, portanto, é um que:</p><p>- Divide as informações em tabelas baseadas em tópicos, visando reduzir a redundância de dados.</p><p>- Fornece ao SGBD os dados essenciais à reunião de informações nas tabelas, conforme necessário.</p><p>- Ajuda a oferecer suporte e assegurar a precisão e a integridade das informações.</p><p>- Atende suas necessidades de processamento de dados e de relatórios.</p><p>O Processo do Design</p><p>O processo do design consiste nas seguintes etapas:</p><p>Determinar a Finalidade do seu Banco de Dados</p><p>Recomenda-se anotar a finalidade do banco de dados em um papel — sua finalidade, como se espera</p><p>usá-lo e quem o usará. Com relação a um banco de dados pequeno e de empresa caseira, por exemplo,</p><p>você escreveria algo como "O banco de dados cliente mantém uma lista de informações de clientes com</p><p>a finalidade de produzir malas diretas e relatórios". Se o banco de dados for mais complexo ou usado por</p><p>diversas pessoas, como ocorre frequentemente em um ambiente empresarial, a finalidade poderia ser</p><p>contida em um simples parágrafo ou mais, devendo incluir quando e como cada pessoa irá usar o banco</p><p>de dados. A ideia é ter uma declaração de missão bem desenvolvida, à qual se possa referir durante todo</p><p>o processo de design. Ter uma declaração como essa ajuda a focar nas metas no momento da tomada</p><p>de decisões.</p><p>Localizar e Organizar as Informações Necessárias</p><p>Reunir todos os tipos de informações que você possa desejar gravar no banco de dados, como nome</p><p>de produto e número de pedido.</p><p>Para localizar e organizar as informações requeridas, comece pelas informações existentes. Por</p><p>exemplo, é possível registrar os pedidos de compra em um livro razão ou manter as informações do</p><p>cliente em formulários de papel em um gabinete de arquivos. Reúna esses documentos e liste cada um</p><p>dos tipos de informações mostrados (por exemplo, cada caixa preenchida em um formulário). Se não</p><p>12 Fonte: https://support.office.com/pt-BR/article/Fundamentos-do-design-de-banco-de-dados-1EADE2BF-E3A0-41B5-AEE6-D2331F158280</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 56</p><p>houver formulários, imagine que será necessário criar um formulário para registrar as informações do</p><p>cliente. Que informações você colocaria no formulário? Que caixas de preenchimento você criaria?</p><p>Identifique e liste todos esses itens. Por exemplo, supondo que você atualmente mantém a lista de clientes</p><p>em cartões de índice. O exame desses cartões demonstra que cada cartão contém um nome, endereço,</p><p>cidade, estado, CEP e número de telefone do cliente. Cada um desses itens representa uma coluna</p><p>potencial em uma tabela.</p><p>À medida que prepara a lista, não se preocupe em conseguir uma lista perfeita na primeira tentativa.</p><p>Em vez disso, liste todos os itens que lhe vierem à mente. Se outras pessoas usarem o banco de dados,</p><p>peça sugestões também. Você poderá refinar posteriormente a lista.</p><p>Em seguida, considere os tipos de relatórios ou de listas de distribuição a serem produzidos com o</p><p>banco de dados. Por exemplo, você poderá gerar um relatório de vendas de produto que apresente as</p><p>vendas por região, ou um relatório de resumo de inventário mostrando os níveis de inventário do produto.</p><p>É igualmente possível gerar cartas modelo para enviar aos clientes, que divulguem um evento de vendas</p><p>ou que ofereçam um brinde. Crie o relatório ideal e imagine sua aparência. Que informações você</p><p>colocaria no relatório? Liste todos os itens. Faça o mesmo com a carta formulário e com todos os relatórios</p><p>cuja criação você antevê.</p><p>Pensar nos relatórios e listas de distribuição a serem criados ajuda na identificação dos itens</p><p>necessários ao banco de dados. Por exemplo, supondo que você dê aos clientes a chance de optar por</p><p>(ou não) por atualizações periódicas via e-mail, e que deseja imprimir uma listagem dos que optaram pela</p><p>opção. Para registrar essas informações, adicione uma coluna "Enviar e-mail" à tabela do cliente. É</p><p>possível configurar o campo como Sim ou Não com relação a todos os clientes.</p><p>A necessidade de enviar mensagens de e-mail aos clientes sugere que um outro item seja registrado.</p><p>Após saber se o cliente deseja receber mensagens de e-mail, será também necessário saber o endereço</p><p>de e-mail para os quais as mensagens serão enviadas. Portanto, é necessário registrar um endereço de</p><p>e-mail para cada um dos clientes.</p><p>Há sentido em construir um protótipo de cada relatório ou listagem de saída, e pensar nos itens</p><p>necessários à produção do relatório. Por exemplo, ao examinar uma carta formulário, algumas coisas</p><p>podem vir à sua mente. Para incluir uma saudação adequada — por exemplo, a sequência de caracteres</p><p>"Sr.", "Srta." ou "Sra.", que inicia uma saudação, será preciso criar um item de saudação. Da mesma</p><p>forma, é possível começar normalmente uma carta com “Prezado Sr. Silva”, em vez de “Prezado</p><p>Edmundo Silva”. Isso quer dizer que você deseja armazenar regularmente o sobrenome em separado do</p><p>nome.</p><p>Um ponto essencial a ser lembrado é que todas as partes da informação devem ser quebradas em</p><p>suas partes úteis menores. No caso de nome, para disponibilizar prontamente o sobrenome, quebre-o</p><p>seja resolvido, por se tratar de uma simbologia mundial, sua</p><p>interpretação é simples, porém, se faz necessário um conhecimento prévio.</p><p>Os símbolos mais utilizados são:</p><p>Símbolo Função</p><p>Terminal</p><p>Utilizado para ilustrar o Inicio e Fim do algoritmo.</p><p>Processamento</p><p>Indica cálculos em geral no algoritmo.</p><p>Entrada de Dados</p><p>Apresenta a entrada de dados pelo teclado.</p><p>Exibição</p><p>Apresenta as informações ou resultados no monitor ou</p><p>impressora.</p><p>Estrutura de Decisão</p><p>Apresenta estruturas de decisões no algoritmo.</p><p>Exemplo:</p><p>Para resolução deste exemplo será utilizado o Problema 3, do tópico Descrição Narrativa:</p><p>Início/Fi</p><p>m</p><p>Calculo</p><p>Entrada</p><p>Saída</p><p>Dec</p><p>isão</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 3</p><p>Linguagem Algorítmica</p><p>Linguagem Algorítmica consiste em uma pseudolinguagem de programação, que tem como função</p><p>facilitar o entendimento de uma linguagem de programação qualquer, nesse caso os comandos de</p><p>programação são escritos na linguagem nacional, em nosso caso, em português:</p><p>Exemplo:</p><p>Para resolução deste exemplo será utilizado o Problema 3, do tópico Descrição Narrativa:</p><p>Variáveis, Constantes, Operadores Lógicos e Tipos de Dados</p><p>Variável – Em programação de computadores, variáveis são espaços que ficam reservados</p><p>normalmente na memória RAM (memória física) do computador a fim de armazenar valores ou</p><p>expressões e seus valores podem variar durante a execução do programa.</p><p>Exemplo:</p><p>Variáveis</p><p>Lucro = ValorVenda</p><p>-</p><p>ValorVenda</p><p>Variável Conteúdo</p><p>Nome “Luis Alexandre Boaygo dos</p><p>Santos”</p><p>Idade 32</p><p>Peso 80,00</p><p>Constantes – O valor sempre é fixo, não é modificado durante a execução do programa.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 4</p><p>Exemplo:</p><p>𝑡𝑜𝑡𝑎𝑙 =</p><p>𝑣𝑎𝑙𝑜𝑟1 + 𝑣𝑎𝑙𝑜𝑟2</p><p>2</p><p>Constante</p><p>Tipos de Variáveis</p><p>As variáveis possuem quatro tipos básicos: numérico, caractere, alfanumérico e lógico.</p><p>Numérico – especial para armazenar números inteiros e reais, também são utilizadas para cálculos</p><p>matemáticos;</p><p>Caracteres – Armazena um conjunto de caracteres não literais, não é possível realizar nenhum</p><p>tipo de calculo com esse tipo de variável, sua utilização ideal é voltada ao armazenamento de textos,</p><p>exemplo um nome, um endereço, etc.</p><p>Lógico – utilizada para testes e armazenamentos lógicos, assumem valores verdadeiro e falso.</p><p>Alfanumérico – Voltada ao armazenamento de letras e/ou números. Em determinados momentos</p><p>conter somente dados numéricos ou somente literais. Se utilizada para o armazenamento de números,</p><p>não poderá ser utilizada para operações matemáticas.</p><p>Operadores</p><p>Utilizados para a resolução de cálculos aritméticos, comparações de valores (chamados de operadores</p><p>relacionais) e testes lógicos, estes são descritos da seguinte forma:</p><p>Operadores</p><p>Relacionais</p><p>Operadores Aritméticos</p><p>Sinal Função Sinal Função</p><p>Maior - Subtração</p><p>Diferente * Multiplicação</p><p>=</p><p>Maior ou</p><p>igual</p><p>** Exponenciação</p><p>= Igual</p><p>E Operador E</p><p>OU</p><p>Operador</p><p>OU</p><p>Not Negação</p><p>Exemplos de operadores aritméticos:</p><p>subTotal := valoUn * Qtde</p><p>2 + 3 * 8</p><p>Total := 4 *( 2 / valor ) + 3</p><p>Exemplos de utilização de operadores relacionais:</p><p>Se ( num1 C Falso</p><p>Como A = 6, B = 9 e C = 2 a expressão assume</p><p>os seguintes valores e verificações:</p><p>6 = 9 e 9 > 2</p><p>Feita a verificação, o resultado só será verdadeiro</p><p>se ambas as condições forem verdadeiras, logo 6</p><p>é diferente de 2, portanto, o resultado é falso.</p><p>A B AND B B NOT Verdadeiro</p><p>A primeira vista a expressão é falsa, pois, 6 é</p><p>menor que 9, mas como existe o operador de</p><p>negação NOT que faz a inversão da resposta, por</p><p>tal motivo a resposta é verdadeira.</p><p>A A Verdadeiro</p><p>Para essa expressão retornar valor verdadeiro,</p><p>apenas uma das expressões deve ser verdadeira</p><p>nesse caso 6 é menor que 8, portanto retornou</p><p>verdadeiro.</p><p>Estruturas de Decisão e Repetição</p><p>São estruturas utilizadas para tomadas de decisão de acordo com uma comparação feita na estrutura</p><p>do algoritmo, assumindo respostas diferentes. A principal estruturas de comparação das linguagens é a</p><p>estrutura Se-Senão (If – Else), vejamos um exemplo em linguagem algorítmica e em linguagem de</p><p>programação.</p><p>Linguagem Algorítmica Linguagem de Programação</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 6</p><p>Em ambos os casos acima, primeiro é calculada a média, a seguir é verificada se a média é maior que</p><p>6, caso seja, então caso seja é retornada a mensagem afirmando que o aluno foi aprovado, caso não</p><p>seja, a mensagem retornada é de reprova do aluno.</p><p>As estruturas de repetição servem para repetir comandos até que a condição proposta seja satisfeita,</p><p>as principais são Enquanto (While) e Para (For), vejamos alguns exemplos:</p><p>O algoritmo abaixo foi desenvolvido em Linguagem de Programação Pascal a fim de exibir uma</p><p>tabuada escolhida pelo usuário, note que assim que o programa é executado a variável M recebe o valor</p><p>1, essa é chamada de variável de controle, então ao usuário digitar o valor da variável T solicitado pelo</p><p>programa, é feita uma verificação através da estrutura While até que a variável tenha o valor igual a 10,</p><p>esse valor é alterado toda vez que a estrutura passa pelo comando “M := M + 1”, ou seja, inicialmente M</p><p>possui valor 1, somando mais 1 fica 2 e assim por diante, até que ele tenha valor 10.</p><p>Linguagens de Programação</p><p>As Linguagens de programação (LP) são os meio de comunicação entre usuário e computador e são</p><p>utilizadas para resolução de problemas computacionais, ou seja, são utilizadas para a criação de</p><p>programas de computador (software). Ao longo do tempo essas linguagem estão passando por</p><p>transformações, portanto, foram classificadas em 5 gerações, sendo:</p><p>Primeira Geração: Linguagem de Máquina</p><p>Esta é uma linguagem de Instrução, isso quer dizer que, utiliza como suporte programação binária</p><p>operando diretamente endereço de registradores ou memória, então existe comunicação direta com o</p><p>hardware.</p><p>Segunda Geração: Linguagens Simbólicas (Assembly)</p><p>Desenvolvida com a finalidade de minimizar as dificuldades encontradas na programação em notação</p><p>binária.</p><p>A partir dessa geração é possível que os usuários operem utilizando mnemônicos (palavras reservadas</p><p>da linguagem de programação), sistemas de grupos de códigos operacionais semelhantes recebem</p><p>nomes que lembram suas funções.</p><p>Terceira Geração: Linguagens Orientadas ao Usuário (LOU)</p><p>São linguagens procedimentais (utilizam sequencias de comandos), tiveram início década de 60 como</p><p>FORTRAN, ALGOL, COBOL, PL/I, ADA e algumas perduram até os dias de hoje, como é o caso da</p><p>Linguagem Pascal. Essas linguagens revolucionaram o universo do desenvolvimento de software, pois,</p><p>através delas os softwares são capazes de utilizar instruções de entrada e saída efetuar cálculos</p><p>aritméticos e/ou lógicos e realizar controle de fluxo de execução.</p><p>Quarta Geração: Linguagens Orientadas à Aplicações</p><p>Seu objetivo é facilitar a programação de computadores proporcionando a usuários finais a resolvendo</p><p>problemas que antes só eram possíveis a programadores</p><p>em duas partes — Nome e Sobrenome. Para classificar um relatório pelo último nome, por exemplo, é útil</p><p>armazenar separadamente o sobrenome do cliente. Em geral, quando se deseja classificar, pesquisar,</p><p>calcular ou criar um relatório com base em um item de informações, deve-se inserir esse item em seu</p><p>próprio campo.</p><p>Pense nas perguntas que você deseja que o banco de dados responda. Por exemplo, quantas vendas</p><p>do produto em destaque foram fechadas mês passado? Onde vivem seus melhores clientes? Quem é o</p><p>fornecedor de seu produto de maior vendagem? A antecipação dessas perguntas ajuda a que você se</p><p>concentre nos outros itens a serem registrados.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 57</p><p>Dividir as Informações em Tabelas</p><p>Dividir os itens de informações em entidades ou tópicos principais, como Produtos ou Pedidos. Cada</p><p>tópico torna-se então uma tabela.</p><p>Para dividir as informações em tabelas, escolha as maiores entidades ou tópicos. Por exemplo, após</p><p>localizar e organizar informações relativas a um banco de dados de venda de produto, a lista preliminar</p><p>deve ter a seguinte aparência:</p><p>Itens de informações manuscritas e agrupados em assuntos.</p><p>As maiores entidades mostradas aqui são os produtos, os fornecedores, os clientes e os pedidos.</p><p>Assim, há sentido em começar pelas seguintes tabelas: uma de fatos sobre produtos, uma de fatos sobre</p><p>fornecedores, uma de fatos sobre clientes, e uma de fatos sobre pedidos. Embora essas tabelas não</p><p>completem a lista, são um ponto de partida. Continue e refinar essa lista até ter um design que funcione</p><p>bem.</p><p>Ao examinar pela primeira vez a lista de itens, você talvez se sinta tentado a colocá-los todos em uma</p><p>única tabela, em vez de ter quatro, como mostrado na ilustração anterior. Você saberá aqui por que isso</p><p>não é recomendado. Pense um momento na tabela mostrada a seguir:</p><p>Exemplo de tabela de produtos e fornecedores.</p><p>Nesse caso, cada linha contém informações sobre o produto e seu fornecedor. Como pode haver</p><p>vários produtos de um mesmo fornecedor, o nome e o endereço do fornecedor deverão ser repetidos</p><p>inúmeras vezes. Isso consome espaço em disco. Gravar as informações do fornecedor uma única vez</p><p>em uma tabela Fornecedores separada e, em seguida, vincular essa tabela à tabela Produtos, é uma</p><p>solução muito melhor.</p><p>Um segundo problema com esse design advém da necessidade de se modificarem as informações</p><p>sobre o fornecedor. Por exemplo, supondo seja necessário alterar o endereço de um fornecedor. Como</p><p>o endereço aparece em vários lugares, você talvez altere acidentalmente o endereço em um local, porém</p><p>se esqueça de alterá-lo nos outros. Gravar o endereço do fornecedor em apenas um local resolve esse</p><p>problema.</p><p>Ao criar seu banco de dados, tente sempre registrar cada fato apenas uma vez. Quando se pegar</p><p>repetindo a mesma informação em mais de um local, como o endereço de determinado fornecedor,</p><p>coloque a informação em uma tabela separada.</p><p>Finalmente, suponhamos que haja apenas um produto fornecido pela Coho Winery, e que você deseje</p><p>excluir o produto, retendo, porém, o nome do fornecedor e as informações de endereço. Como excluir o</p><p>registro do produto sem também perder as informações do fornecedor? Isso não é possível. Como cada</p><p>registro contém fatos sobre um produto, assim como fatos sobre o fornecedor, não é possível excluir um</p><p>sem eliminar o outro. Para manter esses fatos de maneira distinta, separe essa tabela em duas: uma</p><p>tabela de informações sobre o produto, e uma outra tabela de informações sobre o fornecedor. A exclusão</p><p>do registro do produto deve eliminar apenas os fatos sobre o produto, não os fatos sobre o fornecedor.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 58</p><p>Após a seleção do tópico a ser representado na tabela, as colunas da tabela só devem armazenar</p><p>fatos sobre esse tópico. Por exemplo, a tabela de produto só deve armazenar fatos sobre produtos. Como</p><p>o endereço do fornecedor é um fato sobre o fornecedor, e não um fato sobre o produto, pertence à tabela</p><p>do fornecedor.</p><p>Transformar Informações em Colunas</p><p>Opte pelas informações que deseja armazenar em cada uma das tabelas. Cada item torna-se um</p><p>campo que é exibido como coluna da tabela. Por exemplo, uma tabela Funcionários pode incluir campos</p><p>como Sobrenome e Data de Contratação.</p><p>Para determinar as colunas de uma tabela, opte pelas informações que você necessita controlar sobre</p><p>o tópico registrado na tabela. Por exemplo, com relação à tabela Cliente, Nome, Endereço, Cidade-</p><p>Estado-CEP, E-mail para envio de correspondência, Saudação e Endereço de e-mail constituem uma</p><p>lista de colunas que é um bom começo. Cada registro da tabela contém o mesmo conjunto de colunas,</p><p>de modo que é possível armazenar informações sobre o Nome, Endereço, Cidade-Estado-CEP, E-mail</p><p>para envio de correspondência, Saudação e endereço de e-mail de todos os registros. Por exemplo, a</p><p>coluna de endereço contém os endereços dos clientes. Cada registro contém dados sobre um cliente, e</p><p>o campo de endereço contém o endereço do cliente.</p><p>Após determinar o conjunto inicial de colunas de cada tabela, você poderá refinar as colunas. Por</p><p>exemplo, é recomendado armazenar o nome do cliente em duas colunas separadas: o nome e o</p><p>sobrenome, de modo que se possa classificar, pesquisar e indexar apenas nessas duas colunas. Da</p><p>mesma forma, o endereço na verdade consiste em cinco componentes distintos: endereço, cidade,</p><p>estado, CEP e país/região. É igualmente recomendado armazená-los em colunas diferentes. Se você</p><p>deseja realizar uma operação de pesquisa, filtro ou classificação por estado, por exemplo, será necessário</p><p>armazenar a informação de estado em uma coluna separada.</p><p>Verifique se o banco de dados conterá somente informações de origem doméstica, ou se, além disso,</p><p>conterá informações internacionais. Por exemplo, se você planeja armazenar endereços internacionais,</p><p>deve haver uma coluna de Região em vez de Estado, porque essa coluna aceita os estados domésticos</p><p>e as regiões de outros países/outras regiões. Semelhantemente, o código de endereçamento postal tem</p><p>mais sentido que o CEP se você pretende armazenar endereços internacionais.</p><p>A lista a seguir mostra algumas dicas sobre a determinação de colunas:</p><p>Não Inclusão de Dados Calculados</p><p>Na maior parte dos casos, o resultado de cálculos não deve ser armazenado em tabelas. Em vez disso,</p><p>é possível fazer com que o SGBD realize cálculos quando se deseja exibir o resultado. Por exemplo,</p><p>supondo que haja um relatório de Produtos do Pedido que exiba o subtotal de unidades do pedido por</p><p>categoria de produto no banco de dados. Contudo, não há coluna de subtotal de Unidades no Pedido em</p><p>nenhuma tabela. Em vez disso, a tabela de Produtos inclui uma coluna Unidades do Pedido que armazena</p><p>as unidades do pedido com relação a cada um dos produtos. Usando esses dados, o SGBD calcula o</p><p>subtotal cada vez que o relatório é impresso. O próprio subtotal não pode ser armazenado na tabela.</p><p>Armazenar as Menores Partes Lógicas das Informações</p><p>Você pode ficar tentado a ter um único campo para nomes completos, ou para nomes de produtos</p><p>juntamente com descrições de produto. Se você combinar mais de um tipo de informação em um só</p><p>campo, será difícil recuperar posteriormente os fatos individuais. Tente quebrar as informações em partes</p><p>lógicas, por exemplo, criando campos distintos para nome e sobrenome, ou por nome, categoria e</p><p>descrição de produto.</p><p>Lista de itens de informações durante o processo de Design.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 59</p><p>Após refinar as colunas de dados de cada tabela, você estará pronto para escolher a chave primária</p><p>de cada tabela.</p><p>Especificar as Chaves Primárias</p><p>Escolher a chave primária de todas as tabelas. A chave primária é uma coluna usada unicamente para</p><p>identificar cada linha. Um exemplo pode ser Código de Produto ou Código de Pedido.</p><p>Toda tabela deve</p><p>incluir uma coluna ou conjunto de colunas que identifica com exclusividade cada</p><p>linha armazenada na tabela. Trata-se, em geral, de um número de identificação exclusivo, como o número</p><p>de identificação de um funcionário ou um número de série. Na terminologia de banco de dados, essas</p><p>informações são denominadas chave primária da tabela. O SGBD usa os campos de chave primária para</p><p>associar rapidamente os dados de várias tabelas e passar a você as informações consolidadas.</p><p>Se já houver um identificador exclusivo para a tabela, como um número de produto que identifica</p><p>exclusivamente cada produto do seu catálogo, você poderá usar esse identificador como chave primária</p><p>da tabela — porém, apenas se os valores da coluna forem sempre diferentes com relação a todos os</p><p>registros. Não é possível duplicar valores em uma chave primária. Por exemplo, não use nomes de</p><p>pessoas como chave primária, porque nomes não são exclusivos. É fácil encontrar duas pessoas com o</p><p>mesmo nome em uma mesma tabela.</p><p>A chave primária deve sempre conter um valor. Se o valor de uma coluna pode se tornar sem alocação</p><p>ou desconhecido (valor faltante) em dado momento, não poderá ser usado como componente de chave</p><p>primária.</p><p>Escolha sempre uma chave primária cujo valor não se altere. Em um banco de dados que utiliza mais</p><p>de uma tabela, a chave primária de uma tabela pode ser usada como referência em outras tabelas. Se a</p><p>chave primária se alterar, a alteração precisa também ser aplicada a todos os locais em que a chave é</p><p>citada. Usar uma chave primária que não se altera reduz a possibilidade de que a chave primária fique</p><p>fora de sincronia com outras tabelas que fazem referência a ela.</p><p>Em geral, um número exclusivo arbitrário é usado como chave primária. Por exemplo, é possível</p><p>atribuir um número exclusivo de pedido a todos os pedidos. A finalidade do número de pedido é identificá-</p><p>lo. Após atribuído, ele não é mais alterado.</p><p>Se você não estiver visando a uma coluna ou conjunto de colunas que possam consistir em chave</p><p>primária adequada, pense em usar uma coluna que tenha um tipo de dados de Auto Incremento (Onde</p><p>os números de cada registro são gerados automaticamente). Quando o tipo de dados de Auto Incremento</p><p>é usado, o SGBD atribui automaticamente um valor a você. Esse identificador é isento de fatos; não</p><p>contém informações factuais que descrevam a linha que representam. Os identificadores isentos de fatos</p><p>são ideais para se usar como chave primária porque não se alteram. Uma chave primária que contenha</p><p>fatos a respeito de uma linha — número de telefone ou nome de cliente, por exemplo — tem mais</p><p>probabilidade de se alterar porque as próprias informações factuais podem se modificar.</p><p>Mostrando a tabela produtos em um campo de chave primária.</p><p>1. Um conjunto de colunas para o tipo de dados de Auto Incremento consiste, em geral, em uma chave</p><p>primária adequada. Jamais dois códigos de produto são idênticos.</p><p>Em alguns casos, é preferível usar dois ou mais campos que, juntos, forneçam a chave primária para</p><p>uma tabela. Por exemplo, uma tabela de Detalhes do Pedido que armazene itens de linha de pedidos</p><p>usaria duas colunas em sua chave primária: Código de Pedido e Código de Produto. Quando uma chave</p><p>primária emprega mais de uma coluna, é também denominada chave composta.</p><p>Com relação ao banco de dados de vendas de produto, é possível criar uma coluna de Auto Incremento</p><p>para cada uma das tabelas, para servir como chave primária: CódigoDoProduto para a tabela Produtos,</p><p>CódigoDoPedido para as tabelas Pedidos, CódigoDoCliente para a tabela Clientes e</p><p>CódigoDoFornecedor para a tabela Fornecedores.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 60</p><p>Itens e informações durante o processo de design.</p><p>Configurar as Relações de Tabelas</p><p>Observar cada uma das tabelas e decidir como os dados em determinada tabela estão relacionados</p><p>aos dados de outras tabelas. Adicionar campos a tabelas ou criar novas tabelas para esclarecer as</p><p>relações, se necessário.</p><p>Agora que as informações estão divididas em tabelas, há necessidade de uma forma de reunir as</p><p>informações novamente, com um sentido. Por exemplo, o formulário a seguir engloba informações de</p><p>várias tabelas.</p><p>Formulário de pedido.</p><p>1. As informações desse formulário são originárias da tabela Clientes</p><p>2. ...da tabela Funcionários...</p><p>3. ...da tabela Pedidos...</p><p>4. ...da tabela Produtos...</p><p>5. ...e da tabela Detalhes do Pedido.</p><p>Os SGBD são um sistemas de gerenciamento de banco de dados relacionais. Em um banco de dados</p><p>relacional, as informações são divididas em tabelas distintas, baseadas em tópicos. São então utilizadas</p><p>as relações de tabelas para reunir informações, à medida que se tornem necessárias.</p><p>Criando uma Relação Um-para-Muitos</p><p>Examine este exemplo: as tabelas Fornecedores e Produtos do banco de dados de pedidos de produto.</p><p>Um fornecedor pode fornecer qualquer número de produtos. Consequentemente, para qualquer</p><p>fornecedor representado na tabela Fornecedores pode haver vários produtos representados na tabela</p><p>Produtos. A relação entre a tabela Fornecedores e a tabela Produtos é, portanto, uma relação um-para-</p><p>muitos.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 61</p><p>Conceito um para muitos.</p><p>Para representar uma relação um-para-muitos em um design de banco de dados, tome a chave</p><p>primária do lado "um" da relação e adicione-a como coluna ou colunas adicionais à tabela do lado "muitos"</p><p>da relação. Nesse caso, por exemplo, a coluna Código do Fornecedor da tabela Fornecedores é</p><p>adicionada à tabela Produtos. O SGBD pode, em seguida, usar o número do código do fornecedor da</p><p>tabela Produtos para localizar o fornecedor correto de todos os produtos.</p><p>A coluna Código do Fornecedor da tabela Produtos é denominada chave estrangeira. A chave</p><p>estrangeira é uma chave primária de outra tabela. A coluna Código do Fornecedor da tabela Produtos é</p><p>uma chave estrangeira porque é também a chave primária da tabela Fornecedores.</p><p>Lista de itens e informações durante o processo de design.</p><p>As bases para a associação de tabelas relacionadas são fornecidas pelo estabelecimento da união de</p><p>chaves primárias com chaves estrangeiras. Quando não se está certo sobre quais tabelas devem</p><p>compartilhar uma coluna comum, identificar uma relação um-para-muitos assegura que as duas tabelas</p><p>envolvidas exigirão verdadeiramente uma coluna compartilhada.</p><p>Criando uma Relação Muitos-para-Muitos</p><p>Examine a relação entre a tabela Produtos e a Tabela Pedido.</p><p>Um único pedido pode incluir mais de um produto. Por outro lado, um único produto pode constar em</p><p>vários pedidos. Assim, para todos os registros da tabela Pedidos pode haver vários registros na tabela</p><p>Produtos. E para cada registro na tabela Produtos pode haver registros na tabela Pedidos. Esse tipo de</p><p>relação é denominado relação muitos-para-muitos porque com relação a todos os produtos pode haver</p><p>vários pedidos, e para todos os pedidos pode haver vários produtos. Observe que para detectar relações</p><p>muitos-para-muitos entre as tabelas é importante considerar ambos os lados da relação.</p><p>Os tópicos das duas tabelas — pedidos e produtos — têm uma relação muitos-para-muitos. Isso</p><p>representa um problema. Para entender o problema, imagine o que aconteceria se você tentasse criar a</p><p>relação entre duas tabelas adicionando o campo Código do Produto à tabela Pedidos. Para ter mais de</p><p>um produto por pedido, é necessário mais de um registro na tabela Pedidos por pedido. Você repetiria as</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 62</p><p>informações do pedido em cada uma das linhas relativas a um único pedido — o que resultaria em um</p><p>design ineficaz que poderia resultar em dados imprecisos. O mesmo problema é enfrentado quando se</p><p>coloca o campo Código do Pedido na tabela Produtos — haveria mais de um registro na tabela Produtos</p><p>para cada produto. Como resolver esse problema?</p><p>A solução é criar</p><p>uma terceira tabela, em geral denominada tabela de junção, que divide as diversas</p><p>relações muitos-para-muitos em duas relações um-para-muitos. Insira a chave primária de cada uma das</p><p>duas tabelas em uma terceira tabela. Consequentemente, a terceira tabela registra todas as ocorrências</p><p>ou instâncias da relação.</p><p>Relacionamento muitos para muitos.</p><p>Cada registro da tabela de Detalhes do Pedido representa um item de linha do pedido. A chave primária</p><p>da tabela Detalhes do Pedido consiste em dois campos — as chaves estrangeiras das tabelas Pedidos e</p><p>Produtos. Usar somente o campo Código do Pedido não funciona como chave primária dessa tabela,</p><p>porque um único pedido pode conter vários itens de linha. O Código do Pedido repete-se em cada item</p><p>de linha em um pedido, de modo que o campo não possa conter valores únicos. Usar apenas o campo</p><p>Código do Produto não funciona também, porque um mesmo produto pode surgir em diversos pedidos</p><p>diferentes. Em conjunto, porém, os dois campos podem sempre produzir um valor único para cada</p><p>registro.</p><p>No banco de dados de vendas de produto a tabela Pedidos e a tabela Produtos não estão relacionadas</p><p>entre si de forma direta. Em vez disso, são relacionadas indiretamente através da tabela Detalhes do</p><p>Pedido. A relação muitos-para-muitos entre pedidos e produtos é representada no banco de dados por</p><p>meio de duas relações um-para-muito:</p><p>A tabela Pedidos e a tabela Detalhes tem uma relação um-para-muitos. Todos os pedidos podem ter</p><p>mais de um item de linha, porém todo item de linha é conectado a apenas um pedido.</p><p>A tabela Produtos e a tabela Pedidos tem uma relação um-para-muitos. Cada produto pode ter vários</p><p>itens de linha associados a ele, mas cada item de linha se refere a apenas um produto.</p><p>Da tabela de Detalhes do Pedido, é possível determinar todos os produtos em um pedido particular. É</p><p>possível também determinar que todos os pedidos de um produto particular.</p><p>Após incorporar a tabela de Detalhes do Pedido, a lista de tabelas e campos pode ter a seguinte</p><p>aparência:</p><p>Lista de itens e informações durante o processo de design.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 63</p><p>Criando uma Relação Um-para-Um</p><p>Um outro tipo de relação é a relação um-para-um. Por exemplo, suponhamos que haja necessidade</p><p>de registrar algumas informações especiais e complementares de um produto, que serão raramente</p><p>usadas ou que se só aplicam a uns poucos produtos. Como essas informações não são exigidas com</p><p>frequência, e como armazenar informações na tabela Produtos resultaria em espaço vazio para todos os</p><p>produtos aos quais elas não se aplicam, coloque essas informações em uma tabela distinta. Assim como</p><p>a tabela Produtos, utilize o CódigoDoProduto como chave primária. A relação entre essa tabela</p><p>complementar e a tabela Produto é uma relação um-para-um. Para cada registro da tabela Produto, existe</p><p>apenas um registro correspondente na tabela complementar. Quando essa relação é identificada, ambas</p><p>as tabelas devem compartilhar um campo comum.</p><p>Quando a necessidade de uma relação um-para-um é detectada no banco de dados, considere colocar</p><p>as informações das duas tabelas juntas em uma só tabela. Se houver um motivo para não o fazer, talvez</p><p>porque isso resulte em uma série de espaços vazios, a lista a seguir mostra como representar a relação</p><p>no design:</p><p>Se as duas tabelas tiverem o mesmo tópico, você poderá provavelmente configurar a relação por meio</p><p>da mesma chave primária em ambas as tabelas.</p><p>Se as duas tabelas tiverem tópicos diferentes com chaves primárias diversas, escolha uma das tabelas</p><p>(qualquer uma) e insira a chave primária na outra tabela como chave estrangeira.</p><p>A determinação das relações entre tabelas ajuda a assegurar que se tenham as tabelas e colunas</p><p>corretas. Quando existe uma relação um-para-um ou um-para-muitos, as tabelas envolvidas exigem o</p><p>compartilhamento de uma coluna ou colunas comuns. Quando existe uma relação muitos-a-muitos, uma</p><p>terceira tabela é necessária para representar a relação.</p><p>Refinar o Design</p><p>Analisar o design com relação aos erros. Criar as tabelas e adicionar alguns novos registros de dados</p><p>de exemplo. Observe se os resultados esperados das tabelas são obtidos. Faça ajustes no design,</p><p>conforme necessário.</p><p>Após ter as tabelas, campos e relações necessários, crie e preencha as tabelas com dados de exemplo</p><p>e tente trabalhar com as informações: criação de consultas, adição de novos registros, entre outros. Fazer</p><p>isso ajuda a levantar os problemas potenciais — por exemplo, pode ser necessário adicionar uma coluna</p><p>que se esqueceu de inserir durante a fase de design, ou pode haver uma tabela que deva ser dividida em</p><p>duas tabelas para remover duplicação.</p><p>Confirme se é possível usar o banco de dados para obter as respostas desejadas. Crie rascunhos dos</p><p>seus formulários e relatórios, e veja se eles apresentam os dados esperados. Procure por duplicações de</p><p>dados desnecessárias e, quando encontrar alguma, altere o design para eliminá-la.</p><p>À medida que você faz experiências com o banco de dados inicial, provavelmente descobrirá espaço</p><p>para melhoramentos. Seguem algumas coisas a serem verificadas:</p><p>- Você esqueceu alguma coluna? Se esqueceu, as informações pertenciam a tabelas existentes? Se</p><p>se trata de informações sobre alguma outra coisa, será necessário criar uma outra tabela. Crie uma coluna</p><p>para cada item de informação que necessita de controle. Se as informações não podem ser calculadas a</p><p>partir de outras colunas, é provável que exijam uma outra coluna.</p><p>- Há alguma coluna desnecessária porque pode ser calculada a partir de campos existentes? Se um</p><p>item de informação puder ser calculado de outras colunas existentes — um preço descontado calculado</p><p>do preço de varejo, por exemplo — em geral é melhor fazer exatamente isso e evitar criar uma nova</p><p>coluna.</p><p>- Informações duplicadas são repetidamente inseridas em uma das tabelas? Em caso afirmativo, talvez</p><p>seja necessário dividir a tabela em duas tabelas que tenham a relação um-para-muitos.</p><p>- Existem tabelas com vários campos, um número limitado de registros e vários campos vazios em</p><p>registros individuais? Se for o caso, pense em criar novamente a tabela de modo que passe a ter menos</p><p>campos e mais registros.</p><p>- Todos os itens de informações foram quebrados em partes úteis menores? Se for necessário criar</p><p>relatório, classificar, pesquisar ou calcular um item de informação, coloque esse item em sua própria</p><p>coluna.</p><p>- Cada coluna contém um fato sobre o tópico da tabela? Quando uma coluna não contém informações</p><p>sobre o tópico da tabela é porque pertence a uma tabela diferente.</p><p>- Todas as relações entre tabelas são representadas tanto por campos comuns como por uma terceira</p><p>tabela? As relações um-para-um ou um-para-muitos requerem colunas comuns. As relações muitos-para-</p><p>muitos requerem uma terceira tabela.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 64</p><p>Refinando a Tabela Produtos</p><p>Suponhamos que cada produto no banco de dados de vendas de produto incida sobre uma categoria</p><p>geral, como bebidas, condimentos ou frutos do mar. A tabela Produtos poderia incluir um campo que</p><p>apresente a categoria de cada produto.</p><p>Suponhamos que após examinar e refinar o design do banco de dados você decida armazenar uma</p><p>descrição de categoria juntamente com o nome da categoria. Quando se adiciona um campo Descrição</p><p>de Categoria à tabela Produtos, é preciso repetir todas as descrições de categoria de cada produto que</p><p>incida nessa categoria — o que não é uma boa solução.</p><p>Uma solução mais adequada é transformar Categorias em um tópico novo para controle do banco de</p><p>dados, com sua própria tabela e sua própria chave primária. Adicione então a chave primária da tabela</p><p>Categorias à tabela Produtos como chave estrangeira.</p><p>As tabelas Categorias e Produtos têm uma relação um-para-muitos: uma categoria pode incluir mais</p><p>de um produto, porém um produto só pode pertencer a uma categoria.</p><p>No momento de examinar as estruturas da tabela, preste atenção a grupos repetidos. Por exemplo,</p><p>considere uma tabela contendo as seguintes colunas:</p><p>- Código do Produto</p><p>- Nome</p><p>- Código de Produto1</p><p>- Nome1</p><p>- Código de Produto2</p><p>- Nome2</p><p>- Código de Produto3</p><p>- Nome3</p><p>Aqui, cada produto é um grupo separado de colunas que diferem entre si apenas pela adição de um</p><p>algarismo ao final do nome da coluna. Quando colunas numeradas dessa forma aparecerem, reexamine</p><p>o design.</p><p>Esse tipo de design tem várias falhas. Com relação aos iniciantes, força a colocação de um limite</p><p>superior no número de produtos. Tão logo você exceda esse limite, será preciso adicionar um novo grupo</p><p>de colunas à estrutura da tabela, o que é uma tarefa administrativa essencial.</p><p>Um outro problema é que os fornecedores com número de produtos inferior ao máximo irão</p><p>desperdiçar espaço, uma vez que as colunas adicionais estarão vazias. A maior falha com relação a esse</p><p>design é que isso torna várias tarefas difíceis de desempenhar, como a classificação ou indexação da</p><p>tabela por código ou nome de produto.</p><p>Sempre que forem exibidos grupos repetidos, examine detalhadamente o design, visando a dividir a</p><p>tabela em dois. No exemplo acima é melhor usar duas tabelas, uma para fornecedores e uma para</p><p>produtos, vinculadas por código de fornecedor.</p><p>Aplicar as Regras de Normalização</p><p>Aplicar as regras de normalização de dados para examinar se as tabelas estão corretamente</p><p>estruturadas. Faça ajustes nas tabelas, conforme necessário.</p><p>É possível aplicar as regras de normalização de dados (também chamadas simplesmente regras de</p><p>normalização) como próxima etapa do design. Use essas regras para ver se as tabelas estão</p><p>corretamente estruturadas. O processo de aplicação de regras ao design do banco de dados é</p><p>denominado normalização de banco de dados, ou apenas normalização.</p><p>A normalização é muito mais útil após a representação de todos os itens de informações e da obtenção</p><p>de um design preliminar. A ideia é ajudar a assegurar que você distribua os itens de informações pelas</p><p>tabelas corretas. O que a normalização não pode fazer é assegurar que se tenham todos os itens de</p><p>dados corretos de início.</p><p>Aplique as regras em sequência, assegurando a cada etapa que o seu design chegue ao que é</p><p>conhecido como "formas normalizadas". Cinco formas normalizadas são amplamente aceitas — da</p><p>primeira forma normalizada à quinta forma normalizada. Este artigo se expande nas três primeiras, porque</p><p>elas são tudo o que se exige para a maior parte dos bancos de dados.</p><p>- Primeira Forma Normalizada</p><p>A primeira forma normalizada declara que a cada interseção de linha e coluna da tabela existe um</p><p>valor único e nunca uma lista de valores. Por exemplo, não é possível ter um campo denominado Preço,</p><p>em que se insira mais de um Preço. Quando se entende cada interseção de linhas e colunas como uma</p><p>célula, cada célula poderá manter apenas um valor.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 65</p><p>- Segunda Forma Normalizada</p><p>A segunda forma normalizada requer que cada coluna não-chave seja totalmente dependente de toda</p><p>a chave primária, não apenas de parte da chave. Essa regra aplica-se quando se tem uma chave primária</p><p>que consiste em mais de uma coluna. Por exemplo, supondo que haja uma tabela contendo as colunas</p><p>a seguir, onde Código do Pedido e Código do Produto formam a chave primária:</p><p>- Código do Pedido (chave primária)</p><p>- Código de Produto (chave primária)</p><p>- Nome de Produto</p><p>Esse design desrespeita a segunda forma normalizada, uma vez que o Nome do Produto é dependente</p><p>do Código do Produto, mas não do Código do Pedido, portanto, não depende de toda a chave primária.</p><p>É preciso remover o Nome do Produto da tabela. Ele pertence a uma tabela diferente (Produtos).</p><p>- Terceira Forma Normalizada</p><p>A terceira forma normalizada exige que não apenas todas as colunas não-chave sejam dependentes</p><p>de toda a chave primária, mas que as colunas não-chave sejam independentes entre si.</p><p>Uma outra forma de dizer isso é que cada coluna não-chave seja dependente da chave primária e</p><p>somente da chave primária. Por exemplo, na hipótese de haver uma tabela contendo as seguintes</p><p>colunas:</p><p>- CódigoDeProduto (chave primária)</p><p>- Nome</p><p>- SRP</p><p>- Desconto</p><p>Suponha que Desconto dependa do SRP (suggested retail price, preço a varejo sugerido). Essa tabela</p><p>desrespeita a terceira forma normalizada, porque uma coluna não chave, Desconto, depende de uma</p><p>outra comuna não-chave, SRP. A independência da coluna significa que é possível alterar todas as</p><p>colunas não-chave sem afetar nenhuma outra coluna. Se você alterar um valor do campo SRP, Desconto</p><p>seria pertinentemente alterada, o que infringiria a regra. Nesse caso, Desconto seria movida para uma</p><p>outra tabela chaveada em SRP.</p><p>Questões</p><p>01. (CFM - Assistente de Tecnologia da Informação - IADES/2018) Em relação aos bancos de</p><p>dados, quais são os modelos de dados utilizados pelos Sistemas Gerenciadores de Banco de Dados</p><p>(SGBD)?</p><p>(A) Modelo hierárquico, modelo cliente-servidor, modelo plano e modelo orientado a objetos.</p><p>(B) Modelo não hierárquico, modelo cliente-servidor, modelo plano e modelo orientado a objetos.</p><p>(C) Modelo hierárquico, modelo cliente-servidor, modelo vertical e o modelo orientado a objetos.</p><p>(D) Modelo não hierárquico, modelo cliente-servidor, modelo relacional e modelo orientado a objetos.</p><p>(E) Modelo hierárquico, modelo em redes, modelo relacional e modelo orientado a objetos.</p><p>02. (TER/GO - Técnico Judiciário - CESPE) Julgue o seguinte item, a respeito da modelagem de</p><p>dados.</p><p>Considere a seguinte situação hipotética.</p><p>Em um banco de dados referente a um curso, um aluno pode estar em mais de um curso ao mesmo</p><p>tempo. Além disso, na tabela de cursos realizados por aluno, estão presentes as chaves estrangeiras</p><p>aluno e curso.</p><p>Nessa situação, tanto o código do curso como o código do aluno são chaves primárias nas tabelas</p><p>curso e aluno, respectivamente.</p><p>( ) Certo ( ) Errado</p><p>03. (TER/GO - Técnico Judiciário - CESPE) Acerca de bancos de dados, julgue os seguinte item.</p><p>Nas organizações, o emprego de sistemas gerenciadores de banco de dados promove a segurança e</p><p>a consistência dos dados, favorecendo a redundância e garantindo a integridade dos dados.</p><p>( ) Certo ( ) Errado</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 66</p><p>04. (IF/CE - Assistente em Administração - IF/CE) Banco de dados pode ser definido como:</p><p>(A) uma disposição de dados desordenados.</p><p>(B) uma coleção de dados relacionados referentes a um mesmo assunto e organizados de maneira</p><p>útil, com o propósito de servir de base, para que o usuário recupere informações.</p><p>(C) um conjunto de dados integrados que tem por objetivo impedir acessos indevidos a dados</p><p>armazenados.</p><p>(D) um conjunto de dados integrados que tem por objetivo atender a requisitos do sistema operacional.</p><p>(E) um conjunto de aplicações desenvolvidas especialmente para esta tarefa de criar e manter</p><p>informações.</p><p>05. (TRT - 17ª Região/ES - Técnico Judiciário - CESPE) Com relação aos conceitos de modelo de</p><p>entidade e relacionamento e de modelo conceitual, lógico e físico, julgue os itens subsecutivos.</p><p>Chave estrangeira é o atributo ou conjunto de atributos que se refere ou é relacionado com alguma</p><p>chave primária ou única de uma tabela, podendo ser inclusive da mesma tabela.</p><p>( ) Certo ( ) Errado</p><p>06. (PC/SC - Investigador de Polícia - ACAFE) Em relação à Banco de Dados, marque V ou F,</p><p>conforme as afirmações a seguir sejam verdadeiras ou falsas.</p><p>( ) Banco de Dados é um conjunto de informações organizadas de forma estruturada, como por</p><p>exemplo, uma lista telefônica.</p><p>( ) O Sistema Gerenciador de Banco de Dados, conhecido também como SGBD, é um sistema</p><p>informatizado que gerencia um banco de dados.</p><p>( ) Empresas de grande porte mantêm suas informações organizadas em Bancos de Dados de forma</p><p>que todos os seus empregados tenham acesso a elas.</p><p>( ) O Windows Server e o Linux são Gerenciadores de Banco de Dados que utilizam a linguagem de</p><p>manipulação de dados SQL.</p><p>A sequência correta, de cima para baixo, é:</p><p>(A) F - F - V - V</p><p>(B) V - F - V - F</p><p>(C) F - V - F - F</p><p>(D) V - V - F – F</p><p>Gabarito</p><p>01.E / 02.Certo / 03.Errado / 04.B / 05.Certo</p><p>Comentários:</p><p>01. Resposta: E</p><p>Os modelos de dados utilizados pelos Sistemas Gerenciadores de Banco de Dados são: Modelo</p><p>hierárquico, modelo em redes, modelo relacional e modelo orientado a objetos.</p><p>02. Resposta: Certo</p><p>Toda tabela pode conter uma única e exclusiva chave primária e também poderá conter uma ou MAIS</p><p>chaves estrangeiras, portanto a afirmação do texto são chaves primárias nas tabelas curso e aluno.</p><p>03. Resposta: Errado</p><p>A utilização de um SGBD não favorece a redundância dos dados, uma vez que os dados estarão, ou</p><p>tendem a estar, armazenados no mesmo lugar. Um dos princípios de projeto de bancos de dados é a</p><p>normalização que objetiva justamente a eliminação de redundâncias e inconsistências nos bancos de</p><p>dados.</p><p>04. Resposta: B</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 67</p><p>Um banco de dados é uma coleção de dados inter-relacionados, representando informações sobre um</p><p>domínio específico, ou seja, sempre que for possível agrupar informações que se relacionam e tratam de</p><p>um mesmo assunto, posso dizer que tenho um banco de dados.</p><p>05. Resposta: Certo</p><p>A chave estrangeira é uma chave primária de outra tabela.</p><p>Exemplo de chave estrangeira (note que a chave estrangeira é uma chave primária em outra tabela).</p><p>Quando duas ou mais tabelas estão relacionadas há campos comuns entre elas, este campo é definido</p><p>como chave primária quando ele define o identificador exclusivo de uma tabela, e chave estrangeira</p><p>quando o campo traz informações que estão armazenadas em outra tabela. Há casos em que uma chave</p><p>primária também pode ser uma chave estrangeira (ao mesmo tempo), isso ocorre quando há um</p><p>relacionamento N:N.</p><p>A coluna Código do Fornecedor da tabela Produtos é uma chave estrangeira porque é também a chave</p><p>primária da tabela Fornecedores.</p><p>06. Resposta: E</p><p>O terceiro item está errado, pois o acesso é restrito aos usuários autorizados. O último item está errado,</p><p>pois Windows Server e Linux são sistemas operacionais, e Postgre, Oracle, MySQL, seriam opções para</p><p>manipulação de banco de dados.</p><p>ARQUITETURAS DE BANCO DADOS13</p><p>Atualmente, devem-se considerar alguns aspectos relevantes para atingir a eficiência e a eficácia dos</p><p>sistemas informatizados desenvolvidos, a fim de atender seus usuários nos mais variados domínios de</p><p>aplicação: automação de escritórios, sistemas de apoio a decisões, controle de reserva de recursos,</p><p>controle e planejamento de produção, alocação e estoque de recursos, entre outros. Tais aspectos são:</p><p>Os projetos Lógico e Funcional do Banco de Dados devem ser capazes de prever o volume de</p><p>informações armazenadas a curto, médio e longo prazo. Os projetos devem ter uma grande capacidade</p><p>de adaptação para os três casos mencionados;</p><p>Deve-se ter generalidade e alto grau de abstração de dados, possibilitando confiabilidade e eficiência</p><p>no armazenamento dos dados e permitindo a utilização de diferentes tipos de gerenciadores de dados</p><p>através de linguagens de consultas padronizadas;</p><p>Projeto de uma interface ágil e com uma "rampa ascendente" para propiciar aprendizado suave ao</p><p>usuário, no intuito de minimizar o esforço cognitvo;</p><p>Implementação de um projeto de interface compatível com múltiplas plataformas (UNIX, Windows NT,</p><p>Windows Workgroup, etc);</p><p>Independência de Implementação da Interface em relação aos SGBDs que darão condições às</p><p>operações de armazenamento de informações (ORACLE, SYSBASE, INFORMIX, PADRÃO XBASE, etc).</p><p>Conversão e mapeamento da diferença semântica entre os paradigmas utilizados no desenvolvimento</p><p>de interfaces (Imperativo (ou procedural), Orientado a Objeto, Orientado a evento), servidores de dados</p><p>(Relacional) e programação dos aplicativos (Imperativo, Orientado a Objetos).</p><p>Arquiteturas</p><p>As primeiras arquiteturas usavam mainframes para executar o processamento principal e de todas as</p><p>funções do sistema, incluindo os programas aplicativos, programas de interface com o usuário, bem como</p><p>a funcionalidade dos SGBDs. Esta é a razão pela qual a maioria dos usuários fazia acesso aos sistemas</p><p>via terminais que não possuíam poder de processamento, apenas a capacidade de visualização. Todos</p><p>os processamentos eram feitos remotamente, apenas as informações a serem visualizadas e os controles</p><p>13 Fonte: http://www.ime.usp.br/~andrers/aulas/bd2005-1/aula4.html</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 68</p><p>eram enviados do mainframe para os terminais de visualização, conectados a ele por redes de</p><p>comunicação. Como os preços do hardware foram decrescendo, muitos usuários trocaram seus terminais</p><p>por computadores pessoais (PC) e estações de trabalho. No começo os SGBDs usavam esses</p><p>computadores da mesma maneira que usavam os terminais, ou seja, o SGBD era centralizado e toda sua</p><p>funcionalidade, execução de programas aplicativos e processamento da interface do usuário</p><p>eram executados em apenas uma máquina. Gradualmente, os SGBDs começaram a explorar a</p><p>disponibilidade do poder de processamento no lado do usuário, o que levou à arquitetura cliente-servidor.</p><p>A arquitetura cliente-servidor foi desenvolvida para dividir ambientes de computação onde um grande</p><p>número de PCs, estações de trabalho, servidores de arquivos, impressoras, servidores de banco de</p><p>dados e outros equipamentos são conectados juntos por uma rede. A ideia é definir servidores</p><p>especializados, tais como servidor de arquivos, que mantém os arquivos de máquinas clientes, ou</p><p>servidores de impressão que podem estar conectados a várias impressoras; assim, quando se desejar</p><p>imprimir algo, todas as requisições de impressão são enviadas a este servidor. As máquinas clientes</p><p>disponibilizam para o usuário as interfaces apropriadas para utilizar esses servidores, bem como poder</p><p>de processamento para executar aplicações locais. Esta arquitetura se tornou muito popular por algumas</p><p>razões. Primeiro, a facilidade de implementação dada à clara separação das funcionalidades e dos</p><p>servidores. Segundo, um servidor é inteligentemente utilizado porque as tarefas mais simples são</p><p>delegadas às máquinas clientes mais baratas. Terceiro, o usuário pode executar uma interface gráfica</p><p>que lhe é familiar, ao invés de usar a interface do servidor. Desta maneira, a arquitetura cliente-servidor</p><p>foi incorporada aos SGBDs comerciais. Diferentes técnicas foram propostas para se implementar essa</p><p>arquitetura, sendo que a mais adotada pelos Sistemas Gerenciadores de Banco de Dados Relacionais</p><p>(SGBDRs) comerciais é a inclusão da funcionalidade de um SGBD centralizado no lado do servidor. As</p><p>consultas e a funcionalidade transacional permanecem no servidor, sendo que este é chamado de</p><p>servidor de consulta ou servidor de transação. É assim que um servidor SQL é fornecido aos clientes.</p><p>Cada cliente tem que formular suas consultas SQL, prover a interface do usuário e as funções de interface</p><p>usando uma linguagem de programação. O cliente pode também se referir a um dicionário de dados o</p><p>qual inclui informações sobre a distribuição dos dados em vários servidores SQL, bem como os módulos</p><p>para a decomposição de uma consulta global em um número de consultas locais que podem ser</p><p>executadas em vários sítios. Comumente o servidor SQL também é chamado de back-end machine e o</p><p>cliente de front-end machine. Como SQL provê uma linguagem padrão para o SGBDRs, esta criou o</p><p>ponto de divisão lógica entre o cliente e o servidor.</p><p>Atualmente, existem várias tendências para arquitetura de Banco de Dados, nas mais diversas</p><p>direções.</p><p>Resumo das Arquiteturas de SGBDs</p><p>Plataformas centralizadas: Na arquitetura centralizada, existe um computador</p><p>com grande capacidade</p><p>de processamento, o qual é o hospedeiro do SGBD e emuladores para os vários aplicativos. Esta</p><p>arquitetura tem como principal vantagem a de permitir que muitos usuários manipulem grande volume de</p><p>dados. Sua principal desvantagem está no seu alto custo, pois exige ambiente especial para mainframes</p><p>e soluções centralizadas.</p><p>Sistemas de Computador Pessoal - PC: Os computadores pessoais trabalham em sistema stand-</p><p>alone, ou seja, fazem seus processamentos sozinhos. No começo esse processamento era bastante</p><p>limitado, porém, com a evolução do hardware, tem-se hoje PCs com grande capacidade de</p><p>processamento. Eles utilizam o padrão Xbase e quando se trata de SGBDs, funcionam como hospedeiros</p><p>e terminais. Desta maneira, possuem um único aplicativo a ser executado na máquina. A principal</p><p>vantagem desta arquitetura é a simplicidade.</p><p>Banco de Dados Cliente-Servidor: Na arquitetura Cliente-Servidor, o cliente (front_end) executa as</p><p>tarefas do aplicativo, ou seja, fornece a interface do usuário (tela, e processamento de entrada e saída).</p><p>O servidor (back_end) executa as consultas no DBMS e retorna os resultados ao cliente. Apesar de ser</p><p>uma arquitetura bastante popular, são necessárias soluções sofisticadas de software que possibilitem: o</p><p>tratamento de transações, as confirmações de transações (commits), desfazer transações (rollbacks),</p><p>linguagens de consultas (stored procedures) e gatilhos (triggers). A principal vantagem desta arquitetura</p><p>é a divisão do processamento entre dois sistemas, o que reduz o tráfego de dados na rede.</p><p>Banco de Dados Distribuídos (N camadas): Nesta arquitetura, a informação está distribuída em</p><p>diversos servidores. Como exemplo, observe a abaixo. Cada servidor atua como no sistema cliente-</p><p>servidor, porém as consultas oriundas dos aplicativos são feitas para qualquer servidor indistintamente.</p><p>Caso a informação solicitada seja mantida por outro servidor ou servidores, o sistema encarrega-se de</p><p>obter a informação necessária, de maneira transparente para o aplicativo, que passa a atuar consultando</p><p>a rede, independente de conhecer seus servidores. Exemplos típicos são as bases de dados corporativas,</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 69</p><p>em que o volume de informação é muito grande e, por isso, deve ser distribuído em diversos servidores.</p><p>Porém, não é dependente de aspectos lógicos de carga de acesso aos dados, ou base de dados</p><p>fracamente acopladas, em que uma informação solicitada vai sendo coletada numa propagação da</p><p>consulta numa cadeia de servidores. A característica básica é a existência de diversos programas</p><p>aplicativos consultando a rede para acessar os dados necessários, porém, sem o conhecimento explícito</p><p>de quais servidores dispõem desses dados.</p><p>Arquitetura Distribuída N camadas.</p><p>Abstração de Dados</p><p>Um SGBD é composto de uma coleção de arquivos inter-relacionados e de um conjunto de programas</p><p>que permitem aos usuários fazer o acesso a estes arquivos e modificar os mesmos. O grande objetivo de</p><p>um sistema de banco de dados é prover os usuários com uma visão abstrata dos dados. Isto é, o sistema</p><p>omite certos detalhes de como os dados são armazenados e mantidos. Entretanto, para que o sistema</p><p>possa ser utilizado, os dados devem ser buscados de forma eficiente. Este conceito tem direcionado o</p><p>projeto de estrutura de dados complexas para a representação de dados em um banco de dados. Uma</p><p>vez que muitos dos usuários de banco de dados não são treinados para computação, a complexidade</p><p>está escondida deles através de diversos níveis de abstração que simplificam a interação do usuário com</p><p>o sistema.</p><p>Nível físico: o nível mais baixo de abstração descreve como os dados estão realmente armazenados.</p><p>No nível físico, complexas estruturas de dados de baixo nível são descritas em detalhes;</p><p>Nível conceitual: o próximo nível de abstração descreve quais dados estão armazenados de fato no</p><p>banco de dados e as relações que existem entre eles. Aqui o banco de dados inteiro é descrito em termos</p><p>de um pequeno número de estruturas relativamente simples. Embora as implementações de estruturas</p><p>simples no nível conceitual possa envolver complexas estruturas de nível físico, o usuário do nível</p><p>conceitual não precisa preocupar-se com isso. O nível conceitual de abstração é usado por</p><p>administradores de banco de dados, que podem decidir quais informações devem ser mantidas no BD;</p><p>Nível de visões: o mais alto nível de abstração descreve apenas parte do banco de dados. Apesar do</p><p>uso de estruturas mais simples do que no nível conceitual, alguma complexidade perdura devido ao</p><p>grande tamanho do banco de dados. Muitos usuários do sistema de banco de dados não estarão</p><p>interessados em todas as informações. Em vez disso precisam de apenas uma parte do banco de dados.</p><p>O nível de abstração das visões de dados é definido para simplificar esta interação com o sistema, que</p><p>pode fornecer muitas visões para o mesmo banco de dados.</p><p>Segue ilustração da arquitetura e referente abstração de dados envolvida.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 70</p><p>Uma analogia com o conceito de tipos de dados em linguagens de programação pode esclarecer a</p><p>distinção entre os níveis de abstração. A maioria das linguagens de programação de alto nível tem suporte</p><p>para a noção de um tipo de registro. Por exemplo, numa linguagem como Pascal podemos declarar um</p><p>registro assim:</p><p>type cliente = record</p><p>nome: string;</p><p>rua: string;</p><p>cidade: string;</p><p>end;</p><p>Isto define um novo registro chamado cliente com três campos. Cada campo tem um nome e um tipo</p><p>associado a ele. Um banco privado pode ter diversos tipos de registros incluindo:</p><p>contas, com campos número e saldo;</p><p>funcionário, com campos nome e salário.</p><p>No nível físico, um registro cliente, conta ou funcionário pode ser descrito como um bloco de posições</p><p>de armazenamento consecutivas (por exemplo, palavras ou bytes). No nível conceitual, cada registro</p><p>destes é descrito por uma definição de tipo, ilustrado anteriormente e o inter-relacionamento entre esses</p><p>tipos de registros é definido. Finalmente, no nível de visões, diversas visões do banco de dados são</p><p>definidas, por exemplo: os contadores de um banco vêem apenas a parte do banco de dados que possui</p><p>informações sobre contas dos clientes. Eles não podem ter acesso a informações que se referem a</p><p>salários dos funcionários.</p><p>Independência de Dados</p><p>Vimos três níveis de abstração pelos quais o banco de dados pode ser visto. A habilidade de modificar</p><p>a definição ded um esquema em um nível sem afetar a definição de esquema num nível mais alto é</p><p>chamada de independência de dados. Existem dois níveis de independência dos dados:</p><p>Independência física de dados: é a habilidade de modificar o esquema físico sem a necessidade de</p><p>reescrever os programas aplicativos. As modificações no nível físico são ocasionalmente necessárias</p><p>para melhorar o desempenho;</p><p>Independência lógica de dados: é a habilidade ded modificar o esquema conceitual sem a necessidade</p><p>de reescrever os programas aplicativos. As modificações no nível conceitual são necessárias quando a</p><p>estrutura lógica do banco de dados é alterada (por exemplo, a adição de contas de bolsas de mercado</p><p>num sistema bancário).</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 71</p><p>A independência lógica dos dados é mais difícil de ser alcançada do que a independência física, porém</p><p>os programas são bastante dependentes da estrutura lógica dos dados que eles acessam.</p><p>O conceito de independência dos dados é similar em muitos aspectos ao conceito de tipos abstratos</p><p>de dados em modernas linguagens de programação. Ambos escondem detalhes de implementação do</p><p>usuário. Isto permite ao usuário concentrar-se na estrutura geral em vez de detalhes de baixo nível de</p><p>implementação.</p><p>CONCEITOS DO MODELO RELACIONAL14</p><p>O modelo relacional foi criado por Edgar F. Codd, nos anos 70, e começou</p><p>a ser usado com o advento</p><p>dos bancos de dados relacionais, nos anos 80. A ideia de modelo relacional se baseia no princípio de que</p><p>as informações em uma base de dados podem ser consideradas como relações matemáticas e que</p><p>podem ser representadas, de maneira uniforme, através do uso de tabelas onde as linhas representam</p><p>as ocorrências de uma entidade e as colunas representam os atributos de uma entidade do modelo</p><p>conceitual.</p><p>As relações no modelo relacional são conjuntos de dados vistos como tabelas cujas operações são</p><p>baseadas na álgebra relacional (projeção, produto cartesiano, seleção, junção, união e subtração) e que</p><p>manipulam conjuntos de dados ao invés de um único registro, isto é, cada operação realizada afeta um</p><p>conjunto de linhas e não apenas uma única linha, ainda que algumas operações possam afetar uma única</p><p>linha (conjunto com um único elemento).</p><p>Da mesma forma, a resposta das operações de consulta são sempre na forma de uma tabela. As</p><p>operações da álgebra relacional são implementadas por linguagens não procedurais de alto nível, sendo</p><p>a SQL a linguagem padrão para os bancos de dados relacionais e universalmente usada, tendo sido</p><p>padronizada pelo ANSI (American National Standard Institute).</p><p>Principais Vantagens do Modelo Relacional</p><p>Entre as principais vantagens do modelo relacional podemos citar:</p><p>- Independência total dos dados;</p><p>- Visão múltipla dos dados;</p><p>- Redução acentuada na atividade de desenvolvimento. Particularmente para extração de dados para</p><p>relatórios e consultas específicas do usuário;</p><p>- Maior segurança no acesso aos dados;</p><p>- Maior agilidade para consulta/atualização;</p><p>- Qualidade dos dados garantida por restrições de integridade (Identidade, referencial e de domínio).</p><p>As 12 Regras de Codd</p><p>Ao definir o modelo relacional, Codd estabeleceu 12 regras para determinação de um banco de dados</p><p>relacional.</p><p>Estas regras são usadas portanto para se verificar a fidelidade de um banco de dados ao modelo</p><p>relacional.</p><p>Na prática são poucos os gerenciadores de banco de dados que atendem a todas as 12 regras.</p><p>Na maior parte dos casos são atendidas no máximo 10 regras.</p><p>1. Toda informação num banco de dados relacional é apresentada a nível lógico na forma de tabelas;</p><p>2. Todo dado em um banco de dados relacional tem a garantia de ser logicamente acessível,</p><p>recorrendo-se a uma combinação do nome da tabela, um valor de chave e o nome da coluna;</p><p>3. Tratamento sistemático de valores nulos; (ausência de informação);</p><p>4. O dicionário de dados, catálogo, do banco de dados é baseado no modelo relacional;</p><p>5. Há uma linguagem não procedural para a definição, manipulação e controle dos dados;</p><p>6. Tratamento das atualizações de visões dos dados;</p><p>7. Tratamento de alto nível para inserção, atualização e eliminação de dados;</p><p>8. Independência física dos dados; (mudança na memória e no método de acesso, criação de um novo</p><p>índice, criação de uma nova coluna);</p><p>9. Independência lógica dos dados; (mudança no tamanho de uma coluna);</p><p>10. Restrição de Integridade; (Identidade, Referencial e Domínio);</p><p>11. Independência de Distribuição dos dados;</p><p>12. Não subversão das regras de integridade ou restrições quando se usa uma linguagem hospedeira.</p><p>14 https://sites.google.com/site/uniplibancodedados1/aulas/modelo-relacional</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 72</p><p>O Conceito de Chave no Modelo Relacional</p><p>Chaves e Índices</p><p>Chave: o conceito de chave designa um item de busca, ou seja, um dado que será usado para efetuar</p><p>uma consulta no banco de dados. É um conceito lógico que só faz sentido para a aplicação e não existe</p><p>fisicamente no banco de dados.</p><p>Índice: o conceito de índice está associado a um recurso físico usado para otimizar uma consulta no</p><p>banco de dados. É um recurso físico, ou seja, um índice é uma estrutura de dados, (endereços), que</p><p>existe fisicamente no banco de dados.</p><p>Existem diferentes tipos de chave em um modelo relacional. Vamos ver cada um dos tipos de chave</p><p>abaixo:</p><p>Chave Primária: a chave primária é usada para identificar univocamente uma linha em uma tabela. A</p><p>chave primária pode ser composta, ter vários atributos, ou simples, um único atributo. Por exemplo, o</p><p>atributo CPF pode ser usado como chave primária para a tabela CLIENTES pois identifica um único cliente</p><p>considerando que não existe mais de um cliente com o mesmo CPF.</p><p>Chave Secundária: a chave secundária é usada para acessar um conjunto de informações. Pode ser</p><p>formada por um único atributo ou mais de um atributo que identifica(m) um subconjunto de dados em uma</p><p>tabela. Normalmente, se cria um índice para uma chave secundária como forma de otimizar a consulta</p><p>feita por aquela chave ao banco de dados. Por exemplo, podemos ter uma chave secundária formada</p><p>pelo CEP para a tabela de CLIENTES pois esta chave identifica um subconjunto de clientes que residem</p><p>em uma rua.</p><p>Chave Candidata: a chave candidata é formada por um atributo que identifica uma única linha na</p><p>tabela. Como uma tabela pode possuir mais de um atributo identificador único podemos ter várias chaves</p><p>candidatas em uma única tabela, sendo que apenas uma das chaves candidatas pode ser escolhida para</p><p>ser a chave primária da tabela. As demais chaves permanecem como chaves candidatas na tabela. Por</p><p>exemplo, podemos ter uma chave candidata formada pela coluna NIT (PISPASEP) na tabela</p><p>FUNCIONARIOS que possui como chave primária a coluna MATRICULA. Ambas identificam</p><p>univocamente um linha na tabela FUNCIONARIOS, porem a chave NIT é candidata e a chave</p><p>MATRICULA é a chave primária.</p><p>Chave Estrangeira: a chave estrangeira é formada por atributos que são chave primária em outra</p><p>tabela, servindo assim para estabelecer relacionamentos entre as tabelas de um banco de dados. Assim,</p><p>quando dizemos que duas tabelas estão relacionadas através de uma coluna devemos observar que em</p><p>uma tabela esta coluna será chave primária e na outra tabela ela será uma chave estrangeira que fará a</p><p>ligação entre as duas tabelas, estabelecendo o relacionamento. Por exemplo, podemos ter na tabela</p><p>FUNCIONARIOS uma chave estrangeira COD_DEPTO que estabelece um relacionamento entre a tabela</p><p>FUNCIONARIOS e a tabela DEPTOS, sendo que na tabela DEPTOS a coluna COD_DEPTO é a chave</p><p>primária.</p><p>Regras de Integridade do Modelo Relacional</p><p>O modelo relacional possui duas regras de integridade descritas a seguir.</p><p>Integridade de Identidade: a chave primária não pode conter valores nulos. Como toda informação</p><p>em um banco de dados relacionam precisa ter uma identidade exclusiva, a chave primária deve ser</p><p>obrigatoriamente preenchida. Além disso, a chave primária não deve ter valores repetidos em um tabela,</p><p>de forma a garantir que exista apenas uma linha para cada valor definido para a chave primária.</p><p>Integridade Referencial: se uma determinada tabela A possui uma chave estrangeira que estabelece</p><p>relacionamento com uma tabela B, então o valor da chave estrangeira da tabela A deve ser igual a um</p><p>valor de chave primária na tabela B. Esta regra garante que as referências de uma tabela para outra</p><p>tabela sejam válidas, de forma que os relacionamentos sejam consistentes e não ocorra inconsistência</p><p>nos dados, como haver um funcionário alocado em um departamento que não existe. Assim, para todo</p><p>valor de uma coluna que é chave estrangeira em uma tabela, deve haver um valor correspondente na</p><p>coluna que é chave primária da tabela com a qual a chave estrangeira faz referência.</p><p>Como nem sempre o relacionamento entre tabelas é obrigatório uma chave estrangeira pode possuir</p><p>valor nulo.</p><p>É importante ressaltar que em um modelo relacional estas regras de integridade são garantidas pelo</p><p>gerenciador de banco de dados de forma automática, sem a necessidade de se tratar estas regras no</p><p>código da aplicação. Ou seja, o programador não precisa programar validações no sistema para garantir</p><p>que estas regras sejam atendidas pois o próprio gerenciador</p><p>de banco de dados cuida disso.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 73</p><p>Integridade de Domínio - restringe o conjunto de valores que podem ser gravados em uma coluna de</p><p>uma tabela. Desta forma, somente os valores que pertencem ao domínio podem ser gravados na coluna</p><p>da tabela. Outros valores não são permitidos e a atualização é desfeita pelo gerenciador de banco de</p><p>dados. O domínio define um conjunto de valores. Quando este domínio é associado a uma coluna de uma</p><p>tabela, somente os valores definidos para o domínio podem ser gravados na coluna. Este tipo de restrição</p><p>garante a qualidade de dados na base de dados.</p><p>Características do Modelo Relacional</p><p>- Uma tabela deve ser acessível por qualquer coluna, mesmo que não tenha sido definida como chave;</p><p>- O relacionamento entre duas tabelas não existe fisicamente, pois o relacionamento é lógico e</p><p>representado através de chaves estrangeiras;</p><p>- Uso de linguagens não-procedurais e autocontidas; (SQL);</p><p>- Um otimizador de consultas para definição do melhor plano de acesso aos dados.</p><p>Regras para Derivação do Modelo Conceitual para o Modelo Relacional</p><p>Nesta etapa é feita a transformação das entidades e relacionamentos do modelo E-R para o modelo</p><p>relacional, no qual os dados são representados por tabelas. Para tanto, foram definidas regras para esta</p><p>transformação de forma a atender às características do modelo relacional.</p><p>Estas regras garantem que o modelo relacional estará adequado, alinhado com o modelo conceitual e</p><p>sem inconsistências. O resultado desta etapa é um diagrama de tabelas, contendo as tabelas, chaves</p><p>primárias, chaves estrangeiras e restrições de integridade, formando assim o modelo lógico que servirá</p><p>de base para o projeto físico do Banco de Dados.</p><p>Mapeamento das Entidades: toda entidade torna-se uma tabela levando todos os atributos definidos</p><p>na entidade que tornam-se colunas na tabela criada. O identificador da entidade torna-se a chave primária</p><p>da tabela que não permitirá repetição de valores e nem valores nulos.</p><p>Mapeamento de Atributos: os atributos das entidades e dos relacionamentos devem ser gerados de</p><p>forma que minimizem o consumo de espaço de armazenamento e torne mais eficiente a consulta de</p><p>dados. Devem ser consideradas as características do gerenciador de banco de dados que será utilizado</p><p>para implementar o banco de dados físico. Devem ser escolhidos o tipo de dado e tamanho adequados</p><p>para cada coluna criada na tabela.</p><p>Mapeamento de Relacionamentos: o mapeamento dos relacionamentos implica na transformação</p><p>de atributos das entidades em colunas nas tabelas e, em casos específicos, implica também na criação</p><p>de novas tabelas a partir de relacionamentos e entidades associativas. Existem diferentes abordagens</p><p>dependendo da cardinalidade do relacionamento:</p><p>- Relacionamentos que Possuem Atributos: estes relacionamentos se tornam tabelas no caso de</p><p>relacionamentos n:n. No caso de relacionamentos 1:n os atributos do relacionamento são transferidos</p><p>para a tabela que possui cardinalidade n;</p><p>- Relacionamentos São Representados por Chaves Estrangeiras (Foreign Key): todo atributo</p><p>correspondente à chave primária de outra relação, base para a integridade referencial, é definido como</p><p>uma chave estrangeira);</p><p>- Relacionamento 1 para 1 (1:1): uma das entidades envolvidas no relacionamento carrega o atributo</p><p>identificador que deve ser definido com chave estrangeira na tabela criada para a entidade fazendo</p><p>referência à chave primária da tabela criada para a outra entidade. O Critério para escolher qual tabela</p><p>receberá a chave estrangeira depende do negócio que está sendo modelado, sendo necessária análise</p><p>caso a caso. Porém em geral se escolhe a tabela onde faz mais sentido colocar o atributo, entidade mais</p><p>importante para o negócio.</p><p>- Relacionamento 1 para Muitos (1:N): a entidade cuja cardinalidade é N recebe o atributo</p><p>identificador da entidade com cardinalidade 1 que será mapeado como uma chave estrangeira na tabela</p><p>criada para a entidade com cardinalidade N. Além disso, recebe os atributos do relacionamento se houve.</p><p>Caso seja a entidade com cardinalidade N seja uma entidade fraca, então ela recebe o atributo</p><p>identificador da entidade com cardinalidade 1 que deve ser mapeado de forma a compor a chave primária</p><p>da tabela criada para a entidade com cardinalidade N, como forma de manter a dependência funcional</p><p>em relação à entidade com cardinalidade 1.</p><p>- Relacionamento Muitos para Muitos (M:N): deve ser criada uma tabela que recebe os atributos</p><p>identificadores das entidades que participam do relacionamento, sendo criada a chave primária composta</p><p>pelas colunas derivadas dos atributos identificadores. Além disso, a tabela recebe todos os atributos do</p><p>relacionamento, se existirem. Este é o único caso em que um relacionamento se torna uma tabela, em</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 74</p><p>todos os demais casos, são criadas chaves estrangeiras nas tabelas a fim de estabelecer os</p><p>relacionamentos.</p><p>- Relacionamentos Múltiplos (Ternário, Quaternário, etc.): deve ser criada uma tabela que recebe</p><p>tantos atributos identificadores quantas foram as entidades que participam do relacionamento. A chave</p><p>primária desta tabela é composta por todos os atributos identificadores. É o caso de relacionamentos</p><p>ternário, quaternários, etc.</p><p>- Relacionamento Auto-relacionamento: incluir a chave primária da entidade na própria entidade</p><p>como chave estrangeira, gerando uma estrutura de acesso a partir dessa chave.</p><p>Mapeamento de Generalização/Especialização: deve ser criada uma tabela para a entidade pai e</p><p>uma tabela para cada entidade filha. Os atributos comuns às entidades filhas devem ser mapeados na</p><p>tabela criada para a entidade pai. As tabelas criadas para cada entidade filha devem receber o atributo</p><p>identificador da entidade pai na composição da chave primária e receber também os atributos específicos</p><p>da entidade filha correspondente. A entidade pai e a entidade filha também podem ser mapeadas para</p><p>uma única tabela.</p><p>Mapeamento de Agregações: normalmente gera uma nova tabela que representa a agregação. Esta</p><p>tabela normalmente faz relacionamento com uma tabela associativa;</p><p>O Modelo Relacional15</p><p>No modelo relacional a principal construção para representação dos dados é a relação, uma tabela</p><p>com linhas não ordenadas e colunas. Uma relação consiste de um esquema e de uma instância. O</p><p>esquema especifica o nome da relação e o nome e o domínio de cada coluna, também denominada</p><p>atributo ou campo da relação. O domínio do atributo é referenciado no esquema por seu nome e serve</p><p>para restringir os valores que este atributo pode assumir. O esquema de uma relação é invariável ao</p><p>longo do tempo, sendo modificado apenas por comandos específicos. Um exemplo de esquema de</p><p>relação é:</p><p>Students (sid: string, name: string, login: string, age: integer, gpa: real)</p><p>Neste caso está sendo definida a relação de nome Students, com atributos sid, name, login, age e gpa,</p><p>cujos domínios são respectivamente string, string, string, integer e real.</p><p>A instância de uma relação é o conjunto de linhas, também denominadas tuplas ou registros, distintas</p><p>entre si, que compõem a relação em um dado momento. Ela é variável, já que o número de tuplas e o</p><p>conteúdo de seus atributos podem variar ao longo do tempo. A instância de uma relação deve seguir</p><p>sempre o seu respectivo esquema, respeitando o número de atributos definidos, bem como os seus</p><p>domínios. Esta restrição, denominada restrição de domínio, é muito importante. O modelo relacional</p><p>somente considera relações que satisfaçam esta restrição. Um exemplo de uma instância para o esquema</p><p>Students é ilustrado na Figura 1.</p><p>Sid Name Login age gpa</p><p>53666 Jones jones@cs 18 3.4</p><p>53688 Smith smith@eecs 18 3.2</p><p>53650 Smith smith@math 19 3.8</p><p>Figura 1 – Exemplo de instância da relação Students.</p><p>O número de tuplas (cada linha formada por uma lista ordenada de colunas)</p><p>que uma dada instância</p><p>possui denomina-se cardinalidade da relação e o número de atributos é o seu grau. A instância de relação</p><p>da Figura 1 tem cardinalidade 3 e grau 5. Note que a cardinalidade é variável, mas o grau não.</p><p>Um banco de dados relacional é um conjunto de uma ou mais relações com nomes distintos. O</p><p>esquema do banco de dados relacional é a coleção dos esquemas de cada relação que compõe o banco</p><p>de dados.</p><p>15 Fonte: www.ic.unicamp.br/~geovane/mo410-091/</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 75</p><p>Criando e Modificando Relações em SQL</p><p>A linguagem SQL padrão usa a palavra TABLE para referenciar uma relação. Um subconjunto desta</p><p>linguagem forma a Linguagem de Definição de Dados (DDL) que compreende comandos básicos para a</p><p>criação, a remoção e a modificação de relações.</p><p>A criação de relações em SQL é feita usando-se o comando CREATE TABLE, com a especificação do</p><p>respectivo esquema. Por exemplo, para criar a relação Students citada anteriormente tem-se:</p><p>CREATE TABLE Students (sid: CHAR(20), name: CHAR(20), login: CHAR(10), age: INTEGER, gpa:</p><p>REAL)</p><p>Observe que com a execução deste comando está sendo criada apenas a relação, sem que sejam</p><p>atribuídos quaisquer valores aos seus atributos.</p><p>Para a remoção de uma relação do banco de dados usa-se o comando DROP TABLE. Assim, para</p><p>remover a mesma relação Students tem-se:</p><p>DROP TABLE Students</p><p>Este comando remove a relação especificada, removendo a informação sobre o seu esquema e</p><p>também as tuplas da instância atual.</p><p>O comando ALTER TABLE é usado para alteração do esquema de uma relação. Ainda considerando</p><p>a relação Students para alterar o seu esquema com a adição de um novo campo firstYear cujo domínio é</p><p>inteiro usa-se o comando:</p><p>ALTER TABLE Students ADD COLUMN firstYear: integer;</p><p>A execução deste comando faz com que o esquema da relação seja alterado e com que para cada</p><p>tupla da instância corrente seja criado um novo atributo de nome firstYear, atribuindo a ele o valor null.</p><p>Um outro subconjunto da linguagem SQL forma a Linguagem de Manipulação de Dados (DDL), que</p><p>compreende comandos básicos para a modificação e a recuperação de dados.</p><p>O comando INSERT INTO é usado para adicionar novas tuplas a uma relação.</p><p>Por exemplo, para inserir uma tupla na relação Students, tem-se:</p><p>INSERT INTO Students (sid, name, login, age, gpa) VALUES (53688, ‘Smith’, ‘smith@ee’, 18, 3.2)</p><p>Os valores descritos por VALUES, correspondem ao valor que cada atributo terá na nova tupla.</p><p>As tuplas de uma relação são removidas por meio do comando DELETE FROM. Pode-se remover</p><p>todas as tuplas de uma relação ou apenas aquelas que satisfaçam uma dada condição. Para remover as</p><p>tuplas de estudantes cujo nome (name) é Smith na relação Students executa-se o comando:</p><p>DELETE FROM Students S WHERE S.name = ‘Smith’</p><p>A alteração do valor de atributos que compõem as tuplas é feita usando-se o comando UPDATE</p><p>FROM. De forma semelhante ao comando DELETE FROM, podese modificar uma tupla específica ou</p><p>várias delas por meio de um único comando. Por exemplo:</p><p>UPDATE FROM Students S</p><p>SET S.age = S.age + 1, S.gpa = S.gpa – 1</p><p>WHERE S.sid = 53688</p><p>Este comando altera apenas a tupla da relação Students cujo atributo sid tenha valor igual a 53688.</p><p>Já o comando a seguir altera todas as tuplas cujo atributo gpa tenha valor maior ou igual a 3.2.</p><p>UPDATE FROM Students S SET S.gpa = S.gpa + 0.5 WHERE S.gpa >= 3.2</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 76</p><p>Restrições de Integridade sobre Relações</p><p>Um bom SGBD deve evitar a entrada de informação incorreta ou inconsistente em sua base de dados,</p><p>garantindo, com isso, a qualidade da informação inserida. Uma restrição de integridade (RI) é uma</p><p>condição especificada no esquema da base de dados para restringir a informação a ser armazenada. Ou</p><p>seja, a RI é uma condição definida que deve ser verdadeira para qualquer instância da base de dados.</p><p>Se uma instância da base de dados satisfaz todas as RIs especificadas, então ela é uma instância válida.</p><p>Um bom SGBD garante as RIs, não permitindo a existência de instâncias inválidas.</p><p>As RI são especificadas e conferidas em 2 momentos diferentes:</p><p>Especificação da RI: se dá na definição do esquema da base de dados pelo usuário ou pelo</p><p>administrador da base de dados (DBA);</p><p>Conferência das RIs: é feita pelo banco de dados toda vez que uma relação é modificada por uma</p><p>aplicação sendo executada.</p><p>O modelo relacional permite a especificação de vários tipos de RIs. Um deles é a restrição de domínio</p><p>citada anteriormente. Outros tipos serão vistos a seguir.</p><p>Restrições de Chaves</p><p>A restrição de chave serve para garantir que as tuplas de uma relação sejam únicas. Para isso,</p><p>identifica um conjunto mínimo de atributos que devem ter valores diferentes em todas as tuplas de uma</p><p>instância da relação. Este conjunto de atributos denomina-se chave candidata da relação e deve</p><p>satisfazer os seguintes requisitos:</p><p>- Não podem existir duas tuplas diferentes com os mesmos valores para estes atributos, ou seja, a</p><p>chave identifica unicamente qualquer tupla da relação válida;</p><p>- Ao retirar-se qualquer atributo componente da chave, ela deixa de identificar unicamente as tuplas.</p><p>Se o segundo requisito for violado, então a chave candidata é uma super-chave. Por exemplo temos</p><p>que sid é uma chave para a relação Student, pois identifica cada estudantes. Já o conjunto {sid, gpa} é</p><p>uma super-chave da relação, pois ao retirar-se o atributo gpa, o atributo sid continua identificando</p><p>unicamente as tuplas. O conjunto de todos os atributos de uma relação formam sempre uma super-chave</p><p>desta relação.</p><p>Pela definição de relação, é sempre garantida a existência de uma chave. Entretanto, cada relação</p><p>pode conter várias chaves candidatas. Cabe ao DBA escolher dentre elas aquela que será a chave</p><p>primária, a ser usada pelo banco de dados em operações de otimização. A escolha desta chave é muito</p><p>importante e deve ser feita visando garantir a qualidade dos dados. Por exemplo, na relação Students, se</p><p>name fosse escolhido como chave primária, não seria possível a existência de estudantes homônimos, o</p><p>que talvez não refletisse corretamente os requisitos do sistema. A chave primária não pode assumir valor</p><p>null.</p><p>Especificando Restrições de Chaves em SQL</p><p>A especificação de uma chave e de uma chave primária em SQL é feita respectivamente, pelos</p><p>comandos UNIQUE e PRIMARY KEY.</p><p>Na execução do comando a seguir está sendo criada a relação Enrolled, cuja chave primária é</p><p>composta pelos atributos stdid e cid</p><p>CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (stdid,cid)</p><p>)</p><p>Caso fosse desejado que esta mesma relação tivesse uma chave composta pelos atributos cid e grade,</p><p>sendo sid a chave primária da relação, deveria ser executado o comando:</p><p>CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2),</p><p>UNIQUE (cid, grade), CONSTRAINT EnrolledKey PRIMARY KEY (cid) )</p><p>O uso de CONSTRAINT no comando serve para nomear uma restrição, facilitando sua identificação</p><p>para impressão de mensagens de erro numa eventual ocorrência de violação.</p><p>Note que neste segundo exemplo cada estudante pode cursar apenas um curso e receber uma única</p><p>nota para este curso. E ainda que dois estudantes de um mesmo curso não recebem a mesma nota.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 77</p><p>Percebe-se, então, que quando usada de forma displicente, uma restrição de integridade pode impedir o</p><p>armazenamento de instâncias de base de dados que surgem na prática.</p><p>Restrições de Chave Estrangeira</p><p>No modelo relacional é comum que a informação de uma relação esteja ligada à informação de outra</p><p>relação. Se uma delas é modificada a outra também deve ser checada e modificada, se for o caso, de</p><p>maneira a garantir a consistência da informação. Para que o banco de dados</p><p>possa fazer esta checagem,</p><p>é especificada uma restrição envolvendo ambas as relações. Esta restrição denomina-se restrição de</p><p>chave estrangeira.</p><p>A chave estrangeira é um conjunto de atributos de uma relação que é usado para fazer referência a</p><p>uma tupla de outra relação, correspondendo à chave primária da relação referenciada. A chave</p><p>estrangeira deve conter o mesmo número de atributos da chave primária da outra relação, e seus</p><p>respectivos domínios, mas não necessariamente os mesmos nomes. Além disso, diferente da chave</p><p>primária, pode assumir valor null. Por fim pode referenciar a relação que a contém, se necessário.</p><p>Considerando a relação Enrolled apresentada anteriormente, queremos garantir que apenas</p><p>estudantes com registro válido (sid) podem ser matriculados nos cursos. Para isso, cria-se uma chave</p><p>estrangeira em Enrolled que corresponde à chave primária da relação Students, conforme ilustra a Figura</p><p>2:</p><p>Figura 2 – Exemplo de chave estrangeira.</p><p>Neste caso, se a aplicação tentar inserir em Enrolled uma tupla de um estudante de stdid 53673, o</p><p>sistema de banco de dados irá rejeitar a operação, pois não existe um estudante em Students com este</p><p>sid. Da mesma forma, ao tentar excluir de Students o estudante com sid 53650, o sistema não deve</p><p>permitir a exclusão, pois ele está sendo referenciado por Enrolled. Uma outra ação possível para este</p><p>caso seria a exclusão de todas as tuplas de Enrolled que façam referência a este estudante.</p><p>Se todas as restrições de chave estrangeiras definidas no banco de dados são garantidas, a sua</p><p>integridade referencial é alcançada, ou seja, garante-se que não há referências pendentes.</p><p>Especificando Restrições de Chave Estrangeira em SQL</p><p>O comando FOREIGN KEY identifica a chave estrangeira na criação da relação. Assim, para definir</p><p>esta restrição para o exemplo da Figura 2 usa-se o comando:</p><p>CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2),</p><p>PRIMARY KEY (stdid,cid) , FOREIGN KEY (stdid) REFERENCES Students )</p><p>Com este comando garante-se que somente estudantes registrados em Students possam ser</p><p>matriculados em cursos. Outra restrição colocada por este comando, por meio da chave primária, é que</p><p>cada estudante pode ter apenas uma nota por curso.</p><p>Restrições Gerais</p><p>Restrições de domínio, de chave primária e de chave estrangeiras são consideradas como parte</p><p>fundamental do modelo de dados relacional. Entretanto, elas não são suficientes para especificar outras</p><p>restrições mais genéricas, como, por exemplo, a definição de intervalos de valores para determinados</p><p>atributos.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 78</p><p>Para estes outros casos são usadas restrições de tabelas e de assertivas. As restrições de tabelas são</p><p>associadas a um única tabela e são checadas sempre que a tabela é alterada. Já as restrições de</p><p>assertivas são associadas a várias tabelas e são checadas sempre que uma destas tabelas é modificada.</p><p>Garantindo as Restrições de Integridade</p><p>Como já visto anteriormente, as RIs são especificadas quando uma relação é criada e são checadas</p><p>sempre que uma relação é modificada. O impacto de RIs de domínio, de chave primária e de chave</p><p>estrangeiras é direto. Ou seja, sempre que um comando de inserção, exclusão ou atualização causa uma</p><p>violação de RI, ele é rejeitado.</p><p>Considerando as relações Students e Enrolled já definidas, sendo stdid uma chave estrangeira em</p><p>Enrolled que faz referência a Students. O que deveria ser feito se uma tupla de Enrolled com um id de</p><p>estudante não existente fosse inserida? Ou então uma tupla de Students com sid nulo (null)? O sistema</p><p>deveria apenas rejeitá-las. Mas o que deveria ser feito se uma tupla de Student referenciada por Enrolled</p><p>fosse removida? Neste caso com certeza o sistema estaria violando as restrições de integridade</p><p>referencial. Para evitar isso, a linguagem SQL provê alternativas de tratamento para estas violações. São</p><p>elas:</p><p>- Rejeitar a remoção da tupla de Students que é referenciada por Enrolled;</p><p>- Remover também todas as tuplas de Enrolled que referenciam a tupla de Students a ser removida;</p><p>- Atribuir um valor padrão válido ao stdid das tuplas de Enrolled que referenciam a tupla de Students a</p><p>ser removida;</p><p>- Atribuir o valor null ao stdid das tuplas de Enrolled que referenciam a tupla de Students removida,</p><p>denotando ‘desconhecido’ ou ‘não aplicável’; entretanto, como neste exemplo stdid é parte da chave</p><p>primária de Enrolled , esta alternativa estaria violando a RI de chave primária e portanto não poderia ser</p><p>aplicada.</p><p>Estas opções são válidas também para o caso de atualizações na relação Students.</p><p>Os comandos em SQL para implementar estas ações são:</p><p>NO ACTION, que é a opção padrão e que rejeita a operação sendo executada;</p><p>CASCADE, que remove a tupla da relação referenciada e todas as tuplas que fazem referência à ela;</p><p>SET NULL / SET DEFAULT , que atribui um valor à chave estrangeira da tupla referenciada.</p><p>A seleção da alternativa a ser utilizada é feita no momento da especificação da RI. Para o exemplo</p><p>utilizado, supondo-se que no caso de exclusão seja escolhida a segunda alternativa e no caso de</p><p>atualização a primeira delas, a criação da tabela Enrolled se daria pelo comando:</p><p>CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2),</p><p>PRIMARY KEY (stdid,cid), FOREIGN</p><p>KEY (stdid) R EFERENCES Students</p><p>ON DELETE CASCADE ON UPDATE NO ACTION)</p><p>Transações e Restrições</p><p>Uma transação é um programa que é executado pelo banco de dados e que pode conter vários</p><p>comandos de acesso à base de dados, como consultas, inserções, atualizações, etc. Caso um destes</p><p>comandos da transação viole algumas das restrições de integridade especificadas o tratamento padrão é</p><p>rejeitar a sua execução. Entretanto, esta abordagem algumas vezes pode ser muito inflexível, devendo</p><p>ser dado outro tratamento à situação.</p><p>Um exemplo seria, considerando as relações Enrolled e Students, a situação em que para o estudante</p><p>ser registrado, ou seja, ter seu id, ele deve estar matriculado em um curso. Entretanto, para o curso existir,</p><p>deve haver pelo menos um estudante matriculado. Percebe-se pelas restrições existentes neste caso,</p><p>que ao tentar-se inserir a primeira tupla de qualquer das relações, ocorrerá violação e, portanto, as</p><p>operações não serão completadas. A única maneira de conseguir realizar a primeira inserção em alguma</p><p>delas seria postergando a checagem da restrição, que normalmente ocorreria ao final da execução do</p><p>comando INSERT.</p><p>A linguagem SQL permite então que a checagem de uma restrição possa ser feita em modo imediato</p><p>(IMMEDIATE) ou postergado (DEFERRED). Para isso usa-se o comando SET, indicando a restrição e o</p><p>seu modo. Por exemplo o comando SET CONSTRAINT EnrolledKey DEFERRED, faz com que a restrição</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 79</p><p>de nome EnrolledKey definida anteriormente seja checada somente no momento de efetivação (commit )</p><p>da transação.</p><p>Consultando Dados Relacionais</p><p>Uma consulta em uma base de dados relacionais, normalmente referenciada como query, é uma</p><p>questão sobre os dados da base, cuja resposta consiste em uma nova relação que contém o resultado</p><p>na forma de tuplas. Por exemplo, usando as relações Students e Enrolled, pode-se querer saber quantos</p><p>estudantes são maiores de 18 anos ou quantos estudantes estão matriculados em um determinado curso.</p><p>O comando em SQL usado para realização de consultas é o SELECT. Para encontrar todos os</p><p>estudantes com 18 anos na instância de relação da Figura 1, executasse o comando SELECT * FROM</p><p>Students S WHERE S.age=18. A relação resposta é apresentada na Figura 3:</p><p>Sid Name Login age gpa</p><p>53666 Jones jones@cs 18 3.4</p><p>53688 Smith smith@eecs 18 3.2</p><p>Figura 3 – Relação resultante de uma consulta.</p><p>O símbolo ‘*’ na consulta indica que a relação resultante deve conter todos os atributos existentes na</p><p>relação consultada. Caso fosse desejado obter apenas</p><p>de computador.</p><p>Exemplo: Geradores de relatórios, preenchimento de formulários, Excel, Linguagens SQL.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 7</p><p>Quinta Geração: Linguagens de Conhecimento</p><p>São utilizadas principalmente na área de inteligência artificial, a partir desse geração é possível que</p><p>os softwares autocriem bases de conhecimento obtidas a partir de especialistas.</p><p>Compilação de Programas</p><p>Tradutores</p><p>São programas que traduzem o código fonte criado em uma linguagem de programação para um</p><p>programa objeto equivalente escrito em outra linguagem (denominada linguagem objeto).</p><p>Compiladores – Convertem programas escritos em linguagem de alto nível (linguagens de</p><p>programação) para programas equivalentes em linguagem simbólica ou de máquina, normalmente este</p><p>é um arquivo executável.</p><p>Interpretadores – São programas de computador que fazem a leitura de um código fonte de uma</p><p>linguagem de programação interpretada e o converte em código executável. Em certos casos, o</p><p>interpretador lê linha-por-linha e converte em código objeto (ou bytecode) à medida que vai executando</p><p>o programa e, em outros casos, converte o código fonte por inteiro e depois o executa. Uma</p><p>particularidade do interpretador é que ele trabalha utilizando uma máquina virtual(MV).</p><p>Estrutura de Dados</p><p>São utilizados para manipulação e organização de dados. A organização e os métodos para manipular</p><p>essa estrutura possibilitam a diminuição do espaço ocupado pela memória RAM, além de tornar o código-</p><p>fonte do programa mais simplificado.</p><p>Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de</p><p>novos elementos estas organizações são feitas através de pilhas e filas.</p><p>As filas e pilhas são estruturas usualmente implementadas através de listas, restringindo a política de</p><p>manipulação dos elementos da lista.</p><p>Uma fila estabelece uma política chamada FIFO -- first in, first out (primeiro a entrar e primeiro a sair).</p><p>Em outras palavras, a ordem estabelecida na lista é a ordem de inserção. No momento de retirar um nó</p><p>da lista, o nó mais antigo (o primeiro que entrou) é o primeiro a ser retirado.</p><p>Orientação a Objetos</p><p>A orientação a objetos (O.O.) é um padrão de desenvolvimento de software utilizado em varias</p><p>linguagens de programação como por exemplo C, Java, PHP, etc. voltada a utiliza estes métodos para</p><p>diminuir a diferença semântica entre a realidade e o modelo Para entendermos o funcionamento da O.O.</p><p>é necessário conhecermos as bases que sustentam essas técnicas, a seguir vejamos algumas</p><p>característica:</p><p>Classe é algo generalizado, ou seja, uma classe define o comportamento dos objetos através de seus</p><p>métodos (ações de uma classe), Exemplo de classe: Cliente.</p><p>Uma classe é dividida um três partes, nome, atributos e métodos.</p><p>Vejamos um exemplo de ilustração de uma classe na UML:</p><p>Subclasse é uma nova classe que herda características (atributos e/ou métodos) de sua classe pai.</p><p>Objeto – É algo do mundo real, que proporciona vida a classe, enquanto Aluno é uma Classe Luís</p><p>Alexandre é um Objeto dessa classe.</p><p>Método definem as habilidades dos objetos. Bidu é uma instância da classe Cachorro, portanto tem</p><p>habilidade para latir, implementada através do método de um latido. Um método em uma classe é apenas</p><p>uma definição. A ação só ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro do</p><p>programa, a utilização de um método deve afetar apenas um objeto em particular; Todos os cachorros</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 8</p><p>podem latir, mas você quer que apenas Bidu dê o latido. Normalmente, uma classe possui diversos</p><p>métodos, que no caso da classe Cachorro poderiam ser sente, coma e morda.</p><p>Herança (ou generalização) é o mecanismo pelo qual uma classe (sub-classe) pode estender outra</p><p>classe (super-classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos).</p><p>Um exemplo de herança: Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero. Há</p><p>herança múltipla quando uma sub-classe possui mais de uma super-classe. Essa relação é normalmente</p><p>chamada de relação "é um".</p><p>Polimorfismo consiste em quatro propriedades que a linguagem pode ter (atente para o fato de que</p><p>nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):</p><p>Universal:Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma classe filha</p><p>(exemplo em Java: "List lista = new LinkedList();" (tipo de polimorfismo mais básico que existe)</p><p>Paramétrico: se restringe ao uso de templates (C++, por exemplo) e generics (Java/C♯)</p><p>Ad-Hoc: Sobrecarga: duas funções/métodos com o mesmo nome mas assinaturas diferentes</p><p>Coerção: a linguagem que faz as conversões implicitamente (como por exemplo atribuir um int a um</p><p>float em C++, isto é aceito mesmo sendo tipos diferentes pois a conversão é feita implicitamente)</p><p>Princípios de Resolução de Problemas2</p><p>Primeiramente, é importante entender e compreender a palavra "problema". Pode-se dizer que</p><p>problema é uma proposta duvidosa, que pode ter numerosas soluções, ou questão não solvida e que é</p><p>objeto de discussão, segundo definição encontrada no dicionário Aurélio.</p><p>Do ponto de vista desta obra, problema é uma questão que foge a uma determinada regra, ou melhor,</p><p>é o desvio de um percurso, o qual impede de atingir um determinado objetivo com eficiência e eficácia.</p><p>Diferentes das diagramações clássicas, que não fornecem grandes subsídios para análise, os</p><p>diagramas de blocos são realmente o melhor instrumento para avaliação do problema do fluxo de</p><p>informações de um dado sistema. Por esse motivo deve- -se resolver um problema de lógica</p><p>(principalmente se for da área de processamento eletrônico de dados) usando um procedimento de</p><p>desenvolvimento.</p><p>Para desenvolver um diagrama correto, deve-se considerar como procedimentos prioritários os itens</p><p>seguintes:</p><p>- Os diagramas devem ser feitos e quebrados em vários níveis. Os primeiros devem conter apenas as</p><p>idéias gerais, deixando para as etapas posteriores os detalhamentos necessários;</p><p>- Para o desenvolvimento correto de um fluxograma, sempre que possível, deve ser desenvolvido de</p><p>cima para baixo e da esquerda para direita;</p><p>- É incorreto e "proibido" ocorrer cruzamento das linhas de fluxo de dados.</p><p>Tome como exemplo uma escola qualquer, cujo cálculo da média é realizado com as quatro notas</p><p>bimestrais que determinam a aprovação ou reprovação dos seus alunos. Considere ainda que o valor da</p><p>média deve ser maior ou igual a 7 para que haja aprovação.</p><p>Diagrama de bloco para o cálculo da média escolar.</p><p>A segunda etapa apresenta um detalhamento no que se refere à entrada e saída, ou seja, deve-se</p><p>entrar com as quatro notas bimestrais para se obter, como resultado, o cálculo da média e assim definir</p><p>a aprovação ou reprovação do aluno. A figura abaixo apresenta o diagrama de blocos com mais detalhes.</p><p>2 Fonte: MANZANO, JA OLIVEIRA, and J. F. Algoritmos. "Lógica para Desenvolvimento de Programação de Computadores." São Paulo: Érica (2000).</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 9</p><p>A terceira etapa consiste em trabalhar o termo "determinar a aprovação". Para ser possível determinar</p><p>algo, é necessário estabelecer uma condição. Assim sendo, uma condição envolve uma decisão a ser</p><p>tomada segundo um determinado resultado. No caso, a média. Desta forma, a condição de aprovação:</p><p>média maior ou igual a 7 (sete), deve ser considerada no algoritmo. Com isso, inclui-se este bloco de</p><p>decisão, como mostra a figura abaixo.</p><p>Muitas vezes é preferível construir o diagrama de blocos trabalhando com variáveis.</p><p>Exemplo da utilização de variáveis.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 10</p><p>Particularidades entre Lógicas</p><p>As representações gráficas de um diagrama de blocos podem ser feitas</p><p>o nome e a senha destes estudantes, o comando</p><p>a ser executado seria o descrito abaixo que produziria o resultado ilustrado na Figura 4.</p><p>SELECT name, login FROM Students S WHERE S.age=18</p><p>Name Login</p><p>Jones jones@cs</p><p>Smith smith@eecs</p><p>Figura 4 – Relação resultante de uma consulta.</p><p>Projeto Lógico da Base de Dados: indo do Modelo ER para o Modelo Relacional</p><p>O Modelo Entidade Relacionamento (MER) é adequado para representar um projeto de banco de</p><p>dados em alto nível. Uma vez pronto o esquema da base de dados em MER, é preciso converter este</p><p>esquema para o esquema de banco de dados a ser usado, geralmente no modelo relacional. Para isso,</p><p>existe um conjunto de regras que direcionam o usuário nesta atividade, tratando, inclusive, restrições que</p><p>não foram cobertas no esquema conceitual.</p><p>Conjuntos Entidade</p><p>Um conjunto entidade (CE) é mapeado no modelo relacional com uma relação. Os atributos desta</p><p>relação serão os mesmos do CE, bem como seus respectivos domínios. Da mesma forma, a chave</p><p>primária também é mantida.</p><p>Como exemplo, considere o CE Employees ilustrado na Figura 5, cujos atributos são ssn, name e lot,</p><p>sendo ssn a chave primária.</p><p>Figura 5 – CE Employess</p><p>O comando SQL para criar a relação correspondente é:</p><p>CREATE TABLE Employees (ssn CHAR(11), name CHAR(20), lot INTEGER, PRIMARY KEY (ssn)).</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 80</p><p>Conjuntos Relacionamento</p><p>O mapeamento de conjuntos relacionamento (CR) para o modelo relacional pode ser feito de duas</p><p>maneiras, abordadas a seguir.</p><p>Conjuntos Relacionamento sem Restrições</p><p>Um conjunto relacionamento (CR) sem restrições é mapeado numa relação de maneira semelhante</p><p>ao conjunto entidade. Entretanto, a chave primária de cada entidade envolvida irá compor os atributos da</p><p>nova relação como chaves estrangeiras, juntamente com os atributos descritivos. A chave primária desta</p><p>relação será composta pelas chaves estrangeiras.</p><p>Figura 6 – CR Works_In</p><p>Para o exemplo do CR Works_In ilustrado na Figura 6, o seguinte comando SQL será usado no</p><p>mapeamento:</p><p>CREATE TABLE Works_In( ssn CHAR(11), did INTEGER, since DATE,</p><p>PRIMARY KEY (ssn, did),</p><p>FOREIGN KEY (ssn) REFERENCES Employees,</p><p>FOREIGN KEY (did) REFERENCES Departments)</p><p>No caso de auto relacionamento a relação a ser criada conterá 2 ocorrências da chave primária da</p><p>entidade envolvida, as quais comporão a chave primária da relação.</p><p>Figura 7 – CR Reports_To</p><p>Assim, o mapeamento do conjunto auto-relacionamento Reports_To ilustrado na Figura 7 para o</p><p>modelo relacional é feito pelo comando:</p><p>CREATE TABLE Reports_To(supervisor_ssn CHAR(11), subordinate_ssn CHAR(11) ,</p><p>PRIMARY KEY (supervisor_ssn, subordinate_ssn),</p><p>FOREIGN KEY (supervisor_ssn) REFERENCES Employees (ssn),</p><p>FOREIGN KEY (subordinate_ssn) REFERENCES Departments(ssn))</p><p>Conjuntos Relacionamento com Restrições de Chave</p><p>Existem 2 opções para o mapeamento de CR com restrição de chave para o modelo relacional. A</p><p>primeira delas é semelhante àquela já apresentada, criando uma relação para representar o CR, com</p><p>chaves estrangeiras para as relações envolvidas. Esta abordagem nem sempre é interessante, pois faz</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 81</p><p>com que seja necessária a combinação de relações para responder às consultas do usuário, podendo se</p><p>tornar uma atividade lenta.</p><p>A segunda opção é embutir o CR em qualquer das relações referentes às entidades envolvidas,</p><p>usando uma chave estrangeira para referenciar a outra entidade. Os atributos descritivos também passam</p><p>a integrar a relação que recebeu o CR. Esta solução é mais vantajosa por permitir a obtenção mais rápida</p><p>de uma resposta. A única ressalva é que podem ocorrer tuplas nas quais os atributos referentes ao CR</p><p>estejam vazios.</p><p>Figura 8 – CR Manages.</p><p>Considerando a segunda opção, o mapeamento do CR Manages da Figura 8 para o modelo relacional</p><p>é feito pelo comando:</p><p>CREATE TABLE Dept_Mgr(did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11), since</p><p>DATE,</p><p>PRIMARY KEY (did),</p><p>FOREIGN KEY (ssn) REFERENCES Employees))</p><p>Esta abordagem pode ser aplicada a CR que envolvam mais de 2 CE. Em geral, se o CR envolve N</p><p>CE e algumas delas tem restrição de chave, o CR pode ser embutido nesta CE.</p><p>Conjuntos Relacionamento com Restrições de Participação</p><p>A abordagem é a mesma que no caso anterior, mas com algumas particularidades. Considerando que</p><p>no exemplo da Figura 8 existisse uma restrição de participação relacionada ao gerente: todo</p><p>departamento tem de ter sempre um gerente. O comando a ser utilizado seria:</p><p>CREATE TABLE Dept_Mgr(did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11) NOT</p><p>NULL, since DATE,</p><p>PRIMARY KEY (did),</p><p>FOREIGN KEY (ssn) REFERENCES Employees ON DELETE NO ACTION)</p><p>Neste caso a restrição de participação é garantida pelo NOT NULL usado no atributo ssn indicando</p><p>que ele não pode assumir valores null. Ou seja, que ele tem sempre um valor associado. Já o comando</p><p>NO ACTION, que é padrão, garante que o empregado não pode ser excluído da relação de empregados,</p><p>se ele estiver como gerente do departamento.</p><p>Conjuntos de Entidades Fracas</p><p>O conjunto de entidades fracas tem sempre participação binária do tipo 1:N, bem como uma restrição</p><p>de chave e uma de participação total. Levando-se isso em conta, a abordagem utilizada nos casos</p><p>anteriores é ideal. Entretanto, por se tratar de uma entidade dependente de outra, tem chave do tipo</p><p>parcial.</p><p>Figura 9 – Conjunto Entidade Fraca.</p><p>Para o exemplo de conjunto entidade fraca ilustrado na Figura 9 o mapeamento para o modelo</p><p>relacional seria feito por meio do comando:</p><p>CREATE TABLE Dept_Policy(pname CHAR(20), age INTEGER, cost REAL, ssn CHAR(11),</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 82</p><p>PRIMARY KEY (pname, ssn),</p><p>FOREIGN KEY (ssn) REFERENCES Employees ON DELETE CASCADE)</p><p>Note que neste caso, a chave da relação passou a ser composta pela chave primária da entidade fraca</p><p>(pname) e pela chave primária da relação que a contém (ssn, em Employees), sendo esta última também</p><p>uma chave estrangeira. O comando CASCADE, garante que se o empregado for excluído da relação</p><p>Employees, todos os seus dependentes também o serão.</p><p>Traduzindo Hierarquias de Classe</p><p>Semelhante ao que ocorre com os CR, existem 2 abordagens para tratar as hierarquias ISA. Na</p><p>primeira delas, deve ser criada, além da relação referente à super entidade, uma relação para cada</p><p>especialização do CE, mantendo seus atributos e acrescentando uma chave estrangeira que referencia</p><p>a super entidade. A chave estrangeira desta relação é também a sua chave primária. Caso a relação</p><p>correspondente à super entidade seja removida, as relações das entidades especializadas também</p><p>devem ser removidas, usando para isso o comando CASCADE.</p><p>A segunda abordagem sugere criar uma relação para cada especialização do CE, mas não para a</p><p>super entidade. Neste caso cada relação criada conterá, além dos seus atributos, os atributos da super</p><p>entidade.</p><p>A primeira abordagem é mais genérica e também a mais usada. Sua principal vantagem é permitir que</p><p>a relação referente à super classe seja utilizada independente das relações referentes às entidades</p><p>especializadas. Já a segunda abordagem obriga que a informação seja sempre obtida a partir de uma</p><p>das entidades especializadas, não permitindo a existência da super classe.</p><p>Traduzindo Diagramas ER com Agregação</p><p>Neste casos o mapeamento é simples e semelhante àqueles discutidos anteriormente: o CR da</p><p>agregação é traduzido em uma nova relação, sendo sua chave primária é composta pela chave primária</p><p>dos CE envolvidos. Da mesma forma, o CR que envolve esta agregação também é traduzido em uma</p><p>nova relação, que terá dentre seus atributos a chave primária da relação que representa a agregação.</p><p>Visões</p><p>A visão é uma tabela cujas linhas não são explicitamente armazenadas na base de dados,</p><p>mas sim</p><p>computadas, quando necessário, a partir de uma definição em termos de tabelas da base de dados,</p><p>denominada tabelas base. O comando em SQL usado para isso é o CREATE VIEW.</p><p>Considere as relações Students e Enrolled discutidas anteriormente. Suponha que exista um interesse</p><p>constante em recuperar o nome e o identificador dos estudantes que tem nota B em algum curso e</p><p>também o identificador deste curso. Uma visão pode ser utilizada neste caso, sem que seja necessária a</p><p>criação de uma tabela para isso. Então para o exemplo descrito poderia ser usado o comando:</p><p>CREATE VIEW B-Students (name, sid, course) AS SELECT S.sname, S.sid, E.cid FROM Students S,</p><p>Enrolled E WHERE S.sid = E.sid AND E.grade = 'B'</p><p>A visão definida neste caso é composta por 3 campos (name, sid e course) cujos domínios</p><p>correspondem aos mesmos das relações Students (name e sid) e Enrolled (course).</p><p>Visões, Independência de Dados e Segurança</p><p>O mecanismo de visões provê uma independência lógica dos dados no modelo relacional. Ela pode</p><p>ser usada para definir relações em um esquema externo que mascare mudanças ocorridas no esquema</p><p>conceitual da base de dados das aplicações. Por exemplo, se o esquema de uma dada relação for</p><p>alterado, pode ser definida uma visão que represente o esquema antigo, permitindo que aplicações</p><p>continuem executando normalmente sem grandes modificações.</p><p>Visões também são muito úteis no contexto de segurança. Com elas é possível permitir que</p><p>determinados grupos de usuários acessem somente os dados que eles tem permissão para uso. Por</p><p>exemplo, permitir que estudantes vejam apenas o nome e login de outros estudantes, mas não sua senha</p><p>ou sua nota em um curso.</p><p>Atualizações em Visões</p><p>Uma das vantagens do uso de visões é permitir o gerenciamento da apresentação do dados aos</p><p>usuários, sem que eles tenham de se preocupar com a maneira como eles estão fisicamente</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 83</p><p>armazenados na base de dados. Isto normalmente funciona adequadamente, já que a visão pode ser</p><p>usada exatamente como uma relação, permitindo a definição de consultas sobre os dados que a</p><p>compõem. Esta vantagem acaba levando a uma restrição, pois como se também se trata de uma relação,</p><p>é natural o desejo de atualização os seus dados. Entretanto, como a visão é uma tabela virtual, a sua</p><p>atualização deve incidir sobre a tabela base, o que nem sempre é possível, devido a problemas como</p><p>ambiguidade e restrições de integridade.</p><p>Necessidade de Restringir Atualizações de Visões</p><p>É possível atualizar ou inserir uma linha em uma visão. No entanto, nem sempre esta atualização fará</p><p>parte dela. Isto ocorre porque na verdade a execução destes comandos promovem uma atualização ou</p><p>inserção nas tabelas base e dependendo da condição estabelecida na definição da visão, a linha pode</p><p>não ser selecionada para compor a tabela virtual, não refletindo a alteração feita.</p><p>Assim, por questões práticas, a linguagem SQL permite a atualização de visões apenas em casos</p><p>muito específicos, não permitindo, por exemplo, a atualização de colunas calculadas, de visões</p><p>compostas por agregados de linhas ou geradas a partir de junções.</p><p>Destruindo e Alterando Visões</p><p>Uma visão, de maneira semelhante ao que ocorre com as relações, também pode ser removida do</p><p>banco de dados. O comando em SQL utilizado para isso é o DROP VIEW.</p><p>Note que a remoção de uma relação também pode levar à remoção de uma visão caso tenha sido</p><p>usado algum comando que estabeleça esta restrição, como o CASCADE. Já o comando RESTRICT evita</p><p>que uma relação seja excluída quando da existência de uma visão associada a ela.</p><p>Controles de Acesso e Autenticação</p><p>Os controles de acesso, físicos ou lógicos, têm como objetivo proteger equipamentos, aplicativos e</p><p>arquivos de dados contra perda, modificação ou divulgação não autorizada. Os sistemas computacionais,</p><p>bem diferentes de outros tipos de recursos, não podem ser facilmente controlados apenas com</p><p>dispositivos físicos, como cadeados, alarmes ou guardas de segurança.</p><p>O Que São Controles de Acesso Lógico?</p><p>Os controles de acesso lógico são um conjunto de procedimentos e medidas com o objetivo de proteger</p><p>dados, programas e sistemas contra tentativas de acesso não autorizadas feitas por pessoas ou por</p><p>outros programas de computador.</p><p>O controle de acesso lógico pode ser encarado de duas formas diferentes: a partir do recurso</p><p>computacional que se quer proteger e a partir do usuário a quem serão concedidos certos privilégios e</p><p>acessos aos recursos.</p><p>A proteção aos recursos computacionais baseia-se nas necessidades de acesso de cada usuário,</p><p>enquanto que a identificação e autenticação do usuário (confirmação de que o usuário realmente é quem</p><p>ele diz ser) é feita normalmente por meio de um identificador de usuário (ID) e por uma senha durante o</p><p>processo de logon no sistema.</p><p>Que Recursos Devem Ser Protegidos?</p><p>A proteção aos recursos computacionais inclui desde aplicativos e arquivos de dados até utilitários e</p><p>o próprio sistema operacional. Abaixo serão apresentados os motivos pelos quais esses recursos devem</p><p>ser protegidos.</p><p>Aplicativos (Programas Fonte e Objeto)</p><p>O acesso não autorizado ao código fonte dos aplicativos pode ser usado para alterar suas funções</p><p>e a lógica do programa. Por exemplo, em um aplicativo bancário, pode-se zerar os centavos de todas as</p><p>contas-correntes e transferir o total dos centavos para uma determinada conta, beneficiando ilegalmente</p><p>esse correntista.</p><p>Arquivos de Dados</p><p>Bases de dados, arquivos ou transações de bancos de dados devem ser protegidos para evitar que os</p><p>dados sejam apagados ou alterados sem autorização, como, por exemplo, arquivos com a configuração</p><p>do sistema, dados da folha de pagamento, dados estratégicos da empresa.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 84</p><p>Utilitários e Sistema Operacional</p><p>O acesso a utilitários, como editores, compiladores, softwares de manutenção, monitoração e</p><p>diagnóstico deve ser restrito, já que essas ferramentas podem ser usadas para alterar aplicativos,</p><p>arquivos de dados e de configuração do sistema operacional, por exemplo.</p><p>O sistema operacional é sempre um alvo bastante visado, pois sua configuração é o ponto-chave de</p><p>todo o esquema de segurança. A fragilidade do sistema operacional compromete a segurança de todo o</p><p>conjunto de aplicativos, utilitários e arquivos.</p><p>Arquivos de Senha</p><p>A falta de proteção adequada aos arquivos que armazenam as senhas pode comprometer todo o</p><p>sistema, pois uma pessoa não autorizada, ao obter identificador (ID) e senha de um usuário privilegiado,</p><p>pode, intencionalmente, causar danos ao sistema. Essa pessoa dificilmente será barrada por qualquer</p><p>controle de segurança instalado, já que se faz passar por um usuário autorizado.</p><p>Arquivos de Log</p><p>Os arquivos de log são usados para registrar ações dos usuários, constituindo-se em ótimas fontes de</p><p>informação para auditorias futuras. Os logs registram quem acessou os recursos computacionais,</p><p>aplicativos, arquivos de dados e utilitários, quando foi feito o acesso e que tipo de operações foram</p><p>efetuadas.</p><p>Um invasor ou usuário não autorizado pode tentar acessar o sistema, apagar ou alterar dados, acessar</p><p>aplicativos, alterar a configuração do sistema operacional para facilitar futuras invasões, e depois alterar</p><p>os arquivos de log para que suas ações não possam ser identificadas. Dessa forma, o administrador do</p><p>sistema não ficará sabendo que houve uma invasão.</p><p>O que os Controles de Acesso Lógico Pretendem Garantir em Relação à Segurança de</p><p>Informações?</p><p>Os controles de acesso lógico são implantados com o objetivo de garantir que:</p><p>- Apenas usuários autorizados tenham acesso aos recursos;</p><p>- Os usuários tenham acesso apenas aos recursos realmente necessários para a execução de suas</p><p>tarefas;</p><p>- O acesso a recursos críticos seja bem monitorado e restrito a poucas pessoas;</p><p>- Os usuários estejam impedidos</p><p>de executar transações incompatíveis com sua função ou além de</p><p>suas responsabilidades.</p><p>O controle de acesso pode ser traduzido, então, em termos de funções de identificação e autenticação</p><p>de usuários; alocação, gerência e monitoramento de privilégios; limitação, monitoramento e desabilitação</p><p>de acessos; e prevenção de acessos não autorizados.</p><p>Como os Usuários São Identificados e Autenticados?</p><p>Os usuários dos sistemas computacionais são identificados e autenticados durante um processo,</p><p>chamado logon. Os processos de logon são usados para conceder acesso aos dados e aplicativos em</p><p>um sistema computacional, e orientam os usuários durante sua identificação e autenticação.</p><p>Normalmente esse processo envolve a entrada de um ID (identificação do usuário) e de uma senha</p><p>(autenticação do usuário). A identificação define para o computador quem é o usuário e a senha é um</p><p>autenticador, isto é, ela prova ao computador que o usuário é realmente quem ele diz ser.</p><p>Como Deve Ser Projetado um Processo de Logon para Ser Considerado Eficiente?</p><p>O procedimento de logon deve divulgar o mínimo de informações sobre o sistema, evitando fornecer</p><p>a um usuário não autorizado informações detalhadas. Um procedimento de logon eficiente deve:</p><p>- Informar que o computador só deve ser acessado por pessoas autorizadas;</p><p>- Evitar identificar o sistema ou suas aplicações até que o processo de logon esteja completamente</p><p>concluído;</p><p>- Durante o processo de logon, evitar o fornecimento de mensagens de ajuda que poderiam auxiliar</p><p>um usuário não autorizado a completar esse procedimento;</p><p>- Validar a informação de logon apenas quando todos os dados de entrada estiverem completos. Caso</p><p>ocorra algum erro, o sistema não deve indicar qual parte do dado de entrada está correta ou incorreta,</p><p>como, por exemplo, ID ou senha;</p><p>- Limitar o número de tentativas de logon sem sucesso (é recomendado um máximo de três tentativas),</p><p>e ainda:</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 85</p><p>a) registrar as tentativas de acesso inválidas;</p><p>b) forçar um tempo de espera antes de permitir novas tentativas de entrada no sistema ou rejeitar</p><p>qualquer tentativa posterior de acesso sem autorização específica;</p><p>c) encerrar as conexões com o computador.</p><p>- Limitar o tempo máximo para o procedimento de logon. Se excedido, o sistema deverá encerrar o</p><p>procedimento;</p><p>- Mostrar as seguintes informações, quando o procedimento de logon no sistema finalizar com êxito:</p><p>a) data e hora do último logon com sucesso;</p><p>b) detalhes de qualquer tentativa de logon sem sucesso, desde o último procedimento realizado com</p><p>sucesso.</p><p>O que é Identificação do Usuário?</p><p>A identificação do usuário, ou ID, deve ser única, isto é, cada usuário deve ter uma identificação</p><p>própria. Todos os usuários autorizados devem ter um ID, quer seja um código de caracteres, cartão</p><p>inteligente ou qualquer outro meio de identificação. Essa unicidade de identificação permite um controle</p><p>das ações praticadas pelos usuários através dos logs.</p><p>No caso de identificação a partir de caracteres, é comum estabelecer certas regras de composição,</p><p>como, por exemplo, quantidade mínima e máxima de caracteres, misturando letras, números e símbolos.</p><p>O que é Autenticação do Usuário?</p><p>Após a identificação do usuário, deve-se proceder à sua autenticação, isto é, o sistema deve confirmar</p><p>se o usuário é realmente quem ele diz ser. Os sistemas de autenticação são uma combinação de</p><p>hardware, software e de procedimentos que permitem o acesso de usuários aos recursos computacionais.</p><p>Na autenticação, o usuário deve apresentar algo que só ele saiba ou possua, podendo até envolver a</p><p>verificação de características físicas pessoais. A maioria dos sistemas atuais solicita uma senha (algo</p><p>que, supostamente, só o usuário conhece), mas já existem sistemas mais modernos utilizando cartões</p><p>inteligentes (algo que o usuário possui) ou ainda características físicas (algo intrínseco ao usuário), como</p><p>o formato da mão, da retina ou do rosto, impressão digital e reconhecimento de voz.</p><p>Como Orientar os Usuários em Relação às Senhas?</p><p>Para que os controles de senha funcionem, os usuários devem ter pleno conhecimento das políticas</p><p>de senha da organização, e devem ser orientados e estimulados a segui-las fielmente. Todos os usuários</p><p>devem ser solicitados a:</p><p>- Manter a confidencialidade das senhas;</p><p>- Não compartilhar senhas;</p><p>- Evitar registrar as senhas em papel;</p><p>- Selecionar senhas de boa qualidade, evitando o uso de senhas muito curtas ou muito longas, que os</p><p>obriguem a escrevê-las em um pedaço de papel para não serem esquecidas (recomenda-se tamanho</p><p>entre seis e oito caracteres);</p><p>- Alterar a senha sempre que existir qualquer indicação de possível comprometimento do sistema ou</p><p>da própria senha;</p><p>- Alterar a senha em intervalos regulares ou com base no número de acessos (senhas para usuários</p><p>privilegiados devem ser alteradas com maior frequência que senhas normais);</p><p>- Evitar reutilizar as mesmas senhas;</p><p>- Alterar senhas temporárias no primeiro acesso ao sistema;</p><p>- Não incluir senhas em processos automáticos de acesso ao sistema (por exemplo, armazenadas em</p><p>macros).</p><p>Vale lembrar também que utilizar a mesma senha para vários sistemas não é uma boa prática, pois a</p><p>primeira atitude de um invasor, quando descobre a senha de um usuário em um sistema vulnerável, é</p><p>tentar a mesma senha em outros sistemas a que o usuário tem acesso.</p><p>Que Tipos de Senhas Devem ser Evitadas?</p><p>Os usuários devem evitar senhas compostas de elementos facilmente identificáveis por possíveis</p><p>invasores, como por exemplo:</p><p>- Nome do usuário;</p><p>- Identificador do usuário (ID), mesmo que seus caracteres estejam embaralhados;</p><p>- Nome de membros de sua família ou de amigos íntimos;</p><p>- Nomes de pessoas ou lugares em geral;</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 86</p><p>- Nome do sistema operacional ou da máquina que está sendo utilizada;</p><p>- Nomes próprios;</p><p>- Datas;</p><p>- Números de telefone, de cartão de crédito, de carteira de identidade ou de outros documentos</p><p>pessoais;</p><p>- Placas ou marcas de carro;</p><p>- Palavras que constam de dicionários em qualquer idioma;</p><p>- Letras ou números repetidos;</p><p>- letras seguidas do teclado do computador (ASDFG, YUIOP);</p><p>- Objetos ou locais que podem ser vistos a partir da mesa do usuário (nome de um livro na estante,</p><p>nome de uma loja vista pela janela);</p><p>- Qualquer senha com menos de seis caracteres.</p><p>Alguns softwares são capazes de identificar senhas frágeis, como algumas dessas citadas acima, a</p><p>partir de bases de dados de nomes e sequências de caracteres mais comuns, e ainda bloquear a escolha</p><p>destas senhas por parte do usuário. Essas bases de dados normalmente fazem parte do pacote de</p><p>software de segurança, e podem ser atualizadas pelo gerente de segurança com novas inclusões.</p><p>Como Escolher uma Boa Senha?</p><p>Geralmente são consideradas boas senhas aquelas que incluem, em sua composição, letras</p><p>(maiúsculas e minúsculas), números e símbolos embaralhados, totalizando mais de seis caracteres.</p><p>Porém, para ser boa mesmo, a senha tem de ser difícil de ser adivinhada por outra pessoa, mas de fácil</p><p>memorização, para que não seja necessário anotá-la em algum lugar. Também é conveniente escolher</p><p>senhas que possam ser digitadas rapidamente, dificultando que outras pessoas, a uma certa distância ou</p><p>por cima de seus ombros, possam identificar a sequência de caracteres.</p><p>Um método bastante difundido é selecionar uma frase significativa para o usuário e utilizar os primeiros</p><p>caracteres de cada palavra que a compõe, inserindo símbolos entre eles. É também recomendável não</p><p>utilizar a mesma senha para vários sistemas. Se um deles não for devidamente protegido, a senha poderá</p><p>ser descoberta e utilizada nos sistemas que, a priori, estariam seguros. Outro conselho: adquira o hábito</p><p>de trocar sua senha com frequência. Trocá-la a cada sessenta, noventa dias é considerada uma boa</p><p>prática.</p><p>Se você realmente</p><p>não conseguir memorizar sua senha e tiver que escrevê-la em algum pedaço de</p><p>papel, tenha pelo menos o cuidado de não identificá-la como sendo uma senha. Não pregue esse pedaço</p><p>de papel no próprio computador, não guarde a senha junto com a sua identificação de usuário, e nunca</p><p>a envie por e-mail ou a armazene em arquivos do computador.</p><p>Como Deve Ser Feita a Concessão de Senhas aos Usuários?</p><p>A concessão de senhas deve ser feita de maneira formal, considerando os seguintes pontos:</p><p>- Solicitar aos usuários a assinatura de uma declaração, a fim de manter a confidencialidade de sua</p><p>senha pessoal (isso pode estar incluso nos termos e condições do contrato de trabalho do usuário);</p><p>- Garantir, aos usuários, que estão sendo fornecidas senhas iniciais seguras e temporárias, forçando-</p><p>os a alterá-las imediatamente no primeiro logon. O fornecimento de senhas temporárias, nos casos de</p><p>esquecimento por parte dos usuários, deve ser efetuado somente após a identificação positiva do</p><p>respectivo usuário;</p><p>- Fornecer as senhas temporárias aos usuários de forma segura. O uso de terceiros ou de mensagens</p><p>de correio eletrônico desprotegidas (não criptografadas) deve ser evitado.</p><p>O Que a Instituição Pode Fazer para Proteger e Controlar as Senhas de Acesso a Seus</p><p>Sistemas?</p><p>O sistema de controle de senhas deve ser configurado para proteger as senhas armazenadas contra</p><p>uso não autorizado, sem apresentá-las na tela do computador, mantendo-as em arquivos criptografados</p><p>e estipulando datas de expiração (normalmente se recomenda a troca de senhas após 60 ou 90 dias).</p><p>Alguns sistemas, além de criptografar as senhas, ainda guardam essas informações em arquivos</p><p>escondidos que não podem ser vistos por usuários, dificultando, assim, a ação dos hackers.</p><p>Para evitar o uso frequente das mesmas senhas, o sistema de controle de senhas deve manter um</p><p>histórico das últimas senhas utilizadas por cada usuário. Deve-se ressaltar, entretanto, que a troca muito</p><p>frequente de senhas também pode confundir o usuário, que poderá passar a escrever a senha em algum</p><p>lugar visível ou escolher uma senha mais fácil, comprometendo, assim, sua segurança.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 87</p><p>O gerente de segurança deve desabilitar contas inativas, sem senhas ou com senhas padronizadas.</p><p>Até mesmo a senha temporária fornecida ao usuário pela gerência de segurança deve ser gerada de</p><p>forma que já entre expirada no sistema, exigindo uma nova senha para os próximos logons. Portanto,</p><p>deve haver um procedimento que force a troca de senha imediatamente após a primeira autenticação,</p><p>quando o usuário poderá escolher a senha que será utilizada dali por diante.</p><p>Ex-funcionários devem ter suas senhas bloqueadas. Para isso, devem existir procedimentos</p><p>administrativos eficientes que informem o gerente de segurança, ou o administrador dos sistemas, da</p><p>ocorrência de demissões ou de desligamentos de funcionários. Esses procedimentos, na prática, nem</p><p>sempre são seguidos, expondo a organização a riscos indesejáveis.</p><p>Também devem ser bloqueadas contas de usuários após um determinado número de tentativas de</p><p>acesso sem sucesso. Esse procedimento diminui os riscos de alguém tentar adivinhar as senhas. Atingido</p><p>esse limite, só o administrador do sistema poderá desbloquear a conta do usuário, por exemplo.</p><p>Existem Outras Formas de Autenticação do Usuário, Além do Uso de Senhas?</p><p>Sim. A autenticação dos usuários pode ser feita a partir de tokens, ou ainda, de sistemas biométricos.</p><p>O Que São Tokens?</p><p>A ideia de fornecer tokens aos usuários como forma de identificá-los é bastante antiga. No nosso dia-</p><p>a-dia, estamos frequentemente utilizando tokens para acessar alguma coisa. As chaves que abrem a</p><p>porta da sua residência ou seu cartão com tarja magnética para utilizar o caixa eletrônico do banco são</p><p>exemplos de tokens. O cartão magnético é ainda uma token especial, pois guarda outras informações,</p><p>como, por exemplo, a sua conta bancária.</p><p>Token pode ser definida, então, como um objeto que o usuário possui, que o diferencia das outras</p><p>pessoas e o habilita a acessar algum objeto. A desvantagem das tokens em relação às senhas é que</p><p>essas, por serem objetos, podem ser perdidas, roubadas ou reproduzidas com maior facilidade.</p><p>O Que São Cartões Magnéticos Inteligentes?</p><p>Os cartões inteligentes são tokens que contêm microprocessadores e capacidade de memória</p><p>suficiente para armazenar dados, a fim de dificultar sua utilização por outras pessoas que não seus</p><p>proprietários legítimos.</p><p>O primeiro cartão inteligente, patenteado em 1975, foi o de Roland Moreno, considerado o pai do cartão</p><p>inteligente. Comparado ao cartão magnético, que é um simples dispositivo de memória, o cartão</p><p>inteligente não só pode armazenar informações para serem lidas, mas também é capaz de processar</p><p>informações. Sua clonagem é mais difícil e a maioria dos cartões inteligentes ainda oferece criptografia.</p><p>Normalmente o usuário de cartão inteligente precisa fornecer uma senha à leitora de cartão para que</p><p>o acesso seja permitido, como uma medida de proteção a mais contra o roubo de cartões.</p><p>As instituições bancárias, financeiras e governamentais são os principais usuários dessa tecnologia,</p><p>em função de seus benefícios em relação à segurança de informações e pela possibilidade de redução</p><p>de custos de instalações e de pessoal, como, por exemplo, a substituição dos guichês de atendimento ao</p><p>público nos bancos por caixas eletrônicos. Os cartões inteligentes têm sido usados em diversas</p><p>aplicações: cartões bancários, telefônicos e de crédito, dinheiro eletrônico, segurança de acesso, carteiras</p><p>de identidade.</p><p>O Que São Sistemas Biométricos?</p><p>Os sistemas biométricos são sistemas automáticos de verificação de identidade baseados em</p><p>características físicas do usuário. Esses sistemas têm como objetivo suprir deficiências de segurança das</p><p>senhas, que podem ser reveladas ou descobertas, e das tokens, que podem ser perdidas ou roubadas.</p><p>Os sistemas biométricos automáticos são uma evolução natural dos sistemas manuais de</p><p>reconhecimento amplamente difundidos há muito tempo, como a análise grafológica de assinaturas, a</p><p>análise de impressões digitais e o reconhecimento de voz. Hoje já existem sistemas ainda mais</p><p>sofisticados, como os sistemas de análise da conformação dos vasos sanguíneos na retina.</p><p>Que Características Humanas Podem Ser Verificadas por Sistemas Biométricos?</p><p>Teoricamente, qualquer característica humana pode ser usada como base para a identificação</p><p>biométrica. Na prática, entretanto, existem algumas limitações. A tecnologia deve ser capaz de medir</p><p>determinada característica de tal forma que o indivíduo seja realmente único, distinguindo inclusive</p><p>gêmeos, porém não deve ser invasiva ou ferir os direitos dos indivíduos.</p><p>Um dos problemas enfrentados pelos sistemas biométricos atuais é sua alta taxa de erro, em função</p><p>da mudança das características de uma pessoa com o passar dos anos, ou devido a problemas de saúde</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 88</p><p>ou o próprio nervosismo, por exemplo. A tolerância a erros deve ser estabelecida com precisão, de forma</p><p>a não ser grande o suficiente para admitir impostores, nem pequena demais a ponto de negar acesso a</p><p>usuários legítimos. Abaixo serão apresentadas algumas características humanas verificadas por sistemas</p><p>biométricos existentes:</p><p>- Impressões Digitais: são características únicas e consistentes. Nos sistemas biométricos que</p><p>utilizam essa opção, são armazenados de 40 a 60 pontos para verificar uma identidade. O sistema</p><p>compara a impressão lida com impressões digitais de pessoas autorizadas, armazenadas em sua base</p><p>de dados. Atualmente, estão sendo utilizadas impressões digitais em alguns sistemas governamentais,</p><p>como, por exemplo, o sistema de previdência social na Espanha e o de registro de eleitores na Costa</p><p>Rica;</p><p>- Voz: os sistemas de reconhecimento de voz são usados para controle de acesso,</p><p>porém não são tão</p><p>confiáveis como as impressões digitais, em função dos erros causados por ruídos do ambiente e de</p><p>problemas de garganta ou nas cordas vocais das pessoas a eles submetidas;</p><p>- Geometria da Mão: também é usada em sistemas de controle de acesso, porém essa característica</p><p>pode ser alterada por aumento ou diminuição de peso ou pela artrite;</p><p>- Configuração da Íris e da Retina: os sistemas que utilizam essas características se propõem a</p><p>efetuar identificação mais confiável do que os sistemas que verificam impressões digitais. Entretanto, são</p><p>sistemas invasivos, pois direcionam feixes de luz aos olhos das pessoas que se submetem à sua</p><p>identificação;</p><p>- Reconhecimento Facial Através De Termogramas: o termograma facial é uma imagem captada</p><p>por uma câmera infravermelha que mostra os padrões térmicos de uma face. Essa imagem é única e,</p><p>combinada com algoritmos sofisticados de comparação de diferentes níveis de temperatura distribuídos</p><p>pela face, constitui-se em uma técnica não-invasiva, altamente confiável, não sendo afetada por</p><p>alterações de saúde, idade ou temperatura do corpo. São armazenados ao todo 19.000 pontos de</p><p>identificação, podendo distinguir gêmeos idênticos, mesmo no escuro. O desenvolvimento dessa</p><p>tecnologia tem como um de seus objetivos baratear seu custo para que possa ser usada em um número</p><p>maior de aplicações de identificação e de autenticação.</p><p>Como Restringir o Acesso aos Recursos Informacionais?</p><p>O fato de um usuário ter sido identificado e autenticado não quer dizer que ele poderá acessar qualquer</p><p>informação ou aplicativo sem qualquer restrição. Deve-se implementar um controle específico,</p><p>restringindo o acesso dos usuários apenas às aplicações, arquivos e utilitários imprescindíveis para</p><p>desempenhar suas funções na organização. Esse controle pode ser feito por menus, funções ou arquivos.</p><p>Para que Servem os Controles de Menu?</p><p>Os controles de menu podem ser usados para restringir o acesso de diferentes categorias de usuários</p><p>apenas àqueles aplicativos ou utilitários indispensáveis a cada categoria.</p><p>Por exemplo, em um sistema de folha de pagamento, poderá ser apresentado um menu inicial com</p><p>três opções diferentes: funcionário, gerente e setor de recursos humanos. Nesse caso, o administrador</p><p>do sistema deverá conceder acesso a cada uma das opções de acordo com a função desempenhada</p><p>pelo usuário. Portanto, o funcionário só terá acesso a dados da sua folha de pagamento pessoal,</p><p>enquanto que o gerente poderá ter acesso a algumas informações da folha de seus funcionários. O setor</p><p>de recursos humanos, para poder alimentar a base de dados de pagamento, obterá um nível diferente de</p><p>acesso e sua interação com o sistema será feita a partir de menus próprios para a administração de</p><p>pessoal. Os menus apresentados após a seleção de uma das opções (funcionário, gerente ou setor de</p><p>recursos humanos) serão, portanto, diferentes.</p><p>Para que Servem os Controles de Funções de Aplicativos?</p><p>No que diz respeito às funções internas dos aplicativos, os respectivos proprietários deverão definir</p><p>quem poderá acessá-las e como, por meio de autorização para uso de funções específicas ou para</p><p>restrição de acesso às funções de acordo com o usuário (menus de acesso predefinidos), horário ou tipo</p><p>de recursos (impressoras, fitas backup).</p><p>Como Proteger Arquivos?</p><p>A maioria dos sistemas operacionais possui mecanismos de controle de acesso que definem as</p><p>permissões e os privilégios de acesso para cada recurso ou arquivo no sistema. Quando um usuário tenta</p><p>acessar um recurso, o sistema operacional verifica se as definições de acesso desse usuário e do recurso</p><p>desejado conferem. O usuário só conseguirá o acesso se essa verificação for positiva.</p><p>Para garantir a segurança lógica, pode-se especificar dois tipos de controle, sob óticas diferentes:</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 89</p><p>- O que um sujeito pode fazer; ou</p><p>- O que pode ser feito com um objeto.</p><p>O que São Direitos e Permissões de Acesso?</p><p>Definir direitos de acesso individualmente para cada sujeito e objeto pode ser uma maneira um tanto</p><p>trabalhosa quando estiverem envolvidas grandes quantidades de sujeitos e objetos. A forma mais comum</p><p>de definição de direitos de acesso, nesse caso, é a matriz de controle de acesso. Nessa matriz pode-se</p><p>fazer duas análises: uma em relação aos sujeitos; outra, em relação aos objetos.</p><p>Na primeira abordagem, cada sujeito recebe uma permissão (ou capacidade) que define todos os seus</p><p>direitos de acesso. As permissões de acesso são, então, atributos, associados a um sujeito ou objeto,</p><p>que definem o que ele pode ou não fazer com outros objetos. Essa abordagem, no entanto, é pouco</p><p>utilizada, já que, na prática, com grandes quantidades de sujeitos e objetos, a visualização exata de quem</p><p>tem acesso a um determinado objeto não é tão clara, comprometendo, assim, a gerência de controle de</p><p>acesso.</p><p>Na segunda abordagem, os direitos de acesso são armazenados com o próprio objeto formando a</p><p>chamada lista de controle de acesso (Access Control List (ACL)).</p><p>O que São Listas de Controle de Acesso?</p><p>Enquanto a permissão de acesso define o que um objeto pode ou não fazer com outros, a lista de</p><p>controle de acesso define o que os outros objetos ou sujeitos podem fazer com o objeto a ela associado.</p><p>As listas de controle de acesso nada mais são do que bases de dados, associadas a um objeto, que</p><p>descrevem os relacionamentos entre aquele objeto e outros, constituindo-se em um mecanismo de</p><p>garantia de confidencialidade e integridade de dados.</p><p>A definição das listas de controle de acesso deve ser sempre feita pelos proprietários dos recursos, os</p><p>quais determinam o tipo de proteção adequada a cada recurso e quem efetivamente terá acesso a eles.</p><p>A gerência das listas de controle de acesso, na prática, também é complicada. Para reduzir os</p><p>problemas de gerenciamento dessas listas e o espaço de memória ou disco por elas ocupado, costuma-</p><p>se agrupar os sujeitos com características semelhantes ou direitos de acesso iguais. Dessa forma, os</p><p>direitos de acesso são associados a grupos, e não a sujeitos individualizados. Vale ressaltar que um</p><p>sujeito pode pertencer a um ou mais grupos, de acordo com o objeto a ser acessado.</p><p>Como Monitorar o Acesso aos Recursos Informacionais?</p><p>O monitoramento dos sistemas de informação é feito, normalmente, pelos registros de log, trilhas de</p><p>auditoria ou outros mecanismos capazes de detectar invasões. Esse monitoramento é essencial à equipe</p><p>de segurança de informações, já que é praticamente impossível eliminar por completo todos os riscos de</p><p>invasão por meio da identificação e autenticação de usuários.</p><p>Na ocorrência de uma invasão, falha do sistema ou atividade não autorizada, é imprescindível reunir</p><p>evidências suficientes para que possam ser tomadas medidas corretivas necessárias ao restabelecimento</p><p>do sistema às suas condições normais, assim como medidas administrativas e/ ou judiciais para investigar</p><p>e punir os invasores.</p><p>A forma mais simples de monitoramento é a coleta de informações, sobre determinados eventos, em</p><p>arquivos históricos, mais conhecidos como logs. Com essas informações, a equipe de segurança é capaz</p><p>de registrar eventos e de detectar tentativas de acesso e atividades não autorizadas após sua ocorrência.</p><p>O que São Logs?</p><p>Os logs são registros cronológicos de atividades do sistema que possibilitam a reconstrução, revisão</p><p>e análise dos ambientes e das atividades relativas a uma operação, procedimento ou evento,</p><p>acompanhados do início ao fim.</p><p>Os logs são utilizados como medidas de detecção e monitoramento, registrando atividades, falhas de</p><p>acesso (tentativas frustradas de logon ou de acesso a recursos protegidos) ou uso do sistema</p><p>operacional, utilitários e aplicativos, e detalhando o que foi acessado, por quem e quando. Com os dados</p><p>dos logs, pode-se identificar e corrigir falhas da estratégia de segurança. Por conterem informações</p><p>essenciais para</p><p>a detecção de acesso não autorizado, os arquivos de log devem ser protegidos contra</p><p>alteração ou destruição por usuários ou invasores que queiram encobrir suas atividades.</p><p>O que Deve Ser Registrado Em Logs?</p><p>Devido à grande quantidade de dados armazenada em logs, deve-se levar em consideração que seu</p><p>uso pode degradar o desempenho dos sistemas. Sendo assim, é aconselhável balancear a necessidade</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 90</p><p>de registro de atividades críticas e os custos, em termos de desempenho global dos sistemas.</p><p>Normalmente, os registros de log incluem:</p><p>- Identificação dos usuários;</p><p>- Datas e horários de entrada (logon) e saída do sistema (logoff);</p><p>- Identificação da estação de trabalho e, quando possível, sua localização;</p><p>- Registros das tentativas de acesso (aceitas e rejeitadas) ao sistema;</p><p>- Registros das tentativas de acesso (aceitas e rejeitadas) a outros recursos e dados.</p><p>Ao definir o que será registrado, é preciso considerar que quantidades enormes de registros podem</p><p>ser inviáveis de serem monitoradas. Nada adianta ter um log se ele não é periodicamente revisado. Para</p><p>auxiliar a gerência de segurança na árdua tarefa de análise de logs, podem ser previamente definidas</p><p>trilhas de auditoria mais simples e utilizados softwares especializados disponíveis no mercado,</p><p>específicos para cada sistema operacional.</p><p>Outros Controles de Acesso Lógico</p><p>Outro recurso de proteção bastante utilizado em alguns sistemas é o time-out automático, isto é, a</p><p>sessão é desativada após um determinado tempo sem qualquer atividade no terminal ou computador.</p><p>Para restaurá-la, o usuário é obrigado a fornecer novamente seu ID e senha. Em alguns sistemas</p><p>operacionais, o próprio usuário, após sua habilitação no processo de logon, pode ativar e desativar essa</p><p>função de time-out. Nesse sentido, os usuários devem ser orientados a:</p><p>- Encerrar as sessões ativas, a menos que elas possam ser protegidas por mecanismo de bloqueio</p><p>(por exemplo, proteção de tela com senha);</p><p>- No caso de terminal conectado ao computador de grande porte, efetuar a desconexão quando a</p><p>sessão for finalizada (não apenas desligar o terminal, mas utilizar o procedimento para desconexão).</p><p>Como controle de acesso lógico, a gerência de segurança pode ainda limitar o horário de uso dos</p><p>recursos computacionais de acordo com a real necessidade de acesso aos sistemas. Pode-se, por</p><p>exemplo, desabilitar o uso dos recursos nos fins de semana ou à noite.</p><p>É usual também limitar a quantidade de sessões concorrentes, impedindo que o usuário consiga entrar</p><p>no sistema ou na rede a partir de mais de um terminal ou computador simultaneamente. Isso reduz os</p><p>riscos de acesso ao sistema por invasores, pois se o usuário autorizado já estiver conectado, o invasor</p><p>não poderá entrar no sistema. Da mesma forma, se o invasor estiver logado, o usuário autorizado, ao</p><p>tentar se conectar, identificará que sua conta já está sendo usada e poderá notificar o fato à gerência de</p><p>segurança.</p><p>Onde as Regras de Controle de Acesso São Definidas?</p><p>As regras de controle e direitos de acesso para cada usuário ou grupo devem estar claramente</p><p>definidas no documento da política de controle de acesso da instituição, o qual deverá ser fornecido aos</p><p>usuários e provedores de serviço para que tomem conhecimento dos requisitos de segurança</p><p>estabelecidos pela gerência.</p><p>O Que Considerar na Elaboração da Política de Controle de Acesso?</p><p>A política de controle de acesso deve levar em conta:</p><p>- Os requisitos de segurança de aplicações específicas do negócio da instituição;</p><p>- A identificação de toda informação referente às aplicações de negócio;</p><p>- As políticas para autorização e distribuição de informação (por exemplo, a necessidade de conhecer</p><p>os princípios e níveis de segurança, bem como a classificação da informação);</p><p>- A compatibilidade entre o controle de acesso e as políticas de classificação da informação dos</p><p>diferentes sistemas e redes;</p><p>- A legislação vigente e qualquer obrigação contratual, considerando a proteção do acesso a dados ou</p><p>serviços;</p><p>- O perfil de acesso padrão para categorias de usuários comuns;</p><p>- O gerenciamento dos direitos de acesso em todos os tipos de conexões disponíveis em um ambiente</p><p>distribuído conectado em rede.</p><p>Que Cuidados Devem Ser Tomados na Definição das Regras de Controle de Acesso?</p><p>Ao especificar as regras de controle de acesso, devem ser considerados os seguintes aspectos:</p><p>- Diferenciar regras que sempre devem ser cumpridas das regras opcionais ou condicionais;</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 91</p><p>- Estabelecer regras baseadas na premissa “Tudo deve ser proibido a menos que expressamente</p><p>permitido” ao invés da regra “Tudo é permitido a menos que expressamente proibido”;</p><p>- Diferenciar as permissões de usuários que são atribuídas automaticamente por um sistema de</p><p>informação daquelas atribuídas por um administrador;</p><p>- Priorizar regras que necessitam da aprovação de um administrador antes da liberação daquelas que</p><p>não necessitam de tal aprovação.</p><p>Que Tipo de Regras de Controle de Acesso Devem Ser Formalizadas na Política?</p><p>O acesso aos sistemas de informação deve ser controlado por um processo formal, o qual deverá</p><p>abordar, entre outros, os seguintes tópicos:</p><p>- Utilização de um identificador de usuário (ID) único, de forma que cada usuário possa ser identificado</p><p>e responsabilizado por suas ações;</p><p>- Verificação se o usuário obteve autorização do proprietário do sistema de informação ou serviço para</p><p>sua utilização;</p><p>- Verificação se o nível de acesso concedido ao usuário está adequado aos propósitos do negócio e</p><p>consistente com a política de segurança da organização;</p><p>- Fornecimento, aos usuários, de documento escrito com seus direitos de acesso. Os usuários deverão</p><p>assinar esse documento, indicando que entenderam as condições de seus direitos de acesso;</p><p>- Manutenção de um registro formal de todas as pessoas cadastradas para usar cada sistema de</p><p>informações;</p><p>- Remoção imediata dos direitos de acesso de usuários que mudarem de função ou saírem da</p><p>organização;</p><p>- Verificação periódica da lista de usuários, com intuito de remover usuários inexistentes e IDs em</p><p>duplicidade;</p><p>- Inclusão de cláusulas nos contratos de funcionários e prestadores de serviço, que especifiquem as</p><p>sanções a que estarão sujeitos em caso de tentativa de acesso não autorizado.</p><p>Quem é o Responsável pelos Controles de Acesso Lógico?</p><p>A responsabilidade sobre os controles de acesso lógico pode ser tanto do gerente do ambiente</p><p>operacional como dos proprietários (ou gerentes) de aplicativos. O gerente do ambiente operacional deve</p><p>controlar o acesso à rede, ao sistema operacional e seus recursos e, ainda, aos aplicativos e arquivos de</p><p>dados. É responsável, assim, por proteger os recursos do sistema contra invasores ou funcionários não</p><p>autorizados.</p><p>Enquanto isso, os proprietários dos aplicativos são responsáveis por seu controle de acesso,</p><p>identificando quem pode acessar cada um dos sistemas e que tipo de operações pode executar. Por</p><p>conhecerem bem o sistema aplicativo sob sua responsabilidade, os proprietários são as pessoas mais</p><p>indicadas para definir privilégios de acesso de acordo com as reais necessidades dos usuários.</p><p>Dessa forma, as responsabilidades sobre segurança de acesso são segregadas entre o gerente do</p><p>ambiente operacional de informática e os gerentes de aplicativos.</p><p>Em Que os Usuários Podem Ajudar na Implantação dos Controles de Acesso Lógico?</p><p>A cooperação dos usuários autorizados é essencial para a eficácia da segurança. Os usuários devem</p><p>estar cientes de suas responsabilidades para a manutenção efetiva dos controles de acesso,</p><p>considerando, particularmente, o uso de senhas e a segurança dos equipamentos de informática que</p><p>costumam utilizar.</p><p>Análise Estática de Código Fonte16</p><p>A análise de código para fins de segurança é uma das alternativas bastante utilizadas pelo mercado</p><p>para o desenvolvimento de software seguro. Sua difusão se deve primeiro aos resultados, em termos de</p><p>localização de bugs de segurança em código e, segundo, pela facilidade de incorporação ao ciclo de</p><p>desenvolvimento, uma vez que as principais ferramentas se integram às IDEs mais usadas hoje, como o</p><p>Eclipse e o Visual Studio da Microsoft.</p><p>Todas as ferramentas comerciais existentes se fundamentam no mesmo princípio, regras e padrões</p><p>de codificação suspeitos. Isso as tornam muito dependentes da ação humana. Num primeiro momento,</p><p>para desenhar essas regras a partir de muita pesquisa e depois, para avaliar o resultado de uma análise</p><p>de código.</p><p>16 Fonte: http://softwareseguro.blogspot.com.br/2007/07/ferramentas-de-anlise-cdigo-fonte.html</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 92</p><p>As ferramentas de análise de código fundamentam ao Teorema de Rice, que coloca que qualquer</p><p>questão não trivial endereçada a um programa pode ser reduzido ao Problema de Halting, isso implica</p><p>que os problemas de análise de código são insolúveis no pior caso e, por consequência, que essas</p><p>ferramentas são obrigadas a fazer aproximação, cujo resultado é algo não perfeito.</p><p>Os principais problemas das ferramentas de análise de código fonte para segurança estão</p><p>concentradas em:</p><p>Falso Negativo: o programa contém bugs não endereçados pela ferramenta. Isso dá a falsa sensação</p><p>de que não existe bugs, que na verdade significa que a ferramenta não foi capaz de encontrar mais</p><p>exemplares;</p><p>Falso Positivo: a ferramenta endereça bugs não existentes. Isso se refere a duas possibilidades: um</p><p>erro propriamente dito, onde a ferramenta localizou um bug que não existe fisicamente; ou há uma</p><p>classificação da ferramenta incoerente com as variáveis do ambiente. Por exemplo, a ferramenta poderia</p><p>encontrar um bug de SQL Injection, que na realidade, não interessa para o software investigado pelas</p><p>suas características de operação.</p><p>Vale ressaltar que as ferramentas comerciais procuram reduzir o falso positivo, assumindo o custo de</p><p>deixar passar falsos negativos.</p><p>As análises de código fonte podem ser divididas de acordo com as seguintes abordagens:</p><p>Análise Estática: a análise estática pode compreender as técnicas de busca direta a partir de lista de</p><p>strings (grep); a análise léxica, onde os tokens do código fonte são comparados com àqueles contidos</p><p>numa biblioteca de vulnerabilidades e análise semântica, onde se prevê como o programa se comportará</p><p>em tempo de execução, usando a tecnologia de compiladores (árvore sintática abstrata);</p><p>Análise de Fluxo de Controle: usada para caminhar através das condições lógicas do código. O</p><p>processo funciona como a seguir:</p><p>- Observe uma função e determine cada condição de desvio. Essas incluem loops, switchs, if's e</p><p>blocos try/catch;</p><p>- Entenda as condições sobre como cada bloco será executado;</p><p>- Vá para a próxima função e repita.</p><p>Análise de fluxo de dados: usada para seguir fluxos de dados dos pontos de entrada aos pontos de</p><p>saída. O processo funciona como descrito a seguir:</p><p>- Para cada entrada, determine o quanto você acredita na fonte de entrada. Quando em dúvida você</p><p>não deve acreditar;</p><p>- Siga o fluxo de dados para cada saída possível, registrando ao longo do percurso qualquer tentativa</p><p>de validação de dados;</p><p>- Vá para a próxima entrada e continue.</p><p>A ferramenta mais eficiente é a que consegue fazer uso dessas abordagens combinadas para reduzir</p><p>tanto o falso negativo, como o falso positivo. Alguns fornecedores estão na busca por ferramentas efetivas</p><p>em temos de análise de código para segurança. Dentre eles, vale destacar:</p><p>- Coverity;</p><p>- Fortify;</p><p>- Ounce Labs;</p><p>- Microsoft.</p><p>Vale reforçar, que para conseguir tirar o melhor proveito das ferramentas de análise de código fonte</p><p>para segurança, seu uso deve estar amparado por um ciclo de desenvolvimento seguro, como o CLASP</p><p>ou SDL.</p><p>Visão Geral de Backup (SQL Server)17</p><p>Este tópico apresenta o componente de backup do SQL Server. O backup do banco de dados do SQL</p><p>Server é essencial para proteger seus dados. Esta discussão abrange tipos de backup e restrições de</p><p>backup. O tópico também apresenta dispositivos de backup do SQL Server e mídia de backup.</p><p>Fazer Backup [Verbo]</p><p>Copia os dados ou registros de log de um banco de dados do SQL Server ou de seu log de transações</p><p>para um dispositivo de backup, como um disco, a fim de criar um backup de dados ou backup de log.</p><p>17 Fonte: https://msdn.microsoft.com/pt-br/library/ms175477(v=sql.120).aspx</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 93</p><p>Backup [Substantivo]</p><p>Uma cópia dos dados do SQL Server que pode ser usada para restaurar e recuperar os dados após</p><p>uma falha. Um backup dos dados do SQL Server é criado no nível de um banco de dados ou de um ou</p><p>mais de seus arquivos ou grupos de arquivos. Não é possível criar backups no nível da tabela. Além dos</p><p>backups de dados, o modelo de recuperação completa requer a criação de backups do log de transações.</p><p>- modelo de recuperação</p><p>Uma propriedade de banco de dados que controla a manutenção do log de transações em um banco</p><p>de dados. Existem três modelos de recuperação: simples, completo e bulk-logged. O modelo de</p><p>recuperação de banco de dados determina seus requisitos de backup e de restauração.</p><p>Restaurar</p><p>Um processo multifase que copia todos os dados e páginas de log de um backup do SQL Server para</p><p>um banco de dados especificado e, em seguida, efetua roll-forward de todas as transações registradas</p><p>no backup, aplicando as alterações registradas para avançar os dados em tempo.</p><p>Tipos de Backups</p><p>Backup Somente Cópia</p><p>Um backup de uso especial que é independente da sequência regular dos backups do SQL Server.</p><p>Backup de Dados</p><p>Um backup de dados em um banco de dados completo (um backup de banco de dados), um banco de</p><p>dados parcial (um backup parcial) ou um conjunto de arquivos de dados ou grupos de arquivos (um</p><p>backup de arquivo).</p><p>Backup de Banco de Dados</p><p>Um backup de um banco de dados. Os backups completos de banco de dados representam todo o</p><p>banco de dados no momento em que o backup é concluído. Os backups de banco de dados diferenciais</p><p>contêm somente alterações feitas no banco de dados desde seu backup completo de banco de dados</p><p>mais recente.</p><p>Backup Diferencial</p><p>Um backup de dados que se baseia no backup completo mais recente de um banco de dados completo</p><p>ou parcial ou um conjunto de arquivos de dados ou grupos de arquivos (a base diferencial) que contém</p><p>somente as extensões de dados alterados desde a base diferencial.</p><p>Um backup diferencial parcial registra apenas as extensões de dados que foram alteradas nos grupos</p><p>de arquivos desde o backup parcial anterior, conhecido como a base para o diferencial.</p><p>Backup Completo</p><p>Um backup de dados que contém todos os dados em um banco de dados ou em um conjunto de</p><p>grupos de arquivos ou arquivos, além de log suficiente para permitir a recuperação desses dados.</p><p>Backup de Log</p><p>Um backup de logs de transações que inclui todos os registros de log dos quais não foi feito backup</p><p>em um backup de log anterior. (Modelo de recuperação completa).</p><p>Backup de Arquivo</p><p>Um backup de um ou mais arquivos ou grupos de arquivos de banco de dados.</p><p>Backup Parcial</p><p>Contém dados apenas de alguns grupos de arquivos em um banco de dados, incluindo os dados no</p><p>grupo de arquivos primário, em cada grupo de arquivos de leitura/gravação e em qualquer arquivo</p><p>somente leitura especificado opcionalmente.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 94</p><p>Termos e Definições de Mídia de Backup</p><p>Dispositivo de Backup</p><p>Um disco ou dispositivo de fita no qual são gravados backups do SQL Server e nos quais eles podem</p><p>ser restaurados. Os backups do SQL Server também podem ser gravados em um serviço de</p><p>armazenamento do Blob do Windows Azure. O formato</p><p>de URL é usado para especificar o destino e o</p><p>nome do arquivo de backup.</p><p>Mídia de Backup</p><p>Uma ou mais fitas ou arquivos de disco nos quais um ou mais backups foram gravados.</p><p>Conjunto de Backup</p><p>O conteúdo de backup adicionado a um conjunto de mídias por uma operação de backup bem-</p><p>sucedida.</p><p>Família de Mídia</p><p>Os backups criados em um único dispositivo não espelhado ou um conjunto de dispositivos espelhados</p><p>em um conjunto de mídias</p><p>Conjunto de Mídias</p><p>Uma coleção ordenada de mídias de backup, fitas ou arquivos de disco, em que uma ou mais</p><p>operações de backup foram gravadas, usando um número e um tipo fixo de dispositivos de backup.</p><p>Conjunto de Mídias Espelhado</p><p>Várias cópias (espelhos) de um conjunto de mídias.</p><p>Fazer Backup e Restaurar Bancos de Dados do SQL Server</p><p>O componente de backup e restauração do SQL Server oferece uma proteção essencial para dados</p><p>críticos armazenados em bancos de dados do SQL Server. Para minimizar o risco de perda de dados</p><p>catastrófica, você precisa fazer backup dos bancos de dados para preservar as modificações feitas nos</p><p>dados regularmente. Uma estratégia de backup e restauração bem-planejada ajuda a proteger bancos de</p><p>dados contra perda de dados causada por várias falhas. Teste sua estratégia restaurando um conjunto</p><p>de backups e recuperando depois seu banco de dados para se preparar para responder com eficiência a</p><p>um desastre.</p><p>Além do armazenamento local para guardar os backups, o SQL Server também oferece suporte ao</p><p>backup e à restauração no serviço de armazenamento de Blob do Windows Azure. .</p><p>Benefícios</p><p>O backup dos bancos de dados do SQL Server, a execução de procedimentos de restauração de teste</p><p>nos backups e o armazenamento de cópias de backups em um local externo seguro evita a perda de</p><p>dados potencialmente catastrófica.</p><p>Com backups válidos de um banco de dados, você pode recuperar seus dados de muitas falhas, como:</p><p>- Falha de mídia;</p><p>- Por exemplo, erros de usuário, que removem uma tabela por engano;</p><p>- Por exemplo, problemas de hardware, uma unidade de disco danificada ou perda permanente de um</p><p>servidor;</p><p>- Desastres naturais. Ao usar o Backup do SQL Server para serviço de armazenamento de Blob do</p><p>Windows Azure, é possível criar um backup externo em uma região diferente daquela do seu local, para</p><p>usar no caso de um desastre natural afetar seu local.</p><p>Além disso, os backups de um banco de dados são úteis para fins administrativos rotineiros, como</p><p>copiar um banco de dados de um servidor para outro, configurar o espelhamento do banco de dados ou</p><p>Grupos de Disponibilidade AlwaysOn e fazer arquivamento.</p><p>Componentes e Conceitos</p><p>- Fazer Backup [Verbo]</p><p>Copia os dados ou registros de log de um banco de dados do SQL Server ou de seu log de transações</p><p>para um dispositivo de backup, como um disco, a fim de criar um backup de dados ou backup de log.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 95</p><p>- Backup [Substantivo]</p><p>Uma cópia dos dados que podem ser usados para restaurar e recuperar os dados após uma falha. Os</p><p>backups de um banco de dados também podem ser usados para restaurar uma cópia do banco de dados</p><p>em um novo local.</p><p>- Dispositivo de Backup</p><p>Um disco ou dispositivo de fita no qual os backups do SQL Server serão gravados e nos quais eles</p><p>poderão ser restaurados. Os backups do SQL Server também podem ser gravados em um serviço de</p><p>armazenamento do Blob do Windows Azure. O formato de URL é usado para especificar o destino e o</p><p>nome do arquivo de backup.</p><p>- Mídia de Backup</p><p>Uma ou mais fitas ou arquivos de disco nos quais um ou mais backups foram gravados.</p><p>- Backup de Dados</p><p>Um backup de dados em um banco de dados completo (um backup de banco de dados), um banco de</p><p>dados parcial (um backup parcial) ou um conjunto de arquivos de dados ou grupos de arquivos (um</p><p>backup de arquivo).</p><p>- Backup de Banco de Dados</p><p>Um backup de um banco de dados. Os backups completos de banco de dados representam todo o</p><p>banco de dados no momento em que o backup é concluído. Os backups de banco de dados diferenciais</p><p>contêm somente alterações feitas no banco de dados desde seu backup completo de banco de dados</p><p>mais recente.</p><p>- Backup Diferencial</p><p>Um backup de dados que se baseia no backup completo mais recente de um banco de dados completo</p><p>ou parcial ou um conjunto de arquivos de dados ou grupos de arquivos (a base diferencial) que contém</p><p>somente os dados alterados desde essa base.</p><p>- Backup Completo</p><p>Um backup de dados que contém todos os dados em um banco de dados ou em um conjunto de</p><p>grupos de arquivos ou arquivos, além de log suficiente para permitir a recuperação desses dados.</p><p>- Backup de Log</p><p>Um backup de logs de transações que inclui todos os registros de log dos quais não foi feito backup</p><p>em um backup de log anterior. (Modelo de recuperação completa)</p><p>- Recuperação</p><p>Para retornar um banco de dados a um estado estável e consistente.</p><p>Uma fase de inicialização de banco de dados ou de restauração com recuperação que coloca o banco</p><p>de dados em um estado de transação consistente.</p><p>- Modelo de Recuperação</p><p>Uma propriedade de banco de dados que controla a manutenção do log de transações em um banco</p><p>de dados. Existem três modelos de recuperação: simples, completo e bulk-logged. O modelo de</p><p>recuperação de banco de dados determina seus requisitos de backup e de restauração.</p><p>- Restaurar</p><p>Um processo multifase que copia todos os dados e páginas de log de um backup do SQL Server para</p><p>um banco de dados especificado e, em seguida, efetua roll forward de todas as transações registradas</p><p>no backup, aplicando as alterações registradas para avançar os dados no tempo.</p><p>Introdução às Estratégias de Backup e Restauração</p><p>O backup e a restauração dos dados devem ser personalizados em um ambiente específico e devem</p><p>funcionar com os recursos disponíveis. Portanto, um uso confiável de backup e restauração para</p><p>recuperação requer uma estratégia de backup e restauração. Uma estratégia de backup e restauração</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 96</p><p>bem-planejada maximiza a disponibilidade dos dados e minimiza a perda de dados, considerando, ao</p><p>mesmo tempo, seus requisitos empresariais específicos.</p><p>Coloque o banco de dados e os backups em dispositivos separados. Caso contrário, se o dispositivo</p><p>que contém o banco de dados falhar, seus backups ficarão indisponíveis. Colocar os dados e backups</p><p>em dispositivos separados também aprimora o desempenho de E/S dos backups gravados e o uso de</p><p>produção do banco de dados.</p><p>Uma estratégia de backup e restauração contém uma parte de backup e uma parte de restauração. A</p><p>parte de backup da estratégia define o tipo e a frequência dos backups, a natureza e velocidade do</p><p>hardware exigido para eles, como os backups serão testados, e onde e como a mídia de backup deve ser</p><p>armazenada (incluindo considerações de segurança). A parte de restauração da estratégia define quem</p><p>é responsável pela execução da restauração e como a restauração deve ser executada para atender às</p><p>metas de disponibilidade do banco de dados e minimizar perda de dados. Recomendamos que você</p><p>documente seus procedimentos de backup e restauração e mantenha uma cópia da documentação em</p><p>seu livro de execuções.</p><p>O design de uma estratégia de backup e restauração eficaz requer planejamento, implementação e</p><p>teste cuidadosos. O teste é obrigatório. Não existirá uma estratégia de backup até que você tenha</p><p>restaurado com êxito os backups em todas as combinações incluídas na estratégia de restauração. Você</p><p>deve considerar uma variedade de fatores. Eles incluem o seguinte:</p><p>- As metas de produção de sua organização para os bancos de dados, especialmente os requisitos</p><p>para disponibilidade e proteção contra perda de dados;</p><p>- A natureza de cada um dos seus bancos de dados: o tamanho, os padrões de uso, a natureza de</p><p>seu conteúdo, os requisitos dos dados, e assim por diante;</p><p>- Restrições de recursos, como hardware,</p><p>pessoal, espaço para armazenagem de mídia de backup, a</p><p>segurança física da mídia armazenada, e assim por diante.</p><p>O formato de armazenamento do SQL Server em disco é o mesmo nos ambientes de 64 bits e 32 bits.</p><p>Portanto, backup e restauração funcionam em ambientes de 32 bits e 64 bits. Um backup criado em uma</p><p>instância de servidor executada em um ambiente pode ser restaurado em uma instância de servidor</p><p>executada em outro ambiente.</p><p>Impacto do Modelo de Recuperação no Backup e na Restauração</p><p>As operações de backup e restauração ocorrem dentro do contexto de um modelo de recuperação. Um</p><p>modelo de recuperação é uma propriedade de banco de dados que controla a forma de gerenciamento</p><p>do log de transações. Além disso, o modelo de recuperação de um banco de dados determina para quais</p><p>tipos de backups e cenários de restauração o banco de dados oferece suporte. Geralmente, um banco</p><p>de dados usa o modelo de recuperação simples ou o modelo de recuperação completa. O modelo de</p><p>recuperação completa pode ser suplementado alternando para o modelo de recuperação bulk-logged</p><p>antes das operações em massa.</p><p>A melhor escolha do modelo de recuperação para o banco de dados depende de seus requisitos</p><p>empresariais. Para evitar gerenciamento de log de transações e simplificar o backup e a restauração, use</p><p>o modelo de recuperação simples. Para minimizar exposição à perda de trabalho, às custas de uma</p><p>sobrecarga administrativa, use o modelo de recuperação completa.</p><p>- Planejar a Estratégia de Backup</p><p>Depois de selecionar um modelo de recuperação que satisfaça seus requisitos empresariais para um</p><p>banco de dados específico, você precisa planejar e implementar uma estratégia de backup</p><p>correspondente. A melhor estratégia de backup depende de uma série de fatores, dos quais os seguintes</p><p>são especialmente significativos:</p><p>- Quantas Horas ao Dia os Aplicativos Precisam Acessar o Banco de Dados?</p><p>Se houver um período de pouca atividade previsível, recomendamos que você agende backups de</p><p>banco de dados completos para aquele período.</p><p>- Com que Frequência as Alterações e Atualizações Deverão Ocorrer?</p><p>Se as alterações forem frequentes, considere o seguinte:</p><p>No modelo de recuperação simples, agende backups diferenciais entre os backups de banco de dados</p><p>completos. Um backup diferencial captura só as alterações desde o último backup completo do banco de</p><p>dados.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 97</p><p>No modelo de recuperação completa, você deve agendar backups de log frequentes. O agendamento</p><p>de backups diferenciais entre backups completos pode reduzir o tempo de restauração reduzindo o</p><p>número de backups de log a serem restaurados após a restauração dos dados.</p><p>- As Alterações Ocorrem Geralmente em uma Pequena Parte do Banco de Dados ou em uma Grande</p><p>Parte do Banco de Dados?</p><p>Para um banco de dados grande no qual mudanças estão concentradas em uma parte dos arquivos</p><p>ou grupos de arquivos, backups parciais e backups de arquivo podem ser úteis.</p><p>Quanto Espaço em Disco É Necessário para um Backup Completo de Banco de Dados?</p><p>- Estimar o Tamanho de um Backup de Banco de Dados Completo</p><p>Antes de implementar uma estratégia de backup e restauração, calcule o quanto de espaço em disco</p><p>um backup de banco de dados completo usará. A operação de backup copia os dados no banco de dados</p><p>para o arquivo de backup. O backup contém só os dados reais no banco de dados e não qualquer espaço</p><p>não utilizado. Portanto, o backup é geralmente menor do que o próprio banco de dados. Você pode</p><p>estimar o tamanho de um backup de banco de dados completo usando o procedimento armazenado do</p><p>sistema sp_spaceused. Para obter mais informações, consulte sp_spaceused (Transact-SQL).</p><p>- Agendar Backups</p><p>A execução do backup tem um efeito mínimo sobre as transações em andamento; portanto, as</p><p>operações de backup podem ser realizadas durante a operação regular. Você pode executar um backup</p><p>do SQL Server com um efeito mínimo sobre as cargas de trabalho de produção.</p><p>Depois de decidir os tipos de backups necessários e a frequência de execução de cada tipo,</p><p>recomendamos que você agende backups regulares como parte de um plano de manutenção de banco</p><p>de dados para o banco de dados.</p><p>- Testar seus Backups</p><p>Não existirá uma estratégia de restauração até que você tenha testado seus backups. É muito</p><p>importante testar sua estratégia de backup completamente para cada um dos bancos de dados,</p><p>restaurando uma cópia do banco de dados em um sistema de teste. É necessário testar a restauração de</p><p>cada tipo de backup que você pretende usar.</p><p>Recomendamos que você mantenha um manual de operações para cada banco de dados. Esse</p><p>manual operacional deve documentar o local dos backups, os nomes do dispositivo de backup (se houver)</p><p>e o tempo necessário para restaurar os backups de teste</p><p>Questões</p><p>01. (UFMG - Analista de Tecnologia da Informação - UFMG/2018) O modelo relacional revolucionou</p><p>a área de banco de dados; e os sistemas de bancos de dados relacionais são amplamente utilizados no</p><p>mercado. Com relação ao modelo relacional de bancos de dados e a SQL, que é um padrão de linguagem</p><p>para a criação, manipulação e consulta a SGBDs (Sistemas de Gerenciamento de Bancos de Dados), é</p><p>INCORRETO afirmar que:</p><p>(A) no mapeamento de um conjunto de relacionamentos de um diagrama ER para um esquema de</p><p>bancos de dados relacional, se um conjunto de relacionamentos envolve n conjuntos de entidades e</p><p>alguns m deles são vinculados por meio de setas no diagrama ER, temos m chaves candidatas e uma</p><p>delas deve ser designada como chave primária.</p><p>(B) em uma restrição de chave estrangeira, a chave estrangeira na relação de referência deve ter o</p><p>mesmo número de colunas e tipos de dados compatíveis com a chave primária da relação referenciada,</p><p>embora os nomes das colunas possam ser diferentes.</p><p>(C) uma restrição de chave define um conjunto de campos de uma relação, sendo que algum dos</p><p>subconjuntos desse conjunto de campos em uma chave, chamado de chave candidata, é um identificador</p><p>único para uma tupla (ou registro) da relação.</p><p>(D) o mecanismo de visão fornece o suporte para independência lógica de dados no modelo relacional.</p><p>Por exemplo, se o esquema de uma relação armazenada é alterado, podemos definir uma visão com o</p><p>esquema antigo e os aplicativos que esperam ver o esquema antigo podem agora usar essa visão com o</p><p>mesmo objetivo.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 98</p><p>02. (CFM - Analista de Tecnologia da Informação - IADES/2018) O modelo relacional representa o</p><p>banco de dados como uma coleção de relações.</p><p>ELMASRI, R.; NAVATHE, S. B. Sistemas de Bancos de Dados. 6a ed. São Paulo: Pearson Addison</p><p>Wesley, 2011</p><p>Considerando-se o exposto e o modelo relacional, é correto afirmar que cada linha de uma tabela</p><p>recebe o nome de:</p><p>(A) grupo.</p><p>(B) atributo.</p><p>(C) relação.</p><p>(D) tupla.</p><p>(E) domínio.</p><p>03. (TRF - 4ª REGIÃO - Técnico Judiciário - FCC) Num banco de dados relacional,</p><p>(A) as tuplas necessitam de informações em todas as colunas.</p><p>(B) quando um campo chave de uma tabela Y é inserido como um campo na tabela X, diz-se que ele</p><p>é uma chave primária na tabela X.</p><p>(C) um registro é um atributo de uma tabela.</p><p>(D) uma coluna é uma instância de uma tabela.</p><p>(E) os registros não precisam conter informações em todas as colunas.</p><p>04. (MF - Analista de Finanças e Controle - ESAF) No Modelo Relacional de banco de dados,</p><p>(A) o cabeçalho de uma tabela contém os atributos.</p><p>(B) o modelo do atributo é o conjunto de valores permitidos.</p><p>(C) o cabeçalho de uma tabela contém instâncias.</p><p>(D) o domínio do atributo é a sua descrição.</p><p>(E) o corpo da tabela contém relacionamentos qualitativos.</p><p>05. (TCE/RO - Técnico em Informática - CESGRANRIO) A chave candidata que é escolhida pelo</p><p>projetista do banco de dados como de significado principal para a identificação de entidades, dentro de</p><p>um conjunto de entidades, é a chave:</p><p>(A) do sistema.</p><p>(B) do modelo.</p><p>(C) relacional.</p><p>(D) primária.</p><p>(E) biunívoca.</p><p>06. (Petrobras - Engenheiro de Equipamento Júnior - CESGRANRIO) Qual processo aplicado a</p><p>um esquema relacional tem por um de seus objetivos minimizar as redundâncias em um banco de dados</p><p>relacional?</p><p>A) Pivoteamento</p><p>B) Normalização</p><p>(C) Decomposição</p><p>(D) Agregação</p><p>(E) Associação</p><p>07. (COREN/SP - Administrador de Banco de Dados - VUNESP) Em um banco de dados relacional,</p><p>o conceito de instância representa o conjunto:</p><p>(A) de usuários válidos em determinado momento.</p><p>(B) de valores válidos de cada atributo.</p><p>(C) dos atributos que admitem valores nulos.</p><p>(D) dos dados armazenados em determinado instante.</p><p>(E) dos atributos que formam as chaves primárias de todas as tabelas.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 99</p><p>Gabarito</p><p>01.C / 02.B / 03.E / 04.A/ 05.D / 06.B / 07.D</p><p>Comentários</p><p>01. Resposta: C</p><p>A restrição de chave serve para garantir que as tuplas de uma relação sejam únicas. Para isso,</p><p>identifica um conjunto mínimo de atributos que devem ter valores diferentes em todas as tuplas de uma</p><p>instância da relação. Este conjunto de atributos denomina-se chave candidata da relação e deve</p><p>satisfazer os seguintes requisitos:</p><p>- Não podem existir duas tuplas diferentes com os mesmos valores para estes atributos, ou seja, a</p><p>chave identifica unicamente qualquer tupla da relação válida;</p><p>- Ao retirar-se qualquer atributo componente da chave, ela deixa de identificar unicamente as tuplas.</p><p>02. Resposta: B</p><p>Na terminologia do modelo relacional:</p><p>- Uma linha é chamada de tupla;</p><p>- Um cabeçalho de coluna é chamado de atributo;</p><p>- A tabela é chamada de relação;</p><p>- O tipo de dados que descreve os tipos de valores que podem aparecer em cada coluna é chamado</p><p>de domínio;</p><p>- Um domínio é um conjunto de valores atômicos;</p><p>- A especificação de um domínio é definida por um tipo de dados do qual os valores de dados que</p><p>formam o domínio sejam retirados; e</p><p>- A especificação de um nome para este domínio de modo a ajudar na interpretação de seus valores.</p><p>03. Resposta: E</p><p>Correto! Podem existir campos nulos.</p><p>04. Resposta: A</p><p>"Na representação gráfica os nomes de atributos são representados no cabeçalho da tabela."</p><p>05. Resposta: D</p><p>- Chave Candidata: Atributo ou grupamento de atributos que tem a propriedade de identificar</p><p>unicamente uma ocorrência da entidade. Pode vir a ser uma chave Primária. A chave candidata que não</p><p>é chave primária também chama-se chave Alternativa. A chave candidata deve possuir, como</p><p>propriedade, a unicidade e a irredutibilidade.</p><p>06. Resposta: B</p><p>A normalização de dados é uma série de passos que se seguem no projeto de um banco de dados,</p><p>que permitem um armazenamento consistente e um eficiente acesso aos dados em bancos de dados</p><p>relacionais. Esses passos reduzem a redundância de dados e as chances dos dados se tornarem</p><p>inconsistentes.</p><p>07. Resposta: D</p><p>A instância de uma relação é o conjunto de linhas, também denominadas tuplas ou registros, distintas</p><p>entre si, que compõem a relação em um dado momento.</p><p>VIEWS18</p><p>As views permitem armazenar uma consulta predefinida como um objeto no banco de dados para uso</p><p>posterior. As tabelas consultadas em uma view são chamadas tabelas base. Com algumas exceções,</p><p>você pode nomear e armazenar qualquer instrução SELECT como uma view. Alguns exemplos comuns</p><p>de views são:</p><p>18 Fonte: Alfamídia</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 100</p><p>- Um subconjunto de registros ou colunas de uma tabela base.</p><p>- Uma união de duas ou mais tabelas base.</p><p>- Uma associação de duas ou mais tabelas base.</p><p>- Um resumo estatístico de uma tabela base.</p><p>- Um subconjunto de outra view ou alguma combinação de views e tabelas base.</p><p>Este exemplo cria a view dbo.EmployeeView no banco de dados Northwind.</p><p>A view exibe duas colunas da tabela Employees (Funcionários).</p><p>USE Northwind</p><p>GO</p><p>CREATE VIEW dbo.EmployeeView</p><p>AS</p><p>SELECT LastName, Firstname</p><p>FROM Employees</p><p>SELECT * from EmployeeView</p><p>Vantagens das Views</p><p>As views oferecem diversas vantagens, incluindo focalizar os dados para os usuários, mascarar a</p><p>complexidade dos dados, simplificar o gerenciamento de permissões e organizar dados para serem</p><p>exportados para outros aplicativos.</p><p>Focalizar os Dados para os Usuários</p><p>As views criam um ambiente controlado que permite o acesso a dados específicos enquanto outros</p><p>dados ficam ocultos. Dados desnecessários, confidenciais ou inadequados podem ser deixados fora de</p><p>uma view.</p><p>Os usuários podem manipular a exibição dos dados em uma view da mesma forma que em uma tabela.</p><p>Além disso, com as permissões apropriadas e algumas restrições, eles podem modificar os dados</p><p>produzidos pela view.</p><p>Mascarar a Complexidade do Banco de Dados</p><p>As views isolam do usuário a complexidade do design do banco de dados. Isso permite que os</p><p>desenvolvedores alterem o design sem afetar a interação do usuário com o banco de dados. Além disso,</p><p>os usuários podem ver uma versão mais amigável dos dados usando nomes mais fáceis de compreender</p><p>do que os nomes abreviados geralmente usados nos bancos de dados.</p><p>Consultas complexas, incluindo consultas distribuídas a dados heterogêneos, também podem ser</p><p>mascaradas através de views. O usuário consulta a view em vez de escrever a consulta ou executar um</p><p>script.</p><p>Simplificar o gerenciamento de permissões de usuários</p><p>Em vez de conceder permissão para que os usuários consultem colunas específicas em tabelas base,</p><p>os proprietários de bancos de dados podem conceder permissões para que os usuários consultem dados</p><p>somente através de views. Isso também protege as alterações no design das tabelas base subjacentes.</p><p>Os usuários podem continuar a consultar a view sem interrupção.</p><p>Melhorar o Desempenho</p><p>As views permitem que você armazene os resultados de consultas complexas. Outras consultas</p><p>podem usar esses resultados resumidos. As views também permitem o particionamento dos dados. Você</p><p>pode colocar partições individuais em computadores separados.</p><p>Organizar dados para serem exportados para outros aplicativos</p><p>Você pode criar uma view com base em uma consulta complexa que associe duas ou mais tabelas e,</p><p>depois, exportar os dados para outro aplicativo para análise adicional.</p><p>Criando Views</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 101</p><p>Você pode criar views usando o Create View Wizard (Assistente para criação de views), o SQL Server</p><p>Enterprise Manager (Gerenciador corporativo do SQL Server) ou o Transact-SQL. As views só podem ser</p><p>criadas no banco de dados atual.</p><p>Criando uma View</p><p>Quando você cria uma view, o Microsoft® SQL Server verifica a existência de objetos aos quais a</p><p>definição da view faz referência. O nome da view deve seguir as regras dos identificadores. A</p><p>especificação do nome do proprietário da view é opcional.</p><p>Você deve desenvolver uma convenção de nomeação consistente para fazer a distinção entre views</p><p>e tabelas. Por exemplo, você poderia adicionar a palavra view como um sufixo para cada objeto de view</p><p>criado. Isso permite que você diferencie facilmente objetos semelhantes (tabelas e views) ao consultar a</p><p>view INFORMATION_SCHEMA.TABLES.</p><p>CREATE VIEW proprietário.nome_da_view [(coluna [,n ])]</p><p>[WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,n ]] AS</p><p>instrução_select</p><p>[WITH CHECK OPTION]</p><p>Para executar a instrução CREATE VIEW, você deverá ser participante do cargo de administradores</p><p>do sistema (sysadmin), do cargo de proprietário do banco de dados (db_owner) ou do cargo de</p><p>administrador de linguagem de definição de dados (db_ddladmin) ou deverá ter a permissão CREATE</p><p>VIEW.</p><p>Você também deverá ter a permissão SELECT em todas as tabelas ou views às quais a view faz</p><p>referência. Para evitar situações em que o proprietário de uma view e o proprietário das tabelas</p><p>subjacentes sejam diferentes,</p><p>de várias maneiras e</p><p>possuírem estruturas diferenciadas, porém isto não impede que a maneira de solucionar o problema seja</p><p>eficiente. Segundo Verzello nos diz em uma de suas obras, assim como um arquiteto desenha e escreve</p><p>especificações para descrever como uma tarefa (por exemplo, construção de um edifício) deverá ser</p><p>efetuada e o engenheiro do projeto desenvolve um esquema detalhado das atividades de construção, um</p><p>especialista em informação desenvolve um plano, que será comunicado a outros, de como o problema</p><p>de processamento de dados deve ser resolvido.</p><p>Para auxiliarmos na sua compreensão, mostraremos como estes conceitos de estruturas, bem como</p><p>as particularidades de conexões e dos procedimentos entre o método lógico, encaixam-se ou não para</p><p>resolução dos problemas de processamento de dados. A seguir, são apresentados alguns tipos de</p><p>procedimentos individualmente.</p><p>Linear</p><p>A técnica lógica linear é conhecida como um modelo tradicional de desenvolvimento e resolução de</p><p>um problema. Não está ligada a regras de hierarquia ou de estruturas de linguagens específicas de</p><p>programação de computadores. Devemos entender que este tipo de procedimento está voltado à técnica</p><p>matemática, a qual permite determinar a atribuição de recursos limitados, utilizando uma coleção de</p><p>elementos organizados ou ordenados por uma só propriedade, de tal forma que cada um deles seja</p><p>executado passo a passo de cima para baixo, em que tenha um só "predecessor" e um só "sucessor". A</p><p>figura abaixo apresenta um exemplo deste tipo de lógica.</p><p>Estruturada</p><p>A técnica da lógica estruturada é a mais usada pelos profissionais de processamento eletrônico de</p><p>dados. Possui características e padrões particulares, os quais diferem dos modelos das linguagens</p><p>elaboradas por seus fabricantes. Tem como pontos fortes para elaboração futura de um programa,</p><p>produzi-lo com alta qualidade e baixo custo.</p><p>A sequência, a seleção e a iteração são as três estruturas básicas para a construção do diagrama de</p><p>blocos. A figura abaixo seguinte apresenta um exemplo do tipo de lógica estruturada.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 11</p><p>Modular</p><p>A técnica da lógica modular deve ser elaborada como uma estrutura de partes independentes,</p><p>denominada de módulos, cujo procedimento é controlado por um conjunto de regras. Segundo James</p><p>Martin, suas metas são as seguintes:</p><p>- Decompor um diagrama em partes independentes;</p><p>- Dividir um problema complexo em problemas menores e mais simples;</p><p>- Verificar a correção de um módulo de blocos, independentemente de sua utilização como uma</p><p>unidade em um processo maior.</p><p>A modularização deve ser desenvolvida, se possível, em diferentes níveis. Poderá ser utilizada para</p><p>separar um problema em sistemas, um sistema em programas e um programa em módulos. A figura</p><p>abaixo apresenta um exemplo do tipo de lógica modular.</p><p>Português Estruturado</p><p>Como foi visto até agora, o diagrama de blocos é a primeira forma de notação gráfica, mas existe outra,</p><p>que é uma técnica narrativa denominada pseudocódigo, também conhecida como português estruturado</p><p>ou chamada por alguns de portugol.</p><p>Esta técnica de algoritmização é baseada em uma PDL - Program Design Language (Linguagem de</p><p>Projeto de Programação). Nesta obra, estamos apresentando-a em português. A forma original de escrita</p><p>é conhecida como inglês estruturado, muito parecida com a notação da linguagem PASCAL. A PDL (neste</p><p>caso, o português estruturado) é usada como referência genérica para uma linguagem de projeto de</p><p>programação, tendo como finalidade mostrar uma notação para elaboração de algoritmos, os quais serão</p><p>utilizados na definição, criação e desenvolvimento de uma linguagem computacional (Clipper, C, Pascal,</p><p>Delphi, Visual-Objects) e sua documentação. Abaixo, é apresentado um exemplo deste tipo de algoritmo.</p><p>programa MÉDIA</p><p>var</p><p>RESULTADO : caractere</p><p>N1, N2, N3, N4 : real</p><p>SOMA, MÉDIA : real</p><p>início</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 12</p><p>leia N1, N2, N3, N4</p><p>SOMA = 7) então</p><p>RESULTADO</p><p>recomenda-se que o usuário dbo possua todos os objetos de um banco de</p><p>dados. Ao criar o objeto, especifique sempre o usuário dbo como o nome do proprietário; caso contrário,</p><p>o objeto será criado com o seu nome de usuário como o proprietário do objeto.</p><p>Especifique o conteúdo de uma view usando uma instrução SELECT. Com algumas limitações, as</p><p>views podem ser tão complexas quanto você desejar. Você deverá especificar nomes de colunas se:</p><p>Quaisquer colunas da view derivam de uma expressão aritmética, de uma função interna ou de uma</p><p>constante.</p><p>Quaisquer colunas de tabelas que serão associadas compartilharem o mesmo nome.</p><p>Quando você cria views, é importante testar a instrução SELECT que define a view para garantir que</p><p>o SQL Server retorne o conjunto de resultados esperado. Depois de escrever e testar a instrução SELECT</p><p>e verificar os resultados, crie a view.</p><p>Restrições às Definições de Views</p><p>Ao criar views, considere as restrições a seguir:</p><p>A instrução CREATE VIEW não pode incluir as cláusulas COMPUTE ou COMPUTE BY.</p><p>A instrução CREATE VIEW não pode incluir a palavra chave INTO.</p><p>A instrução CREATE VIEW só poderá incluir a cláusula ORDER BY se a palavra-chave TOP for usada.</p><p>As views não podem fazer referência a tabelas temporárias.</p><p>As views não podem fazer referência a mais de 1.024 colunas.</p><p>A instrução CREATE VIEW não pode ser combinada com outras instruções Transact-SQL em um único</p><p>lote.</p><p>Este é um exemplo de view que cria uma coluna (Subtotal) (Subtotal), que calcula os subtotais de um</p><p>pedido com base nas colunas UnitPrice (Preço unitário), Quantity (Quantidade) e Discount (Desconto).</p><p>USE Northwind</p><p>GO</p><p>CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal)</p><p>AS</p><p>SELECT OD.OrderID,</p><p>SUM(CONVERT</p><p>(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)</p><p>FROM [Order Details] OD</p><p>GROUP BY OD.OrderID</p><p>GO</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 102</p><p>Este exemplo consulta a view para ver os resultados.</p><p>SELECT * FROM OrderSubtotalsView</p><p>Frequentemente, você cria views para fornecer um modo conveniente de examinar informações de</p><p>duas ou mais tabelas associadas em um local central.</p><p>Neste exemplo, ShipStatusView associa as tabelas Customers (Clientes) e Orders (Pedidos).</p><p>USE Northwind</p><p>GO</p><p>CREATE VIEW dbo.ShipStatusView</p><p>AS</p><p>SELECT OrderID, ShippedDate, ContactName</p><p>FROM Customers c INNER JOIN Orders o</p><p>ON c.CustomerID = O.CustomerID</p><p>WHERE RequiredDate</p><p>dos dados.</p><p>Quando views que associam diversas tabelas e avaliam expressões complexas são aninhadas dentro</p><p>de outra view, poderá ser difícil determinar a origem imediata de qualquer problema de desempenho.</p><p>Portanto, convém considerar a criação de definições de views separadas, em vez de aninhar views.</p><p>No exemplo a seguir, TopSalesView consulta um subconjunto de registros de TotalPurchaseView.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 104</p><p>USE Northwind</p><p>GO</p><p>CREATE VIEW dbo.TopSalesView</p><p>AS</p><p>SELECT *</p><p>FROM dbo.TotalPurchaseView</p><p>WHERE Subtotal > 50000</p><p>GO</p><p>A definição de view dbo.TopSalesView oculta a complexidade da consulta subjacente usada para criar</p><p>TotalPurchaseView, que associa três tabelas base.</p><p>USE Northwind</p><p>GO</p><p>CREATE VIEW dbo.TotalPurchaseView</p><p>AS</p><p>SELECT CompanyName, Sum(CONVERT(money,</p><p>(UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal</p><p>FROM Customers c INNER JOIN Orders o</p><p>ON c.CustomerID=o.CustomerID</p><p>INNER JOIN [Order Details] od</p><p>ON o.OrderID = od.OrderID</p><p>GROUP BY CompanyName</p><p>GO</p><p>Se os usuários tiverem problemas de desempenho ao executarem a consulta a seguir para listar os</p><p>itens mais vendidos da empresa Ernst Handel, a origem do problema não estará imediatamente aparente.</p><p>SELECT *</p><p>FROM dbo.TopSalesView</p><p>WHERE CompanyName = 'Ernst Handel'</p><p>Usando Views Indexadas</p><p>Você pode criar índices em views. Uma view indexada armazena o conjunto de resultados de uma</p><p>view no banco de dados. Devido ao tempo rápido de recuperação, é possível usar views indexadas para</p><p>melhorar o desempenho de consultas.</p><p>Criando uma View Indexada</p><p>Crie uma view indexada implementando um índice UNIQUE CLUSTERED em uma view. Os resultados</p><p>da view são armazenados nas páginas do nível folha do índice de agrupamento.</p><p>Depois de criar o índice UNIQUE CLUSTERED, você poderá criar outros índices nessa view. Uma</p><p>view indexada reflete automaticamente as modificações efetuadas nos dados das tabelas base. À medida</p><p>que os dados são alterados, o índice UNIQUE CLUSTERED é atualizado.</p><p>Diretrizes para a Criação de Views Indexadas</p><p>O otimizador de consultas determina automaticamente se uma consulta se beneficiará do uso de uma</p><p>view indexada. Isso ocorre mesmo que a consulta não faça referência à view indexada. Como prática</p><p>geral, deixe que o otimizador de consultas determine quando usar views indexadas.</p><p>Usando o Index Tuning Wizard (Assistente para ajuste de índice), você pode melhorar</p><p>significativamente sua capacidade de determinar a melhor combinação de índices e views indexadas para</p><p>otimizar o desempenho de consultas.</p><p>Crie views indexadas quando:</p><p>A melhoria de desempenho em termos da maior velocidade na recuperação dos resultados compensa</p><p>o maior custo de manutenção.</p><p>Os dados subjacentes não são atualizados com freqüência.</p><p>As consultas executam uma quantidade significativa de associações e agregações que processam</p><p>vários registros ou são executadas freqüentemente por vários usuários.</p><p>Restrições à criação de views indexadas</p><p>Ao criar views indexadas, considere as restrições a seguir:</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 105</p><p>O primeiro índice criado em uma view deve ser um índice de agrupamento exclusivo.</p><p>Você deve criar a view com a opção SCHEMABINDING.</p><p>A view pode fazer referência a tabelas base, mas não a outras views.</p><p>Você deve usar nomes de duas partes para fazer referência a tabelas e funções definidas pelo usuário.</p><p>As conexões subseqüentes devem ter as mesmas configurações de opções para usar a view indexada.</p><p>Você deve usar a propriedade IsIndexable da função OBJECTPROPERTY para certificarse de que</p><p>possa indexar uma view.</p><p>Práticas Recomendadas</p><p>As práticas recomendadas a seguir devem ajudá-lo a usar e gerenciar views em seus bancos de dados:</p><p>Você deve desenvolver uma convenção de nomeação consistente para fazer a distinção entre views</p><p>e tabelas.</p><p>Especifique dbo como o proprietário quando criar views. O dbo deve ser proprietário de todos os</p><p>objetos aos quais a definição de view faz referência. Isso torna desnecessário especificar o nome do</p><p>proprietário quando você consulta a view porque o proprietário do banco de dados é o proprietário padrão.</p><p>O proprietário do banco de dados também tem permissão em todos os objetos subjacentes do banco de</p><p>dados, evitando, assim, possíveis cadeias de propriedades interrompidas.</p><p>Verifique as dependências dos objetos antes de descartá-los do banco de dados. Execute o</p><p>procedimento armazenado do sistema sp_depends ou exiba as dependências no SQL Server Enterprise</p><p>Manager para certificar-se de que não existam dependências de um objeto que você planeja descartar.</p><p>Nunca exclua entradas da tabela do sistema syscomments. Se o seu aplicativo exigir que a definição</p><p>não esteja visível para outras pessoas, inclua a opção WITH ENCRYPTION com a instrução CREATE</p><p>VIEW ou ALTER VIEW. Certifique-se de salvar a definição do script antes de criptografá-lo.</p><p>Avalie cuidadosamente se você deve criar views baseadas em views. Elas podem ocultar</p><p>complexidades e poderiam ser a origem de problemas de desempenho.</p><p>TRIGGERS19</p><p>Um trigger é um tipo especial de procedimento armazenado, que é executado sempre que há uma</p><p>tentativa de modificar os dados de uma tabela que é protegida por ele. Por isso temos:</p><p>- Associados a uma tabela: os TRIGGERS são definidos em uma tabela específica, que é</p><p>denominada tabela de TRIGGERS;</p><p>- Chamados Automaticamente: quando há uma tentativa de inserir, atualizar ou excluir os dados em</p><p>uma tabela, e um TRIGGER tiver sido definido na tabela para essa ação específica, ele será executado</p><p>automaticamente, não podendo nunca ser ignorado.</p><p>- Não podem ser chamados diretamente: ao contrário dos procedimentos armazenados do sistema,</p><p>os disparadores não podem ser chamados diretamente e não passam nem aceitam parâmetros.</p><p>- É parte de uma transação: o TRIGGER e a instrução que o aciona são tratados como uma única</p><p>transação, que poderá ser revertida em qualquer ponto do procedimento, caso você queria usar</p><p>“ROLLBACK”.</p><p>Orientações básicas quando estiver usando TRIGGER</p><p>As definições de TRIGGERS podem conter uma instrução “ROLLBACK TRANSACTION”, mesmo que</p><p>não exista uma instrução explícita de “BEGIN TRANSACTION”.</p><p>Se uma instrução “ROLLBACK TRANSACTION” for encontrada, então toda a transação (o TRIGGER</p><p>e a instrução que o disparou) será revertida ou desfeita. Se uma instrução no script do TRIGGER seguir</p><p>uma instrução “ROLLBACK TRANSACTION”, a instrução será executada, então, isso nos obriga a ter</p><p>uma condição IF contendo uma cláusula RETURN para impedir o processamento de outras instruções.</p><p>Não é uma boa prática utilizar “ROLLBACK TRANSACTION” dentro de seus TRIGGERS, pois isso</p><p>gerará um retrabalho, afetando muito no desempenho de seu banco de dados, pois toda a consistência</p><p>deverá ser feita quando uma transação falhar, lembrando que tanto a instrução quanto o TRIGGER</p><p>formam uma única transação. O mais indicado é validar as informações fora das transações com</p><p>TRIGGER para então efetuar, evitando que a transação seja desfeita.</p><p>Para que um TRIGGER seja disparado, o usuário qual entrou com as instruções, deverá ter permissão</p><p>de acessar tanto a entidade e consequentemente ao TRIGGER.</p><p>19 https://www.devmedia.com.br/introducao-a-triggers/1695</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 106</p><p>Pontos fundamentais das Triggers20</p><p>Segurança e Integridade</p><p>Podemos utilizar as Triggers para garantir uma segurança maior no nosso banco, ela tem como tarefa</p><p>restringir o acesso as tabelas e controlar as atualizações.</p><p>Auditoria</p><p>Como disse anteriormente, as Triggers são executadas automaticamente, assim, podemos utilizá-las</p><p>para fazer auditoria sobre acesso ao banco de dados.</p><p>Replicação de Dados</p><p>São excelentes para criar uma política de replicação síncrona de uma tabela para</p><p>outra.</p><p>Integridade</p><p>A partir das Triggers podemos criar controles mais complexos para os relacionamento das tabelas.</p><p>Controle de dados</p><p>Caso uma tabela tenha dados, cujo valor depende de outras tabelas, as Triggers pode atualizar</p><p>automaticamente a coluna com os valores derivados.</p><p>Usos e aplicabilidade dos TRIGGERS</p><p>- Impor uma integridade de dados mais complexa do que uma restrição CHECK;</p><p>- Definir mensagens de erro personalizadas;</p><p>- Manter dados desnormalizados;</p><p>- Comparar a consistência dos dados – posterior e anterior – de uma instrução UPDATE.</p><p>Os TRIGGERS são usados com enorme eficiência para impor e manter integridade referencial de baixo</p><p>nível, e não para retornar resultados de consultas. A principal vantagem é que eles podem conter uma</p><p>lógica de processamento complexa.</p><p>Você pode usar TRIGGERS para atualizações e exclusões em cascata através de tabelas relacionadas</p><p>em um banco de dados, impor integridades mais complexas do que uma restrição CHECK, definir</p><p>mensagens de erro personalizadas, manter dados desnormalizados e fazer comparações dos momentos</p><p>anteriores e posteriores a uma transação.</p><p>Quando queremos efetuar transações em cascata, por exemplo, um TRIGGER de exclusão na tabela</p><p>PRODUTO do banco de dados Northwind pode excluir os registros correspondentes em outras tabelas</p><p>que possuem registros com os mesmos valores de PRODUCTID excluídos para que não haja quebra na</p><p>integridade, como a dito popular “pai pode não ter filhos, mas filhos sem um pai é raro”.</p><p>Pode-se utilizar os TRIGGERS para impor integridade referencial da seguinte maneira:</p><p>- Executando uma ação ou atualizações e exclusões em cascata: A integridade referencial pode</p><p>ser definida através do uso das restrições FOREIGNKEY e REFERENCE, com a instrução CREATE</p><p>TABLE. Os TRIGGERS fazem bem o trabalho de checagem de violações e garantem que haja coerência</p><p>de acordo com a sua regra de negócios. Se você exclui um cliente, de certo, você terá que excluir também</p><p>todo o seu histórico de movimentações. Não seria boa coisa se somente uma parte desta transação</p><p>acontecesse.</p><p>- Criando disparadores de vários registros: Quando mais de um registro é atualizado, inserido ou</p><p>excluído, você deve implementar um TRIGGER para manipular vários registros.</p><p>Criando TRIGGERS</p><p>As TRIGGERS são criadas utilizando a instrução CREATE TRIGGER que especifica a tabela onde ela</p><p>atuará, para que tipo de ação ele irá disparar suas ações seguido pela instrução de conferência para</p><p>disparo da ação.</p><p>E meio a esses comandos, temos algumas restrições para o bom funcionamento. O SQL Server não</p><p>permite que as instruções a seguir, sejam utilizadas na definição de uma TRIGGER:</p><p>20 http://elderstroparo.blogspot.com</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 107</p><p>- ALTER DATABASE;</p><p>- CREATE DATABASE;</p><p>- DISKINIT;</p><p>- DISKRESIZE;</p><p>- DROP DATABASE;</p><p>- LOAD DATABASE;</p><p>- LOAD LOG;</p><p>- RECONFIGURE;</p><p>- REATORE DATABASE;</p><p>- RESTORELOG.</p><p>Caso você queira determinar referências que um TRIGGER faz a objetos, execute o procedimento</p><p>armazenado do sistema sp_depends, criando o seguinte comando da Figura 1:</p><p>Figura 1. Mostra que o TRIGGER criado, não referencia e nem é referenciado por nenhum outro objeto</p><p>Para determinar os TRIGGERS existentes em uma específica e suas ações, execute o procedimento</p><p>armazenado do sistema sp_helptrigger, criando o seguinte comando da Figura 2:</p><p>Figura 2. Mostra que temos um TRIGGER somente para INSERT.</p><p>Como funcionam os TRIGGERS</p><p>Quando incluímos, excluímos ao alteramos algum registro em um banco de dados, são criadas tabelas</p><p>temporárias que passam a conter os registros excluídos, inseridos e também o antes e depois de uma</p><p>atualização.</p><p>Quando você exclui um determinado registro de uma tabela, na verdade você estará apagando a</p><p>referência desse registro, que ficará, após o DELETE, numa tabela temporária de nome DELETED. Um</p><p>TRIGGER implementado com uma instrução SELECT poderá lhe trazer todos ou um número de registro</p><p>que foram excluídos.</p><p>Assim como acontece com DELETE, também ocorrerá com inserções em tabelas, podendo obter os</p><p>dados ou o número de linhas afetadas buscando na tabela INSERTED.</p><p>Já no UPDATE ou atualização de registros em uma tabela, temos uma variação e uma concatenação</p><p>para verificar o antes e o depois.</p><p>De fato, quando executamos uma instrução UPDATE, a “engine” de qualquer banco de dados tem um</p><p>trabalho semelhante, primeiro exclui os dados tupla e posteriormente faz a inserção do novo registro que</p><p>ocupará aquela posição na tabela, ou seja, um DELETE seguido por um INSERT. Quando então, há uma</p><p>atualização, podemos buscar o antes e o depois, pois o antes estará na tabela DELETED e o depois</p><p>estará na tabela INSERTED.</p><p>Nada nos impede de retornar dados das tabelas temporárias (INSERTED, DELETED) de volta às</p><p>tabelas de nosso banco de dados, mas atente-se, os dados manipulados são temporários assim como as</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 108</p><p>tabelas e só estarão disponíveis nesta conexão. Após fechar, as tabelas e os dados não serão mais</p><p>acessíveis.</p><p>TRIGGER Insert</p><p>De acordo com a sua vontade, um TRIGGER por lhe enviar mensagens de erro ou sucesso, de acordo</p><p>com as transações. Estas mensagens podem ser definidas em meio a um TRIGGER utilizando</p><p>condicionais IF e indicando em PRINT sua mensagem personalizada. Por exemplo, vamos criar uma</p><p>tabela chamada tbl_usuario, com a qual simularemos um cadastro de usuários que você também poderá</p><p>criar para fazer os seus testes. A cada inserção de novo usuário, podemos exibir uma mensagem</p><p>personalizada de sucesso na inserção.</p><p>Na Figura 3 vemos o código para criar a tabela.</p><p>Figura 3. Criando então a tabela.</p><p>Após criamos a tabela iremos criar nossa TRIGGER personalizada que nos mostrará uma mensagem</p><p>personalizada a partir de uma inserção. Para isso observe a Figura 4.</p><p>Figura 4. Criando então o trigger.</p><p>Assim que começarmos a pular nossa tabela tbl_usuario, a cada registro inserido, o SGBD nos</p><p>devolverá uma mensagem, caso a inserção seja realizada com sucesso, com base nos registros que são</p><p>adicionados também a nossa tabela lógica/temporária INSERTED.</p><p>Na Figura 5 temos a Mensagem disparada pelo TRIGGER.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 109</p><p>Figura 5. Recebendo a mensagem disparada pelo TRIGGER.</p><p>Existem várias outras abordagens para o uso de TRIGGERS com INSERTS, por exemplo, quando se</p><p>faz um controle de entrada e saídas de produtos, podemos ter um TRIGGER executando a baixa dos</p><p>produtos no estoque (entrada) diante daqueles que foram solicitados num pedido (saída). O TRIGGER</p><p>pode automatizar essa rotina.</p><p>TRIGGER Delete</p><p>Podemos usar um TRIGGER para monitorar certas exclusões de registros de acordo com a sua regra</p><p>de negócios e também para proteger a integridade dos dados em um determinado banco de dados.</p><p>Alguns fatos devem ser considerados ao usar TRIGGERS DELETE:</p><p>- Quando um registro é acrescentado a tabela temporária DELETED, ele deixa de existir na tabela do</p><p>banco de dados. Portanto, a tabela DELETED, não apresentará registros em comum com as tabelas do</p><p>banco de dados;</p><p>- É alocado espaço na memória para criar a tabela DELETED, que está sempre em cache;</p><p>- Um TRIGGER para uma ação DELETE não é executado para a instrução TRUNCATE TABLE porque</p><p>a mesma não é registrada no log de transações.</p><p>Podemos criar um TRIGGER que não permita a exclusão de usuários de nossa tabela tbl_usuario, da</p><p>seguinte forma apresentada na Figura 6.</p><p>Figura 6. Criando o TRIGGER DELETE.</p><p>O TRIGGER foi criado com sucesso. Na sequência tentaremos executar uma instrução para excluir o</p><p>usuário que temos já em nossa tabela. A Figura 7 mostra a mensagem disparada pelo TRIGGER.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 110</p><p>Figura 7. Veja que é apresentada também</p><p>a mensagem de erro que definimos no TRIGGER e depois a mensagem que personalizamos.</p><p>Veja que realmente, TRIGGERS pode nos trazer segurança e também integridade dos dados mesmo</p><p>que desnormalizados. No caso apresentado, a mensagem de erro em vermelho foi chamada pelo nosso</p><p>TRIGGER e após ele dispara também, a mensagem que personalizamos.</p><p>Assim, existem várias outras maneiras de expandirmos o exemplo.</p><p>TRIGGER Update</p><p>Partindo então do princípio que uma instrução UPDATE apresenta as duas etapas, as quais já citamos,</p><p>com ela podemos verificar o antes e o depois, já que os dados estarão disponíveis nas tabelas</p><p>temporárias DELETED – momento anterior – INSERTED – momento atual, logo após o UPDATE.</p><p>Na Figura 8 criamos o TRIGGER UPDATE.</p><p>Figura 8. Criamos então a TRIGGER para UPDATE.</p><p>A qualquer momento daqui por diante, poderemos então contemplar, sempre que executada uma</p><p>instrução para atualização de registros, o antes e o depois, o que acabamos de definir no TRIGGER para</p><p>UPDATE.</p><p>Vamos então, executar a instrução para atualizar o único registro que temos então em nossa tabela.</p><p>Mudemos o nome WAGNER BIANCHI para WAGNER BIANCHI Jr. Veremos então como era o nome</p><p>antes e como é o nome agora.</p><p>Na Figura 9 vemos o conteúdo disparado pelo TRIGGER.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 111</p><p>Figura 9. Visualizando o antes e o depois com a definição de TRIGGER FOR UPDATE.</p><p>Alterando o Conteúdo de um Trigger</p><p>O comando ALETR dá suporte para a alteração de muitos objetos criados dentro de um banco de</p><p>dados. Podemos chamar alterar o conteúdo de um TRIGGER facilmente, trocando a palavra CREATE</p><p>por ALTER e em seguida, executando o comando.</p><p>Observação: Para definição de TRIGGERS, podemos também usar o comando WITH ENCRYPTION,</p><p>mas, caso você não se lembre do que foi escrito no TRIGGER, não será possível altera-lo.</p><p>Vamos alterar então o TRIGGER para UPADTE, para que ele, ao invés de mostrar passado e presente,</p><p>como mostra a Figura 10. Vamos fazer com ele nos mostre uma mensagem, como mostra a Figura 11.</p><p>Figura 10. ALTER TRIGGER para UPDATE.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 112</p><p>Figura 11. Exibindo a mensagem de nossa TRIGGER alterada.</p><p>Apagando um TRIGGER</p><p>Caso você queira apagar um TRIGGER do banco de dados, utilize DROP TRIGGER mais o nome do</p><p>TRIGGER que deseja apagar, como mostra a Figura 12.</p><p>Figura 12. Apagando o TRIGGER.</p><p>Questões</p><p>01. (DPE/RS - Analista - FCC/2017) A função básica de um gatilho ou trigger, em um banco de dados</p><p>relacional, é:</p><p>(A) verificar o grau de normalização de todas as tabelas de um banco de dados, assegurando-se do</p><p>respeito às formas normais desejadas.</p><p>(B) realizar a compilação de todos comandos SQL presentes no banco de dados e armazenar os</p><p>comandos compilados.</p><p>(C) verificar a correção das definições presentes no dicionário de dados, apontando eventuais erros</p><p>de semântica.</p><p>(D) executar comandos previamente declarados, quando da ocorrência de um evento no banco de</p><p>dados, também especificado em sua definição.</p><p>(E) verificar a eficácia da política de atribuição de senhas implementada no banco de dados,</p><p>determinando seu grau de eficácia.</p><p>02. (AL/SP - Agente Técnico Legislativo Especializado - FCC) Triggers são:</p><p>(A) questões armazenadas cuja execução é disparada somente antes da ocorrência de um evento em</p><p>uma tabela com o qual estão relacionadas.</p><p>(B) procedimentos armazenados cuja execução é disparada somente antes da ocorrência de um</p><p>evento em uma tabela com o qual estão relacionados.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 113</p><p>(C) procedimentos armazenados cuja execução é disparada antes ou depois da ocorrência de um</p><p>evento em uma tabela com o qual estão relacionados.</p><p>(D) procedimentos armazenados cuja execução é disparada somente depois da ocorrência de um</p><p>evento em uma tabela com o qual estão relacionados.</p><p>(E) questões armazenadas cuja execução é disparada somente depois da ocorrência de um evento</p><p>em uma tabela com o qual estão relacionadas.</p><p>03. (SERGAS - Analista de Sistemas – FCC) Na linguagem SQL, são procedimentos executados</p><p>implicitamente quando ocorre determinada ação do usuário, tal qual, uma modificação de uma tabela:</p><p>(A) Inserts.</p><p>(B) Queries.</p><p>(C) Views.</p><p>(D) Triggers.</p><p>(E) Selects.</p><p>04. (INFRAERO - Analista - Banco de Dados - FCC) Em banco de dados, Triggers são:</p><p>(A) eventos enviados automaticamente pelo banco de dados em resposta à execução de uma</p><p>procedure.</p><p>(B) objetos que executam tarefas na medida que as aplicações interagem com o banco de dados.</p><p>(C) objetos que executam tarefas e retornam um valor associado a sua operação.</p><p>(D) objetos armazenados que são automaticamente executados em resposta à execução de algum</p><p>evento.</p><p>(E) funções e procedures unidos em uma sequência de comandos contínuos e progressivos.</p><p>Gabarito</p><p>01.D / 02.C / 03.D / 04.D</p><p>Respostas</p><p>01. Resposta: D</p><p>Trigger é um tipo especial de procedimento armazenado, que é executado sempre que há uma</p><p>tentativa de modificar os dados de uma tabela que é protegida por ele.</p><p>02. Resposta: C</p><p>A trigger pode ser executada before or after um evento de insert, update ou delete.</p><p>03. Resposta: D</p><p>Um TRIGGER (gatilho) é criado para disparar, automaticamente, sempre que o SGBD detectar a</p><p>ocorrência de um ou mais comandos de acesso a tabela.</p><p>04. Resposta: D</p><p>Gatilho ou trigger é um recurso de programação executado sempre que o evento associado ocorrer.</p><p>Trigger é um tipo especial de procedimento armazenado, que é executado sempre que há uma tentativa</p><p>de modificar os dados de uma tabela que é protegida por ele.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 114</p><p>OPERAÇÕES BÁSICAS SOBRE ESTRUTURAS - INTRODUÇÃO AO SQL/ESTRUTURA DA</p><p>LINGUAGEM SQL21</p><p>A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos efetuar</p><p>sobre um banco de dados.</p><p>DDL - Linguagem de Definição de Dados</p><p>É um conjunto de comandos dentro da SQL usada para a definição das estruturas de dados,</p><p>fornecendo as instruções que permitem a criação, modificação e remoção das tabelas, assim como</p><p>criação de índices. Estas instruções SQL permitem definir a estrutura de uma base de dados, incluindo</p><p>as linhas, colunas, tabelas, índices, e outros metadados.</p><p>Entre os principais comandos DDL estão CREATE (Criar), DROP (deletar) e ALTER (alterar).</p><p>Exemplos: CREATE DATABASE meu_banco_de_dados</p><p>DML - Linguagem de Manipulação de Dados</p><p>É o grupo de comandos dentro da linguagem SQL utilizado para a recuperação, inclusão, remoção e</p><p>modificação de informações em bancos de dados.</p><p>Os principais comandos DML são SELECT (Seleção de Dados), INSERT (Inserção de Dados),</p><p>UPDATE (Atualização de Dados) e DELETE (Exclusão de Dados).</p><p>DCL - Linguagem de Controle de Dados</p><p>É o grupo de comandos que permitem ao administrador de banco de dados controlar o acesso aos</p><p>dados deste banco. Alguns exemplos de comandos DCL são:</p><p>GRANT: Permite dar permissões a um ou mais usuários e determinar as regras para tarefas</p><p>determinadas;</p><p>REVOKE: Revoga permissões dadas por um GRANT.</p><p>As tarefas básicas que podemos conceder ou barrar permissões são:</p><p>- CONNECT</p><p>- SELECT</p><p>- INSERT</p><p>- UPDATE</p><p>- DELETE</p><p>- USAGE</p><p>- Resumo</p><p>A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos efetuar</p><p>sobre um banco de dados.</p><p>Linguagem de definição de dados (ou DDL, de Data Definition Language) é um conjunto de comandos</p><p>dentro da SQL usada para a definição das estruturas de dados. Entre os principais comandos DDL estão</p><p>CREATE (Criar), DROP (deletar) e ALTER (alterar).</p><p>Linguagem de manipulação de dados (ou DML, de Data Manipulation Language) é o grupo de</p><p>comandos dentro da linguagem SQL utilizado para a recuperação, inclusão, remoção e modificação de</p><p>informações em bancos de dados. Os principais comandos DML</p><p>são SELECT (Seleção de Dados),</p><p>INSERT (Inserção de Dados), UPDATE (Atualização de Dados) e DELETE (Exclusão de Dados).</p><p>Linguagem de controle de dados (ou DCL, de Data Control Language) é o grupo de comandos que</p><p>permitem ao administrador de banco de dados controlar o acesso aos dados deste banco.</p><p>21 Fonte: https://pt.wikiversity.org/wiki/Introdu%C3%A7%C3%A3o_ao_SQL/Estrutura_da_Linguagem_SQL</p><p>Noções de SQL: uso do join, union, exists e subconsultas, distinct.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 115</p><p>Pesquisa em Base de Dados 22</p><p>A pesquisa em bases de dados tem se firmado como a fonte mais utilizada de informações para</p><p>trabalhos científicos. Com o crescimento da Faculdade, do Congresso Universitário, dos Grupos de</p><p>Estudo e das Ligas, o aluno se vê cada vez mais obrigado a procurar referências bibliográficas em bases</p><p>de dados. A pesquisa na verdade é muito simples, mas sempre surgem dificuldades quando se trata de</p><p>computadores. Portanto, aí vai, um tutorial básico para aquele aluno que não consegue achar nem o 'q'</p><p>no teclado...</p><p>Autor - Marcos Cajueiro Fernandes (XXIX)Revisão e Assessoria - Giancarlo Dall´Olio (XXX), Eduardo</p><p>Joaquim Lopes Alho (XXIX), Plínium (Internet Freak).</p><p>Não vou passar pelo básico da navegação na Internet (estou pressupondo que se o internauta chegou</p><p>até aqui, é porque entende do assunto); caso contrário, procure um tutorial sobre navegação na Internet</p><p>antes de começar a ler esse. Achei melhor fazer uma narração na 1ª pessoa, porque além de ter</p><p>dificuldade com dissertações (hehehe) creio que não fica tão formal. Optei também por usar um exemplo</p><p>de pesquisa direto, o que na minha opinião facilita o aprendizado. Vamos então a ele:</p><p>O Site de origem das bases de dados que eu escolhi foi a Bireme (http://www.bireme.br) por ser um</p><p>dos mais fáceis de usar, bem como um dos mais conhecidos.</p><p>Após digitar o endereço na janela de navegação do Internet Explorer, Netscape Navigator, ou qualquer</p><p>que seja o programa que você usa, a seguinte página será exibida:</p><p>O usuário, entre uma série de opções que não serão discutidas aqui, deverá então selecionar</p><p>"pesquisa em bases de dados" como indicado na figura 2. A próxima tela a aparecer permite que o usuário</p><p>escolha entre uma série de alternativas, entre as quais estão LILACS, AdSaúde, MEDLINE, PAHO, etc.</p><p>Clicando no triângulo com uma exclamação dentro ao lado, tem-se uma informação mais detalhada sobre</p><p>cada uma dessas bases de dados. Nessa pesquisa, vamos usar a MEDLINE.</p><p>22 Fonte: http://ajtrabalhos.blogspot.com.br/2008/02/aprenda-fazer-pesquisa-em-base-de-dados.html</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 116</p><p>A próxima tela mostra o formulário de pesquisas, no caso o formulário livre. Há 3 tipos de formulário:</p><p>o livre, o avançado e o básico. Aqui vamos usar o avançado, que permite um maior refinamento na</p><p>pesquisa. Deve-se então selecionar o modo avançado de formulário como mostrado na figura 4.</p><p>No formulário avançado há uma série de ferramentas que facilitam (ou dificultam) a pesquisa a ser</p><p>realizada (figura 5). Vamos passo a passo por cada uma delas:</p><p>1 - Base de Dados - No caso da MEDLINE especifica uma determinada época da base de dados, como</p><p>mostrado na figura 6.</p><p>2 - Pesquisar - Onde as palavras relacionadas à pesquisa devem ser colocadas.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 117</p><p>3 - no Campo - Tipo de pesquisa. Exemplo - pode-se usar "transplante" como palavra ou descritor do</p><p>assunto e "Português" como idioma da pesquisa a ser realizada.</p><p>4 - Índice - O índice é uma lista de palavras que se relacionam somente ao campo. Vamos supor que</p><p>o usuário não esteja achando a palavra "transplant"; pode ir até o índice e localizar a grafia correta da</p><p>palavra em inglês (transplantation).</p><p>5 - Conjunções - De alternativa (ou - or), de adição (e - and) e de exclusão (e não - and not). Refinam</p><p>mais ainda a pesquisa, excluindo ou adicionando palavras relacionadas ou não.</p><p>Vamos então à pesquisa de exemplo.</p><p>Nós desejamos ver todos os artigos que tenham em seu conteúdo algo sobre transplante renal e só</p><p>queremos artigos em português que foram publicados entre 1996 e 2000. Em base de dados (1)</p><p>selecionamos MEDLINE_1996-2000; no campo 'Pesquisar' (2) colocamos 'transplante' no 1º quadro,</p><p>'renal' no 2º quadro e 'Português' no 3º quadro. Na ferramenta 'no campo' (3), deixamos marcado</p><p>'Palavras' para 'transplante' e 'renal', enquanto que para 'Português' deve-se selecionar 'Idioma'. Por</p><p>último devemos selecionar and (e) para as três palavras da pesquisa, visto que queremos artigos sobre</p><p>transplante E renal E em português. Veja na seqüência a figura relacionada à pesquisa que fizemos:</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 118</p><p>O resultado da pesquisa é o ponto final e mais importante dela. Deve-se saber selecionar os artigos</p><p>de importância maior e deixar de lado artigos de menor impacto. Essa parte não depende de técnica,</p><p>apenas de bom senso e discernimento do autor. A página de resultados não tem muito segredo, mas de</p><p>qualquer forma, vamos lá: todos os dados da pesquisa realizada podem ser visualizados na parte de cima</p><p>da página de resultados (Base de Dados, palavras pesquisadas) bem como o número de referências</p><p>encontradas.</p><p>No caso de serem encontradas 2 ou mais referências, é recomendável selecionar as mais importantes</p><p>no quadrinho "seleciona", pois o próprio site guarda as suas escolhas para serem mostradas quando for</p><p>solicitado (sua seleção - figura 9). O botão "para imprimir" mostra uma tela em preto e branco, sem figuras,</p><p>pronta para impressão, o que é importante para uma futura visita à biblioteca à procura dos artigos (figura</p><p>10). O botão "Fotocópia" redireciona o usuário para uma página onde podem ser feitos pedidos de</p><p>fotocópias em casa (útil para quem está fora de São Paulo).</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 119</p><p>Noções sobre SQL23</p><p>Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de</p><p>pesquisa declarativa para banco de dados relacional (base de dados relacional). Muitas das</p><p>características originais do SQL foram inspiradas na álgebra relacional.</p><p>A linguagem é um grande padrão de banco de dados. Isto decorre da sua simplicidade e facilidade de</p><p>uso. Ela se diferencia de outras linguagens de consulta a banco de dados no sentido em que uma consulta</p><p>SQL especifica a forma do resultado e não o caminho para chegar a ele. Ela é uma linguagem declarativa</p><p>em oposição a outras linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se iniciam</p><p>na linguagem.</p><p>Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vários "dialetos"</p><p>desenvolvidos por outros produtores. Essa expansão levou à necessidade de ser criado e adaptado um</p><p>padrão para a linguagem. Esta tarefa foi realizada pela American National Standards Institute (ANSI) em</p><p>1986 e ISO em 1987.</p><p>Embora padronizado pela ANSI e ISO, possui muitas variações e extensões produzidos pelos</p><p>diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser</p><p>migrada de plataforma para plataforma sem mudanças estruturais principais.</p><p>Outra aproximação é permitir para código de idioma procedural ser embutido e interagir com o banco</p><p>de dados. Por exemplo, o Oracle e outros incluem Java na base de dados, enquanto o PostgreSQL</p><p>permite que funções sejam escritas em Perl, Tcl, ou C, entre outras linguagens.</p><p>Exemplo:</p><p>A pesquisa SELECT * FROM T terá como resultado todos os elementos de todas as linhas da tabela</p><p>chamada T. Partindo da mesma tabela T, a pesquisa SELECT C1 FROM T terá como resultado todos os</p><p>elementos da coluna C1 da tabela T. O resultado da pesquisa SELECT * FROM T WHERE C1=1</p><p>será</p><p>todos os elementos de todas as linhas onde o valor de coluna C1 é '1'.</p><p>23 Fonte: http://www.pedrofcarvalho.com.br/basico.pdf</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 120</p><p>Palavras-chave em SQL</p><p>DML - Linguagem de Manipulação de Dados</p><p>O primeiro grupo é a DML (Data Manipulation Language - Linguagem de manipulação de dados). DML</p><p>é um subconjunto da linguagem da SQL que é utilizado para realizar inclusões, consultas, alterações e</p><p>exclusões de dados presentes em registros. Estas tarefas podem ser executadas em vários registros de</p><p>diversas tabelas ao mesmo tempo, os comandos que realizam respectivamente as funções acima</p><p>referidas são Insert, Select, Update e Delete.</p><p>- INSERT é usada para inserir um registro (formalmente uma tupla) a uma tabela existente.</p><p>Ex: Insert into Pessoa (id, nome, sexo) value;</p><p>- SELECT – O Select é o principal comando usado em SQL para realizar consultas a dados</p><p>pertencentes a uma tabela.</p><p>- UPDATE para mudar os valores de dados em uma ou mais linhas da tabela existente.</p><p>- DELETE permite remover linhas existentes de uma tabela.</p><p>É possível inserir dados na tabela AREA usando o INSERT INTO:</p><p>Insert into AREA (arecod, aredes) values (100, "Informática"), (200, "Turismo"), (300, "Higiene e</p><p>Beleza");*</p><p>DDL - Linguagem de Definição de Dados</p><p>O segundo grupo é a DDL (Data Definition Language - Linguagem de Definição de Dados). Uma DDL</p><p>permite ao utilizador definir tabelas novas e elementos associados. A maioria dos bancos de dados de</p><p>SQL comerciais tem extensões proprietárias no DDL.</p><p>Os comandos básicos da DDL são poucos:</p><p>- CREATE: cria um objeto (uma Tabela, por exemplo) dentro da base de dados.</p><p>- DROP: apaga um objeto do banco de dados.</p><p>Alguns sistemas de banco de dados usam o comando ALTER, que permite ao usuário alterar um</p><p>objeto, por exemplo, adicionando uma coluna a uma tabela existente.</p><p>Outros comandos DDL:</p><p>CREATE TABLE</p><p>CREATE INDEX</p><p>CREATE VIEW</p><p>ALTER TABLE</p><p>ALTER INDEX</p><p>DROP INDEX</p><p>DROP VIEW</p><p>DCL - Linguagem de Controle de Dados</p><p>O terceiro grupo é o DCL (Data Control Language - Linguagem de Controle de Dados). DCL controla</p><p>os aspectos de autorização de dados e licenças de usuários para controlar quem tem acesso para ver ou</p><p>manipular dados dentro do banco de dados.</p><p>Duas palavras-chaves da DCL:</p><p>- GRANT - autoriza ao usuário executar ou setar operações.</p><p>- REVOKE - remove ou restringe a capacidade de um usuário de executar operações.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 121</p><p>DTL - Linguagem de Transação de Dados</p><p>- BEGIN WORK (ou START TRANSACTION, dependendo do dialeto SQL) pode ser usado para marcar</p><p>o começo de uma transação de banco de dados que pode ser completada ou não.</p><p>- COMMIT envia todos os dados das mudanças permanentemente.</p><p>- ROLLBACK faz com que as mudanças nos dados existentes desde o último COMMIT ou ROLLBACK</p><p>sejam descartadas.</p><p>COMMIT e ROLLBACK interagem com áreas de controle como transação e locação. Ambos terminam</p><p>qualquer transação aberta e liberam qualquer cadeado ligado a dados. Na ausência de um BEGIN WORK</p><p>ou uma declaração semelhante, a semântica de SQL é dependente da implementação.</p><p>DQL - Linguagem de Consulta de Dados</p><p>Embora tenha apenas um comando, a DQL é a parte da SQL mais utilizada. O comando SELECT</p><p>permite ao usuário especificar uma consulta ("query") como uma descrição do resultado desejado. Esse</p><p>comando é composto de várias cláusulas e opções, possibilitando elaborar consultas das mais simples</p><p>às mais elaboradas.</p><p>Cláusulas</p><p>As cláusulas são condições de modificação utilizadas para definir os dados que deseja selecionar ou</p><p>modificar em uma consulta.</p><p>- FROM - Utilizada para especificar a tabela que se vai selecionar os registros.</p><p>- WHERE – Utilizada para especificar as condições que devem reunir os registros que serão</p><p>selecionados.</p><p>- GROUP BY – Utilizada para separar os registros selecionados em grupos específicos.</p><p>- HAVING – Utilizada para expressar a condição que deve satisfazer cada grupo.</p><p>- ORDER BY – Utilizada para ordenar os registros selecionados com uma ordem especifica.</p><p>- DISTINCT – Utilizada para selecionar dados sem repetição.</p><p>Operadores Lógicos</p><p>- AND – E lógico. Avalia as condições e devolve um valor verdadeiro caso ambos sejam corretos.</p><p>- OR – OU lógico. Avalia as condições e devolve um valor verdadeiro se algum for correto.</p><p>- NOT – Negação lógica. Devolve o valor contrário da expressão.</p><p>Operadores relacionais</p><p>O SQL possui operadores relacionais, que são usados para realizar comparações entre valores, em</p><p>estruturas de controle. Eles são:</p><p>- BETWEEN – Utilizado para especificar um intervalo de valores.</p><p>- LIKE – Utilizado na comparação de um modelo e para especificar registros de um banco de dados.</p><p>"Like" + extensão % significa buscar todos resultados com o mesmo início da extensão.</p><p>- IN - Utilizado para verificar se o valor procurado está dentro de uma lista. Ex.: valor IN (1,2,3,4).</p><p>Funções de Agregação</p><p>As funções de soma se usam dentro de uma cláusula SELECT em grupos de registros para devolver</p><p>um único valor que se aplica a um grupo de registros.</p><p>- AVG – Utilizada para calcular a média dos valores de um campo determinado.</p><p>- COUNT – Utilizada para devolver o número de registros da seleção.</p><p>- SUM – Utilizada para devolver a soma de todos os valores de um campo determinado.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 122</p><p>- MAX – Utilizada para devolver o valor mais alto de um campo especificado.</p><p>- MIN – Utilizada para devolver o valor mais baixo de um campo especificado.</p><p>Sistemas de Banco de Dados que usam SQL</p><p>- Apache Derby</p><p>- Caché</p><p>- DB2</p><p>- Firebird</p><p>- HSQLDB (banco de dados implementado em Java)</p><p>- IDMS (banco de dados hierárquico)</p><p>- IMS (banco de dados hierárquico)</p><p>- Informix</p><p>- Ingres</p><p>- InterBase</p><p>- Microsoft Access</p><p>- Microsoft SQL Server</p><p>- MySQL</p><p>- Oracle</p><p>- PointBase Micro (banco de dados relacional implementado em Java)</p><p>- PostgreSQL</p><p>- SQLite</p><p>- LiteBase Mobile (dedicado à plataformas móveis como: Palm OS, Pocket PC, WinCE, Symbian)</p><p>- Sybase Adaptive Server Enterprise</p><p>- Teradata (primeiro RDBMS com arquitetura paralela do mercado)</p><p>Gerenciando Tabelas: DDL - DATA DEFINITION LANGUAGE</p><p>- Criando uma tabela:</p><p>CREATE TABLE CLIENTES</p><p>(ID VARCHAR(4) NOT NULL,</p><p>NOME VARCHAR(30) NOT NULL,</p><p>PAGAMENTO DECIMAL(4,2) NOT NULL);</p><p>- Deletando uma tabela:</p><p>DROP TABLE CLIENTES;</p><p>- Alterando uma tabela, adicionando uma nova coluna:</p><p>ALTER TABLE CLIENTES ADD COLUMN (TELEFONE VARCHAR(10) NOT NULL);</p><p>- Alterando uma tabela, modificando uma coluna:</p><p>ALTER TABLE CLIENTES MODIFY COLUMN (TELEFONE VARCHAR(12));</p><p>- Apagando os dados de uma tabela, retornando-a ao estado de origem:</p><p>TRUNCATE TABLE CLIENTES;</p><p>Manipulando Dados: DML - DATA MANIPULATION LANGUAGE</p><p>- Inserindo dados:</p><p>INSERT INTO EMPREGADOS VALUES ('1111', 'João da Silva', 100.50);</p><p>- Alterando dados:</p><p>UPDATE EMPREGADOS SET PAGAMENTO = 120 WHERE ID = '1111';</p><p>- Deletando dados:</p><p>DELETE FROM EMPREGADOS WHERE ID = '1111';</p><p>COMMIT;</p><p>ROLLBACK;</p><p>SAVEPOINT S1;</p><p>ROLLBACK TO S1;</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 123</p><p>Selecionando Dados: DQL - DATA QUERY LANGUAGE</p><p>SELECT column1, column2, ...</p><p>FROM table1, table2, ...</p><p>[ WHERE column1 = 'value1'</p><p>AND column2 = 'value2'</p><p>OR (column1 = 'value3'</p><p>AND column2 = 'value4')]</p><p>[GROUP BY column1, column2, ...]</p><p>[HAVING function = 'value']</p><p>[ORDER BY column1, column2, ...];</p><p>SELECT COUNT(*) FROM EMPREGADOS;</p><p>SELECT CIDADE, AVG(PAGAMENTO) FROM EMPREGADOS</p><p>GROUP BY CIDADE</p><p>HAVING AVG(PAGAMENTO) > 100;</p><p>SELECT E.NOME, PE.PAGAMENTO</p><p>FROM EMPREGADOS E, PAGAMENTO_EMPREGADOS PE</p><p>WHERE E.EID = PE.EID;</p><p>SELECT ID, NOME FROM EMPREGADOS</p><p>WHERE PAGAMENTO > (SELECT AVG(PAGAMENTO) FROM EMPREGADOS);</p><p>Controlando o Acesso aos Dados:</p><p>DCL - DATA CONTROL LANGUAGE</p><p>GRANT SELECT, INSERT, UPDATE, DELETE ON EMPREGADOS TD USER12;</p><p>REVOKE DELETE ON EMPREGADOS FROM USER12;</p><p>Gerenciando Índices: DDL - DATA DEFINITION LANGUAGE</p><p>CREATE INDEX EMPREGADOS_IDX ON EMPREGADOS(NOME);</p><p>CREATE UNIQUE INDEX EMPREGADOS_IDX ON EMPREGADOS(NOME);</p><p>CREATE INDEX EMPREGADOS_IDX ON EMPREGADOS(NOME, PAGAMENTO);</p><p>DROP INDEX EMPREGADOS IDX;</p><p>Gerenciando Visões (views): DDL - DATA DEFINITION LANGUAGE</p><p>CREATE VIEW MAIOR_PAGAMENTO_EMPREGADOS AS</p><p>SELECT FROM EMPREGADOS</p><p>WHERE PAGAMENTO > 150;</p><p>CREATE VIEW NOMES AS</p><p>SELECT NOME FROM EMPREGADOS;</p><p>DROP VIEW NOMES;</p><p>Funções de Agregação:</p><p>COUNT - Retorna o número de linhas</p><p>SUM - Retorna a soma de uma coluna específica</p><p>AVG - Retorna o valor médio de uma coluna específica</p><p>MAX - Retorna o valor máximo de uma coluna específica</p><p>MIN - Retorna o valor mínimo de uma coluna específica</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 124</p><p>Exemplos:</p><p>SELECT AVG(PAGAMENTO) FROM EMPREGADOS;</p><p>SELECT COUNT(*) FROM EMPREGADOS;</p><p>- Operadores Lógicos</p><p>IS NULL</p><p>BETWEEN</p><p>IN</p><p>LIKE</p><p>EXISTS</p><p>UNIQUE</p><p>ALL and ANY</p><p>Exemplos:</p><p>SELECT * FROM EMPREGADOS</p><p>WHERE PAGAMENTO BETWEEN 100 AND 150;</p><p>SELECT NOME, PAGAMENTO</p><p>FROM EMPREGADOS</p><p>WHERE EID IN ('1111', '2222', '3333');</p><p>Negando Condições com o Operador NOT:</p><p>NOT EQUAL</p><p>NOT BETWEEN</p><p>NOT IN</p><p>NOT LIKE</p><p>NOT EXISTS</p><p>NOT UNIQUE</p><p>Exemplos:</p><p>SELECT * FROM EMPREGADOS</p><p>WHERE PAGAMENTO NOT BETWEEN 100 AND 150;</p><p>SELECT NOME, PAGAMENTO</p><p>FROM EMPREGADOS</p><p>WHERE EID NOT IN ('1111', '2222', '3333');</p><p>SELECT NOME FROM EMPREGADOS</p><p>WHERE NOME NOT LIKE 'S%';</p><p>SUBCONSULTAS E TIPOS DE JUNÇÃO24</p><p>Operador IN e NOT IN</p><p>IN: Dados de um conjunto, membros de um conjunto ou uma consulta;</p><p>Exemplo:</p><p>Filmes de categoria: Drama, Terror, Suspense ou Comedia:</p><p>SELECT T.nome_titulo AS Titulo, C.nome_categoria AS Categoria</p><p>FROM tbTitulo T</p><p>INNER JOIN tbCategoria C ON C.codigo_categoria = T.codigo_categoria</p><p>WHERE C.nome_categoria IN (‘Drama’, ‘Terror’, ‘Suspense’, ’Comedia’);</p><p>24 http://200.17.101.9/wiki/images/8/87/Subconsultas_e_tipos_de_jun%C3%A7%C3%A3o2014_11_21.pdf</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 125</p><p>Filmes produzidos pela ABC Distribuidora:</p><p>SELECT T.nome_titulo</p><p>FROM tbTitulo T</p><p>WHERE T.codigo_titulo IN (SELECT F.codigo_titulo</p><p>FROM tbFilme F</p><p>WHERE f.nome_distribuidor = ‘ABC Distribuidora’</p><p>);</p><p>NOT IN: ausência de membros de um conjunto;</p><p>Exemplo:</p><p>Filmes lançados entre 1995 e 2009 e que nunca foram emprestados:</p><p>SELECT T.nome_titulo;</p><p>FROM tbTitulo T</p><p>WHERE T.codigo_titulo NOT IN</p><p>(SELECT F.codigo_titulo</p><p>FROM tbFilme F</p><p>INNER JOIN tbEmprestimoDevolucao ED ON F.codigo_filme = ED.codigo_filme )</p><p>AND T.ano BETWEEN 1995 AND 2009;</p><p>E o operador “=“ ?</p><p>Apenas para valores específicos e não um grupo de valores.</p><p>Operador EXISTS</p><p>Verifica se o resultado da consulta possui algum registro (true caso algum registro satisfaça condição).</p><p>Exemplo:</p><p>Listar clientes e data de cadastro que possuem algum empréstimo:</p><p>SELECT C.nome_cli, C.data_cadastro</p><p>FROM tbCliente C</p><p>WHERE EXISTS (SELECT ED.codigo_cli</p><p>FROM tbEmprestimoDevolucao ED</p><p>WHERE C.codigo_cli = ED.codigo_cli</p><p>);</p><p>A mesma consulta com uso do IN:</p><p>SELECT C.nome_cli, C.data_cadastro</p><p>FROM tbCliente C</p><p>WHERE C.codigo_cli IN (SELECT ED.codigo_cli</p><p>FROM tbEmprestimoDevolucao ED</p><p>);</p><p>EXISTS, IN - INNER JOIN</p><p>A mesma consulta com uso do INNER JOIN:</p><p>SELECT DISTINCT C.nome_cli, C.data_cadastro</p><p>FROM tbCliente C</p><p>INNER JOIN tbEmprestimoDevolucao ED ON</p><p>C.codigo_cli = ED.codigo_cli;</p><p>DISTINCT – Porque o retorno é da junção de todos empréstimos do cliente, o que leva a uma consulta</p><p>mais custosa em termos de desempenho.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 126</p><p>NOT EXISTS</p><p>Ao Contrário Do EXISTS, o NOT EXISTS verifica se resultado é falso.</p><p>Exemplo:</p><p>Encontrar todos clientes que não possuem empréstimo:</p><p>SELECT C.nome_cli, C.data_cadastro</p><p>FROM tbCliente C</p><p>WHERE NOT EXISTS (SELECT ED.codigo_cli</p><p>FROM TBEMPRESTIMODEVOLUCAO ED</p><p>WHERE C.CODIGO_CLI = ED.CODIGO_CLI</p><p>);</p><p>UPDATE e DELETE</p><p>Exemplo:</p><p>Atualizar para que a data de devolução prevista para as locações que tem data de devolução prevista</p><p>para o período de 24 a 30 de novembro de 2014 receba dois dias a mais, apenas para os filmes de</p><p>categoria Lançamento:</p><p>UPDATE tbEmprestimoDevolucao ED</p><p>SET ED.data_devolução_prevista = ED.data_devolução_prevista + 2</p><p>WHERE ED.data_devolução_prevista BETWEEN ‘2014-11-24’ AND ‘2014-11-30’</p><p>AND ED.codigo_filme IN</p><p>(SELECT F.codigo_filme</p><p>FROM tb Filme F</p><p>INNER JOIN tbTitulo T ON F.codigo_titulo = T.codigo_titulo</p><p>INNER JOIN tbClasse C ON T.codigo_classe = C.codigo_classe</p><p>WHERE C.nome_classe = ‘Lançamento’</p><p>);</p><p>Exemplo:</p><p>Exclua todos os clientes que não emprestaram nenhum filme em 2008, 2009 e 2010:</p><p>DELETE FROM tbCliente</p><p>WHERE codigo_cli NOT IN</p><p>(SELECT ED.codigo_cli</p><p>FROM tbEmprestimoDevolucao ED</p><p>WHERE ED.data_emprestimo BETWEEN ‘2008-01-01’ AND ‘2010-12-31);’</p><p>Tipos de junção</p><p>- INNER JOIN: retorna apenas as que possuem conexão em junção.</p><p>- OUTER JOIN: retorna.</p><p>- LEFT OUTER JOIN: prioriza tabela da esquerda.</p><p>- RIGHT OUTER JOIN: prioriza tabela da direita.</p><p>- FULL OUTER JOIN: ambos os lados.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 127</p><p>Join25</p><p>A figura abaixo traz uma representação gráfica, baseada na Teoria dos Conjuntos, muito conhecida</p><p>na matemática. Nessa imagem, temos a representação de duas tabelas (A e B) e o resultado esperado</p><p>por cada tipo de join (a área em vermelho representa os registros retornados pela consulta).</p><p>Representação gráfica dos joins</p><p>Preparando o ambiente de testes</p><p>Para demonstrar o funcionamento dos métodos de junção (joins), precisaremos criar duas tabelas</p><p>entre as quais deve haver algum relacionamento para que possamos "cruzar" os dados. Como o objetivo</p><p>aqui não é concentrar em boas práticas, modelagem ou normalização, criaremos apenas duas tabelas</p><p>contendo uma coluna Nome, que será comum entre elas. O script da Listagem 1 cria essa estrutura.</p><p>25 https://www.devmedia.com.br/sql-join-entenda-como-funciona-o-retorno-dos-dados/31006</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 128</p><p>Listagem 1. Criando as tabelas para teste.</p><p>Em seguida, precisaremos adicionar nas tabelas recém criadas alguns dados que nos permitam</p><p>colocar à prova as junções. Sendo assim, vamos inserir, com o script da Listagem 2 alguns registros de</p><p>forma que haja nomes que estão presentes apenas em uma tabela, e também nomes que sejam comuns</p><p>às duas.</p><p>Listagem 2. Inserindo registros para testes.</p><p>Inner Join</p><p>O Inner Join é o método de junção mais conhecido e, como ilustra a figura abaixo, retorna os registros</p><p>que são comuns às duas tabelas.</p><p>Representação do Inner Join.</p><p>Na Listagem 3, temos um exemplo de consulta com esse tipo de join, e na figura abaixo, podemos ver</p><p>seu resultado.</p><p>Listagem 3. Usando o Inner Join.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 129</p><p>Resultado do Inner Join.</p><p>Left Join</p><p>O Left Join, cujo funcinamento é ilustrado abaixo, tem como resultado todos os registros que estão na</p><p>tabela A (mesmo que não estejam na tabela B) e os registros da tabela B que são comuns à tabela A.</p><p>Representação do Left Join.</p><p>Para compreender melhor seu uso, temos um exemplo na Listagem 4, cujo resultado é apresentado</p><p>em seguida na figura:</p><p>Listagem 4. Usando o Left Join.</p><p>Resultado do Left Join.</p><p>Right Join</p><p>Usando o Right Join, conforme mostra a figura abaixo, teremos como resultado todos os registros que</p><p>estão na tabela B (mesmo que não estejam na tabela A) e os registros da tabela A que são comuns à</p><p>tabela B.</p><p>Representação do Right Join.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 130</p><p>Na Listagem 5 temos um exemplo desse tipo de consulta, e na figura abaixo, vemos seu resultado.</p><p>Listagem 5. Usando o Right Join</p><p>Resultado do Right Join.</p><p>Outer Join</p><p>O Outer Join (também conhecido por Full Outer Join ou Full Join), conforme mostra a figura abaixo,</p><p>tem como resultado todos os registros que estão na tabela A e todos os registros da tabela B.</p><p>Representação do Outer Join.</p><p>Para obter esse resultado, devemos executar a consulta seguindo a estrutura que é demonstrada na</p><p>Listagem 6, e cujo retorno é apresentado na figura abaixo.</p><p>Listagem 6. Usando o Outer Join.</p><p>Resultado do Outer Join.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 131</p><p>Nesse código, a palavra reservada OUTER é opcional. Portanto, se a removermos, deixando apenas</p><p>a expressão FULL JOIN, o resultado será o mesmo.</p><p>Left Excluding Join</p><p>Na figura abaixo, temos a representação gráfica do Left Excluding Join, que retorna como resultado</p><p>todos os registros que estão na tabela A e que não estejam na tabela B.</p><p>Representação do Left Excluding Join.</p><p>Os comandos desse join podem ser vistos na Listagem 7, e seu resultado é apresentado na próxima</p><p>figura.</p><p>Listagem 7. Usando Left Excluding Join.</p><p>Resultado do Left Excluding Join.</p><p>Right Excluding Join</p><p>O Right Excluding Join, como ilustra a figura abaixo, retorna como resultado todos os registros que</p><p>estão na tabela B e que não estejam na tabela A. Para vermos isso na prática, podemos executar os</p><p>comandos da Listagem 8. Como resultado, teremos os mesmos registros apresentados na figura</p><p>seguinte.</p><p>Representação do Right Excluding Join.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 132</p><p>Listagem 8. Utilizando Right Excluding Join.</p><p>Titulo.</p><p>Outer Excluding Join</p><p>Usando o Outer Excluding Join, conforme mostra a figura abaixo, teremos como resultado todos os</p><p>registros que estão na tabela B, mas que não estejam na tabela A, e todos os registros que estão na</p><p>tabela A, mas que não estejam na tabela B.</p><p>Representação do Outer Excluding Join.</p><p>O código da Listagem 9 mostra a sintaxe necessária para executar esse tipo de consulta. Nesse caso</p><p>o termo OUTER é optativo e, se removido, deixando apenas FULL JOIN, o resultado será o mesmo.</p><p>Listagem 9. Usando Outer Excluding Join.</p><p>O resultado dessa consulta pode ser visto na figura:</p><p>Resultado do Outer Excluding Join.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 133</p><p>As cláusulas JOIN na linguagem SQL são extremamente úteis e utilizadas com muita frequência,</p><p>portanto, seu conhecimento é fundamental para quem trabalha com bancos de dados relacionais com o</p><p>SQL Server, o MySQL, o Firebird, etc.</p><p>Union 26</p><p>O operador UNION combina os resultados de duas ou mais queries em um único result set, retornando</p><p>todas as linhas pertencentes a todas as queries envolvidas na execução. Para utilizar o UNION, o número</p><p>e a ordem das colunas precisam ser idênticos em todas as queries e os data types precisam ser</p><p>compatíveis.</p><p>Existem dois tipos de operador UNION, sendo eles UNION e UNION ALL.</p><p>O operador UNION, por default, executa o equivalente a um SELECT DISTINCT no result set final. Em</p><p>outras palavras, ele combina o resultado de execução das duas queries e então executa um SELECT</p><p>DISTINCT a fim de eliminar as linhas duplicadas. Este processo é executado mesmo que não hajam</p><p>registros duplicados.</p><p>Exemplo:</p><p>SELECT ShipName, ShipAddress from Orders WHERE CustomerID ="WARTH" UNION SELECT</p><p>ShipName, ShipAddress from Orders WHERE CustomerID ="VINET"</p><p>Resultado:</p><p>ShipName ShipAddress</p><p>---------------------------------------- -------------------</p><p>Vins et alcools Chevalier 59 rue de l"Abbaye</p><p>Wartian Herkku Torikatu 38</p><p>Union All</p><p>O operador UNION ALL tem a mesma funcionalidade do UNION, porém, não executa o SELECT</p><p>DISTINCT no result set final e apresenta todas as linhas, inclusive as linhas duplicadas.</p><p>Exemplo:</p><p>26 https://www.devmedia.com.br/sql-utilizando-o-operador-union-e-union-all/37457</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 134</p><p>Recomendações</p><p>1) Se não existe a possibilidade de haver registros duplicados em suas tabelas ou se não houver</p><p>problemas para a aplicação que o record set final apresente duplicações, utilize o operador UNION ALL.</p><p>A vantagem é que este operador não executa a função SELECT DISTINCT, utiliza menos recursos do</p><p>SQL Server e como consequência, melhora a performance da aplicação.</p><p>2) Não utilize o operador UNION em conjunto com a função SELECT DISTINCT pois o resultado final</p><p>será exatamente o mesmo, porém, o SQL Server estará executando a mesma operação duas vezes,</p><p>causando queda de desempenho.</p><p>Resultado:</p><p>3) Uma query com uma ou mais cláusula OR pode ser reescrita utilizando o operador UNION ALL:</p><p>A consulta acima possui três condições separadas na cláusula WHERE. Sendo assim, para que esta</p><p>query utilize um índice, as três colunas referenciadas (dept, city e division) deverão fazer parte do índice.</p><p>Esta query pode ser reescrita utilizando-se o operador UNION ALL:</p><p>As duas consultas irão produzir o mesmo resultado. No entanto, se houver um índice na coluna dept</p><p>mas não houver nas outras colunas referenciadas na cláusula WHERE, a primeira versão não utilizará o</p><p>índice e será feito um Table Scan na tabela. Na segunda versão, o índice será utilizado em parte da query,</p><p>melhorando significativamente resultado final.</p><p>Subconsultas27</p><p>Uma subconsulta (ou mais conhecida, subquery) é uma instrução SELECT que está condicionada</p><p>dentro de outra instrução SQL. Como resultado desta operação, podemos fazer uso de subconsultas para</p><p>criarmos consultas que seriam difíceis ou impossíveis de serem feitas utilizando outras maneiras. Desde</p><p>que saibamos codificar nossas instruções SELECT, saberemos como codificar uma subconsulta, já que</p><p>ela é apenas uma instrução SQL no interior de outra instrução SQL. O que precisamos saber nesse</p><p>momento para utilizarmos as subqueries é onde e quando devemos utilizá-las. Vamos então aprender</p><p>sobre algumas das especificidades de utilizarmos subconsultas.</p><p>27 https://www.devmedia.com.br/t-sql-subqueries-onde-e-quando-utilizar/32072</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 135</p><p>Utilizando subqueries</p><p>A utilização de subqueries é bastante simples, pois o que precisamos realmente é ter cuidado aonde</p><p>devemos utilizá-las. Neste caso, afirmamos que nossas subqueries podem ser codificadas ou mesmo</p><p>introduzidas em cláusulas WHERE, HAVING, FROM, ou mesmo SELECT de uma outra instrução</p><p>SELECT. Essa instrução, por exemplo, pode então usar uma subconsulta na condição de pesquisa de</p><p>uma cláusula WHERE. Quando ela é utilizada em uma condição de pesquisa, a subconsulta pode ser</p><p>referida como sendo uma condição de pesquisa ou uma subconsulta predicado. Vejamos um pequeno</p><p>exemplo de sua utilização, de acordo com a Listagem 1.</p><p>Listagem 1. Exemplo de uso de subconsultas na cláusula SELECT</p><p>SELECT DISTINCT NomeFornecedor,</p><p>(SELECT MAX(DataFatura) FROM Faturas</p><p>WHERE Faturas.Id_fornecedor = Fornecedores.Id_fornecedor) AS UltimaFatura</p><p>FROM Fornecedores</p><p>ORDER BY UltimaFatura DESC;</p><p>No exemplo que apresentamos, mostramos como usar subconsultas (subqueries) na cláusula</p><p>SELECT. Como podemos observar, nós podemos usar uma subconsulta no lugar de uma especificação</p><p>de coluna, por isso, uma subconsulta deve retornar um único valor. Na maioria dos casos, as subconsultas</p><p>que usamos na cláusula SELECT serão subconsultas correlacionadas,</p><p>estas são tipicamente ineficientes.</p><p>Como mostrado pela Listagem 1, o exemplo é para calcular a data máxima das faturas para cada</p><p>fornecedor na tabela de fornecedores, neste caso, ele se refere à coluna Id_fornecedor presente na tabela</p><p>de Faturas numa consulta externa.</p><p>É preciso termos cuidado com a utilização de subqueries em cláusulas do tipo SELECT, pois elas, às</p><p>vezes, são difíceis de ler. Na maioria dos casos, porém, podemos substituir uma subconsulta por um JOIN</p><p>para facilitar mais as coisas. A consulta mostrada primeiramente pela Listagem 1 poderia ser</p><p>reapresentada como mostrado pelo código apresentado pela Listagem 2. Esta consulta então une as</p><p>tabelas de Fornecedores e Faturas, agrupando as linhas por NomeFornecedor e, em seguida, usa a</p><p>função MAX para calcular a data máxima da fatura para cada fornecedor. Como podemos observar, essa</p><p>consulta é muito mais fácil de ser lida do que aquela com a subconsulta, além de que, esta é executada</p><p>muito mais rapidamente, já que ela faz a busca uma única vez, enquanto que utilizando subconsultas, é</p><p>feita uma varredura para cada linha em execução consumindo mais recursos da aplicação.</p><p>Listagem 2. Consulta de faturas utilizando JOIN</p><p>SELECT NomeFornecedor, MAX(DataFatura) AS UltimaFatura</p><p>FROM</p><p>Fornecedores LEFT JOIN Faturas ON Faturas.Id_fornecedor = Fornecedores.Id_fornecedor</p><p>GROUP BY NomeFornecedor</p><p>ORDER BY UltimaFatura DESC;</p><p>Quando uma subconsulta nos retorna um único valor, podemos usá-la em qualquer lugar no qual</p><p>poderíamos usar normalmente uma expressão. No entanto, uma subconsulta também pode retornar um</p><p>conjunto de resultados de coluna única com duas ou mais linhas. Nesse caso, ela pode ser usada no</p><p>lugar de uma lista de valores, tais como a lista para um operador IN. Além disso, se uma subconsulta é</p><p>codificada dentro de uma cláusula FROM, esta pode retornar um conjunto de resultados com duas ou</p><p>mais colunas.</p><p>Além disso, também podemos codificar uma subconsulta dentro de outra subconsulta. Nesse caso, as</p><p>subconsultas são ditas como sendo subconsultas aninhadas, mas elas podem ser de difícil leitura e</p><p>também resultar em um baixo desempenho, por isso, devemos usá-las somente quando necessário.</p><p>Existem, no entanto, quatro maneiras de introduzirmos uma subconsulta em uma instrução do tipo</p><p>SELECT, que são:</p><p>- Através de uma cláusula WHERE como sendo uma condição de pesquisa;</p><p>- Em uma cláusula HAVING como condição de pesquisa;</p><p>- Na cláusula FROM como uma especificação de tabela;</p><p>- Na cláusula SELECT como uma especificação de coluna.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 136</p><p>O que podemos dizer sobre as subqueries é que elas podem ser usadas para a realização de</p><p>pesquisas compostas, onde uma informação da qual estamos precisando depende de uma ou mais</p><p>informações vindas com base em outras respostas. Para esse tipo de consulta, duas ou mais consultas</p><p>precisam ser executadas, onde, a primeira consulta que irá localizar a informação desejada, mas que é</p><p>na segunda consulta que irá encontrar a informação que será utilizada para comparação, e dessa forma,</p><p>realizarmos o cálculo do resultado desta comparação, nos trazendo assim a informação requerida. A</p><p>utilização de subconsultas é uma abordagem que nos fornece grande capacidade de incorporarmos</p><p>consultas umas nas outras. Vejamos como é a sintaxe de acordo com a Listagem 3.</p><p>Listagem 3. Sintaxe da subquery padrão</p><p>SELECT</p><p>FROM</p><p>WHERE expression operator</p><p>(SELECT</p><p>FROM</p><p>WHERE</p><p>)</p><p>Como podemos perceber, a sintaxe apresentada no código anterior é a estrutura base em mais de</p><p>uma consulta, onde uma se torna um termo comparativo, enquanto que a outra nos traz a informação a</p><p>ser utilizada na comparação. Temos então algumas regras que precisamos entender para o correto</p><p>funcionamento dessas consultas:</p><p>- Toda subquery deve ser colocada entre parênteses;</p><p>- As subqueries precisam ser colocadas do lado direito do operador de comparação;</p><p>- As subqueries não podem conter cláusulas de ORDERBY;</p><p>- As subqueries podem conter mais de uma subquery.</p><p>Existem três tipos de subqueries:</p><p>- A mais simples é a subconsulta de uma única linha, também conhecida como subquery single-row;</p><p>- A subquery de várias linhas, conhecida como subquery multiple-row;</p><p>- A subquery de múltiplas colunas, conhecida como subquery multiple columns.</p><p>A seguir apresentaremos alguns exemplos de utilização dessas subquerys e de alguns métodos que</p><p>também são empregados em outras linguagens de banco de dados, como podemos citar o PL/SQL, da</p><p>Java.</p><p>Subquery de linha única (subquery single-row)</p><p>Subconsultas de linha única podem nos retornar zero ou uma linha para a instrução SQL exterior.</p><p>Podemos então aplicar uma subconsulta em uma cláusula WHERE, ou uma cláusula HAVING, ou uma</p><p>cláusula FROM presente numa instrução SELECT. Neste tipo de consulta podemos utilizar os operadores</p><p>necessários para retornar as informações solicitadas em uma única linha. Como por exemplo, poderíamos</p><p>fazer a seguinte declaração para trazermos as informações referentes a um determinado produto, como</p><p>mostra o código presente na Listagem 4.</p><p>Listagem 4. Consulta de linha única com a clausula WHERE</p><p>SELECT</p><p>[ProductID]</p><p>,[Name]</p><p>,[ProductNumber]</p><p>,[Color]</p><p>FROM [AdventureWorks2012].[Production].[Product]</p><p>WHERE [ProductID] = (</p><p>SELECT [ProductID]</p><p>FROM [AdventureWorks2012].[Production].[Product]</p><p>WHERE [Name] = 'Blade'</p><p>)</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 137</p><p>De acordo com o exemplo apresentado pela Listagem 4, recuperamos algumas informações referentes</p><p>ao produto, fazendo uma busca a mais na mesma tabela para trazer os dados de um registro específico,</p><p>que seria o número de identificação do produto, mas sendo feita a pesquisa na segunda instrução a partir</p><p>do nome do produto, que no nosso caso foi [name] = ‘Blade’. Veremos agora o que acontece nela,</p><p>separando-a em duas partes: apresentaremos a primeira parte de acordo com o código da Listagem 5.</p><p>Listagem 5. Primeira parte da instrução utilizando WHERE</p><p>SELECT [ProductID]</p><p>FROM [AdventureWorks2012].[Production].[Product]</p><p>WHERE [Name] = 'Blade'</p><p>A subconsulta apresentada anteriormente é executada primeiro e após obter o resultado, ela retorna</p><p>o id do produto para a linha cujo [Name] é ‘Blade’. O [ProductID] para esta linha é 316, o que é então</p><p>passado para a cláusula WHERE da consulta externa (nossa consulta principal), a qual vemos no código</p><p>da Listagem 6.</p><p>Listagem 6. Instrução principal da consulta</p><p>SELECT</p><p>[ProductID]</p><p>,[Name]</p><p>,[ProductNumber]</p><p>,[Color]</p><p>FROM [AdventureWorks2012].[Production].[Product]</p><p>WHERE [ProductID] = 316</p><p>Utilizando operadores de comparação em subqueries de linha única</p><p>No exemplo que apresentamos na Listagem 4 fizemos uso do operador de igualdade (=) na cláusula</p><p>WHERE. Além dele, outros operadores de comparação podem ser utilizados com uma única subconsulta,</p><p>tais como o , > (Maior que), = (Maior ou igual) e o (</p><p>SELECT AVG([PurchaseOrderID])</p><p>FROM</p><p>[AdventureWorks2012].[Purchasing].[PurchaseOrderDetail]</p><p>WHERE [DueDate] = '2007-10-31'</p><p>)</p><p>Se isolarmos a consulta secundária e executarmos, obteremos como resposta para a média do número</p><p>de ordens o valor de 915, e com essa informação sendo passada para a consulta principal, obtemos todas</p><p>as ordens com o [PurchaseOrderID] > 915.</p><p>Utilizando subqueries com cláusula HAVING</p><p>A cláusula HAVING é usada para filtrar grupos de linhas de registros, o que nos permite filtrarmos</p><p>grupos de linhas com base no resultado retornado por uma subconsulta. Vejamos de forma mais prática</p><p>esta questão de acordo com o código presente na Listagem 8.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 138</p><p>Listagem 8. Utilizando a cláusula HAVING</p><p>SELECT AVG([PurchaseOrderID])</p><p>,[VendorID]</p><p>,COUNT([VendorID])</p><p>FROM [AdventureWorks2012].[Purchasing].[PurchaseOrderHeader]</p><p>GROUP BY [VendorID]</p><p>HAVING AVG([PurchaseOrderID]) =</p><p>(SELECT AVG([PurchaseOrderID])</p><p>FROM [AdventureWorks2012].[Purchasing].[PurchaseOrderHeader]</p><p>where VendorID = 1690</p><p>)</p><p>Subqueries em uma cláusula FROM</p><p>Além das cláusulas HAVING e WHERE, também podemos criar subconsultas com a cláusula FROM</p><p>de uma consulta externa, vejamos isso de acordo com o exemplo apresentado pela Listagem 9.</p><p>Listagem 9. Subconsulta com a cláusula FROM.</p><p>SELECT [ProductID]</p><p>FROM</p><p>(SELECT [ProductID]</p><p>FROM [AdventureWorks2012].[Production].[Product]</p><p>WHERE [ProductID] , >= or when the subquery is used as an expression.</p><p>Como podemos observar, a informação que é apresentada é de que a subquery tentou retornar mais</p><p>que um valor e isto não é permitido neste tipo de subquery. Veremos então quando isso é possível.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 139</p><p>Utilizando subqueries de múltiplas linhas (subquery multiple row)</p><p>Quando precisamos realizar consultas onde o resultado seja a apresentação de várias linhas, podemos</p><p>utilizar os operadores IN, ANY ou ALL nas nossas consultas externas para lidar com uma subconsulta</p><p>que retorna várias linhas.</p><p>No caso do operador IN, ele é utilizado para verificar um valor dentro de um conjunto de valores, onde</p><p>esta lista de valores pode vir dos resultados de uma subconsulta. Vejamos então de acordo com a</p><p>Listagem 11 como seria a sua utilização.</p><p>Listagem 11. Utilizando o operador IN</p><p>SELECT [PurchaseOrderID]</p><p>,[VendorID]</p><p>,[OrderDate]</p><p>,[TotalDue]</p><p>FROM [AdventureWorks2012].[Purchasing].[PurchaseOrderHeader]</p><p>WHERE [VendorID] IN (</p><p>SELECT [VendorID] FROM [AdventureWorks2012].[Purchasing].[PurchaseOrderHeader]</p><p>WHERE [EmployeeID] = 255</p><p>Percebam que utilizamos o operador IN para trazer todos os fornecedores (instrução principal) com</p><p>base na instrução secundária que era a obtenção desse resultado para um determinado empreendedor.</p><p>Utilizando o operador NOT IN, teríamos o mesmo resultado, com a diferença de que seriam retornados</p><p>os fornecedores de todos os empreendedores, menos para o que possui o id [EmployeeID] = 255.</p><p>Utilizando o operador ANY com uma subconsulta Multiple Row</p><p>No caso de utilizarmos o operador ANY, ele não restringe os resultados numa lista, ele nos traz</p><p>qualquer coisa, precisando colocar um operador do tipo =, ,>, = antes de ANY na nossa</p><p>consulta. Apresentaremos um exemplo com o código da Listagem 12.</p><p>Listagem 12. Utilizando o operador ANY</p><p>SELECT [PurchaseOrderID]</p><p>,[VendorID]</p><p>,[OrderDate]</p><p>,[TotalDue]</p><p>FROM [AdventureWorks2012].[Purchasing].[PurchaseOrderHeader]</p><p>WHERE [VendorID] = ANY (</p><p>SELECT [VendorID] FROM [AdventureWorks2012].[Purchasing].[PurchaseOrderHeader]</p><p>WHERE [EmployeeID] = 255</p><p>)</p><p>Percebam que neste caso retornamos as ordens de compra para todos os fornecedores, de acordo</p><p>com o empreendedor de id 255.</p><p>Utilizando subqueries de múltiplas colunas (multiple column subquery)</p><p>Como o próprio título nos informa, este é o tipo de consulta que será realizado utilizando-se de duas</p><p>ou mais colunas, dependendo da granularidade necessária a nossa necessidade. Neste exemplo,</p><p>buscaremos por todas as informações referentes ao id da pessoa, número de ordem de compra, número</p><p>do pedido de compra e o id do cliente, todas essas informações a partir de uma consulta com base nas</p><p>informações de [SalesOrderNumber] e [PurchaseOrderNumber], primeiro verif icando se eles existem,</p><p>utilizando a cláusula EXISTS. Vejamos então de forma prática como ficaria nossa consulta, como</p><p>apresentada Listagem 13.</p><p>Listagem 13. Utilizando multiple row subquery.</p><p>SELECT [SalesOrderID]</p><p>,[SalesPersonID]</p><p>,[SalesOrderNumber]</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 140</p><p>,[PurchaseOrderNumber]</p><p>,[CustomerID]</p><p>FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]</p><p>WHERE EXISTS</p><p>(SELECT [SalesOrderNumber],[PurchaseOrderNumber]</p><p>FROM [AdventureWorks2012].[Sales].SalesOrderHeader</p><p>)</p><p>ORDER BY [SalesPersonID] DESC</p><p>Como apresentado de acordo com a Listagem 13, utilizamos uma subconsulta utilizando a palavra-</p><p>chave EXISTS, neste caso, a subconsulta funciona basicamente como sendo um teste de existência. A</p><p>cláusula WHERE presente na consulta externa realiza um teste para ver se as linhas retornadas pela</p><p>subconsulta existem. A subconsulta não produz nenhum resultado de fato, ela apenas retorna um valor</p><p>TRUE ou FALSE.</p><p>No nosso próximo exemplo, estaremos apresentando uma pesquisa com a instrução IN onde</p><p>informamos os departamentos que queremos pesquisar com a verificação da existência de uma pessoa</p><p>com o primeiro nome igual a “Ken”, como apresentado pela Listagem 14.</p><p>Listagem 14. Execução de subquery com múltiplas colunas.</p><p>Select dep.Name, p.FirstName, p.LastName, p.MiddleName, p.BusinessEntityID from</p><p>HumanResources.Department dep, HumanResources.EmployeeDepartmentHistory empDep,</p><p>Person.Person p</p><p>where</p><p>dep.DepartmentID in(1,16,12)</p><p>AND exists (select * from HumanResources.Employee emp, Person.Person p2</p><p>where p.FirstName = p2.FirstName</p><p>AND p2.FirstName = 'Ken'</p><p>AND p2.Title LIKE 'Mr%'</p><p>)</p><p>AND dep.DepartmentID = empDep.DepartmentID</p><p>Como apresentado de acordo com a Listagem 14, criamos uma pesquisa interna com duas colunas,</p><p>sendo utilizados os campos, título e primeiro nome do empregado da empresa, para que a partir daí</p><p>trouxéssemos os departamentos correspondentes.</p><p>Questões</p><p>01. (TST - Técnico Judiciário - FCC/2017) O resultado esperado da execução de duas expressões</p><p>SQL SELECT é uma lista completa dos valores distintos de cidade e pais, ambos</p><p>os números são representados da</p><p>seguinte maneira:</p><p>n = a + ib</p><p>Os números a e b são números reais e i representa a raiz quadrada do número inteiro -1. Quando b é</p><p>igual a 0 o número é um número pertencente ao conjunto dos reais. Como pode-se ver, a medida que</p><p>fomos passando de um conjunto para outro, aumentou o nível de abstração das quantidades que os</p><p>números pertencentes aos conjuntos representam.</p><p>A Figura a seguir é uma representação das relações de pertinência entre os conjuntos de números</p><p>que analisamos até aqui.</p><p>Os dados numéricos que os algoritmos que iremos criar e que a maioria dos computadores manipulam</p><p>são de dois tipos:</p><p>- Dados inteiros;</p><p>- Dados reais.</p><p>Neste ponto é importante assinalar dois fatos importantes. Primeiro computadores trabalham com uma</p><p>base diferente da base que usamos todos dias que é a base 10. Computadores usam a base 2, e no</p><p>processo de conversão entre bases podem ocorrer problemas de perda de dígitos significativos. Por</p><p>exemplo, o número real 0.6 ao ser convertido para a base dois gera uma dízima periódica.</p><p>Outro fato importante é que a largura das palavras de memória do computador é limitada e portanto o</p><p>número de dígitos binários que podem ser armazenados é função deste tamanho. Isto é similar ao que</p><p>aconteceria se tivéssemos que limitar o número o dígitos decimais que usamos para representar os</p><p>números de nossas contas no banco. Por exemplo, assuma que só podemos armazenar quantias com 6</p><p>dígitos inteiros e dois decimais, deste modo se ganhássemos na loteria R$ 1.000.000,00 não seria</p><p>possível representar este valor no extrato do banco. Portanto no processo de conversão e desconversão</p><p>entre bases pode haver perda de informação.</p><p>- Dados Numéricos Inteiros</p><p>O conjunto dos dados inteiros pode ser definido como:</p><p>Z={...,-3,-2,0,1,2,...}.</p><p>As linguagens usadas para programar computadores são muito exigentes com a maneira com que os</p><p>dados são representados. Por esta razão vamos passar a definir como deveremos representar os dados</p><p>nos algoritmos. Os dados inteiros tem a seguinte forma:</p><p>NúmeroInteiro = [+,-]algarismo{algarismo}</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 14</p><p>Neste texto iremos usar uma notação especial para definir como iremos representar os elementos da</p><p>linguagem. A medida que formos apresentando os elementos a notação será também explicada. No caso</p><p>da definição dos dados inteiros temos os seguintes elementos. O elemento básico é o algarismo que é</p><p>um dos seguintes caracteres:</p><p>algarismo = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9</p><p>Os elementos entre colchetes são opcionais. Portanto, o sinal de + e - entre colchetes significa que um</p><p>número inteiro pode ou não ter sinal. Em seguida temos um algarismo que é obrigatório. Isto é dados</p><p>inteiros tem de ter pelo menos um algarismo. A seguir temos a palavra algarismo entre chaves, o que</p><p>significa que um número inteiro deve ter pelo menos um algarismo e pode ser seguido por uma sequência</p><p>de algarismos. Deste modo elementos que aparecem entre chaves são elementos que podem ser</p><p>repetidos.</p><p>São portanto exemplos de números inteiros:</p><p>a) +3</p><p>b) 3</p><p>c) -324</p><p>Como exemplos de formas erradas de representação de números inteiros, temos:</p><p>a) +3.0 Não é possível usar ponto decimal</p><p>b) + 123 Espaços em branco não são permitidos</p><p>- Dados Numéricos Reais</p><p>Os dados reais tem a seguinte forma:</p><p>[+,-]algarismo{algarismo}.algarismo{algarismo}.</p><p>Ou seja um número real pode ou não ter sinal, em seguida um conjunto de pelo menos um algarismo,</p><p>um ponto decimal e depois um conjunto de pelo menos um algarismo. É importante notar que o separador</p><p>entre a parte inteira e a fracionário é o ponto e não a vírgula.</p><p>São exemplos de números reais:</p><p>a) 0.5</p><p>a) +0.5</p><p>a) -3.1415</p><p>Abaixo mostramos exemplos de formas erradas de representação de números reais, temos:</p><p>a) +3,0 Vírgula não pode ser separador entre as partes real e inteira</p><p>b) 0.333... Não é possível usar representação de dízimas</p><p>- Dados Literais</p><p>Dados literais servem para tratamento de textos. Por exemplo, um algoritmo pode necessitar imprimir</p><p>um aviso para os usuários, ou um comentário junto com um resultado numérico. Outra possibilidade é a</p><p>necessidade de ler dados tais como nomes, letras, etc.</p><p>Este tipo de dados pode ser composto por um único caractere ou por um conjunto de pelo menos um</p><p>destes elementos. Conjuntos são conhecidos como cadeias de caracteres, tradução da expressão em</p><p>inglês, "character string".</p><p>Um ponto importante que deve ser abordado agora é o que se entende por caractere. Caracteres são</p><p>basicamente as letras minúsculas, maiúsculas, algarismos, sinais de pontuação, etc. Em computação</p><p>caracteres são representados por códigos binários e o mais disseminado de todos é o código ASCII. Este</p><p>padrão foi definido nos Estados Unidos e é empregado pela quase totalidade dos fabricantes de</p><p>computadores e programas. O apêndice mostra a tabela ASCII com estes códigos.</p><p>Os caracteres que normalmente são empregados nos algoritmos são os seguintes:</p><p>Letras maiúsculas:</p><p>A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z</p><p>Letras minúsculas:</p><p>a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z</p><p>Algarismos:</p><p>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 15</p><p>Caracteres de pontuação:</p><p>; | : | ! | ? | * | ( | ) | \ | / | + | - | = |</p><p>- Constantes Caracter</p><p>Caracteres podem aparecer sozinhos, e neste caso são chamados de constante caracter e são</p><p>representados entre o caracter '. Abaixo mostramos exemplos de constantes caracter:</p><p>'a'</p><p>'A'</p><p>';'</p><p>'+'</p><p>- Cadeias de Caracter</p><p>Cadeias de caracteres são conjuntos de um ou mais caracteres e são cercados pelo caracter ". Por</p><p>exemplo:</p><p>"Linguagem de programação"</p><p>"Qual é o seu nome?"</p><p>"12345"</p><p>- Dados Lógicos</p><p>Este tipo de dados é intensamente aplicado durante o processo de tomada de decisões que o</p><p>computador frequentemente é obrigado a fazer. Em muitos textos este tipo de dados também é chamado</p><p>de dados booleanos, devido a George Boole, matemático que deu ao nome à álgebra (álgebra booleana)</p><p>que manipula este tipo de dados. Os dados deste tipo somente podem assumir dois valores: verdadeiro</p><p>e falso.</p><p>Computadores tomam decisões, durante o processamento de um algoritmo, baseados nestes dois</p><p>valores. Por exemplo, considere a sentença a seguir que é um caso típico de decisão que o computador</p><p>é capaz de tomar sem intervenção humana.</p><p>Se está chovendo então procurar guarda-chuva.</p><p>Nesta sentença temos a questão lógica "Se está chovendo". Esta expressão somente pode ter como</p><p>resultado um de dois valores: verdade ou falso. Nos nossos algoritmos estes valores serão representados</p><p>por verdade e falso.</p><p>Tomando como exemplo a linguagem C, os dados podem assumir cinco tipos básicos que são:</p><p>- char: caracter: O valor armazenado é um caractere. Caracateres geralmente são armazenados em</p><p>códigos (usualmente o código ASCII).</p><p>- int: número inteiro é o tipo padrão e o tamanho do conjunto que pode ser representado normalmente</p><p>depende da máquina em que o programa está rodando.</p><p>- float: número em ponto flutuante de precisão simples. São conhecidos normalmente como números</p><p>reais.</p><p>- double: número em ponto flutuante de precisão dupla</p><p>- void: este tipo serve para indicar que um resultado não tem um tipo definido. Uma das aplicações</p><p>deste tipo em C é criar um tipo vazio que pode posteriormente ser modificado para um dos tipos</p><p>anteriores.</p><p>Estruturas de Dados: Vetores e Matrizes4</p><p>Os tipos básicos (inteiros, reais, caracteres) não são suficientes para exprimir estruturas de dados</p><p>complexas em algoritmos.</p><p>Um Vetor é uma das mais simples estruturas de dados.</p><p>Vetores são, essencialmente, listas de informações de um mesmo tipo, armazenadas em posição</p><p>contígua da memória, em ordem indexada.</p><p>Vetores são usados nos casos em que um conjunto de</p><p>com o mesmo tipo de</p><p>dado, obtidos respectivamente das tabelas cidadao e tribunal.</p><p>As expressões são:</p><p>SELECT cidade, pais FROM cidadao</p><p>WHERE pais='Brasil'</p><p>..I..</p><p>SELECT cidade, pais FROM tribunal</p><p>WHERE pais='Brasil'</p><p>Para a lista ser completa e os valores serem distintos, a lacuna I deve ser corretamente preenchida</p><p>com:</p><p>(A) join distinct</p><p>(B) join all</p><p>(C) like distinct</p><p>(D) union</p><p>(E) union all</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 141</p><p>02. (TRT - 14ª Região (RO e AC) - Técnico Judiciário - FCC/2016) Utilizando subconsultas PL/SQL</p><p>em um banco de dados Oracle 11g, aberto e em condições ideais, para um Técnico exibir o conteúdo dos</p><p>campos nome, salario e id de todos os funcionários da tabela Funcionario cujo conteúdo do campo salario</p><p>seja igual ao menor salário cadastrado, deverá utilizar o comando SELECT nome, salario, id FROM</p><p>Funcionario:</p><p>(A) WHERE salario = (SELECT MIN(salario) FROM Funcionario);</p><p>(B) INNER JOIN Funcionario ON salario = MIN(salario);</p><p>(C) WHERE salario = MIN(salario) FROM Funcionario;</p><p>(D) JOIN ON salario = (SELECT MIN(salario) FROM Funcionario);</p><p>(D) WHERE salario = MIN(salario);</p><p>03. (UEPB - Técnico em Informática – PaqTcPB) _________ é um recurso SQL que permite testar</p><p>se uma subconsulta tem alguma tupla em seus resultados. A palavra que melhor preenche a lacuna é:</p><p>(A) where</p><p>(B) from</p><p>(C) distinct</p><p>(D) exists</p><p>(E) forall</p><p>04. (JUCESC - Analista Técnico em Gestão de Registro Mercantil - FEPESE) Considere a</p><p>necessidade de realizar uma consulta SQL que combine resultados de três relações, com o objetivo de</p><p>retornar todos os registros da primeira relação do SELECT, os registros correspondentes da segunda</p><p>relação e todos os registros da terceira.</p><p>Assinale a alternativa que indica as instruções SQL que devem ser utilizadas entre as relações,</p><p>respectivamente, e que melhor se aproximam da obtenção do resultado desejado.</p><p>(A) JOIN; RIGHT JOIN</p><p>(B) FULL OUTER JOIN; JOIN</p><p>(C) LEFT JOIN; JOIN; RIGHT JOIN</p><p>(D) LEFT JOIN; RIGHT JOIN</p><p>(E) LEFT JOIN; JOIN</p><p>05. (TER/PI - Analista Judiciário - FCC) Para obter todas as linhas da tabela B, o comando SELECT</p><p>deverá utilizar na sequência um JOIN entre as tabelas A e B do tipo:</p><p>(A) CROSS JOIN.</p><p>(B) INNER JOIN.</p><p>(C) FULL OUTER JOIN.</p><p>(D) RIGHT OUTER JOIN.</p><p>(E) LEFT OUTER JOIN.</p><p>Gabarito</p><p>01. D / 02. A / 03. D / 04. D / 05. D</p><p>Comentários</p><p>01. Respostas: D</p><p>O operador UNION, por default, executa o equivalente a um SELECT DISTINCT no result set final. Em</p><p>outras palavras, ele combina o resultado de execução das duas queries e então executa um SELECT</p><p>DISTINCT a fim de eliminar as linhas duplicadas. Este processo é executado mesmo que não hajam</p><p>registros duplicados.</p><p>02. Respostas: A</p><p>Quando falamos em subconsulta, é SELECT dentro de SELECT, sem segredo.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 142</p><p>03. Respostas: D</p><p>A SQL inclui um recurso para testar se uma consulta possui alguma tupla no resultado. A construção</p><p>exists reotrna o valor true se a subconsulta de argumento não é vazia.</p><p>04. Respostas: D</p><p>Entendendo LEFT, RIGHT e INNER:</p><p>Quando dizemos que a tabela será Left ou Right, estamos informando ao comando SQL que ele deve</p><p>obedecer o sentido para a Direita ou para a Esquerda, ou seja, ao utilizarmos Left Join o banco de dados</p><p>irá analisar a estrutura da tabela da Direita e comparar com a tabela da Esquerda (leia-se Direita para a</p><p>Esquerda).</p><p>LEFT JOIN -> (ESQUEDA JUNTA COM).</p><p>RIGHT JOIN -> (DIREITA JUNTA COM).</p><p>05. Respostas: D</p><p>Junção Externa é uma seleção que não requer que os registros de uma tabela possuam registros</p><p>equivalentes em outras.</p><p>Left Outer Join: todos os registros da tabela esquerda mesmo quando não exista registros</p><p>correspondentes na tabela direita.</p><p>Right Outer Join: todos os registros da tabela direita mesmo quando não exista registros</p><p>correspondentes na tabela esquerda.</p><p>Full Outer Join: Esta operação apresenta todos os dados das tabelas à esquerda e à direita, mesmo</p><p>que não possuam correspondência em outra tabela.</p><p>PROGRAMAÇÃO ORIENTADA A OBJETOS</p><p>Paradigma</p><p>“Paradigma é um conjunto de regras que estabelecem fronteiras e descrevem como resolver os</p><p>problemas dentro destas fronteiras.</p><p>Os paradigmas influenciam nossa percepção; ajudam-nos a organizar e a coordenar a maneira como</p><p>olhamos para o mundo...”</p><p>Reengenharia - Reestruturando a Empresa</p><p>Daniel Morris e Joel Brandon</p><p>No mundo real, tudo é objeto!</p><p>– Os objetos se relacionam entre si de diversas maneiras</p><p>– Um programa orientado a objetos é estruturado como uma comunidade de agentes que interagem</p><p>entre si, denominados objetos.</p><p>– Cada objeto tem um papel a cumprir</p><p>– Cada objeto oferece um serviço ou realiza uma ação que é usada por outros membros da</p><p>comunidade</p><p>Exemplo real: montagem de um computador</p><p>• Composto por vários componentes:</p><p>– placa-mãe</p><p>– CPU</p><p>– placa de vídeo</p><p>– disco rígido</p><p>– teclado, etc.</p><p>Técnicas e Linguagem de Programação: Orientação a Objetos: fundamentos,</p><p>classes, interfaces, objetos, atributos, métodos, herança, polimorfismo,</p><p>encapsulamento, construtores e destrutores. Programação estruturada.</p><p>Conceito de sistemas centralizados, descentralizados, distribuídos,</p><p>cliente/servidor e em camadas.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 143</p><p>• Cada componente é bastante sofisticado, mas o usuário não precisa saber como funciona</p><p>internamente.</p><p>• Cada componente é independente dos demais.</p><p>• Para quem está montando, interessa apenas como os componentes interagem entre si:</p><p>– a placa de vídeo encaixa no slot ?</p><p>– O monitor funciona com essa placa ?</p><p>– A CPU é compatível com a placa-mãe ?</p><p>Encapsulamento (Data Hiding)</p><p>• É definido como uma técnica para minimizar as interdependências entre módulos, através da</p><p>definição de interfaces externas.</p><p>• “Caixa preta” - não é necessário saber como funciona internamente, mas sim como utilizar.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 144</p><p>Encapsulamento - Benefícios</p><p>• Segurança: protege os objetos de terem seus atributos corrompidos por outros objetos.</p><p>• Independência: “escondendo” seus atributos, um objeto protege outros de complicações de</p><p>dependência da sua estrutura interna.</p><p>Mensagens e Métodos</p><p>• Para invocar um método, deve-se enviar uma mensagem para o objeto desejado</p><p>• Para enviar uma mensagem, deve-se</p><p>– identificar o objeto que receberá a mensagem</p><p>– identificar o método que o objeto deverá executar</p><p>– passar os argumentos requeridos pelo método</p><p>Abstração</p><p>Focalizar o essencial, ignorar propriedades acidentais</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 145</p><p>Classes</p><p>Uma classe determina um conjunto de objetos com:</p><p>– propriedades semelhantes</p><p>– comportamentos semelhantes</p><p>– relacionamentos comuns com outros objetos</p><p>- Código da Classe Lamp</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 146</p><p>ARQUITETURA DE SOFTWARE28</p><p>Atividades de Projeto</p><p>- Projeto Geral ou Preliminar: fase que traduz a especificação do sistema em termos da arquitetura de</p><p>dados e de módulos. Descreve a organização fundamental do sistema, identificando seus diversos</p><p>módulos (e sua relação entre si e com o ambiente) para que se alcancem os objetivos propostos pelo</p><p>cliente – Projeto da arquitetura do software.</p><p>28 Fonte: http://www.inf.ufpr.br/silvia/ESNovo/projeto/pdf/IntroduzArquiteturaAl.pdf - Silvia Regina Vergilio</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 147</p><p>- Projeto Detalhado: descrição detalhada/ refinamento de cada módulo, visando à codificação e</p><p>especificação dos programas</p><p>Projeto da Arquitetura de Software</p><p>- Arranjo do sistema para fazer corresponder os requisitos – tanto funcionais quanto não funcionais -</p><p>aos subsistemas e componentes.</p><p>dados do mesmo tipo precisa ser armazenado</p><p>em uma mesma estrutura.</p><p>Um vetor é uma estrutura de dados homogênea, isto é, agrupa valores de um mesmo tipo;</p><p>O tipo do vetor é o mesmo tipo dos dados que ele armazena.</p><p>Um vetor é uma estrutura de dados indexada, ou seja:</p><p>- Cada valor pode ser acessado através de um índice, o qual corresponde a uma posição no vetor;</p><p>- Os índices são valores ínteiros e positivos (0, 1, 2, 3,...);</p><p>4 Fonte: http://www.deinf.ufma.br/~vidal/algoritmos1/vetoresmatrizes</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 16</p><p>- Em outras palavras, uma posição específica do vetor pode ser acessada diretamente através do seu</p><p>índice.</p><p>Matriz: uma matriz é uma coleção de variáveis de um mesmo tipo que é referenciada por um nome</p><p>comum;</p><p>Vetores são matrizes unidimensionais;</p><p>Matrizes bidimensionais: uma matriz bidimensional é uma matriz de matrizes unidimensionais;</p><p>Matrizes de uma Dimensão ou Vetores5</p><p>Este tipo de estrutura em particular é também denominado por alguns profissionais de como matrizes</p><p>unidimensionais. Sua utilização mais comum está vinculada à criação de tabelas. Caracteriza-se por ser</p><p>defini da uma única variável dimensionada com um determinado tamanho. A dimensão de uma matriz é</p><p>constituída por</p><p>constantes inteiras e positivas. Os nomes dados às matrizes seguem as mesmas regras de nomes</p><p>utilizados para indicar as variáveis simples.</p><p>Para ter uma idéia de como utilizar matrizes em uma determinada situação, considere o seguinte</p><p>problema: "Calcular e apresentar a média geral de uma turma de 8 alunos. A média a ser obtida deve ser</p><p>a média geral das médias de cada aluno obtida durante o ano letivo". Desta forma será necessário somar</p><p>todas as médias e dividi-las por 8. A tabela seguintes apresenta o número de alunos, suas notas</p><p>bimestrais e respectivas médias anuais. É da média década aluno que será efetuado o cálculo da média</p><p>da turma.</p><p>Agora basta escrever um programa para efetuar o cálculo das 8 médias de cada aluno. Para</p><p>representar a média do primeiro aluno será utilizada a variável MD1, para o segundo MD2 e assim por</p><p>diante. Então tem-se:</p><p>MD1 =4.5</p><p>MD2 =6.5</p><p>MD3 =8.0</p><p>MD 4 = 3.5</p><p>MD 5 = 6.0</p><p>MD 6 = 7.0</p><p>MD 7 = 6.5</p><p>MD 8 = 6.0</p><p>Com o conhecimento adquirido até este momento, seria então elaborado um programa que efetuaria</p><p>a leitura de cada nota, a soma delas e a divisão do valor da soma por 8, obtendo-se desta forma a média,</p><p>conforme exemplo abaixo em português estruturado:</p><p>programa MÉDIA_TURMA</p><p>var</p><p>MD1, MD2, MD3, MD4, MD5, MD6, MD7, MD8 : real</p><p>SOMA, MÉDIA : real</p><p>início</p><p>SOMA ]</p><p>de ctipo de dado>, sendo que será a indicação dos valores inicial e final do tamanho do vetor</p><p>e se o vetor em questão irá utilizar valores reais, inteiros, lógicos ou caracteres.</p><p>Leitura dos Dados de uma Matriz</p><p>A leitura de uma matriz é processada passo a passo, um elemento por vez. A instrução de leitura é</p><p>leia seguida da variável mais o índice. A seguir, são apresentados diagrama de blocos e codificação em</p><p>português estruturado da leitura das notas dos 8 alunos, cálculo da média e a sua apresentação.</p><p>Diagrama de Blocos</p><p>Diagrama de blocos para leitura dos elementos de uma matriz tipo vetor.</p><p>programa MÉDIA_TURMA</p><p>var</p><p>MD : conjunto[1..8] de real</p><p>SOMA, MÉDIA : real</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 18</p><p>I : inteiro</p><p>início</p><p>SOMA</p><p>Mas sempre é possível dividir um</p><p>problema grande em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples,</p><p>e é esse trecho menor que é chamado de sub-rotina. Uma sub-rotina é na verdade um programa, e sendo</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 20</p><p>um programa poderá efetuar diversas operações computacionais (entrada, processamento e saída) e</p><p>deverá ser tratada como foram os programas projetados até este momento. As sub-rotinas são utilizadas</p><p>na divisão de algoritmos complexos, permitindo assim possuir a modularização de um determinado</p><p>problema, considerado grande e de difícil solução.</p><p>Ao trabalhar com esta técnica, pode-se deparar com a necessidade de dividir uma sub-rotina em outras</p><p>tantas quantas forem necessárias, buscando uma solução mais simples de uma parte do problema maior.</p><p>O processo de dividir sub-rotinas em outras é denominado Método de Refinamento Sucessivo.</p><p>O Método Top-Down</p><p>O processo de programar um computador torna-se bastante simples quando aplicado o método de</p><p>utilização de sub-rotinas (módulos de programas). Porém, a utilização dessas sub-rotinas deverá ser feita</p><p>com aplicação do método top down.</p><p>Um método bastante adequado para a programação de um computador é trabalhar com o conceito de</p><p>programação estruturada, pois a maior parte das linguagens de programação utilizadas atualmente</p><p>também são, o que facilita a aplicação deste processo de trabalho. O método mais adequado para a</p><p>programação estruturada é o Top-Down (De cima para baixo) o qual se caracteriza basicamente por:</p><p>Antes de iniciar a construção do programa, o programador deverá ter em mente as tarefas principais</p><p>que este deverá executar. Não é necessário saber como funcionarão, somente saber quantas são.</p><p>Conhecidas todas as tarefas a serem executadas, tem-se em mente como deverá ser o programa</p><p>principal, o qual vai controlar todas as outras tarefas distribuídas em suas sub-rotinas.</p><p>Tendo definido o programa principal, é iniciado o processo de detalhamento para cada sub-rotina.</p><p>Desta forma são definidos vários algoritmos, um para cada rotina em separado, para que se tenha uma</p><p>visão do que deverá ser executado em cada módulo de programa. Existem programadores que</p><p>estabelecem o número máximo de linhas de programa que uma rotina deverá possuir. Se o número de</p><p>linhas ultrapassa o limite preestabelecido, a rotina em desenvolvimento é dividida em outra sub-rotina (é</p><p>neste ponto que se aplica o método de refinamento sucessivo).</p><p>O método Top-Down faz com que o programa tenha uma estrutura semelhante a um organograma.</p><p>A figura abaixo apresenta um exemplo desta estrutura.</p><p>A utilização do método "de cima para baixo" permite que seja efetuado cada módulo de programa em</p><p>separado. Desta forma, cada um pode ser testado separadamente garantindo que o programa completo</p><p>esteja sem erro ao seu término.</p><p>Outro detalhe a ser considerado é que muitas vezes existem em um programa trechos de códigos que</p><p>são repetidos várias vezes. Esses trechos poderão ser utilizados como sub-rotinas, proporcionando um</p><p>programa menor e mais fácil de ser alterado num futuro próximo.</p><p>A utilização de sub-rotinas e o uso do método Top-Down na programação permitem ao programador</p><p>elaborar rotinas exclusivas. Por exemplo, uma rotina somente para entrada, outra para a parte de</p><p>processamento e outra para a saída dos dados. Se o leitor comparar esta proposta com o que foi estudado</p><p>anteriormente, verá suas vantagens. Lembre-se dos programas anteriores todos os seus algoritmos de</p><p>saída obrigavam de certa forma efetuar primeiro a entrada dos dados.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 21</p><p>Procedimentos</p><p>Um procedimento é um bloco de programa contendo início e fim e será identificado por um nome, por</p><p>meio do qual será referenciado em qualquer parte do programa principal ou do programa chamador da</p><p>rotina. Quando uma sub-rotina é chamada por um programa, ela é executada e ao seu término o controle</p><p>de processamento retorna automaticamente para a primeira linha de instrução após a linha que efetuou</p><p>a chamada da sub-rotina.</p><p>Com relação à criação da rotina, será idêntica a tudo o que já foi estudado sobre programação. Na</p><p>representação do diagrama de blocos, não há quase nenhuma mudança, a não ser pela troca das</p><p>identificações Início e Fim nos símbolos de Terminal e o novo símbolo Sub-rotina, que é idêntico ao</p><p>símbolo de processamento, porém se caracteriza pelas linhas paralelas às bordas esquerda e direita,</p><p>devendo ser utilizado no programa chamador. A sintaxe em português estruturado será também idêntica</p><p>ao estudo anterior. Observe em seguida, o código em português estruturado.</p><p>Português Estruturado</p><p>procedimento</p><p>var</p><p>inicio</p><p>fim</p><p>A melhor maneira de entender como trabalhar com uma sub-rotina é fazer a sua aplicação em um</p><p>programa mais complexo. Para tanto, imagine o seguinte problema:</p><p>Criar um programa calculadora que apresente um menu de seleções no programa principal. Esse menu</p><p>deverá dar ao usuário a possibilidade de escolher uma entre quatro operações aritméticas. Escolhida a</p><p>opção desejada, deverá ser solicitada a entrada de dois números, e processada a operação deverá ser</p><p>exibido o resultado.</p><p>Algoritmo</p><p>Note que esse programa deverá ser um conjunto de cinco rotinas, sendo uma principal e quatro</p><p>secundárias. A rotina principal efetuará o controle das quatro rotinas secundárias que, por sua vez,</p><p>pedirão a leitura de dois valores, farão a operação e apresentarão o resultado obtido. Afigura 11.2</p><p>apresenta um organograma com a ideia de hierarquização das rotinas do programa. A quinta opção não</p><p>se caracteriza por ser uma rotina, apenas a opção que vai encerrar o looping de controle do menu.</p><p>Tendo uma ideia da estrutura geral do programa, será escrito em separado cada algoritmo com os</p><p>seus detalhes de operação. Primeiro o programa principal e depois as outras rotinas, de preferência na</p><p>mesma ordem em que estão mencionadas no organograma.</p><p>Programa Principal</p><p>1- Apresentar um menu de seleção com cinco opções:</p><p>1-Adição</p><p>2-Subtração</p><p>3-Multiplicação</p><p>4- Divisão</p><p>5-Fim de Programa</p><p>2- Ao ser selecionado um valor, a rotina correspondente deverá ser executada;</p><p>3- Ao escolher o valor 5, o programa deverá ser encerrado.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 22</p><p>Rotina 1 - Adição</p><p>1- Ler dois valores, no caso variáveis A e B;</p><p>2- Efetuar a soma das variáveis A e B, implicando o seu resultado na variável R;</p><p>3- Apresentar o valor da variável R.</p><p>Rotina 2 - Subtração</p><p>1- Ler dois valores, no caso variáveis A e B;</p><p>2- Efetuar a subtração das variáveis Ae B, implicando o seu resultado na variável R;</p><p>3- Apresentar o valor da variável R.</p><p>Rotina 3 - Multiplicação</p><p>1- Ler dois valores, no caso variáveis A e B;</p><p>2- Efetuar a multiplicação das variáveis A e B, implicando o seu resultado na variável R;</p><p>3- Apresentar o valor da variável R.</p><p>Rotina 4 - Divisão</p><p>1- Ler dois valores, no caso variáveis A e B;</p><p>2- Efetuar a divisão das variáveis A e B, implicando o seu resultado na variável R;</p><p>3- Apresentar o valor da variável R.</p><p>Observe que em cada rotina serão utilizadas as mesmas variáveis, mas elas não serão executadas ao</p><p>mesmo tempo para todas as operações. Serão utilizadas em separado e somente para a rotina escolhida.</p><p>Diagramas de Blocos</p><p>Perceba que na diagramação cada rotina é definida em separado como um programa independente.</p><p>O que muda é a forma de identificação do símbolo Terminal. Em vez de se utilizarem os termos Início e</p><p>Fim, utilizam-se o nome da sub-rotina para iniciar e a palavra Retomar para encerrar. Com relação ao</p><p>módulo principal, ele faz uso do símbolo Sub-rotina que indica a chamada de uma sub-rotina.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 23</p><p>Diagramas de blocos para o programa calculadora com sua sub-rotina.</p><p>Português</p><p>Estruturado</p><p>Em código português estruturado, serão mencionadas em primeiro lugar as sub- -rotinase por último o</p><p>programa principal. Quando no programa principal ou rotina chamadora for referenciada uma sub-rotina,</p><p>ela será sublinhada para facilitar sua visualização. Observe no programa a variável OPÇÃO para controlar</p><p>a opção do operador que é do tipo caractere. Outro detalhe a ser observado é o nome de cada rotina</p><p>mencionado junto da verificação da instrução se no módulo de programa principal.</p><p>programa CALCULADORA</p><p>var</p><p>OPÇÃO : caractere</p><p>{Sub-rotinas de cálculos} procedimento ROTSOMA</p><p>var</p><p>R, A, B : real</p><p>inicio</p><p>escreva "Rotina de Adição"</p><p>escreva "Entre um valor para A: “</p><p>leia A</p><p>escreva "Entre um valor para B: " leia B</p><p>R "5") faça</p><p>escreva "1 - Adição"</p><p>escreva "2 - Subtração"</p><p>escreva "3 - Multiplicação"</p><p>escreva "4 - Divisão"</p><p>escreva "5 - Fim de Programa"</p><p>escreva "Escolha uma opção: "</p><p>leia OPÇÃO</p><p>se (OPÇÃO = "1") então rotsoma fim_se</p><p>se (OPÇÃO = "2") então rotsubtracão fim_se</p><p>se (OPÇÃO = "3") então rotmultiolicacão fim_se</p><p>se (OPÇÃO = "4") então rotdivisão fim_se</p><p>fim_enquanto</p><p>fim</p><p>Funções</p><p>Função também é um bloco de programa, como são os procedimentos, contendo início e fim e sendo</p><p>identificada por um nome, por meio do qual também será referenciada em qualquer parte do programa</p><p>principal. Uma sub-rotina de função é na verdade muito parecida com uma sub-rotina de procedimento.</p><p>A sintaxe em português estruturado é também idêntica ao estudo anterior. Observe em seguida, o código</p><p>em português estruturado de uma função.</p><p>Português Estruturado</p><p>função (parâmetros) :</p><p>var</p><p>início</p><p>fim</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 25</p><p>A sua principal diferença está no fato de uma função retornar um determinado valor, que é retornado</p><p>no próprio nome da função. Quando se diz valor, devem ser levados em consideração os valores</p><p>numéricos, lógicos ou literais (caracteres).</p><p>Parãmetros</p><p>Os parâmetros têm por finalidade servir como um ponto de comunicação bidirecional entre uma sub-</p><p>rotina e o programa principal ou uma outra sub-rotina hierarquicamente de nível mais alto. Desta forma,</p><p>é possível passar valores de uma sub-rotina ou rotina chamadora à outra sub-rotina e vice-versa,</p><p>utilizando parâmetros que podem ser formais ou reais.</p><p>Parâmetros Formais e Reais</p><p>Serão considerados parâmetros Formais quando forem declarados por meio de variáveis juntamente</p><p>com a identificação do nome da sub-rotina, os quais serão tratados exatamente da mesma forma que são</p><p>tratadas as variáveis globais ou locais. Considere como exemplo de parâmetros formais o código em</p><p>português estruturado da sub-rotina apresentado abaixo:</p><p>procedimento CALCSOMA(A, B : inteiro)</p><p>var</p><p>Z : inteiro</p><p>início</p><p>Z</p><p>Inserção</p><p>A inserção começa com uma busca; procurando pelo valor, mas se não for encontrado, procuraremos</p><p>as sub-árvores da esquerda ou direita como na busca. Eventualmente, alcançaremos a folha, e então</p><p>inserimos o valor nesta posição. Ou seja nós examinamos a raiz e introduzimos um nó novo na sub-árvore</p><p>da esquerda se o valor novo é menor do que a raiz, ou na sub-árvore da direita se o valor novo for maior</p><p>do que a raiz.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 27</p><p>Uma outra maneira de explicar a inserção é que a fim de introduzir um nó novo na árvore, seu valor é</p><p>primeiro comparado com o valor da raiz. Se seu valor for menos do que a raiz, é comparado então com</p><p>o valor do filho da esquerda da raiz. Se seu valor for maior, está comparado com o filho da direita da raiz.</p><p>Este processo continua até que o nó novo esteja comparado com um nó da folha, e então adiciona-se o</p><p>filho da direita ou esquerda, dependendo de seu valor.</p><p>Exclusão</p><p>Exclusão na folha:</p><p>Exclusão de um nó com um filho. O filho do nó excluído passa a ocupar a posição do pai.</p><p>Exclusão de um nó com dois filhos. Neste caso pode-se operar de duas maneiras diferentes. Pode-se</p><p>substituir o valor do nó a ser retirado pelo valor sucessor (o nó mais a esquerda da sub-árvore direita) ou</p><p>pelo valor antecessor (o nó mais a direita da sub-árvore esquerda), e aí remove-se o nó sucessor (ou</p><p>antecessor).</p><p>No exemplo acima, o nó de valor 30 está para ser removido, e possui como sucessor imediato o valor</p><p>40 e como antecessor imediato do 40 o valor 35. Assim sendo, na exclusão, o filho do 40 será promovido</p><p>no lugar o nó a ser excluído, o 40 continuará no mesmo lugar, como pode ser visto na figura.</p><p>Ao excluir um nó, ou mesmo ao incluir um nó, pode haver o desbalanceamento da árvore, sendo</p><p>corrigido, por exemplo, com o balanceamento AVL.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 28</p><p>Percurso</p><p>Em uma árvore binária de busca pode-se fazer os três percursos que faz para uma árvore binária</p><p>qualquer (percursos em inordem, preordem e posordem). Uma característica interessante é quando se</p><p>faz um percurso em ordem em uma árvore binária de busca. Ao efetuar esse percurso, os valores dos</p><p>nós aparecem em ordem crescente.</p><p>A operação "Percorre" tem como objetivo percorrer a árvore numa dada ordem enumerando os seus</p><p>nós. Quando um nó é enumerado, dizemos que ele foi "visitado".</p><p>Recursão</p><p>Caso trivial: Percorrer uma árvore vazia: nada é feito. Caso mais simples que o problema original:</p><p>Pré-ordem (ou profundidade):</p><p>- Visita a raiz;</p><p>- Percorre a sub-árvore esquerda em pré-ordem;</p><p>- Percorre a sub-árvore direita em pré-ordem.</p><p>Ordem Simétrica:</p><p>- Percorre a sub-árvore esquerda em ordem simétrica;</p><p>- Visita a raiz;</p><p>- Percorre a sub-árvore direita em ordem simétrica.</p><p>Pos-ordem:</p><p>- Percorre a sub-árvore esquerda em pos-ordem;</p><p>- Percorre a sub-árvore direita em pos-ordem;</p><p>- Visita a raiz.</p><p>Grafos</p><p>O tema destas notas é o mesma de boa parte da Ciência e da Engenharia da Computação: a</p><p>construção de programas eficientes, programas capazes de resolver problemas com grande quantidade</p><p>de dados em pouco tempo (ou, pelo menos, em uma quantidade de tempo razoável).</p><p>Os problemas de que tratamos aqui envolvem grafos. Um problema desse tipo tem como dado de</p><p>entrada um grafo (e às vezes algumas informações adicionais) e tem como objetivo encontrar algum tipo</p><p>de estrutura dentro do grafo. (Por exemplo, dado um grafo e dois de seus vértices, encontrar um caminho</p><p>de comprimento mínimo de um dos vértices até o outro.) Nossos objetivos são</p><p>- entender certos problemas básicos sobre grafos e suas sutilezas e</p><p>- estudar algoritmos eficientes para resolver esses problemas.</p><p>Os problemas de que trataremos são considerados básicos porque são os tijolos usados na</p><p>estruturação dos dados e na elaboração das soluções de muitos problemas práticos na ciência e na</p><p>indústria.</p><p>ANÁLISE ORIENTADA A OBJETOS</p><p>Consiste da definição das classes (objetos) que representam o problema a ser resolvido, o modo pelo</p><p>qual as classes se relacionam e interagem umas com as outras, o funcionamento interno (atributos e</p><p>operações) dos objetos e os mecanismos de comunicação (mensagens) que permitem a eles trabalharem</p><p>juntos. Deve-se fazer uma descrição das características estáticas e dinâmicas das classes que</p><p>descrevem um sistema ou um produto.</p><p>A OOA fornece um modo concreto de representar seu entendimento dos requisitos e depois testar</p><p>esse entendimento contra a percepção do cliente.</p><p>Passos:</p><p>A OOA começa com uma descrição de casos de uso – uma descrição baseada em cenário de como</p><p>atores (pessoas, máquinas, outros sistemas) interagem com o produto a ser construído. A modelagem</p><p>Classe-Responsabilidade-Colaboração, CRC traduz a informação contida nos casos de uso, numa</p><p>Análise e projetos: Modelagem de dados: diagrama de fluxo de dados, modelo</p><p>entidade-relacionamento. Análise e projeto orientado a objetos com notação</p><p>UML, análise e projeto estruturado de sistemas.</p><p>1505543 E-book gerado especialmente para HIRAN BUSTAMANTE</p><p>. 29</p><p>representação de classes e suas colaborações com outras classes. As características estáticas e</p><p>dinâmicas das classes são então modeladas usando uma linguagem unificada de modelagem (ou algum</p><p>outro método).</p><p>Cria-se um modelo de análise orientado a objetos. É composto de representações gráficas ou baseado</p><p>em linguagem que definem os atributos, relacionamento e comportamento das classes, bem como</p><p>comunicação interclasses e um gráfico do comportamento da classe ao longo do tempo. Em cada estágio,</p><p>os elementos do modelo de análise orientada a objetos são revistos quanto à clareza, correção,</p><p>completeza e consistência com os requisitos do cliente e entre si.</p><p>Princípios básicos da OOA:</p><p>O domínio da informação é modelado;</p><p>- A função é descrita;</p><p>- O comportamento é representado;</p><p>- Os modelos de dado, funcional e comportamental, são particionados para expor maiores detalhes;</p><p>- Os primeiros modelos representam a essência do problema, enquanto os últimos modelos fornecem</p><p>detalhes de implementação.</p><p>Objetivos da OOA:</p><p>Definir todas as classes que são relevantes ao problema a ser resolvido – as operações e atributos</p><p>associados a elas, as relações entre elas e o comportamento que elas exibem. Para tal:</p><p>- Os requisitos básicos do usuário precisam ser discutidos entre o cliente e o engenheiro de software;</p><p>- As classes precisam ser identificadas;</p><p>- Uma hierarquia de classes precisa ser especificada;</p><p>- As relações de objeto para objeto devem ser apresentadas;</p><p>- O comportamento do objeto precisa ser modelado;</p><p>- As tarefas de 1 a 5 são replicadas iterativamente até que o modelo seja completado.</p><p>Métodos de OOA:</p><p>- Booch</p><p>- Rumbaugh</p><p>- Jacobson</p><p>- Coad e Yourdon</p><p>- Wirfs-Brock</p><p>Passos genéricos para a condução da análise orientada a objetos:</p><p>- Deduzir os requisitos do cliente para o sistema;</p><p>- Identificar cenários de casos de uso;</p><p>- Selecionar classes e objetos usando os requisitos básicos como diretriz;</p><p>- Identificar atributos e operações para cada objeto do sistema;</p><p>- Definir estruturas e hierarquias que organizem as classes;</p><p>- Construir um modelo objeto-relacionamento;</p><p>- Construir um modelo de comportamento de objeto;</p><p>- Revisar o modelo de análise OO com base nos casos de uso ou cenários.</p><p>Abordagem unificada a OOA:</p><p>Em UML, um sistema é representado usando cinco diferentes “visões”, a saber:</p><p>- Visão do modelo do usuário: representa o sistema (produto) a partir da perspectiva do usuário</p><p>(chamados de atores em UML). O caso de uso é a abordagem de modelagem escolhida para a visão do</p><p>modelo do usuário;</p><p>- Visão do modelo estrutural: Dados e funcionalidades são vistos de dentro do sistema. Isto é, a</p><p>estrutura estática (classes, objetos e relacionamentos) é modelada;</p><p>- Visão do modelo comportamental: Essa parte do modelo de análise representa os aspectos</p><p>dinâmicos ou comportamentais do sistema.</p>

Mais conteúdos dessa disciplina