Professional Documents
Culture Documents
Banco de Dados II
Rafael Lucchesi
Diretor do Departamento Nacional do SENAI
Alcantaro Corra
Presidente da Federao da Indstria do Estado de Santa Catarina
Banco de Dados II
Silvio Luis de Sousa
Florianpolis/SC
2011
proibida a reproduo total ou parcial deste material por qualquer meio ou sistema sem o prvio consentimento
do editor.
Autor
Silvio Luis de Sousa
Fotografias
Banco de Imagens SENAI/SC
http://www.sxc.hu/
http://office.microsoft.com/en-us/ images/
http://www.morguefile.com/
http://www.bancodemidia.cni.org.br/
Ficha catalogrfica elaborada por Luciana Effting CRB14/937 - Biblioteca do SENAI/SC Florianpolis
S725b
Prefcio
Voc faz parte da maior instituio de educao profissional do estado.
Uma rede de Educao e Tecnologia, formada por 35 unidades conectadas e estrategicamente instaladas em todas as regies de Santa Catarina.
No SENAI, o conhecimento a mais realidade. A proximidade com as
necessidades da indstria, a infraestrutura de primeira linha e as aulas
tericas, e realmente prticas, so a essncia de um modelo de Educao
por Competncias que possibilita ao aluno adquirir conhecimentos, desenvolver habilidade e garantir seu espao no mercado de trabalho.
Com acesso livre a uma eficiente estrutura laboratorial, com o que existe
de mais moderno no mundo da tecnologia, voc est construindo o seu
futuro profissional em uma instituio que, desde 1954, se preocupa em
oferecer um modelo de educao atual e de qualidade.
Estruturado com o objetivo de atualizar constantemente os mtodos de
ensino-aprendizagem da instituio, o Programa Educao em Movimento promove a discusso, a reviso e o aprimoramento dos processos
de educao do SENAI. Buscando manter o alinhamento com as necessidades do mercado, ampliar as possibilidades do processo educacional,
oferecer recursos didticos de excelncia e consolidar o modelo de Educao por Competncias, em todos os seus cursos.
nesse contexto que este livro foi produzido e chega s suas mos.
Todos os materiais didticos do SENAI Santa Catarina so produes
colaborativas dos professores mais qualificados e experientes, e contam
com ambiente virtual, mini-aulas e apresentaes, muitas com animaes, tornando a aula mais interativa e atraente.
Mais de 1,6 milhes de alunos j escolheram o SENAI. Voc faz parte
deste universo. Seja bem-vindo e aproveite por completo a Indstria
do Conhecimento.
Sumrio
Contedo Formativo
38 Unidade de estudo 3
Finalizando
55
Referncias
57
Views
Apresentao
11
39 Seo 1 - Abordagem inicial
39 Seo 2 - Manipulando views
12 Unidade de estudo 1
ndice: Heri ou
Vilo?
13
16
24 Unidade de estudo 2
Avanando em SQL
25
25
26
28
42
Unidade de estudo 4
Trigger
48
Unidade de estudo 5
Segurana em Banco de Dados
Contedo Formativo
Carga horria da dedicao
Carga horria: 60 horas
Competncias
Criar e gerenciar sistemas de banco de dados para soluo de problemas
Conhecimentos
ndices,
Integridade de dados,
Junes (join),
Unio (union),
Vises (views),
Triggers (gatilhos),
Redundncia.
Habilidades
Aplicar lgebra de conjuntos.
Interpretar e analisar modelos de dados.
Utilizar a linguagem SQL para manipulao de dados.
Identificar defeitos e falhas em banco de dados.
Aplicar normas de segurana de dados (integridade de dados, backup e restore).
Atitudes
Organizao e zelo na utilizao de equipamentos.
Foco no contedo trabalhado.
Acesso a stios relacionados ao tema trabalhado.
Organizao e limpeza dos ambientes coletivos.
Dedicao e empenho nas atividades curriculares e extracurriculares.
Capacidade de abstrao.
Trabalho em equipe.
Apresentao de novas solues para situaes problemas.
Cumprimento de prazos.
Anlise crtica de suas produes.
Banco de Dados II
Apresentao
Que tal iniciar os estudos da unidade curricular Banco de Dados II
aprendendo a desenvolver competncias voltadas ao desenvolvimento
de atividades relacionadas sua profisso?
Bem, voc deve estar se perguntando: Que competncias so essas?.
So as competncias de criar e gerenciar sistemas de banco de dados
para a soluo de problemas computacionais.
Durante seus estudos, este material poder contribuir para o desenvolvimento de habilidades voltadas para a elaborao de projetos de banco de
dados, utilizando tcnicas eficientes, o que contribui, substancialmente,
para a elaborao e o desenvolvimento de projetos de software.
Esta unidade curricular contempla, ainda, a utilizao correta dos recursos de informtica e de ferramentas garantindo a qualidade para soluo
de problemas. Esses so os requisitos de empresas que atuam em diversos segmentos do mercado de trabalho.
Que voc tenha, a partir de agora, um estudo e um timo aproveitamento deste material!
Banco de Dados II
11
Unidade de
estudo 1
Sees de estudo
Seo 1 Conhecendo sobre ndice
Seo 2 Trabalhando e reconhecendo
tipos de ndice
Imagine que nessa estrutura no exista nenhum campo (simples) criado como ndice e que voc queira fazer uma consulta dos dados do
cliente a partir do seu nome, por exemplo, do cliente Silvio Luis:
SELECT Codigo, Nome, Rua, Numero FROM clientes WHERE Nome =
Silvio Luis
Banco de Dados II
13
Instruo SQL:
Agora, supondo que a tabela clientes seja modificada com, por exemplo,
a criao de um ndice para o campo Nome e, aps, voc queira novamente fazer a consulta dos dados do cliente Silvio Luis. Confira:
Instruo SQL
SELECT Codigo, Nome, Rua, Numero FROM clientes USE INDEX (index_
Nome) WHERE Nome = Silvio Luis
A sintaxe SQL de criao e a de consultas que envolvem ndices ser explicada em detalhes na prxima seo desta unidade Trabalhando e reconhecendo tipos de ndice.
14
Banco de Dados II
15
SEO 2
Trabalhando e
reconhecendo tipos de ndice
Antes da abordagem deste assunto, vale salientar que a criao de ndices
pode ser executada para cada banco de dados disponvel. Reservadas as
funcionalidades destes, essa tarefa pode ser executada pelos programas
disponibilizados ou tambm de forma manual via instruo SQL. A sintaxe para manipulao dos ndices pode variar de um banco de dados
para outro. No nosso caso, mostraremos exemplos para criao de banco
de dados a partir de instruo SQL com base no banco de dados MySQL
verso 5.2 embarcada no utilitrio phpMyMAdmin 2.11.7. Crie um banco
16
Resultado:
Resultado:
Note que a partir de agora a tabela clientes contm mais um ndice, alm
do campo cdigo (chave primria). Foi criado um novo ndice contendo
o campo Nome para acelerar as consultas dos clientes por meio do seu
Nome. Esse ndice tido como um ndice simples, tambm conhecido
como ndice normal. Esse ndice no contm nenhum tipo de restrio
como, por exemplo, o ndice primrio. Ele criado quando h uma necessidade sistemtica de se fazer uma consulta a um determinado campo
da tabela.
Banco de Dados II
17
Voc pode criar quantos ndices normais forem necessrios, mas fique
atento para a real necessidade da sua criao, pois, do contrrio, 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:
Observe, tambm nesse exemplo, o tempo decorrido da consulta, ressaltando que, diante da consulta do exemplo anterior, ou seja, consulta pelo
cdigo (ndice primrio), esta ocorreu em um tempo maior. Isso porque
executar uma consulta a partir de um campo numrico normalmente
mais rpido do que uma consulta por um campo caracter, como o caso
do campo Nome.
Lembre-se de que, na medida em que a tabela contm um nmero significativo de registros, mais evidente ficar a eficcia da consulta a partir
de campos ndices.
Caso essa mesma consulta seja realizada a partir de um banco de dados
com muitos registros, a partir de um campo da tabela e no tendo criado
esse campo como ndice, a tendncia que a consulta seja mais demorada, pois, para encontrar o registro desejado, ser executada uma varredura (Table Scan) de todos os registros at encontrar aquele solicitado,
conforme mencionado.
Agora voc j sabe como criar e utilizar ndices simples, porm voc
pode se deparar com uma situao em que exista a necessidade de criar e
utilizar ndices compostos. Para no ter dvidas, acompanhe as informaes a seguir, e lembre-se: sempre que precisar, pergunte ao professor.
Suponha que voc necessite obter os dados do cliente Fbio Karnopp
que mora na Rua B. Note que nesse caso ser preciso resgatar informaes de dois campos, e no mais de um campo apenas. Tenho a certeza
de que sua reao seria elaborar a seguinte instruo SQL:
SELECT Codigo,Nome,Rua,Numero FROM clientes WHERE Nome=Fabio
Karnopp AND Rua =Rua B
18
Observe que agora tem um ndice chamado index_Nome_Rua composto por mais de um campo (nome e rua), por isso o nome do ndice
criado, mas isso no o fato marcante desse tipo de ndice. Durante esse
processo voc entender a sua caracterstica principal.
Banco de Dados II
19
Figura 11: Resultado da consulta dos dados do cliente, pelo ndice Nome, Rua
Suponha agora que deseje que, em sua tabela de clientes, no sejam salvos clientes com nomes duplicados. Apesar de isso no ser tecnicamente
interessante, tome como exemplo para que se entenda a explicao da
criao e utilizao de ndices nicos.
Lembre-se de que o campo Nome no faz parte de chave primria, isso
significa que at o presente momento voc pode cadastrar clientes com
nomes iguais vontade, mas no isso que a proposta exemplo sugere,
ento a primeira providncia a de criar um ndice nico com o campo
Nome:
ALTER TABLE clientes ADD UNIQUE unico_nome (nome)
Agora, teste a utilizao desse ndice inserindo um registro na tabela com o nome de um cliente
j cadastrado, como, por exemplo,
Fbio Karnopp.
Instruo SQL para incluso do
cliente:
INSERT INTO clientes (codigo
,nome ,rua ,numero )VALUES
(NULL ,Fbio Karnopp, Rua C,
111)
Resultado:
Note que a mensagem chama a sua ateno informando que voc est
tentando inserir um registro duplicado para o cliente Fbio Karnopp, cujo
cdigo 2.
Banco de Dados II
21
Figura 15: Resultado da criao do ndice nico contendo os campos Nome e Rua
Voc dever optar pela eliminao de um dos ndices: ou o ndice composto tipo INDEX, que permite a consulta dos clientes e residncia
sem a preocupao de registros duplicados, ou o ndice tambm composto do tipo UNIQUE, que permite a realizao da consulta a exemplo do seu concorrente, mas com o adicional de no permitir registros
duplicados com as informaes dos campos desse ndice.
A diferena entre esses ndices encontra-se apenas na permisso ou no
de inserir registros duplicados para os campos do ndice, ou seja, possvel consultar os dados dos clientes a partir do nome e da rua sem mais
problemas. Assim, a melhor opo excluir o ndice do tipo INDEX. Se
estiver em dvidas de como fazer a excluso, reveja o exemplo onde o
ndice index_nome foi excludo anteriormente, e lembre-se tambm de
consultar o professor sempre que achar necessrio. Feito isso, insira um
registro para o cliente, Fbio Karnopp em uma rua diferente daquela do
Fbio Karnopp j cadastrado (Rua A e/ou Rua C).
Perceba que o seu banco de dados permite essa operao porque, apesar
de j existir um cliente com esse nome, a rua diferente daquela j cadastrada para esse cliente, ou seja,agora, para que o cliente seja impedido
22
Resultado:
Note que esse ndice tambm composto e, neste caso, pelos campos
ttulo e texto, ser preciso popular a tabela para em seguida aprender a
executar consultas FULL-TEXT.
Para popular a tabela artigos, utilize o cdigo a seguir.
INSERT INTO artigos (id, titulo, texto) VALUES (NULL, Banco de Dados
II, Uma viso prtica),(NULL, Como trabalhar com ndices, Conhea
tudo sobre ndices),(NULL, Otimizando suas consultas, Otimize suas
consultas utilizando....),(NULL, Dicas para criar ndices, 1. Analise as
clusulas where e join 2. ...),(NULL, Criando ndices full-text, Como
trabalhar ...)
Agora a consulta FULL-TEXT pode iniciar, ento vamos direto ao assunto. Vamos supor que voc queira capturar o texto referente ao id 3:
Otimize suas consultas utilizando...
SELECT * FROM artigos WHERE MATCH (titulo, texto) AGAINST (Otimize)
Saiba mais
Na prxima unidade, avanaremos em SQL, por isso importante que voc no fique com
dvidas sobre o que j estudou
at aqui. Para mais informaes e/ou detalhes sobre o uso
de ndices, lembre-se de consultar o manual e/ou tutorial
do SGBD que voc est trabalhando (neste caso, o MySQL).
Banco de Dados II
23
Unidade de
estudo 2
Sees de estudo
Seo 1 Abordagem inicial
Seo 2 Clculo em SQL
Seo 3 Funes de agregao sobre
conjuntos
Seo 4 Mais recursos SQL
Avanando em SQL
SEO 1
Abordagem inicial
Voc j conhece o conceito, a estrutura e a importncia da SQL
para o ambiente de banco de dados relacional. Tambm conhece
as transaes que podem ser executadas a partir dessa linguagem
e sabe que serve de base para os
SGBDs encontrados no mercado.
Sabe que, apesar da universalidade, a linguagem possui adaptaes
dos seus recursos de acordo com
o SGBD utilizado, e isso sugere
que, ao trabalhar com a linguagem, preciso ficar atento documentao do banco de dados
para que ele possa ser utilizado
com eficincia.
Criar banco de dados e tabelas ou
exclu-las no deve ser mais novidade para voc, assim como incluir, alterar e pesquisar registros
em uma tabela.
Alm desses conhecimentos especficos em SQL, voc j deve
tambm dominar a elaborao
de projetos de banco de dados a
partir dos conhecimentos de modelagem de dados, no mesmo?
Ento, voc j deve ter percebido
o quanto complexa a estrutura
de um banco de dados bem modelada. So tabelas criadas com
seus respectivos campos, que por
sua vez so de um determinado
tipo e tamanho, podendo estes ser
chave primria ou estrangeira, ou
simplesmente campos simples.
SEO 2
Clculo em SQL
Apenas para relembrar, campo
calculado um campo que no
pertence fisicamente a uma tabela
(no um campo de dado), mas
armazena o resultado do clculo
proveniente de alguns campos
(campos de dados) destas, objetivando a exibio de seu contedo
quando da apresentao do resultado de uma consulta.
Situao: Mostrar o novo valor
dos produtos de um minimercado, identificados com tarja verde, com desconto de 10%. Ordenar pelo nome do produto.
25
Funo AVG ( )
Situao: Qual ser a mdia
dos preos dos produtos?
SELECT AVG (valor_venda) AS
Mdia_Valores_Produtos from
produtos
Resultado:
Funes Max ( ) e
Min ( )
Situao: Mostrar o menor e o
maior valor dos produtos da tabela produtos.
SELECT MIN ( valor_venda )
AS Valor_Mnimo, MAX( valor_venda ) AS Valor_Mximo
FROM produtos
Resultado:
Resultado:
Funo Count ( )
Situao 1: Quantos registros
existem na tabela produtos?
SELECT count (*) AS Total_Registros FROM produtos
A informao Total_Registros
na instruo captura a quantidade total de registros existentes na tabela produtos. Resultado:
SEO 3
Funes de agregao
sobre conjuntos
um recurso bastante parecido
com o trabalhado na seo anterior. As funes de agregao
existem para gerar novas colunas.
26
Resultado:
Funo SUM()
Para exemplificar o uso da funo
SUM ( ), crie e popule a tabela orcamento_pecas, conforme diagrama e tabela a seguir.
Resultado:
Banco de Dados II
27
SEO 4
Resultado:
Clusula DISTINCT
comum ter registros em tabela contendo valores repetidos, como:
Esse um exemplo que representa a aplicao da clusula DISTINCT que, segundo Machado
(2008, p. 349)
[...] foi criada para no permitir
que certas redundncias, obviamente necessrias, causem
problemas. A clusula DISTINCT
elimina repeties de valores
em relao a uma coluna.
Note que foi inserido registro Feijo preto e sua unidade de medida
kg, como a do Arroz branco, repetindo assim o valor kg na tabela.
Esse apenas um exemplo de ocorrncia entre vrias que podem ser
encontradas (e normalmente so encontradas) em tabelas de banco de
dados.
Situao: Suponha que voc deseja fazer uma consulta das unidades
de medidas, mas no gostaria que estas se repetissem, ou seja, no deseja que o registro kg seja repetido, como normalmente aconteceria ao
executar uma instruo bsica SQL. Para isso, implemente a seguinte
instruo SQL:
SELECT DISTINCT Unidademedida from produtos
28
Clusulas GROUP BY e
HAVING
O exemplo para essa clusula baseia-se na tabela orcamento_peca,
utilizada na explicao da funo
SUM ( ).
Situao: Digamos que voc precise emitir a listagem do nmero de peas que cada oramento
possui, agrupados pelo id do oramento.
Se voc verificar a Tabela orcamento_pecas populada, pode
conferir que para o oramento
cujo id 12 existem duas peas,
a de cdigo 12 e a de cdigo 8901,
j para o oramento cujo id 13
existe uma pea a de cdigo 12 e,
por fim, para o oramento cujo
id 15 existem duas peas, a
de cdigo 12 e a de cdigo 8901.
Conseguiu visualizar? Se realizar
Resultado:
Resultado:
Resultado:
Banco de Dados II
29
INNER JOIN
Agora suponha que necessite fazer uma consulta em que tenha que visualizar os carros, identificados por suas placas, com os seus respectivos
donos (clientes), sendo, neste caso, necessrio visualizar o nome e o cdigo. A SQL disponibiliza o recurso de juno para resolver essa e outras
situaes, veja:
SELECT clientes.nome,carros.cliente_idcliente,carros.placa FROM clientes INNER JOIN carros
ON clientes.idcliente = carros.cliente_idcliente
Entendendo a instruo:
Note que estamos selecionando os campos que sero visualizados na
consulta fazendo referncia tabela onde ele se encontra seguido do seu
nome, clientes.nome, carros.cliente, carros.placa, isso porque a consulta
envolve duas tabelas clientes e carros.
30
Observe na sequncia FROM clientes INNER JOIN carros que estamos estabelecendo a juno entre as tabelas, do tipo INNER JOIN que,
por sua vez, fora com que os registros resultantes da consulta sejam
aqueles que satisfazem a condio do JOIN.
Finalizando, temos ON clientes.idcliente=carros.cliente_idcliente, na
qual estamos determinando a condio do JOIN para que s inclua,
na consulta, os registros que existam tanto na tabela clientes quanto na
tabela carros, ou seja, aquele registro que no se encontra em ambas as
tabelas no aparecer no resultado dessa consulta. Com isso sabemos, de
antemo, que o registro do cliente Silvio Luis no aparecer no resultado
dessa consulta.
Resultado:
CROSS JOIN
O CROSS JOIN outro tipo de JOIN, em que cada registro de uma das
tabelas combinada com todos os registros da outra tabela relacionada.
Veja como utilizar, ainda tomando como exemplo as tabelas relacionadas clientes e carros:
SELECT nome, carro.cliente_idcliente, carro.placa FROM clientes CROSS
JOIN carros
Banco de Dados II
31
Resultado:
OUTER JOIN
Neste outro tipo de JOIN voc encontra trs tipos de qualificao:
Suponha que queira saber quais so os clientes que tm veculos cadastrados em carros e tambm queira saber os clientes que ainda no tm
veculos cadastros em carros.
SELECT clientes.nome,carros.cliente_idcliente,carros.placa from clientes LEFT OUTER JOIN carros ON clientes.idcliente = carros.cliente_
idcliente
32
Resultado:
Nessa consulta so considerados todos os registros encontrados na tabela de clientes, ou seja, a tabela esquerda (LEFT) na condio ON
cliente.idcliente = carro.cliente_idcliente, segue fazendo a varredura em
carros dos clientes que tambm existem em ambas as tabelas.
Note tambm que o cliente Silvio Luis, como no tem nenhum carro
cadastrado, apresenta o resultado NULL nas colunas cliente_idcliente
e placa.
Conforme Machado (2008, p. 357) [...] no devemos utilizar NULL na
condio de seleo, pois teremos de utilizar os resultados mais imprevisveis e imaginveis possveis.
Nesse caso obtm-se como resultado os registros que no satisfazem a condio tanto da primeira
como da segunda tabela envolvidas no relacionamento.
Vale ainda salientar que voc pode
utilizar vrias clusulas misturada
com operadores na juno de tabelas, como nos explica Machado
(2008, p. 357): Podemos utilizar
as clusulas LIKE, NOT LIKE,
IN, NOT IN, NULL, NOT
NULL e mistur-las com os operadores AND, OR e NOT, dentro
de uma clusula WHERE na juno de tabelas.
Exemplo: suponha que deseja obter os clientes que tm veculos
cadastrados na oficina com a cor
cinza:
SELECT clientes.nome,carros.
cliente_idcliente,carros.placa
FROM clientes INNER JOIN carros ON clientes.idcliente = carros.cliente_idcliente WHERE
carros,cor = cinza
Agora, para saber quais so os proprietrios dos veculos (clientes) cadastrados na tabela carros, utilize a seguinte sintaxe:
SELECT clientes.nome,carros.cliente_idcliente,carros.placa from clientes 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 Mrcia
ABC 000
Fbio Karnopp
DEF 111
Carlos Carvalho
GHI 222
Nessa consulta so considerados todos os registros encontrados na tabela de carros, ou seja, a tabela direita (RIGHT) na condio ON
cliente.idcliente = carro.cliente_idcliente, segue fazendo a varredura em
clientes dos clientes que tambm existem na tabela carros.
Banco de Dados II
33
Resultado:
Note que na frente dos campos das tabelas voc identifica o nome da
tabela para depois informar o nome do campo (clientes.nome). Isso
necessrio porque existem campos de tabelas diferentes.
SELECT cl.nome,ca.cliente_idcliente,ca.placa FROM cliente cl INNER
JOIN carro ca
ON cl.idcliente = ca.cliente_idcliente
Note que houve uma mexida na disposio das colunas (campos) das
tabelas, mas apenas por uma questo de esttica, nada por questes tcnicas. Onde antes mostrava o cdigo do cliente, proveniente da tabela
carros e com o nome de coluna alterado de cliente_idcliente mudou para
cdigo, a seguir o campo nome do cliente, proveniente da tabela clientes,
na sequncia o campo nome do bairro, proveniente da tabela bairros e
com o nome de coluna alterado de nome para bairro e, por fim, o campo placa, proveniente da tabela carros com o nome de coluna tambm
alterado de placa para placa_veculo.
Resultado:
Banco de Dados II
35
Sabe por que s apareceram esses trs nomes no resultado dessa consulta?
Porque somente esses clientes que tm cadastro na tabela de carros.
36
Banco de Dados II
37
Unidade de
estudo 3
Sees de estudo
Seo 1 Abordagem inicial
Seo 2 Manipulando views
Views
SEO 1
Abordagem inicial
Do comeo do curso at aqui
voc j conheceu vrios recursos
de banco de dados implementados a partir da SQL. Agora,
voc est convidado a conhecer
as views, ou vises. So recursos
disponibilizados por alguns SGBDs e implementados a partir de
instrues SQL que permitem a
criao de vises personalizadas
das informaes de suas tabelas.
Machado (2008, p. 373) fala o seguinte sobre a utilizao de views :
[...] so utilizadas para se ter
uma particular viso de uma
tabela, para que no seja necessria a utilizao do conjunto
como todo.
DICA
Quando for utilizar uma
View, fique atento para algumas restries. Neste aspecto, Machado (2008, p. 374)
nos d a seguinte orientao: No utilize SELECT
INTO, ORDER BY, COMPUT,
COMPUTE BY OU UNION.
SEO 2
Manipulando views
Para este estudo ser utilizado o
banco de dados de um minimercado e manteremos a tabela produtos que j tem uma estrutura
pronta e, inclusive, j foi utilizada nos exemplos anteriores, est
lembrado dela?
Acompanhe ento os passos para
criar uma view para a consulta dos
produtos com a unidade de medida quilogramas.
Criando a view
Em primeiro lugar, acesse o banco de dados onde deseja criar a
view, e no seu editor SQL escreva
a seguinte instruo:
Banco de Dados II
39
Resultado:
Para consultar a view, voc pode fazer uso de tudo o que aprendeu sobre
consultas SQL at o momento. Se voc quiser fazer um filtro, por exemplo, consultar os produtos cujo cdigo seja 1 ou cuja descrio seja Tipo
parboilizado, e assim por diante, nesse aspecto no existem restries.
40
Resultado:
Resultado:
DICA
Analise bem as views que
deseja criar. No saia por a
criando views de qualquer
maneira, de preferncia crie
views para aquelas consultas
que envolvem uma ou mais
tabelas que voc considera
diferenciadas, ou seja, para
aquelas consultas que sero
utilizadas com frequncia
e tambm que agregam resultados importantes para o
usurio final.
Resultado:
Banco de Dados II
41
Unidade de
estudo 4
Sees de estudo
Seo 1 Abordagem inicial
Seo 2 Manipulando Trigger
Trigger
SEO 1
Abordagem inicial
Voc j ouviu falar em Triggers,
ou gatilho? um recurso utilizando quando, ao inserir registros nas
tabelas do seu banco de dados,
voc deseja enviar mensagens
de alerta avisando, por exemplo,
que a incluso foi efetuada com
sucesso, que ocorreu um erro na
incluso, alterao ou excluso.
Em programao estruturada,
comum utilizar funes nesse tipo
de situao, mas esse recurso tambm pode ser utilizado a partir
do banco de dados, por meio da
Trigger. Digamos que voc tenha
implementado integridade referencial em suas tabelas e que deseja fazer validaes dos campos
das tabelas para que, por exemplo,
campo data e hora sejam preenchidos corretamente, evitando
assim inconsistncia de dados.
Isso pode ser trabalhado em programao estrutura com uso de
funo ou igualmente em banco
de dados com Trigger.
Ainda no contexto de que voc tenha implementado integridade referencial em suas tabelas e queira
excluir informaes de um cliente
na tabela clientes, e este cliente
tambm se encontra registrado
na tabela carros, e voc gostaria
de que, ao confirmar a excluso,
os registros desse cliente fossem
excludos em cascata, primeiro
da tabela carros para depois ser
excludo da tabela clientes. Isso
possvel por meio de uma funo
em programao estruturada ou
fazendo uso de Trigger.
Arquitetura
Trigger
de
um
43
Finalizando o detalhamento da
sintaxe de criao de um Trigger,
o autor destaca o elemento trigger_stmt como um comando para
se executar quando o Trigger for
acionado e ainda complementa
Se voc quer executar mltiplos
comandos, use a BEGIN...END
construo composta de comando. Estes tambm habilitados
para voc usar alguns comandos
como tambm permitindo escrever stored routines.
SEO 2
Manipulando Trigger
Para este estudo, sero utilizadas
as tabelas do banco de dados da
oficina mecnica. importante
destacar que os exemplos prticos
apresentados nesta unidade so
adaptados de Bianchi (2010).
Considerando que o banco de dados da oficina mecnica j existe
e, consequentemente, as suas tabelas, voc precisar fazer algumas modificaes que possa visualizar os resultados das prticas
sugeridas.
Ento, inicialmente, verifique na
estrutura dessa tabela se o campo
nome da tabela clientes est configurado para Nulo ou No Nulo.
Se estiver como Nulo, mude para
No Nulo, indicando que no podem ser armazenados valores nulos para ele.
Feito isso, vamos ao exemplo: suponha que voc queira impedir a
insero de registros de clientes
com valores inferiores ou iguais a
zero, e tambm nulos; voc deve
estar pensando, isso pode ser feito facilmente a partir de um tratamento via programa. Voc est
certo, mas veja como fazer via
banco de dados a partir do uso de
Trigger.
Todos os exemplos praticados at aqui foram executados no phpMyAdmin e, portanto, este utilitrio nos fornece algumas visualizaes privilegiadas. Mas se voc no estiver trabalhando com um utilitrio intuitivo e
deseja a Trigger que criou, basta escrever e executar em seu editor SQL
a seguinte instruo: show triggers from nome do banco;
Veja:
SHOW TRIGGERS from mecanica;
Resultado:
Banco de Dados II
45
Ao executar essa instruo, a Trigger vertamcampo ser acionada (disparada) e qualquer exceo referente ao campo nome, prevista na Trigger, ser prontamente respondida. Note que, ao inserirmos o registro,
o campo nome fica em branco. Isso significa que, quando a Trigger for
acionada, o valor NULL ser atribudo a esse campo, mas esse campo
havia sido configurado l no incio dos nossos exemplos com o tipo
NOT NULL, um erro ser devolvido pelo banco de dados como mostra
a figura a seguir. Isso acontece porque, como NOT NULL, esse campo
no pode armazenar um valor nulo.
46
Saiba mais
Para saber mais sobre Triggers, consulte a documentao do seu SGBD
ou alguns sites sobre o assunto.
DICA
Analise bem a necessidade de uso de Triggers na sua soluo,
utilize somente quando for extremamente necessrio.
Banco de Dados II
47
Unidade de
estudo 5
Sees de estudo
Seo 1 Abordagem inicial
Seo 2 Abrangncia da segurana em
banco de dados
Seo 3 Integridade de dados
Seo 4 Controle de acesso a banco de
dados
Abordagem inicial
Quando se fala de banco de dados, no se pode dissociar do
elemento segurana, pois existem
vrias questes a considerar.
Nesse contexto, esta unidade
prope que voc conhea alguns
aspectos importantes sobre segurana em banco de dados para
tornar mais confivel a implementao do seu projeto de banco de
dados.
Assim, voc est convidado agora a conhecer alguns aspectos
importantes sobre segurana em
banco de dados. Vamos l!
Aplicao
Projeto de banco de dados
Integridade de dados
de dados.
SEO 2
As questes de segurana de dados esto frequentemente associadas a questes de integridade de dados, mas os conceitos
so na realidade diferentes: segurana se refere proteo de
dados contra acesso no autorizado, enquanto integridade se
refere correo desses dados.
Sistema
Pessoas treinadas e capacitadas
para trabalhar com infraestrutura
e banco de dados.
Integrao total do banco de
dados com o ambiente de infraestrutura (hardware, perifricos,
redes) onde este ser implementado.
Infraestrutura adequada s
SEO 3
inseridos em duplicata;
Integridade semntica:
Banco de Dados II
49
Integridade de entidade:
quando implementada, permite
que no existam registros duplicados em uma tabela.
Integridade referencial:
Integridade de domnio:
quando implementada, garante
que um campo s deve permitir
valores preestabelecidos para este
campo. Por exemplo, s deve
aceitar os valores Nulos ou A, B
ou C, e mais nada.
Na prtica, a integridade de dados
garante ao banco de dados que suas
informaes permaneam consistentes para que possam servir ao
seu propsito principal, que sua
utilizao pelo usurio final. Assim,
vamos exemplificar alguns casos de
uso de integridade referencial.
De todas as categorias de integridade de banco de dados apresentadas aqui, a que vamos focar
a integridade referencial porque,
como j foi explicado, ela trabalha
justamente com os relacionamentos entre as tabelas, o que caracteriza termos muita ateno para
com a estrutura geral dos dados
do nosso projeto.
Acompanhe algumas situaes
de uso de integridade referencial
entre tabelas, onde, a exemplo de
outras situaes mostradas neste
material, ser feito o uso de instrues SQL baseadas no MySQL, o que no inviabiliza voc de
50
Lembre-se de que as tabelas clientes e bairros j esto populadas e encontram-se na unidade de estudos 2, seo 4.
Se voc j criou, fisicamente, as tabelas cliente e bairros no seu banco de
dados, timo, s seguir praticando o exemplo que ser trabalhado, mas
aqui vai uma observao importante: o MySQL permite que voc crie tabelas de determinados tipos; dependendo do tipo que a tabela criada, garante-se a esta um formato de armazenamento e disponibiliza-se recursos.
Por padro, a maioria das verses do MySQL adota o tipo MyISAM para
as tabelas criadas. Caso voc queira, ao criar suas tabelas pode alterar, individualmente, de acordo com sua necessidade, cada tabela do seu projeto,
mas isso no cabe abordarmos aqui. Para utilizarmos integridade referencial no MySQL, necessrio que as tabelas envolvidas sejam do tipo InnoDB, e no MyISAM, assim, se as tabelas bairros e clientes estiverem no
forma MyISAM, implemente no seu editor SQL as seguintes instrues:
Feito isso, j estamos com meio caminho andado para o nosso trabalho.
Agora, certo de que as tabelas so do tipo InnoDB, vamos criar uma
constraint (restrio) para o campo bairros_idbairros, localizado na tabela
clientes, que uma chave estrangeira (FK), fruto do relacionamento 1
N entre as tabelas bairros e clientes.
Analisando a instruo:
51
52
SEO 4
Controle de acesso a
banco de dados
Sistemas de banco de dados requerem permisses de acesso,
dessa forma garante tambm a
integridade dos dados. Quando
voc desenvolve um projeto de
banco de dados, deve ter em mente que este ser acessado por vrios usurios, cada qual com suas
necessidades e responsabilidades,
assim, os SGBDs devem disponibilizar implementao de privilgios para que se possa garantir a
segurana de acesso aos dados do
sistema.
Quanto a privilgios, Machado
(2008, p. 378) comenta que Os
privilgios garantem a segurana
e a integridade dos dados, bem
como a responsabilidade de cada
usurio sobre seus dados especficos.
Apenas como curiosidade, a maioria dos SGBDs disponibiliza um
utilitrio para garantir e revogar
privilgios a um banco de dados.
No nosso caso, isso est sendo
feito manualmente, via construo SQL.
COMANDO GRANT
Existem aspectos tcnicos sobre tabelas e views que no foram
abordados em nosso estudo, mas
que agora se tornam relevantes,
como quando criamos uma tabela
ou view associ-la ao nome do usurio que os criou.
comando revoke
Ao contrrio de garantir os privilgios, esse comando revoga os
privilgios de acesso a uma tabela
ou view.
Situao: revogar o privilgio de
seleo da tabela produtos para o
usurio Silvio.
REVOKE SELECT ON produtos
FROM Silvio
Banco de Dados II
53
Finalizando
Voc finalizou mais uma unidade curricular. No seu decorrer, buscou-se complementar seus conhecimentos em banco de dados
Os conhecimentos de banco de dados so importantes para que voc possa, no contexto de
projeto de software, trabalhar todo o universo das informaes que sero manuseadas na soluo
informatizada proposta.
Em se tratando de uma unidade curricular complementar, buscou-se trabalhar os contedos no
sentido de continuidade do que foi abordado na unidade curricular de Banco de Dados I, onde,
na oportunidade, voc entrou em contato com os principais conceitos, mtodos e tcnicas para
elaborao de um projeto de banco de dados.
Em um projeto de banco de dados, voc precisa agregar alguns conhecimentos para que, j na fase
de elaborao deste, possa contemplar os recursos necessrios para a concepo e a implementao eficiente da sua soluo. Por isso, iniciamos o estudo por ndices. Para que, a partir de critrios
bem definidos e de ferramentas especficas de modelagem, fosse possvel defini-los no projeto.
Na sequncia, voc conheceu alguns recursos avanados da linguagem SQL, pois, conhecendo
seu potencial, voc poder dimensionar em sua estrutura de dados a que nveis seu modelo deve
abranger, para que resultados possam ser extrados com eficincia.
Tambm trabalhamos as questes de segurana em banco de dados porque nada adianta voc desenvolver um bom modelo de dados se no se preocupar com o meio onde sua estrutura de dados
estar instalada, como tambm com a consistncia das informaes constantes nessa estrutura.
Caso algo tenha ficado para trs, volte aos estudos e aperfeioe seus conhecimentos buscando
outras fontes de informao. Como voc bem sabe, em informtica tudo ocorre muito rpido, na
velocidade dos processadores de ltima gerao, por isso voc deve estar sempre frente e atualizado com todo e qualquer conhecimento que venha a fazer de voc competitivo no mercado.
Utilize este material como o incio de um processo de conhecimento importante na sua vida profissional. Boa sorte e sucesso!
Banco de Dados II
55
Referncias
BAQUINO, Quemuel. Otimizao de ndices em MySQL. Disponvel em: <www.webmaster.pt/mysql-otimizacao-indices-5148.html>. Acesso em: 8 nov. 2010.
CIDRAL, Alexandre; AUDY, Jorge Luis Nicolas; ANDRADE, Gilberto Keller de. Fundamentos de sistemas de informao. Porto Alegre: Bookman, 2005.
DATE, C. J. Introduo a sistemas de banco de dados. 8. ed. Rio de Janeiro, RJ: Campus/Elsevier, 2003.
ECLESIASTES. Create Trigger (Traduo do manual). Disponvel em: <www.phpavancado.net/node/300>. Acesso em: 10 nov. 2010.
HEUSER, Carlos Alberto. Projeto de banco de dados. 5. ed. Porto Alegre: Sagra Luzzatto, 2004.
Banco de Dados II
57
Design Educacional
Evelin Lediani Bao
Capa, Ilustraes, Tratamento de Imagens
Dimitre Camargo Martins
Diego Fernandes
Luiz Eduardo Meneghel
Diagramao
Letcia Silva Felini
Reviso e Fechamento de Arquivos
Daniela de Oliveira Costa
Juliana Vieira de Lima
Reviso Ortogrfica e Normatizao
FabriCO
BANCO DE DADOS II
59