Banco de Dados II - Curso técnico em informática
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