Banco de Dados II - Curso técnico em informática

download Banco de Dados II - Curso técnico em informática

of 60

Transcript of Banco de Dados II - Curso técnico em informática

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    1/60

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    2/60

    Curso Técnico em Informáca

    Banco de Dados II

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    3/60

    Robson Braga de AndradePresidente da Confederação Nacional da Indústria

    Rafael LucchesiDiretor do Departamento Nacional do SENAI

    Regina Maria de Fáma TorresDiretora de Operações do Departamento Nacional do SENAI

    Alcantaro Corrêa

    Presidente da Federação da Indústria do Estado de Santa Catarina

    Sérgio Roberto ArrudaDiretor Regional do SENAI/SC

    Antônio José CarradoreDiretor de Educação e Tecnologia do SENAI/SC

    Marco Antônio DociaDiretor de Desenvolvimento Organizacional do SENAI/SC

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    4/60

    Confederação Nacional da Indústria

    Serviço Nacional de Aprendizagem Industrial

    Curso Técnico em Informáca

    Banco de Dados II

    Silvio Luis de Sousa

    Florianópolis/SC2011

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    5/60

    É proibida a reprodução total ou parcial deste material por qualquer meio ou sistema sem o prévio consenmentodo editor.

    Autor

    Silvio Luis de SousaFotograasBanco de Imagens SENAI/SChp://www.sxc.hu/hp://oce.microso.com/en-us/ images/hp://www.morguele.com/hp://www.bancodemidia.cni.org.br/

    Ficha catalográfica elaborada por Luciana Effting CRB14/937 - Biblioteca do SENAI/SC Florianópolis

    S725b

    Sousa, Silvio Luis de

    Banco de dados II / Silvio Luis de Sousa. – Florianópolis : SENAI/SC, 2011.

    59 p. : il. color ; 28 cm.

    Inclui bibliografias.

    1. Banco de dados. 2. Banco de dados relacionais. 3. Sistemas de

    recuperação da informação – Segurança. 4. SQL (Linguagem de

    programação de computadores). I. SENAI. Departamento Regional de Santa

    Catarina. II. Título.

    CDU 004.65

    SENAI/SC — Serviço Nacional de Aprendizagem IndustrialRodovia Admar Gonzaga, 2.765 – Itacorubi – Florianópolis/SCCEP: 88034-001Fone: (48) 0800 48 12 12www.sc.senai.br

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    6/60

    Prefácio

     Você faz parte da maior instituição de educação prossional do estado.Uma rede de Educação e Tecnologia, formada por 35 unidades conecta-das e estrategicamente instaladas em todas as regiões de Santa Catarina.

    No SENAI, o conhecimento a mais é realidade. A proximidade com asnecessidades da indústria, a infraestrutura de primeira linha e as aulasteóricas, e realmente práticas, são a essência de um modelo de Educaçãopor Competências que possibilita ao aluno adquirir conhecimentos, de-senvolver habilidade e garantir seu espaço no mercado de trabalho.

    Com acesso livre a uma eciente estrutura laboratorial, com o que existe

    de mais moderno no mundo da tecnologia, você está construindo o seufuturo prossional em uma instituição que, desde 1954, se preocupa emoferecer um modelo de educação atual e de qualidade.

    Estruturado com o objetivo de atualizar constantemente os métodos deensino-aprendizagem da instituição, o Programa Educação em Movi-mento promove a discussão, a revisão e o aprimoramento dos processosde educação do SENAI. Buscando manter o alinhamento com as neces-sidades do mercado, ampliar as possibilidades do processo educacional,oferecer recursos didáticos de excelência e consolidar o modelo de Edu-cação por Competências, em todos os seus cursos.

    É nesse contexto que este livro foi produzido e chega às suas mãos. Todos os materiais didáticos do SENAI Santa Catarina são produçõescolaborativas dos professores mais qualicados e experientes, e contamcom ambiente virtual, mini-aulas e apresentações, muitas com anima-ções, tornando a aula mais interativa e atraente.

    Mais de 1,6 milhões de alunos já escolheram o SENAI. Você faz partedeste universo. Seja bem-vindo e aproveite por completo a Indústriado Conhecimento.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    7/60

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    8/60

    Sumário

    Conteúdo Formavo  9  

    Apresentação  11 

    12 Unidade de estudo 1

    Índice: Herói ouVilão?

    Seção 1 - Conhecendo sobreíndice

    Seção 2 - Trabalhando e re-conhecendo pos de índice

    24 Unidade de estudo 2

    Avançando em SQL

    Seção 1 - Abordagem inicial

    Seção 2 - Cálculo em SQL

    Seção 3 - Funções de agre-gação sobre conjuntos

    Seção 4 - Mais recursos SQL

    13

    16

    38 Unidade de estudo 3Views

    Seção 1 - Abordagem inicial

    Seção 2 - Manipulando views

    42 Unidade de estudo 4

    Trigger 

    Seção 1 - Abordagem inicial

    Seção 2 - ManipulandoTrigge

    48 Unidade de estudo 5

    Segurança em Ban-co de Dados

    Seção 1 - Abordagem inicial

    Seção 2 - Abrangência da se-gurança em banco de dados

    Seção 3 - Integridade dedados

    Seção 4 - Controle de acessoa banco de dados

    25

    25 

    26

    28

    43

    44

    39

    39

    Finalizando 55

    Referências  57

    49

    49

    49

    52

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    9/60

    8 CURSOS TÉCNICOS SENAI

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    10/60

    Conteúdo Formativo

    9BANCO DE DADOS II

    Carga horária da dedicação

    Carga horária: 60 horas

    Competências

    Criar e gerenciar sistemas de banco de dados para solução de problemas

    Conhecimentos

    ▪ Índices,

    ▪ Integridade de dados,

    ▪ Junções (join),

     ▪ União (union),

    ▪ Visões (views),

    ▪ Triggers (galhos),

    ▪ Redundância.

    Habilidades

     ▪ Aplicar álgebra de conjuntos.

     ▪ Interpretar e analisar modelos de dados.

     ▪ Ulizar a linguagem SQL para manipulação de dados.

     ▪ Idencar defeitos e falhas em banco de dados.

     ▪ Aplicar normas de segurança de dados (integridade de dados, backup e restore).

    Atudes

     ▪ Organização e zelo na ulização de equipamentos.

     ▪ Foco no conteúdo trabalhado.

     ▪ Acesso a síos relacionados ao tema trabalhado.

     ▪ Organização e limpeza dos ambientes colevos.

     ▪ Dedicação e empenho nas avidades curriculares e extracurriculares.

     ▪ Capacidade de abstração.

     ▪ Trabalho em equipe.

     ▪ Apresentação de novas soluções para situações problemas. ▪ Cumprimento de prazos.

     ▪ Análise críca de suas produções.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    11/60

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    12/60

    Apresentação

    BANCO DE DADOS II

    Que tal iniciar os estudos da unidade curricular Banco de Dados IIaprendendo a desenvolver competências voltadas ao desenvolvimentode atividades relacionadas à sua prossão?

    Bem, você deve estar se perguntando: “Que competências são essas?”.São as competências de criar e gerenciar sistemas de banco de dadospara a solução de problemas computacionais.

    Durante seus estudos, este material poderá contribuir para o desenvolvi-mento de habilidades voltadas para a elaboração de projetos de banco dedados, utilizando técnicas ecientes, o que contribui, substancialmente,para a elaboração e o desenvolvimento de projetos de software .

    Esta unidade curricular contempla, ainda, a utilização correta dos recur-

    sos de informática e de ferramentas garantindo a qualidade para soluçãode problemas. Esses são os requisitos de empresas que atuam em diver-sos segmentos do mercado de trabalho.

    Que você tenha, a partir de agora, um estudo e um ótimo aproveitamen-to deste material!

    Silvio Luis de Sousa

    Graduado em Processamentode Dados e Sistemas de Infor-mação. Pós-graduado em For-mação Docente para o EnsinoSuperior. Sócio proprietário daLM&SL Treinamento, Desenvol-vimento e Consultoria em Infor-máca, com atuação em Joinvil-le e região. Atua no SENAI emJoinville como instrutor de cur-sos de qualicação e técnicos,

    com experiência prossional emtreinamento e desenvolvimentode projeto de sofware.

    11

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    13/60

    Unidade deestudo 1

    Seções de estudo

    Seção 1 – Conhecendo sobre índice Seção 2 – Trabalhando e reconhecendopos de índice

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    14/60

    13BANCO DE DADOS II

     Índice: Herói ou Vilão?

    SEÇÃO 1Conhecendo sobre índice

    Muito se fala sobre índice em banco de dados. Alguns defendem, de ma-neira muito entusiasta, seu uso como estrutura indispensável e obrigató-ria quando da criação das tabelas do seu banco de dados, outros, apesarde não serem contrários à ideia, sugerem cautela na sua utilização e, paraencerrar, existe uma corrente que nem quer ouvir falar sobre índice,devido a experiências malsucedidas. Diante disso, você está convidado aconhecer sobre índice, para que possa formar a sua opinião.

    Para iniciar a compreensão sobre índice em sua principal utilidade, con-ra um exemplo como referência, adaptado de uma página da internet.

    Suponha uma tabela de clientes, tendo como campo chave primária ocampo Código do cliente, com a seguinte estrutura física:

    Figura 1: Representação da tabela Clientes populada

    Fonte: Aquino (2010)

    Imagine que nessa estrutura não exista nenhum campo (simples) cria-do como  índice e que você queira fazer uma consulta dos dados docliente a partir do seu nome, por exemplo, do cliente Silvio Luis:

    SELECT Codigo, Nome, Rua, Numero FROM clientes WHERE Nome =“Silvio Luis”

    Campo simples:  campoque não seja chave na ta-

    bela, seja ela primária, estran-geira, única ou full-text , ou seja,trata-se de um campo de dadossimples ou não chave.

    Índices:  recurso ulizadopara encontrar registros ra-

    pidamente em tabelas de bancode dados.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    15/60

    14 CURSOS TÉCNICOS SENAI

    Instrução SQL:

    Figura 2: Consulta da tabela Clientes pelo campo simples Nome

     Agora, supondo que a tabela clientes seja modicada com, por exemplo,a criação de um índice para o campo Nome e, após, você queira nova-mente fazer a consulta dos dados do cliente Silvio Luis. Conra:

    Instrução SQL 

    SELECT Codigo, Nome, Rua, Numero FROM clientes USE INDEX (index_Nome) WHERE Nome = “Silvio Luis”

    Figura 3: Consulta da tabela Clientes pelo campo índice Nome

    A sintaxe SQL de criação e a de consultas que envolvem índices será explica-

    da em detalhes na próxima seção desta unidade – Trabalhando e reconhe-

    cendo pos de índice.

    Fácil de analisar o que ocorreu nas duas situações, não é? Na primeirasimulação, foi realizada a consulta pelo campo Nome, que na ocasiãotratava-se de um campo simples. Como resultado você observou quefoi realizada uma varredura na tabela o que chamamos de Table Scan  atéencontrar o registro desejado. Isso é bom ou ruim? Bem, em tabelascom poucos registros não é muito relevante, mas, ao contrário, trata-sede queda de  performance  em consultas a banco de dados.

    Na segunda simulação também foi realizada a consulta pelo campoNome, porém, nesta ocasião, como índice da tabela, e não mais comoum campo simples. No resultado você observou a identicação do valordo campo de maneira mais rápida em relação à primeira simulação, sema tal varredura, o que nos isenta da tal perda de  performance  na consulta

    ao banco de dados, logicamente, dependendo da quantidade de registrosna tabela.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    16/60

    15BANCO DE DADOS II

     Assim, cou clara a ideia principaldo índice em um banco de dados,que se trata de uma estrutura im-portante no que diz respeito à oti-mização das consultas realizadas.

    Um índice é uma estrutura as-sociada a uma tabela que tornaa pesquisa mais rápida. Deve--se levar em conta o empregode índices em qualquer colunafrequentemente ulizada napesquisa de uma determinadatabela, pois, com esta opção, aduração das pesquisas será con-sideravelmente diminuída (MA-CHADO, 2008, p. 381).

    Os índices podem ser criadospara um único campo, como noexemplo anterior, ou para múlti-plos campos para, por exemplo,auxiliar na distinção dos registrosquando um determinado campopossui o mesmo valor. Tambémpodem ser atribuídos aos camposchaves primárias e chaves estran-

    geiras nas tabelas, aí temos quealguns SGBD determinam, automa-camente, como índices as chaves

    primárias (PK) e chaves estrangei-

    ras (FK) de suas tabelas e outros

    não, portanto é importante veri-

    car isso quando da criação da sua

    estrutura de tabelas.

     Agora que você conhece um pou-co mais sobre índice em bancode dados, é importante também

    saber que a escolha pela criaçãode índices, nas respectivas tabelas,deve ser executada com critério esem exageros, pois, como todo re-curso de otimização existente, os

     índices ocupam espaços em discoe seu uso exagerado pode dimi-nuir o rendimento nas transaçõesde inclusão, exclusão e alteraçãodos registros nas tabelas do bancode dados.

    Quanto à criação de índices, Ma-chado (2008, p. 381) alerta:

    “[...] tecnicamente não há limi-te ao número de índices, mas

    quanto maior o número delesmais dicil a sua manutenção”.

     A determinação para utilizaçãode índices deve obedecer a algunscritérios. Veja:

    ▪ faça uma análise individual portabela para vericar, com consci-ência, se existem ou não camposque devem ser índices. Tabelas quearmazenam poucos registros ou

    que apenas servem como auxílio aoutras tabelas normalmente nãorequerem campos indexados;

     ▪ analise as cláusulas where e join que irá ulizar. Os campos envolvi-dos são candidatos a índices;

     ▪ cuidado com o número exces-sivo de campos indexados emtabelas simples;

     ▪ cuidado também ao criar osíndices. Evite criar como índices os

    campos que já estejam denidoscomo tal, como o caso dos cam-pos chave primária (PK) e camposchave estrangeira (FK), pois isso

    caracteriza sobreposição de índice.

    Esteja atento: uma tabela deve pos-

    suir um campo como índice, pois,

    do contrário, os registros serão ar-

    mazenados aleatoriamente e, no

    caso de qualquer acesso a esta, o

    processo torna-se bastante lento.

    Cada SGBD possui característi-cas própria apesar de alguns se-rem bastante similares em muitasfuncionalidades. Cada banco dedados apresenta sua uma formaparticular com seus pos de ín-dices suportados e como ulizá-los

    respecvamente, ca aqui a suges-

    tão de que consulte a documenta-

    ção deste quando da manipulação

    de índices. 

    SGBD: Sistema Gerencia-dor de Banco de Dados.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    17/60

    16 CURSOS TÉCNICOS SENAI

    SEÇÃO 2Trabalhando ereconhecendo pos de índice

     Antes da abordagem deste assunto, vale salientar que a criação de índicespode ser executada para cada banco de dados disponível. Reservadas asfuncionalidades destes, essa tarefa pode ser executada pelos programasdisponibilizados ou também de forma manual via instrução SQL. A sin-taxe para manipulação dos índices pode variar de um banco de dadospara outro. No nosso caso, mostraremos exemplos para criação de bancode dados a parr de instrução SQL com base no banco de dados MySQL

    versão 5.2 embarcada no ulitário phpMyMAdmin 2.11.7. Crie um bancode dados para os trabalhos.

    Criação da tabela clientes:

    CREATE TABLE clientes ( codigo INT(4) NOT NULL AUTO_INCREMENT, nome VARCHAR(50) NOT NULL , rua VARCHAR(40) NOT NULL , numeroINT(4) NOT NULL , PRIMARY KEY (codigo) ) ENGINE = InnoDB

    Conra a seguir a representação da estrutura da tabela clientes resultanteda instrução anterior.

    Figura 4: Estrutura de índices tabela clientes pelo campo índice Nome

    Como você sabe, em um banco de dados é possível contar com umou mais campos cujos seus valores determinam uma unicidade para osregistros de uma tabela fazendo com que estes não se repitam – são aschamadas chaves primárias. Estas são identicadas e tratadas automa-ticamente como índices únicos do tipo PRIMARY, permitindo, assim,um acesso rápido aos dados declarados com esse índice, nesse caso, aocódigo do cliente.

    Consultar os dados do cliente Carlos Carvalho cujo código é 3:

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    18/60

    17BANCO DE DADOS II

    SELECT Codigo, Nome, Rua, Numero FROM clientes WHERE Codigo =’3’

    Resultado:

    Figura 5: Resultado da consulta do cliente pelo código

    Observe na gura o tempo decorrido da consulta. É claro que, em nossoexemplo, contamos com a tabela populada com poucos registros, mas é

    importante saber que todas as consultas são executadas a partir do cam-po código, que, por sua vez, é um campo índice.

     Agora veja uma consulta pelo nome do cliente Silvio Luis. Neste caso éinteressante que se crie um índice para o campo Nome, pois será neces-sário utilizar a cláusula where, e, tendo este campo como índice, a consul-ta tende a ser mais eciente e rápida.

    Criando o índice para o campo Nome da tabela clientes:

    CREATE INDEX index_nome ON clientes (nome(50))

    Resultado:

    Figura 6: Resultado da criação do índice contendo o campo Nome

    Note que a partir de agora a tabela clientes contém mais um índice, alémdo campo código (chave primária). Foi criado um novo índice contendoo campo Nome para acelerar as consultas dos clientes por meio do seuNome. Esse índice é tido como um índice simples, também conhecidocomo índice normal. Esse índice não contém nenhum tipo de restriçãocomo, por exemplo, o índice primário. Ele é criado quando há uma ne-cessidade sistemática de se fazer uma consulta a um determinado campoda tabela.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    19/60

    18 CURSOS TÉCNICOS SENAI

     Você pode criar quantos índices normais forem necessários, mas queatento para a real necessidade da sua criação, pois, do contrário, vocêpode provocar uma queda de performance  no banco.

    Para consultar o cliente Silvio Luis a partir do índice criado, temos:

    SELECT Codigo, Nome, Rua, Numero FROM clientes USE INDEX (index_nome) WHERE Nome = ‘Silvio Luis’

    Resultado:

    Figura 7: Resultado da consulta do cliente pelo índice Nome

    Observe, também nesse exemplo, o tempo decorrido da consulta, ressal-tando que, diante da consulta do exemplo anterior, ou seja, consulta pelocódigo (índice primário), esta ocorreu em um tempo maior. Isso porqueexecutar uma consulta a partir de um campo numérico normalmente émais rápido do que uma consulta por um campo caracter , como o casodo campo Nome.

    Lembre-se de que, na medida em que a tabela contém um número sig -

    nicativo de registros, mais evidente cará a ecácia da consulta a partirde campos índices.

    Caso essa mesma consulta seja realizada a partir de um banco de dadoscom muitos registros, a partir de um campo da tabela e não tendo criadoesse campo como índice, a tendência é que a consulta seja mais demo-rada, pois, para encontrar o registro desejado, será executada uma var-redura ( Table Scan  ) de todos os registros até encontrar aquele solicitado,conforme mencionado.

     Agora você já sabe como criar e utilizar índices simples, porém vocêpode se deparar com uma situação em que exista a necessidade de criar eutilizar índices compostos. Para não ter dúvidas, acompanhe as informa-

    ções a seguir, e lembre-se: sempre que precisar, pergunte ao professor.Suponha que você necessite obter os dados do cliente Fábio Karnoppque mora na Rua B. Note que nesse caso será preciso resgatar informa-ções de dois campos, e não mais de um campo apenas. Tenho a certezade que sua reação seria elaborar a seguinte instrução SQL:

    SELECT Codigo,Nome,Rua,Numero FROM clientes WHERE Nome=’FabioKarnopp’ AND Rua =’Rua B’

    Com certeza o resultado seria sa-tisfatório. Você teria uma tabelacom todos os dados do clientesolicitado. Tudo certo não fosseum único porém: se considerar-

    mos o que foi trabalhado até ago-ra, a esta altura só temos o campoNome criado como índice, e issonão é o suciente, precisamos deum índice com 2 campos – Nomee Rua. O que podemos fazer? Asalternativas são: customizar o ín-dice do Nome e incluir o campoRua ou excluí-lo e criar um novo

     índice com os campos Nomes eRua.

    Levando-se em conta que o ín-dice existente possui o nome deindex_nome, caracterizando suautilização para consultas pelonome do cliente, e também o fatode que criando um novo índicecomposto com Nome e Rua nãoo impediria de realizar tais consul-tas, e que, como estamos conhe-cendo sobre índices, com certeza

     vale a pena excluir o índice in-

    dex_nome e criar um novo índice,só que composto e com um novonome. Vamos trabalhar um poucomais com índices?

     ▪ Excluindo o campo índice in-dex_nome:

    ALTER TABLE clientes DROP IN-DEX index_nome

     Ao executar essa instrução, umaconrmação dessa operação serásolicitada:

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    20/60

    19BANCO DE DADOS II

    Figura 8: Conrmação da exclusão do índice index_nome

    Como o alerta sugere, caso queira cancelar a operação, clique no botão

    Cancelar, e caso queira conrmar a exclusão, clique no botão OK.  Ao clicarem OK, o índice é excluído, e você pode seguir para a próxima etapa.

    Criando o índice composto contendo os campos Nome e Rua:

    Criando o índice composto contendo os camposNome e Rua:

    ALTER TABLE clientes ADD INDEX index_Nome_Rua (nome ,rua )

    Note que novamente utilizamos o comando ALTER TABLE, pois atabela clientes está sendo modicada com a implementação de um novo

     índice, e, como tal, deve utilizar também o comando ADD para identi-car o índice a ser implementado e os campos que compõem esse índice,no caso nome e rua.

    Como resultado você terá:

    Figura 9: Resultado da criação do índice contendo os campos Nome e Rua

    Observe que agora tem um índice chamado index_Nome_Rua com-posto por mais de um campo (nome e rua), por isso o nome do índicecriado, mas isso não é o fato marcante desse tipo de índice. Durante esse

    processo você entenderá a sua característica principal.

    Como estamos nos baseando noMySQL, em se tratando de índi-ces compostos, este, ao realizaruma consulta, faz uso de um úni-co índice. Se tiver de optar por

    mais de um índice, opta pelo maisrestritivo, ou seja, aquele que re-torna a menor quantidade de re-gistros.

     Analisando nosso exemplo, te-mos que, quando executarmos aconsulta, o índice será utilizado daseguinte forma:

    Figura 10: Leitura de um índice com-

    posto

     A leitura de um índice composto érealizada da esquerda para a direi-ta até chegar naquele, que retornaa menor quantidade de registros.

    Criado o índice composto, é entãopossível realizar a consulta dosdados do cliente Fábio Karnopp,que mora na Rua B, a partir da se-guinte instrução SQL:

    SELECT Codigo, Nome, Rua,Numero FROM clientes WHERENome = ‘Fábio Karnopp’ ANDRua = ‘Rua B’

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    21/60

    20 CURSOS TÉCNICOS SENAI

    Figura 11: Resultado da consulta dos dados do cliente, pelo índice Nome, Rua

     A partir desse índice você pode também realizar a seguinte consulta:

    SELECT Codigo, Nome, Rua, Numero FROM clientes WHERE Nome =‘Silvio Luis’

    Isso porque o campo Nome faz parte do índice e trata-se do campo do índice que retorna a menor quantidade de registros.

     Já na instrução SQL a seguir, o índice criado não é utilizado, pois o cam-po Nome não está presente na condição da sentença. Apesar disso vocêobtém o resultado dos dados do cliente que residem na Rua R, normal-mente, mas sem eciência e rapidez de uma consulta utilizando o índice.

    SELECT Codigo, Nome, Rua, Numero from clientes where Rua = ‘Rua B’

    Suponha agora que deseje que, em sua tabela de clientes, não sejam sal- vos clientes com nomes duplicados. Apesar de isso não ser tecnicamenteinteressante, tome como exemplo para que se entenda a explicação dacriação e utilização de índices únicos.

    Lembre-se de que o campo Nome não faz parte de chave primária, issosignica que até o presente momento você pode cadastrar clientes comnomes iguais à vontade, mas não é isso que a proposta exemplo sugere,então a primeira providência é a de criar um índice único com o campoNome:

    ALTER TABLE clientes ADD UNIQUE unico_nome (nome)

    Como resultado da criação desse índice você terá:

    Figura 12: Resultado da criação do índice único contendo o campo Nome

    Observe que foi criado um índice

    único para o campo Nome, sendo

    que esse campo também faz parte

    de outro índice, o index_Nome_

    Rua. Isso é possível porque os pos

    de índices são diferentes e são cria-

    dos para propósitos diferentes.

     Agora, teste a utilização desse ín-dice inserindo um registro na ta-bela com o nome de um clientejá cadastrado, como, por exemplo,Fábio Karnopp.

    Instrução SQL para inclusão docliente:

    INSERT INTO clientes (codigo,nome ,rua ,numero )VALUES(NULL ,’Fábio Karnopp’, ‘Rua C’,‘111’)

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    22/60

    21BANCO DE DADOS II

    Resultado:

    Figura 13: Resultado da ulização da chave única unico_nome

    Note que a mensagem chama a sua atenção informando que você está

    tentando inserir um registro duplicado para o cliente Fábio Karnopp, cujo

    código é 2.

    Nesse exemplo foi criado um índice único contendo um único campo,então temos um índice único simples.

     Agora, suponha que você concluiu que pessoas possam ter nomes iguais,os chamados homônimos – apenas para exemplicar, meu pai, o Sr. JoséManoel de Sousa, tem aqui na cidade de Joinville quatro homônimos, ouseja, pessoas com o mesmo nome, porém com número de CPF, RG eendereço diferentes.

     Você deve estar se perguntando, mas o que isso tem a ver com nossoexemplo? Tudo, não acha? Como fará para diferenciar um cliente deoutro? Claro que nosso exemplo é um tanto limitado, mas, o que achade incrementarmos nosso índice com o campo Rua? Certo, ainda existea possibilidade de termos clientes homônimos morando na mesma rua,então o que acha de incrementarmos com o campo Rua e Número?Continue preparando o seu banco de dados para que aceite clientes comnomes iguais, porém residindo em endereços diferentes. Para isso, vocêdeve adicionar mais um campo ao índice único já existente. Mas comofazer isso, já que o índice está com um nome que sugere seu conteúdocom o campo Nome e como incrementar esse índice com o campo Rua?

    Da seguinte maneira:

     ALTER TABLE clientes DROP INDEX unico_nome , ADD UNIQUE unico_nome_rua (nome , rua )

     Ao executar essa instrução, uma conrmação dessa operação será soli-citada:

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    23/60

    22 CURSOS TÉCNICOS SENAI

    Figura 14: Conrmação de alteração do índice unico_nome

    Para incrementar o índice existente único_nome com o campo Rua, mas

    deve-se eliminar o índice existente (DROP INDEX único_nome) e em seguida

    proceder a adição do novo índice com os respecvos campos (ADD UNIQUE

    único_nome_rua (nome,rua).

     Ao conrmar a operação, o novo índice será criado, porém uma situaçãolhe será alertada:

    Figura 15: Resultado da criação do índice único contendo os campos Nome e Rua

    Como o alerta esclarece, existem índices idênticos e, apesar de seremde tipos diferentes, possuem os mesmos campos, por isso o banco dedados sugere que elimine um deles para que o espaço no banco de dadosnão seja utilizado com recursos em duplicidade.

    Mesmo tendo essa duplicidade, os dois índices connuam servindo aos

    seus propósitos, porém não se aconselha a mantê-los em duplicidade.

     Você deverá optar pela eliminação de um dos índices: ou o índice com-posto tipo INDEX, que permite a consulta dos clientes e residênciasem a preocupação de registros duplicados, ou o índice também com-posto do tipo UNIQUE, que permite a realização da consulta a exem-plo do seu concorrente, mas com o adicional de não permitir registros

    duplicados com as informações dos campos desse índice. A diferença entre esses índices encontra-se apenas na permissão ou nãode inserir registros duplicados para os campos do índice, ou seja, é pos-sível consultar os dados dos clientes a partir do nome e da rua sem maisproblemas. Assim, a melhor opção é excluir o índice do tipo INDEX. Seestiver em dúvidas de como fazer a exclusão, reveja o exemplo onde o

     índice index_nome foi excluído anteriormente, e lembre-se também deconsultar o professor sempre que achar necessário. Feito isso, insira umregistro para o cliente, Fábio Karnopp em uma rua diferente daquela doFábio Karnopp já cadastrado (Rua A e/ou Rua C).

    Perceba que o seu banco de dados permite essa operação porque, apesarde já existir um cliente com esse nome, a rua é diferente daquela já ca-dastrada para esse cliente, ou seja,agora, para que o cliente seja impedido

    de ser cadastrado, tanto o valor docampo nome do cliente como oda rua devem ser iguais aqueles járegistrados para o cliente.

    Que tal testar isso agora? Insira

    um registro para o cliente FábioKarnopp na Rua B. Provavelmen-te você receberá como retornouma mensagem de que o cliente jáse encontra cadastrado.

     Você conheceu até aqui os índicesdo tipo primário, simples, com-postos e únicos. Agora conhece-rá o índice do tipo Full-text, outexto completo. Trata-se de um

     índice para realizar consultas a

    campos de texto de uma tabela.No MySQL esses tipos de índicesão utilizados em tabelas do tipoMyISAM e para os campos dotipo CHAR, VARCHAR e TEXT.

    Para trabalhar esse conteúdo, se-guiremos com o exemplo da tabe-la de clientes e, por ser tratar deum tipo especial de índice, criare-mos uma nova tabela para estudá--lo de forma individualizada.

    Para começar, você pode criara estrutura da tabela no mesmobanco de dados onde se encontraa tabela clientes, para uma melhororganização. Dê a essa tabela onome de artigos, como se vocêfosse armazenar informações so-bre artigos em um site   para web ,por exemplo.

    CREATE TABLE argos (  id int(10) unsigned NOT NULLauto_increment, tulo var-char(200) default NULL, textotext, PRIMARY KEY (id), FULL-TEXT KEY tulo (tulo,texto)) ENGINE=MyISAM

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    24/60

    23BANCO DE DADOS II

    Resultado:

    Figura 16: Estrutura da tabela e de índices de argos

    Note que esse índice também é composto e, neste caso, pelos campostítulo e texto, será preciso popular a tabela para em seguida aprender a

    executar consultas FULL-TEXT.Para popular a tabela artigos, utilize o código a seguir.

    INSERT INTO argos (id, tulo, texto) VALUES (NULL, ‘Banco de DadosII’, ‘Uma visão práca’),(NULL, ‘Como trabalhar com índices’, ‘Conheçatudo sobre índices’),(NULL, ‘Omizando suas consultas’, ‘Omize suasconsultas ulizando....’),(NULL, ‘Dicas para criar índices’, ‘1. Analise ascláusulas where e join 2. ...’),(NULL, ‘Criando índices full-text’, ‘Comotrabalhar ...’)

    Como resultado da tabela artigos populada, tem-se:

    Figura 17: Tabela argos populada

     Agora a consulta FULL-TEXT pode iniciar, então vamos direto ao as-sunto. Vamos supor que você queira capturar o texto referente ao id 3:“Otimize suas consultas utilizando...”

    SELECT * FROM argos WHERE MATCH (tulo, texto) AGAINST (‘Omize’)

    Entendendo a instrução SQL: observe que a função MATCH (título,

    texto) é utilizada para repassar parâmetros como título e texto. Isso fazcom que a busca de uma string seja realizada a partir dos campos do índice FULL-TEXT. Já o argumento AGAINST (“Otimize”) solicita adescrição de um trecho com o texto que deseja capturar.

     Tal valor do argumento é procu-rado nos campos do índice títuloe texto e, quando encontrado, de-

     volve o resultado. Para se certi-car disso, escreva e teste a seguin-

    te instrução SQL:

    SELECT * FROM argos WHEREMATCH (tulo, texto) AGAINST(‘Omizando’)

    Para nalizar, escreva a próximainstrução SQL e teste tambémpara ver o resultado:

    SELECT * FROM argos WHEREMATCH (tulo, texto) AGAINST(‘Trabalhar’)

    O resultado traz os registros cor-respondentes aos id 2 e 5, que sãoos registros que contêm a palavra

     Trabalhar. Perceba que nos dois

    registros as palavras encontram--se salvas em minúsculo, porém apesquisa foi realizada com caixa--alta e caixa-baixa, o que querdizer que esse tipo de busca nãofaz diferenciação entre letras mai-úsculas e minúsculas, ou seja, nãoé case sensitve.

    Saiba mais

    Na próxima unidade, avançare-mos em SQL, por isso é impor-tante que você não que comdúvidas sobre o que já estudouaté aqui. Para mais informa-ções e/ou detalhes sobre o usode índices, lembre-se de con-sultar o manual e/ou tutorialdo SGBD que você está traba-lhando (neste caso, o MySQL).

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    25/60

    Unidade deestudo 2

    Seções de estudo

    Seção 1 – Abordagem inicialSeção 2 – Cálculo em SQLSeção 3 – Funções de agregação sobreconjuntosSeção 4 – Mais recursos SQL

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    26/60

    25BANCO DE DADOS II

    Avançando em SQL

    SEÇÃO 1Abordagem inicial

     Você já conhece o conceito, a es-trutura e a importância da SQLpara o ambiente de banco de da-dos relacional. Também conheceas transações que podem ser exe-

    cutadas a partir dessa linguageme sabe que serve de base para osSGBDs encontrados no mercado.Sabe que, apesar da universalida-de, a linguagem possui adaptaçõesdos seus recursos de acordo como SGBD utilizado, e isso sugereque, ao trabalhar com a lingua-gem, é preciso car atento à do-cumentação do banco de dadospara que ele possa ser utilizado

    com eciência.Criar banco de dados e tabelas ouexcluí-las não deve ser mais novi-dade para você, assim como in-cluir, alterar e pesquisar registrosem uma tabela.

     Além desses conhecimentos es-pecícos em SQL, você já devetambém dominar a elaboraçãode projetos de banco de dados apartir dos conhecimentos de mo-

    delagem de dados, não é mesmo?Então, você já deve ter percebidoo quanto é complexa a estruturade um banco de dados bem mo-delada. São tabelas criadas comseus respectivos campos, que porsua vez são de um determinadotipo e tamanho, podendo estes serchave primária ou estrangeira, ousimplesmente campos simples.

     Ainda sobre projeto de bancode dados, você deve ter percebi-do também que, de acordo coma necessidade, tais tabelas devemestar relacionadas segundo regraspreestabelecidas, a m de o bancode dados garantir que seu usuá-rio obtenha o máximo de infor-mações que garantam boas açõespara o seu negócio, de forma e-ciente e rápida.

    Diante de toda essa complexida-de que o projeto de banco de da-dos nos remete, existem situaçõesque exige um conhecimento maisaprofundado em SQL para garan-tir bons resultados a partir da es-trutura projetada, situações comorealizar cálculos com informaçõesselecionadas, utilizar funções deagregação sobre conjuntos, agru-par informações selecionadas,acessar dados de várias tabelas eutilizar consultas avanças são im-portantes.

    É isso que esta unidade se pro-põe: repassar alguns dos conhe-cimentos avançados em SQL

    necessários, para que você possaimplementar com eciência seuprojeto de banco de dados.

    Nota

    Serão abordados nesta unida-de recursos da SQL baseadosno SGBD MySQL, que é umalinguagem universal, e tudo oque é apresentado existe na

    maioria dos bancos de dados.Caso você não ulize MySQL,verique qual a sintaxe queeste uliza para o recurso apre-sentado neste livro.

    SEÇÃO 2Cálculo em SQL

     Apenas para relembrar, campocalculado é um campo que não

    pertence sicamente a uma tabela(não é um campo de dado), masarmazena o resultado do cálculoproveniente de alguns campos(campos de dados) destas, objeti-

     vando a exibição de seu conteúdoquando da apresentação do resul-tado de uma consulta.

    Situação: Mostrar o novo valordos produtos de um minimerca-do, identicados com tarja “ver-

    de”, com desconto de 10%. Or-denar pelo nome do produto.

    Figura 18: Diagrama de endade e

    relacionamentos produtos

     Após criar e popular a tabelaprodutos, tem-se:

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    27/60

    26 CURSOS TÉCNICOS SENAI

    Figura 19: Tabela produtos populada

    Calcular o desconto de 10% para os produtos com tarja verde:

    Função AVG ( )

    Situação: Qual será a médiados preços dos produtos?

    SELECT AVG (valor_venda) ASMédia_Valores_Produtos fromprodutos

    Resultado:

    Figura 22: Resultado da média dos valo-

    res dos produtos

     A função executa a média aritmé-tica simples de um conjunto de

     valores, no caso do exemplo, dospreços dos produtos.

    Função Count ( )

    Situação 1: Quantos registrosexistem na tabela produtos?

    SELECT count (*) AS Total_Re-gistros FROM produtos

     A informação Total_Registrosna instrução captura a quanti-

    dade total de registros existen-tes na tabela produtos. Resul-tado:

    Figura 23: Resultado quandade de

    registros na tabela produtos

    Situação 2:  Quantos produtospossuem o valor de venda supe-rior a R$ 5,00?

    SELECT Nome, (valor_venda – ((valor_venda * 1.10) – valor_venda )) AS Valor FROM pro-dutos WHERE tarja = ‘Verde’ORDER BY nome

    Note que temos ORDER BYnome, indicando que se deseja queo resultado da consulta seja orde-nado pelo nome do produto em

    ordem ascendente. Sempre que aordenação é omitida, assume-se aordem ASC (ascendente). Caso seprera a ordenação descendente,insere-se a informação ORDERBY nome DESC.

    Resultado:

    Figura 20: Resultado da consulta

    SEÇÃO 3Funções de agregaçãosobre conjuntos

    É um recurso bastante parecido

    com o trabalhado na seção an-terior. As funções de agregaçãoexistem para gerar novas colunas.

    Para aplicar as funções de agrega-

    ção, utilizaremos a tabela produ-tos, já trabalhada anteriormente.Conra as funções a seguir.

    Funções Max ( ) eMin ( )

    Situação: Mostrar o menor e omaior valor dos produtos da tabe-la produtos.

    SELECT MIN ( valor_venda )AS Valor_Mínimo, MAX( va-lor_venda ) AS Valor_Máximo FROM produtos

    Resultado:

    Figura 21: Resultado menor e maior do

    valor dos produtos

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    28/60

    27BANCO DE DADOS II

    Figura 25: Diagrama de endade e relacionamentos orcamento-pecas

     Após criar e popular a tabela orcamento_pecas, tem-se:

    Figura 26: Tabela orçamento_pecas populada

    Situação: Mostrar a somatória da quantidade de peças orçadas para apeça cujo código de identicação é 8901.

    SELECT SUM(qtdepeca ) AS Somatória FROM orcamento_peca WHEREpeca_idpeca =8901

    Resultado:

    Figura 27: Resultado da somatória da quandade orçada para a peça 8901

     

    SELECT count ( * ) AS Total_Re-gistros FROM produtos WHEREvalor_venda > 5.00

    Neste caso, a resposta é a quanti-dade total de registros com valorde venda superior a R$ 5,00 natabela produtos. Perceba tambéma presença do operador relacional“>” (maior). Esses operadorespodem ser utilizados em instru-ções SQL.

    Resultado:

    Figura 24: Resultado da quandade de

    registros com valor do produto acima

    de R$5,00

    Função SUM()

    Para exemplicar o uso da funçãoSUM ( ), crie e popule a tabela or-camento_pecas, conforme diagra-ma e tabela a seguir.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    29/60

    28 CURSOS TÉCNICOS SENAI

    SEÇÃO 4Mais recursos SQL

    Nesta seção você conhecerá outros recursos da SQL, como a utilização

    da cláusula DISTINCT, agrupamento de informações selecionadas, re-cuperação dos dados de várias tabelas e utilização de consultas avança -das. Conra!

    Cláusula DISTINCT

    É comum ter registros em tabela contendo valores repetidos, como:

    Figura 28: Tabela de produtos populada acrescida do registro Feijão preto

    Note que foi inserido registro “Feijão preto” e sua unidade de medidaé kg, como a do Arroz branco, repetindo assim o valor “kg” na tabela.Esse é apenas um exemplo de ocorrência entre várias que podem serencontradas (e normalmente são encontradas) em tabelas de banco dedados.

    Situação: Suponha que você deseja fazer uma consulta das unidadesde medidas, mas não gostaria que estas se repetissem, ou seja, não de-seja que o registro kg seja repetido, como normalmente aconteceria aoexecutar uma instrução básica SQL. Para isso, implemente a seguinteinstrução SQL:

    SELECT DISTINCT Unidademedida from produtos

    Resultado:

    Figura 29: Resultado da consulta das

    unidades de medida

    Esse é um exemplo que repre-senta a aplicação da cláusula DIS-

     TINCT que, segundo Machado(2008, p. 349)

    “[...] foi criada para não permirque certas redundâncias, ob-viamente necessárias, causemproblemas. A cláusula DISTINCTelimina repeções de valoresem relação a uma coluna.”

    Cláusulas GROUP BY eHAVING

    O exemplo para essa cláusula ba-seia-se na tabela orcamento_peca,utilizada na explicação da funçãoSUM ( ).

    Situação: Digamos que você pre-cise emitir a listagem do núme-ro de peças que cada orçamentopossui, agrupados pelo id do or-çamento.

    Se você vericar a Tabela orca-mento_pecas populada, podeconferir que para o orçamentocujo id é 12 existem duas peças,a de código 12 e a de código 8901,já para o orçamento cujo id é 13 existe uma peça a de código 12 e,por m, para o orçamento cujoid é 15  existem duas peças, ade código 12 e a de código 8901.Conseguiu visualizar? Se realizar

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    30/60

    29BANCO DE DADOS II

    uma consulta simples nesta tabela,o resultado será o mesmo visuali-zado na da Tabela 10, mas não éassim que desejamos o resultado,mas sim o dos orçamentos agru-

    pados com o total de peças quepossui.

    SELECT orcamento_idorca-mento, count( * ) AS Total_Pe-ças FROM orcamento_peca GROUP BY orcamento_idorca-mento

    Resultado:

    Figura 30: Resultado da consulta do

    número de peças por orçamento

    Sentiu o poder desta cláusula?

    Nesse caso é mostrado o resulta-do para todos os orçamentos databela. Se quiser, pode ltrar osorçamentos que deseja visualizarde forma agrupada, como, porexemplo:

    SELECT orcamento_idorcamen-to, count ( * ) AS Total_PeçasFROM orcamento_pecaWHERE orcamento_idorca-

    mento > 12 GROUP BY orca-mento_idorcamento

    Como você viu, estamos reali-zando a mesma consulta, só quedesejamos visualizar o resultadopara os orçamentos cujo id é su-perior a 12.

    Resultado:

    Figura 31: Resultado da consulta orça-

    mentos com id superior a 12

    O exemplo anterior mostra a uti-lização da cláusula GROUP BYcom a cláusula WHERE.

    Segundo Machado (2008, p. 350),“Geralmente, a cláusula GROUPBY é utilizada em conjunto com

    as operações COUNT e AVG.” Agora, imagine uma consulta paraos orçamentos com o total de pe-ças superior a 1:

    SELECT orcamento_idorcamen-to, count( * ) AS Total_Peças FROM orcamento_peca GROUP BY orcamento_idorca-mento HAVING COUNT( * ) >1

    Resultado:

    Figura 32: Resultado da consulta do

    total de peças superior a 1

    Note que agora foi utilizada acláusula HAVING para fazer o l-tro (restrição) da sentença, deter-minando que só sejam mostradosos orçamentos cujos totais sejamsuperior a 1. É semelhante à cláu-sula WHERE em um SELECT.

     A cláusula HAVING trabalha emparceria com GROUP BY.

    Perceba que existe uma interação

    da cláusula GROUP BY com ou-tras cláusulas SQL, possibilitandoconsultas renadas e ecientes.

     Ainda sobre essa integração, tem--se que GROUP BY pode seraplicada com qualquer outra cláu-sula trabalhada em nosso estudo.

    Acessar dados de duastabelas

     Ao desenvolver a modelagem dedados, está-se elaborando o pro-jeto de banco de dados para umasolução que servirá a um sistemade informação para que possainserir, atualizar, excluir e princi-palmente acessar as informaçõespara que o usuário deste possa

    gerir seu negócio. Por menor queseja seu projeto de banco de da-dos, sempre haverá tabelas de di-ferentes natureza e características,porém algumas se relacionam pelanecessidade de se obter informa-ções.

    Mas como acessar as informaçõesde duas tabelas? É o que você vaisaber a partir de agora.

     A linguagem SQL nos fornecetambém recursos para o acessosimultâneo a tabelas que encon-tram-se relacionadas, visandoextrair informações encontradasnelas. Esse recurso é identicadocomo junção ou JOIN entre tabe-las.

    Para ilustrar nosso estudo, vamosutilizar as tabelas clientes e carros,que se referem respectivamente ainformações dos clientes de umaocina mecânica e também aoscarros pertencentes a esses clien-tes.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    31/60

    30 CURSOS TÉCNICOS SENAI

    Representando essas tabelas populadas, você verica:

    Figura 33: Tabela clientes ocina mecânica populada

    Figura 34: Tabela carros ocina mecânica populada

    Observe o relacionamento entre as tabelas a partir do código do clienteinserido na tabela carros, identicando a quem o veículo pertence. Po-rém, observe também que se trata do código do cliente, e não seu nome.Isso faz parte das regras de relacionamento entre tabelas, como você jáestudou.

    INNER JOIN

     Agora suponha que necessite fazer uma consulta em que tenha que vi-sualizar os carros, identicados por suas placas, com os seus respectivosdonos (clientes), sendo, neste caso, necessário visualizar o nome e o có-digo. A SQL disponibiliza o recurso de junção para resolver essa e outrassituações, veja:

    SELECT clientes.nome,carros.cliente_idcliente,carros.placa FROM clien-tes INNER JOIN carrosON clientes.idcliente = carros.cliente_idcliente

    Entendendo a instrução:

    Note que estamos selecionando os campos que serão visualizados naconsulta fazendo referência à tabela onde ele se encontra seguido do seunome, clientes.nome, carros.cliente, carros.placa, isso porque a consultaenvolve duas tabelas – clientes e carros.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    32/60

    31BANCO DE DADOS II

    Observe na sequência FROM clientes INNER JOIN carros que esta-mos estabelecendo a junção entre as tabelas, do tipo INNER JOIN que,por sua vez, força com que os registros resultantes da consulta sejamaqueles que satisfazem a condição do JOIN.

    Finalizando, temos ON clientes.idcliente=carros.cliente_idcliente, na

    qual estamos determinando a condição do JOIN para que só inclua,na consulta, os registros que existam tanto na tabela clientes quanto natabela carros, ou seja, aquele registro que não se encontra em ambas astabelas não aparecerá no resultado dessa consulta. Com isso sabemos, deantemão, que o registro do cliente Silvio Luis não aparecerá no resultadodessa consulta.

    Resultado:

    Figura 35: esultado da consulta cliente/carros INNER JOIN

    Devido à junção entre as tabelas cliente e carros, agora é possível ver,além dos códigos, os nomes dos clientes, podendo assim identicar commaior clareza os proprietários dos veículos.

    CROSS JOIN

    O CROSS JOIN é outro tipo de JOIN, em que cada registro de uma dastabelas é combinada com todos os registros da outra tabela relacionada.

     Veja como utilizar, ainda tomando como exemplo as tabelas relaciona-das clientes e carros:

    SELECT nome, carro.cliente_idcliente, carro.placa FROM clientes CROSSJOIN carros

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    33/60

    32 CURSOS TÉCNICOS SENAI

    Resultado:

    Figura 36: Resultado da consulta clientes/carros CROSS JOIN

    Note que cada registro de cliente da tabela clientes relaciona-se comtodos os registros encontrados na tabela carros, formando assim umrelacionamento cruzado relativamente grande e também sem muita uti-

    lidade na maioria dos casos. Esse tipo de JOIN também é conhecidocomo produto cartesiano em álgebra relacional.

    OUTER JOIN

    Neste outro tipo de JOIN você encontra três tipos de qualicação:

     ▪ LEFT OUTER JOIN

    Suponha que queira saber quais são os clientes que têm veículos cadas-trados em carros e também queira saber os clientes que ainda não têm

     veículos cadastros em carros.

    SELECT clientes.nome,carros.cliente_idcliente,carros.placa from clien-tes LEFT OUTER JOIN carros ON clientes.idcliente = carros.cliente_idcliente

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    34/60

    33BANCO DE DADOS II

    Resultado:

    Figura 37: Resultado da consulta clientes/carros LEFT OUTER JOIN

    Nessa consulta são considerados todos os registros encontrados na ta-bela de clientes, ou seja, a tabela à esquerda (LEFT) na condição ONcliente.idcliente = carro.cliente_idcliente, segue fazendo a varredura emcarros dos clientes que também existem em ambas as tabelas.

    Note também que o cliente Silvio Luis, como não tem nenhum carrocadastrado, apresenta o resultado NULL nas colunas cliente_idcliente

    e placa.Conforme Machado (2008, p. 357) “[...] não devemos utilizar NULL nacondição de seleção, pois teremos de utilizar os resultados mais imprevi-síveis e imagináveis possíveis.”

     ▪ RIGHT OUTER JOIN

     Agora, para saber quais são os proprietários dos veículos (clientes) ca-dastrados na tabela carros, utilize a seguinte sintaxe:

    SELECT clientes.nome,carros.cliente_idcliente,carros.placa from clien-tes RIGHT OUTER JOIN carros ON clientes.idcliente = carros.cliente_

    idcliente

    Resultado:

    Tabela 1: Resultado da consulta clientes/carros RIGHT OUTER JOIN

    nome cliente idcliente placa

    Luciene Márcia 1 ABC 000

    Fábio Karnopp 2 DEF 111

    Carlos Carvalho 3 GHI 222

    Nessa consulta são considerados todos os registros encontrados na ta-bela de carros, ou seja, a tabela à direita (RIGHT) na condição ONcliente.idcliente = carro.cliente_idcliente, segue fazendo a varredura emclientes dos clientes que também existem na tabela carros.

     ▪ FULL OUTER JOIN

    Nesse caso obtém-se como resul-tado os registros que não satisfa-zem a condição tanto da primeiracomo da segunda tabela envolvi-

    das no relacionamento. Vale ainda salientar que você podeutilizar várias cláusulas misturadacom operadores na junção de ta-belas, como nos explica Machado(2008, p. 357): “Podemos utilizaras cláusulas LIKE, NOT LIKE,IN, NOT IN, NULL, NOTNULL e misturá-las com os ope-radores AND, OR e NOT, dentrode uma cláusula WHERE na jun-

    ção de tabelas”.Exemplo: suponha que deseja ob-ter os clientes que têm veículoscadastrados na ocina com a corcinza:

    SELECT clientes.nome,carros.cliente_idcliente,carros.placaFROM clientes INNER JOIN car-ros ON clientes.idcliente = car-ros.cliente_idcliente WHEREcarros,cor = cinza

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    35/60

    34 CURSOS TÉCNICOS SENAI

    Resultado:

    Figura 38: Resultado da consulta clientes/carros FULL OUTER JOIN

    Ulizar apelidos em JOINS

     As instruções JOIN permitem a simplicação em sua escrita, por exem-plo, verique a instrução a seguir:

    SELECT clientes.nome,carros.cliente_idcliente,carros.placa from clien-tes INNER JOIN carros

    ON clientes.idcliente = carros.cliente_idcliente

    Note que na frente dos campos das tabelas você identica o nome databela para depois informar o nome do campo (clientes.nome). Isso énecessário porque existem campos de tabelas diferentes.

    SELECT cl.nome,ca.cliente_idcliente,ca.placa FROM cliente cl INNERJOIN carro caON cl.idcliente = ca.cliente_idcliente

     Agora perceba que os nomes das tabelas não são escritos por inteiroantes dos nomes dos campos (cl.nome, ca.cliente). Para simplicar, uti-liza-se somente as iniciais, e isso só é possível porque em FROM vocêinforma que cliente poderia ser entendido como cl (FROM cliente cl).

    Esses nomes de tabelas simplicados são chamados de ALIASES ou APELIDO, e isso facilita bastante quando temos de manusear consultasem tabelas com muitos campos, por exemplo.

    Acessar dados de várias tabelas

    Observe a seguir a representação de uma nova estrutura. Veja que agoraela apresenta mais de duas tabelas.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    36/60

    35BANCO DE DADOS II

    Figura 39: Diagrama de endades e relacionamentos bairros/clientes/carros

     A representação das tabelas clien-tes e carros populadas você jáconhece, falta agora conhecer arepresentação da tabela bairrospopulada. Veja a seguir.

    Figura 40: Tabela bairros ocina mecâ-

    nica populada

    Suponha agora que em uma con-sulta seja necessário visualizar oscarros, identicados por suas pla-cas, com os seus respectivos pro-prietários (clientes) e também onome do bairro em que residem.Como você pode imaginar, pararealizar essa pesquisa você terá detrabalhar com três tabelas “bair-ros, clientes e carros”. Note queelas já estão relacionadas, então, ésó utilizar os recursos para extrairas informações desejadas. Então:

    SELECT carros.cliente_idclien-te AS código, clientes.nome,bairros.nome AS bairro, car-ros.placa AS placa_veiculoFROM clientes INNER JOINcarros ON clientes.idclien-te = carros.cliente_idcliente INNER JOIN bairros ON clien-tes.bairro_idbairro = bairros.idbairro

    Note que houve uma “mexida” na disposição das colunas (campos) dastabelas, mas apenas por uma questão de estética, nada por questões téc-nicas. Onde antes mostrava o código do cliente, proveniente da tabelacarros e com o nome de coluna alterado de cliente_idcliente mudou paracódigo, a seguir o campo nome do cliente, proveniente da tabela clientes,na sequência o campo nome do bairro, proveniente da tabela bairros e

    com o nome de coluna alterado de nome para bairro e, por m, o cam-po placa, proveniente da tabela carros com o nome de coluna tambémalterado de placa para placa_veículo.

    Resultado:

    Figura 41: Resultado da consulta clientes/carros/bairros

     Verique a tabela referente aos dados populados de clientes e lá vocêidenticará os códigos dos bairros para os clientes. Foi com base nessescódigos que foram extraídos seus respectivos nomes. Perceba que na-quela tabela a cliente Luciene Márcia está associada ao bairro 1 - Costa eSilva; o cliente Fábio Karnopp está associado ao bairro 2 - Vila Nova; eo cliente Carlos Carvalho está associado ao bairro 3 - Bom Retiro.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    37/60

    36 CURSOS TÉCNICOS SENAI

    Sabe por que só apareceram esses três nomes no resultado dessa consulta?

    Porque somente esses clientes é que têm cadastro na tabela de carros.

    Como todo conhecimento é aprendizado, e em se tratando de banco

    de dados quanto mais, melhor, vamos seguir utilizando a estrutura doprojeto de banco de dados da ocina mecânica, incrementando-o commais duas tabelas.

    Representação da nova estrutura:

    Figura 42: Diagrama de endades e relacionamentos bairros/clientes/carros/orça-

    mentos/atendentes

     A representação das tabelas clientes, carros e bairros populadas você jáconhece. Veja agora a representação das tabelas atendentes e orçamen-tos, populadas.

    Figura 43: Tabela atendentes ocina

    mecânica populada

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    38/60

    37BANCO DE DADOS II

    Figura 44: Tabela orçamentos ocina mecânica populada

    Com relação à tabela orçamentos, cabe explicar que os dados do campodata são armazenados no formato ano-mês-dia e referem-se à data, pro-priamente dita. Já o campo execução refere-se ao tempo de execução doserviço orçado, e o campo situacao, refere-se à situação do orçamento(conrmado ou aguardando conrmação).

    Essas consultas estão cando cada vez mais interessantes, não é mesmo?Continuando, então, suponha que queira fazer uma consulta dos clien-tes cujos veículos estão cadastrados e que já possuem orçamento comprevisão de execução de serviço menor que 10 dias, e que tenham sidoatendidos pelo atendente de código 1 (João), em que o resultado deveráser mostrado por ordem crescente do nome do cliente:

    SELECT carros.cliente_idcliente AS código, clientes.nome AS clientes,carros.placa AS placa_veículo, orcamentos.execucao AS execução,atendentes.nome AS atendente 

    FROM clientes INNER JOIN carros ON clientes.idcliente = carros.cliente_idcliente INNER JOIN orcamentos ON carros.placa = orcamentos.carros_placa INNER JOIN atendentes ON orcamentos.atendente_idatendente =idatendente WHERE orcamentos.execucao < 10 AND orcamentos.atendente_idatendente=1 ORDER BY clientes.nome

    Da mesma forma que no exemplo anterior, perceba que a sequência doscampos, bem como o nome de algumas colunas, foram alterados. Notetambém que agora manipulamos quatro tabelas – clientes, carros, orça-mentos e atendentes –, utilizamos a cláusula WHERE para os ltros daconsulta e a cláusula ORDER BY para mostrar o resultado por ordemcrescente do nome do cliente.

    Resultado:

    Figura 45: Resultado consulta clientes/carros/orçamentos/atendentes

    Se você parar para observar oresultado da consulta, verá queos códigos aparecem em ordemdecrescente. Parece estar errado,não é mesmo? Porém, a letra F

     vem antes da letra L e você solici-tou que o resultado fosse ordena-do pelo nome do cliente, então oresultado da pesquisa está correto.

    Note que as quatro tabelas men-cionadas encontram-se presentesno resultado dessa consulta, por-que foi solicitado a partir da ins-trução SQL que você implemen-tou anteriormente.

    Os conhecimentos a serem passa-

    dos por esta unidade encerram-seaqui, mas lembre-se que é impor-tante praticar, pôr a mão na massa,pois só assim você vai esclarecermuitas dúvidas que certamentepersistem. A prática é tudo emum processo técnico de aprendi-zagem. Na próxima unidade vocêconhecerá mais um recurso im-portante para a sua formação embanco de dados. Bom estudo!

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    39/60

    Unidade deestudo 3

    Seções de estudo

    Seção 1 – Abordagem inicialSeção 2 – Manipulando views 

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    40/60

    39BANCO DE DADOS II

    Views 

    SEÇÃO 1Abordagem inicial

    Do começo do curso até aqui você já conheceu vários recursosde banco de dados implemen-tados a partir da SQL. Agora,

     você está convidado a conhecer

    as views,  ou visões. São recursosdisponibilizados por alguns SGB-Ds e implementados a partir deinstruções SQL que permitem acriação de visões personalizadasdas informações de suas tabelas.Machado (2008, p. 373) fala o se-guinte sobre a utilização de views  :

    “[...] são ulizadas para se teruma parcular visão de uma

    tabela, para que não seja ne-cessária a ulização do conjuntocomo todo”.

    Imagine que, ao desenvolver o seuprojeto de banco de dados, vocêjá previu que para a tabela produ-tos precisará de uma consulta dosprodutos com unidade de medidaem quilogramas, isso sugere que

     você crie uma visão, ou view , paraessa consulta. Dessa forma, toda

     vez que necessitar dessa medidabasta acionar a view  criada.

     A exemplo das tabelas, as views  também devem ser criadas e, apóssua criação, também apresentamuma estrutura bem denida.

    DICA

    Quando for ulizar umaView, que atento para algu-mas restrições. Neste aspec-

    to, Machado (2008, p. 374)nos dá a seguinte orienta-ção: “Não ulize SELECTINTO, ORDER BY, COMPUT,COMPUTE BY OU UNION.”

    Na próxima seção você acompa-nhará as views  na prática. Siga emfrente!

    SEÇÃO 2Manipulando views

    Para este estudo será utilizado obanco de dados de um minimer-cado e manteremos a tabela pro-dutos que já tem uma estruturapronta e, inclusive, já foi utiliza-da nos exemplos anteriores, estálembrado dela?

     Acompanhe então os passos para

    criar uma view  para a consulta dosprodutos com a unidade de medi-da quilogramas.

    Criando a view 

    Em primeiro lugar, acesse o ban-co de dados onde deseja criar aview, e no seu editor SQL escrevaa seguinte instrução:

    CREATE VIEW prodkg (codigo_prodkg,nome,descricao,unidademedida)ASSELECT codigo,nome,descricao,unidademedida from produtosWHERE unidademedida=’Kg’

     Analisando a instrução, note queinicia com o comando para a cria-ção da view, seguida pelo nomeque deseja atribuir a sua view  (pro-dkg) e, após, dentro dos parên-teses, o nome dos campos quedeseja que a view  contenha, sendoque esses campos receberão os

     valores dos campos da tabela queestá utilizando como parâmetropara a construção da view. Nesseexemplo estamos criando a view  prodkg, com os campos codigo_ 

     prodkg, nome, descricao e uni-

    dademedida, que receberão osdados dos campos código, nome,descrição e unidade medida da ta-bela produtos.

    Complementando a análise da

    instrução, essa view  só conterá osregistros dos produtos cuja uni-dade de medida for o quilograma(kg).

     Veja como ca a estrutura da view  populada.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    41/60

    40 CURSOS TÉCNICOS SENAI

    Figura 46: da criação da view  prodkg

    Percebeu como o arquivo da view  prodkg é parecido com uma tabela?Isso acontece porque é criada uma estrutura física e a view  é alimentada

    com os registros que a instrução SQL solicita. Depois de criada, a view  está pronta para ser utilizada a qualquer momento.

     Agora, vamos para a parte prática.

    Situação: suponha que queira mostrar todos os registros, com todos oscampos da view  prodkg.

    SELECT * FROM prodkg

     

    Resultado:

    Figura 47: Resultado consulta simples à view  prodkg

    Para consultar a view , você pode fazer uso de tudo o que aprendeu sobreconsultas SQL até o momento. Se você quiser fazer um ltro, por exem-plo, consultar os produtos cujo código seja 1 ou cuja descrição seja Tipoparboilizado, e assim por diante, nesse aspecto não existem restrições.

     A view   criada permanece em seubanco de dados até que seja exclu-

     ída. Uma vantagem do uso de view sé a de que você pode personalizarsuas consultas com estruturas en-xutas possibilitando uma melhorperformance quando do acesso àsinformações dessas views .

     Você pode ainda inserir registrosem uma v iew , assim como faz comtabelas:

    INSERT INTO prodkg VALUES(5,’Arroz integral’,’Tipo 1’,’Kg’)

     Analisando a sintaxe apresentadapara inserção de produto na view, 

     você pode se perguntar “por queo código do produto é 5 se na v iew  só temos produtos de código 1 e2?” É que essa view   está associaàquela tabela de produtos que já

    temos no nosso banco de dados,e já existem produtos cadastradoscom os códigos 3 e 4. Apesar denão aparecerem na view,  seus có-digos não podem ser utilizados,portanto, neste caso, o próximocódigo de produto a inserir na view  deve ser o 5.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    42/60

    41BANCO DE DADOS II

    Resultado: 

    Figura 48: Resultado da inserção de um registro na view  prodkg 

    É possível também modicar um registro de uma view  como se faz emuma tabela:

    UPDATE prodkg SET descricao = ‘Tipo 2’ WHERE codigo_prodkg = 5

    Resultado: 

    Figura 49: Resultado da edição de um registro naview  prodkg

     Já para eliminar um registro de uma view :

    DELETE from prodkg where codigo_prodkg = 5

    Resultado:

    Figura 50: Resultado da exclusão de um registro naview  prodkg

    Para nalizar, como eliminarinteiramente uma view ?

    DROP VIEW prodkg

    Atenção! Cuidado ao ulizar esse

    comando. Nenhuma conrmação

    é solicitada e, ao realizar essa ope-

    ração, a view   é excluída imediata-

    mente do banco de dados.

    DICA

    Analise bem as views  quedeseja criar. Não saia por aícriando views de qualquermaneira, de preferência crieviews para aquelas consultasque envolvem uma ou maistabelas que você consideradiferenciadas, ou seja, paraaquelas consultas que serãoulizadas com frequência

    e também que agregam re-sultados importantes para ousuário nal.

     Você está convidado a conhe-cer, na próxima unidade, umrecurso muito útil na gestão deinformações de banco de da-dos. Até lá!

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    43/60

    Unidade deestudo 4

    Seções de estudo

    Seção 1 – Abordagem inicialSeção 2 – Manipulando Trigger

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    44/60

    43BANCO DE DADOS II

    Trigger

    SEÇÃO 1Abordagem inicial

     Você já ouviu falar em Triggers,ou gatilho? É um recurso utilizan-do quando, ao inserir registros nastabelas do seu banco de dados,

     você deseja enviar mensagensde alerta avisando, por exemplo,que a inclusão foi efetuada comsucesso, que ocorreu um erro nainclusão, alteração ou exclusão.Em programação estruturada, écomum utilizar funções nesse tipode situação, mas esse recurso tam-bém pode ser utilizado a partirdo banco de dados, por meio da

     Trigger. Digamos que você tenhaimplementado integridade refe-rencial em suas tabelas e que de-

    seja fazer validações dos camposdas tabelas para que, por exemplo,campo data e hora sejam preen-chidos corretamente, evitandoassim inconsistência de dados.Isso pode ser trabalhado em pro-gramação estrutura com uso defunção ou igualmente em bancode dados com Trigger.

     Ainda no contexto de que você te-nha implementado integridade re-

    ferencial em suas tabelas e queiraexcluir informações de um clientena tabela clientes, e este clientetambém se encontra registradona tabela carros, e você gostariade que, ao conrmar a exclusão,os registros desse cliente fossemexcluídos em cascata, primeiroda tabela carros para depois serexcluído da tabela clientes. Isso épossível por meio de uma função

    em programação estruturada oufazendo uso de Trigger.

    Está com dúvida se deve usar pro-gramação estruturada ou Trigger?Não desanime! Ainda bem queexistem, à sua disposição, muitosmeios de viabilizar sua soluçãoe, com um conhecimento maisaprofundado, você saberá discer-nir qual a melhor implementaçãopara as situações que necessitemde tratamentos.

    Outras aplicabilidades de Trigger:

    [...]

    1. Alertar o usuário se houveralguma exceção (por exem-plo, emindo um aviso sea qualidade disponível dealguma peça cair abaixo donível de perigo).

    2. Depuração (por exemplo,monitoração de referênciase/ou mudança de estado devariáveis designadas).

    3. Auditoria (por exemplo,acompanhamento de que re-alizou quais atualizações so-bre quais eventos do banco

    de dados).

    4. Medição de desempenho(por exemplo, temporizaçãoou rastreamento de eventosespecícos do banco de da-dos)[...] (DATE, 2003, p. 240).

    Arquitetura de um

    Trigger

    É importante você compreendera arquitetura de um Trigger paraque possa desenvolver suas estru-

    turas com maior eciência. As ex-plicações sobre arquitetura de um

     Trigger foram baseadas em Ecle-siastes (2010):

    Sintaxe de criação:

    1. CREATE [DEFINER = {user | CURRENT_USER }]

    2.  TRIGGER trigger_name tri-gger_time trigger_event ONtbl_name

    3. FOR EACH ROW trigger_ stmt

     A sintaxe apresentada sugere acriação de um Trigger em uma ta-

    bela no banco de dados, lembran-do que, ao optar pelo uso desserecurso, é necessário vericar se oSGBD que está sendo utilizandosuporta esse recurso , por exem-plo, se for criar Trigger em MyS-QL, será preciso utilizar a tabelacom o tipo InnoDB.

    Sobre essa sintaxe o autor destacaque o Trigger é nomeado objetode banco de dados que está asso-

    ciado com uma tabela e é ativadoquando um evento em particularocorre para essa tabela, e aindadiz que não se pode associar um

     Trigger a uma TEMPORARY TABLE ou uma view .

    Perceba a preocupação do autorem relacionar um Trigger comuma tabela de banco de dados eainda nos esclarecer que este só éacionado a partir do momento em

    que um evento (ação) ocorre paraessa tabela, mas ca uma dúvida: aque evento (ação) se refere? Sim-

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    45/60

    44 CURSOS TÉCNICOS SENAI

    ples, um Trigger é acionado quandoum evento do po INSERT, UPDATE

    ou DELETE ocorrem para a tabela

    em questão.

    O autor ainda destaca a função

    de alguns elementos da sinta-xe apresentada como a cláusulaDEFINER, esclarecendo que nomomento em que um Trigger éacionado, esta determina o privi-légio da aplicação, ou seja, o usu-ário autorizado para fazer uso da

     Trigger.

     Aqui cabe um detalhamento dacláusula DEFINER: em [DEFI-NER = { user | CURRENT_ 

    USER }], estamos determinandoa utilização dos privilégios de usu-ário. Em user, é vericado o nomede usuário, por exemplo, ‘nome_ de_usuario@localhost’, ou CUR -RENT_USER, onde é vericadasua conta padrão. Se essa cláusulafor omitida na criação da Trigger,o valor assumido para essa opçãoé CURRENT_USER.

     Já sobre o trigger_event, que indi-

    ca o tipo de evento que acionaráo Trigger, Eclesiastes (2006) de-talha:

    NOTA

    INSERT:O Trigger é avado sempre queuma nova linha é inserida natabela; por exemplo, atravésdos comandos INSERT, LOADDATA, e REPLACE.UPDATE:O Trigger é avado sempre queuma nova linha é modicada;por exemplo, por meio do co-mando UPDATE.DELETE:O Trigger é avado sempre queuma nova linha é deletada databela; por exemplo, atravésdos comandos DELETE e RE-PLACE. Contudo, comandosDROP TABLE e TRUNCATE não

    avam o Trigger, porque elesnão usam DELETE. Deletandouma parção também não a-va o DELETE Trigger.

    Finalizando o detalhamento dasintaxe de criação de um Trigger,o autor destaca o elemento trig -ger_stmt como um comando parase executar quando o Trigger foracionado e ainda complementa

    “Se você quer executar múltiploscomandos, use a BEGIN...ENDconstrução composta de coman-do. Estes também habilitadospara você usar alguns comandoscomo também permitindo escre-

     ver stored routines”.

    SEÇÃO 2Manipulando Trigger

    Para este estudo, serão utilizadasas tabelas do banco de dados daocina mecânica. É importantedestacar que os exemplos práticosapresentados nesta unidade sãoadaptados de Bianchi (2010).

    Considerando que o banco de da-dos da ocina mecânica já existee, consequentemente, as suas ta-belas, você precisará fazer algu-

    mas modicações que possa vi-sualizar os resultados das práticassugeridas.

    Então, inicialmente, verique naestrutura dessa tabela se o camponome da tabela clientes está con-gurado para Nulo ou Não Nulo.Se estiver como Nulo, mude paraNão Nulo, indicando que não po-dem ser armazenados valores nu-los para ele.

    Feito isso, vamos ao exemplo: su-ponha que você queira impedir ainserção de registros de clientescom valores inferiores ou iguais azero, e também nulos; você deveestar pensando, “isso pode ser fei-to facilmente a partir de um trata-mento via programa”. Você estácerto, mas veja como fazer viabanco de dados a partir do uso de

     Trigger.

    Criação da Trigger ver-tamcampo

    Implemente o código a seguinteno seu editor SQL.

    DELIMITER |CREATE TRIGGER vertamcam-po BEFORE INSERT ON clientesFOR EACH ROWBEGINset @nomecli = new.nome;IF ((CHAR_LENGTH(@nome-cli)

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    46/60

    45BANCO DE DADOS II

    Está vericando na variável nomecli se (IF) o conteúdo desta é menorou igual a zero ou também se contém espaço em branco. Se isso for ver-dade, atribui ao campo nome da tabela clientes o valor NULL e a seguirencerra o comando IF.

    Para nalizar,

    END

    |

    DELIMITER ;

    O END naliza o BEGIN e, em seguida, é nalizado o código todo.

     Ao executar essa instrução, você criará a Trigger vertamcampo comopode ver na gura a seguir.

    Figura 51: Visualização da Trigger vertcampo criada

     Todos os exemplos praticados até aqui foram executados no phpMyAd-min e, portanto, este utilitário nos fornece algumas visualizações privile-giadas. Mas se você não estiver trabalhando com um utilitário intuitivo edeseja a Trigger que criou, basta escrever e executar em seu editor SQLa seguinte instrução: show triggers from nome do banco;

     Veja:

    SHOW TRIGGERS from mecanica;

    Resultado:

    Figura 52: Resultado da visualização de Triggers no banco de dados mecânica

    INSERT INTO clientes (idcliente, bairro_idbairro, nome, rua, numero,fone) VALUES (NULL, 2, ‘’, ‘Rua A’, 900, ‘(55) 55555555’)

     Agora chegou o momento de testarmos a nossa Trigger, para isso vamosinserir um registro em branco:

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    47/60

    46 CURSOS TÉCNICOS SENAI

    INSERT INTO clientes (idcliente, bairro_idbairro, nome, rua, numero,fone) VALUES(NULL, 2, ‘’, ‘Rua A’, 900, ‘(55) 55555555’)

     Ao executar essa instrução, a Trigger vertamcampo será acionada (dis-parada) e qualquer exceção referente ao campo nome, prevista na Tri-gger, será prontamente respondida. Note que, ao inserirmos o registro,o campo nome ca em branco. Isso signica que, quando a Trigger foracionada, o valor NULL será atribuído a esse campo, mas esse campohavia sido congurado lá no início dos nossos exemplos com o tipoNOT NULL, um erro será devolvido pelo banco de dados como mostraa gura a seguir. Isso acontece porque, como NOT NULL, esse camponão pode armazenar um valor nulo.

    Figura 53: Resultado da inserção de um registro cliente com o nome em branco

    Para excluir um Trigger, basta escrever e executar a seguinte instruçãoSQL em seu editor o comando DROP TRIGGER nomedatrigger; ouseja:

    DROP TRIGGER vertamcampo;

    Lembre-se de que, se agora você solicitar uma visualização da Trigger nobanco de dados mecânica, nada será retornado porque você acabou deexcluir a Trigger e só existia uma.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    48/60

    47BANCO DE DADOS II

    Saiba mais

    Para saber mais sobre Triggers, consulte a documentação do seu SGBDou alguns sites sobre o assunto.

    DICA

    ▪ Analise bem a necessidade de uso de Triggers na sua solução,ulize somente quando for extremamente necessário.

     ▪ Prera as ronas mais simples para criar como Triggers.

     ▪ Triggers complexas podem interferir na performance de suastransações no banco de dados.

     Viu quanta coisa interessante pode ser feita em um banco de dados?Mas será que essas informações registradas neles estão seguras?

    Isso é assunto para a próxima unidade de estudo.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    49/60

    Unidade deestudo 5

    Seções de estudo

    Seção 1 – Abordagem inicialSeção 2 – Abrangência da segurança embanco de dadosSeção 3 – Integridade de dadosSeção 4 – Controle de acesso a banco dedados

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    50/60

    49BANCO DE DADOS II

    Segurança em Banco de Dados

    SEÇÃO 1Abordagem inicial

    Quando se fala de banco de da-dos, não se pode dissociar doelemento segurança, pois existem

     várias questões a considerar.

    Nesse contexto, esta unidade

    propõe que você conheça algunsaspectos importantes sobre se-gurança em banco de dados paratornar mais conável a implemen-tação do seu projeto de banco dedados.

     Assim, você está convidado ago-ra a conhecer alguns aspectosimportantes sobre segurança embanco de dados. Vamos lá!

    SEÇÃO 2Abrangência da segu-rança em banco dedados

    Para garantir a segurança em ban-co de dados, é preciso levar emconta dois universos:

    Sistema

     ▪ Pessoas treinadas e capacitadaspara trabalhar com infraestruturae banco de dados.

     ▪ Integração total do banco dedados com o ambiente de infra-estrutura ( hardware , periféricos,redes) onde este será implemen-tado.

     ▪ Infraestrutura adequada àspolíticas de segurança de dados,contemplando o uso de Firewalls ,privilégios de usuários, backups  desegurança, web  e transmissão dedados.

    Aplicação

     ▪ Projeto de banco de dadosconsistente e de acordo com asnecessidades, do ponto de vista

    do negócio, do cliente. ▪ Utilização de um bom SGBD

    compatível com a amplitude doprojeto de banco de dados con-templado.

     ▪ Integridade dos dados.

     ▪ Controle de acesso ao bancode dados.

     ▪ O foco de estudo das questõesde segurança carão no aspectoda aplicação, ou seja, no que serefere à segurança no contexto dedados. Com relação a isso, Date(2003, p. 431) observa:

    As questões de segurança de da-dos estão frequentemente asso-ciadas a questões de integrida-de de dados, mas os conceitossão na realidade diferentes: se-gurança se refere à proteção dedados contra acesso não autori-zado, enquanto integridade serefere à correção desses dados.

    Diante disso você conhecerá umpouco mais sobre integridade eproteção de dados que, comopode observar, são os elementosfundamentais para se garantir se-gurança de dados no seu projeto.

    SEÇÃO 3Integridade de dados

    Quando se desenvolve um proje-to de banco de dados, é preciso

    preocupar-se com alguns aspec-tos, como:

     ▪ impedir que registros sejaminseridos em duplicata;

     ▪ campos não sejam armazena-dos com valores nulos;

     ▪  valores de campos sejam pro-tegidos por criptograa;

     ▪ campos armazenem valores válidos para os tipos que foram

    denidos; ▪ garantir e/ou revogar os pri-

     vilégios de acesso aos dados dobanco;

     ▪ por exemplo, ao excluir umcliente, este não que pendenteem outra tabela;

     ▪ haja facilidade quando darecuperação de informações.

    Reforçando essa ideia, Date (2003,p. 431) comenta: “[...] integridadeenvolve ter certeza de que aquiloque eles estão tentando fazer estácorreto”.

     Tamanha é a importância da inte-gridade de dados que esta é dividi-da em categorias. Conra a seguir.

     ▪ Integridade semântica: quando implementada, permite

    que os valores atribuídos a umcampo serão aqueles tipos deni-dos quando o campo foi criado.

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    51/60

    50 CURSOS TÉCNICOS SENAI

     ▪  Integridade de entidade: quando implementada, permiteque não existam registros dupli-cados em uma tabela.

     ▪ Integridade referencial: quando implementada, permiteque os relacionamentos entre astabelas sejam obrigados a seremcumpridos, por exemplo: supon-do que tenha um cliente cadastra-do na tabela clientes e o registrodeste encontra-se também natabela orçamentos, imagine que

     você deseja excluir esse cliente databela clientes. Tendo a integri-dade implementada, esse cliente

    não poderá ser excluído enquantohouver registros dele relacionada,ou seja, na tabela orçamentos.

     ▪ Integridade de domínio: quando implementada, garanteque um campo só deve permitir

     valores preestabelecidos para estecampo. Por exemplo, só deveaceitar os valores Nulos ou A, Bou C, e mais nada.

    Na prática, a integridade de dadosgarante ao banco de dados que suasinformações permaneçam consis-tentes para que possam servir aoseu propósito principal, que é suautilização pelo usuário nal. Assim,

     vamos exemplicar alguns casos deuso de integridade referencial.

    De todas as categorias de integri-dade de banco de dados apresen-tadas aqui, a que vamos focar éa integridade referencial porque,como já foi explicado, ela trabalhajustamente com os relacionamen-tos entre as tabelas, o que carac-teriza termos muita atenção paracom a estrutura geral dos dadosdo nosso projeto.

     Acompanhe algumas situaçõesde uso de integridade referencialentre tabelas, onde, a exemplo deoutras situações mostradas nestematerial, será feito o uso de ins-truções SQL baseadas no MyS-QL, o que não inviabiliza você de

    trabalhar esse recurso em outro SGBD, apenas consulte a sintaxe parao banco de dados que utilizará, pois, como falamos anteriormente, estapode, e neste caso é realidade, modicar de um SGBD para outro.

    Quando se trata de implementar a integridade de banco de dados, sejaela em qualquer categoria, deve-se familiarizar com alguns termos como

    restrição e constraints . Explicando rapidamente esses termos:Restrição: é o ato de você impedir, para uma ou mais tabelas do bancode dados, que algumas operações sejam executadas e que venham a ferir aintegridade dos dados contidos nestas.

    Constraints : trata-se de um recurso suportado pelos SGBDs disponíveisno mercado, que permite implementar as restrições garantindo assim aintegridade do banco de dados.

    Issto signica que, seja qual for o tipo de integridade que você implemen-tará, terá de trabalhar com constraints .

    Para que nosso estudo sobre integridade referencial torne-se interessante

    e de fácil compreensão, sugiro que trabalhe com as seguintes tabelas:

    Figura 54: Diagrama de endades e relacionamentos

    Lembre-se de que as tabelas clientes e bairros já estão populadas e encon-tram-se na unidade de estudos 2, seção 4.

    Se você já criou, sicamente, as tabelas cliente e bairros no seu banco dedados, ótimo, é só seguir praticando o exemplo que será trabalhado, masaqui vai uma observação importante: o MySQL permite que você crie ta-belas de determinados tipos; dependendo do tipo que a tabela é criada, ga-rante-se a esta um formato de armazenamento e disponibiliza-se recursos.

    Por padrão, a maioria das versões do MySQL adota o tipo MyISAM paraas tabelas criadas. Caso você queira, ao criar suas tabelas pode alterar, indi-

     vidualmente, de acordo com sua necessidade, cada tabela do seu projeto,mas isso não cabe abordarmos aqui. Para utilizarmos integridade referen-cial no MySQL, é necessário que as tabelas envolvidas sejam do tipo In -noDB, e não MyISAM, assim, se as tabelas bairros e clientes estiverem noforma MyISAM, implemente no seu editor SQL as seguintes instruções:

    Modicando o po da tabela clientes de MyISAM paraInnoDb

     ALTER TABLE `bairro` ENGINE = InnoDB

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    52/60

    51BANCO DE DADOS II

    Modicando o po da tabela bairros de MyISAMpara InnoDb

    ALTER TABLE ̀ bairro` ENGINE = InnoDB

    Feito isso, já estamos com meio caminho andado para o nosso trabalho. Agora, certo de que as tabelas são do tipo InnoDB, vamos criar umaconstraint  (restrição) para o campo bairros_idbairros, localizado na tabelaclientes, que é uma chave estrangeira (FK), fruto do relacionamento 1 –N entre as tabelas bairros e clientes.

    Criando a CONSTRAINT bairro:

    ALTER TABLE clientesADD CONSTRAINT bairro FOREIGN KEY (bairro_idbairro) REFERENCESbairros (idbairro)

     Analisando a instrução:

    ▪  ALTER TABLE clientes: modique a tabela cliente, pois esta já existe;

    ▪  ADD CONSTRAINT bairro: adicionando a constraint  de nome bairro;

     ▪ FOREIGN KEY (bairro_idbairro): aqui identica o campo bair-ro_idbairro (chave estrangeira) como o valor da constraint  bairro, ou seja, arestrição será feita a partir deste campo;

     ▪ REFERENCES bairros (idbairro): identica a proveniência docampo participante da constraint , informando sua tabela, bairro, e o seunome, idbairro, de origem, respectivamente.

     Agora, já temos um relacionamento sicamente estabelecido entre as ta-belas bairros e clientes. Ou seja, caso se tente inserir na tabela cliente umbairro que ainda não foi cadastrado na tabela bairro, veja o que acontece:

    INSERT INTO clientes (bairro_idbairro,nome,rua,numero,fone)VALUES (‘5’,’JOANA’,’Rua A’,’123’,’(44)44444444’)

    Figura 55: Alerta de erro para inclusão de um bairro ainda não cadastrado em

    clientes

     A mensagem de erro alerta quenão foi possível registrar essebairro em clientes porque ele nãofoi previamente cadastro em suatabela de origem, no caso a tabela

    bairros. Vemos literalmente a integridadereferencial funcionando entre astabelas envolvidas. Já imaginou se

     você pudesse registrar um bair-ro na tabela de clientes que nãoconsta na tabela de bairro? Issocaracteriza uma inconsistência noseu banco de dados, não é? Então,a integridade referencial existepara coibir esse tipo de situação.

    Quer ver outra situação decorren-te da criação física desse relacio-namento? Tente, a partir da tabelabairros, eliminar o bairro de códi-go 3, ou seja, Bom Retiro, e veja oque acontece:

    DELETE FROM bairro WHEREidbairro =3

  • 8/16/2019 Banco de Dados II - Curso técnico em informática

    53/60

    52 CURSOS TÉCNICOS SENAI

    Figura 56: Alerta de erro para exclusão de um bairro

    Cabe aqui salientar que, em mui-

    tos casos, alguns programadores

    optam, por vários movos, por não

    criarem a integridade referencial no

    banco de dados e preferem desen-

    volver ronas nos programas para

    realizar essa tarefa. Isso é total-ment