Escolar Documentos
Profissional Documentos
Cultura Documentos
(Cliqueapostilas - Com.br) Banco de Dados V PDF
(Cliqueapostilas - Com.br) Banco de Dados V PDF
br
Banco de Dados
Vanderson Jos Ildefonso Silva
Colatina - ES
2011
Ministrio da Educao
ISBN: 978-85-62934-73-5
1. Banco de dados. 2. Informtica. I. Instituto Federal do Esprito
Santo. II. Ttulo.
INSTITUTO
FEDERAL
RIO GRANDE CDD: 005.74
DO SUL
Prezado estudante,
Voc faz parte de uma rede nacional pblica de ensino, a Escola Tcnica
Aberta do Brasil, instituda pelo Decreto n 6.301, de 12 de dezembro 2007,
com o objetivo de democratizar o acesso ao ensino tcnico pblico, na mo-
dalidade a distncia. O programa resultado de uma parceria entre o Minis-
trio da Educao, por meio das Secretarias de Educao a Distancia (SEED)
e de Educao Prossional e Tecnolgica (SETEC), as universidades e escolas
tcnicas estaduais e federais.
O e-Tec Brasil leva os cursos tcnicos a locais distantes das instituies de en-
sino e para a periferia das grandes cidades, incentivando os jovens a concluir
o ensino mdio. Os cursos so ofertados pelas instituies pblicas de ensino
e o atendimento ao estudante realizado em escolas-polo integrantes das
redes pblicas municipais e estaduais.
Ns acreditamos em voc!
Desejamos sucesso na sua formao prossional!
Ministrio da Educao
Janeiro de 2010
Nosso contato
etecbrasil@mec.gov.br
3 e-Tec Brasil
Indicao de cones
5 e-Tec Brasil
Sumrio
Palavra do professor-autor 9
Apresentao da disciplina 11
Projeto instrucional 13
7 e-Tec Brasil
Referncias 174
Palavra do professor-autor
Ol caro estudante!
Bons estudos!
9 e-Tec Brasil
Apresentao da disciplina
Nesta disciplina voc ser apresentado aos conceitos bsicos de Bancos de Da-
dos e aprender a empreg-los como uma importante ferramenta para a ma-
nuteno de dados em sistemas de informao (persistncia de dados). Com a
crescente utilizao da Tecnologia da Informao pelas organizaes e pessoas
fsicas, os Bancos de Dados converteram-se em uma importante tecnologia.
Bons Estudos!
11 e-Tec Brasil
Projeto instrucional
CARGA
OBJETIVOS DE
AULA MATERIAIS HORRIA
APRENDIZAGEM
(horas)
- Denir conceitos bsicos de Bancos
de Dados.
- Identicar problemas relativos tec-
nologia da informao que induziram
ao desenvolvimento de Sistemas
1. Conceitos de Este caderno e outros livros
Gerenciadores de Banco de Dados 10
Banco de Dados indicados nas referncias.
(SGBDs).
- Enumerar os principais objetivos da
tecnologia de Banco de Dados.
- Classicar os diferentes tipos de
usurios de Banco de Dados.
- Denir entidades e seus atributos.
- Estabelecer relacionamentos entre
entidades.
- Ajustar a cardinalidade dos relacio-
2. Modelagem de Este caderno e outros livros
namentos. 10
Dados: MER indicados nas referncias.
- Interpretar Modelos de Entidade e
Relacionamento (MER).
- Modelar conceitualmente sistemas de
informao.
- Interpretar um Modelo Relacional
Normalizado (MRN).
- Implementar um MRN a partir de um
Modelo Entidade Relacionamento
3. Modelagem de (MER) preexistente.
DB Designer. 10
Dados: MRN - Denir chaves primrias e estrangeiras
para uma entidade.
- Efetuar a normalizao do modelo de
dados, obedecendo s trs primeiras
Formas Normais (FN).
(continua)
13 e-Tec Brasil
CARGA
OBJETIVOS DE
AULA MATERIAIS HORRIA
APRENDIZAGEM
(horas)
- Utilizar o Data Denition Langua-
ge (DDL) da SQL.
- Denir chaves primrias e chaves
estrangeiras.
- Estabelecer relacionamentos entre
4. Criao de um
tabelas. SGBD MySQL. 10
Banco de Dados
- Alterar tabelas.
- Excluir tabelas.
- Inserir novos registros em tabelas.
- Alterar registros.
- Excluir registros de tabelas.
- Recuperar dados armazenados em
tabelas atravs de consultas SQL.
- Denir colunas cujos dados sero
visualizados na consulta.
- Consultar simultaneamente informa-
5. Consultas SQL es armazenadas em vrias tabelas SGBD MySQL. 10
relacionadas.
- Estabelecer ltros que separem os
registros relevantes para o contexto
da consulta daqueles que no o so.
- Utilizar funes especiais disponveis.
(continua)
CARGA
OBJETIVOS DE
AULA MATERIAIS HORRIA
APRENDIZAGEM
(horas)
- Diferenciar um procedimento armaze-
nado de um gatilho.
- Identicar situaes em que justi-
cada a utilizao de procedimentos
armazenados e gatilhos.
7. Procedimentos - Criar procedimentos armazenados.
Armazenados e - Executar procedimentos armazenados. SGBD MySQL. 10
Gatilhos - Apagar procedimentos armazenados.
- Efetuar passagens de parmetros em
procedimentos armazenados.
- Criar gatilhos que disparem antes ou
aps um evento.
(concluso)
15 e-Tec Brasil
Objetivos
1.1 Denio
A humanidade sempre se dedicou produo de signos. Um signo ou sm-
bolo corresponde a qualquer coisa que represente algo para algum. Da
mesma forma que um mapa representa um dado terreno, um braso pode
representar o time de futebol. Uma cano pode faz-lo lembrar uma fase
especca de sua vida ou uma paixo. Tudo isso e muitos outros so signos.
Nesse sentido, o que para voc nada signica pode representar algo para
outros. Portanto, todo signo subjetivo e pode ser de difcil interpretao.
Esse exemplo dever apresentar pelo menos duas liais com um mnimo de
cinco funcionrios por elas distribudos. Use sua criatividade para dar nomes
aos funcionrios e preencher os outros dados sobre eles e as liais nas tabelas.
Lembre-se de que um funcionrio somente poder estar lotado em uma lial.
tabela com os de outra. Caso contrrio, no teramos como saber com preci-
so a quais clientes cada conta pertence. Porm, as associaes entre regis-
tros no so implementadas mediante ponteiros. Na verdade, o modelo
relacional emprega a duplicao de uma ou mais colunas em uma tabela
distinta daquela a que pertencem originalmente.
FILME
NUMERO TITULO ANO COD_GENERO
GENERO
COD_GENERO DESCRICAO
DRA Drama
FIC Fico
FILME
NUMERO TITULO ANO DESCRICAO_GENERO
CLIENTE
ID_CLIENTE NOME Cidade SEXO
CONTAS_CLIENTE CONTA
NUMERO_CONTA ID_CLIENTE NUMERO_CONTA SALDO
1500 37
CONTAS_CLIENTE
NUMERO_CONTA SALDO ID_CLIENTE
1045 945,60 10
1385 107,00 15
1447 93,41 15
Redundncia de
1447 37 dados (inecincia)
93,41
1500 1.266,00 37
CONTAS_CLIENTE
ID_CLIENTE NOME ID_CLIENTE SEXO NUMERO_CONTA
Por mais que a nova tabela CONTAS_CLIENTE (Figura 1.6) tambm seja uma
redundncia de dados, quando comparada s outras situaes (Figuras 1.7
e 1.8), ela representa uma replicao controlada e, portanto, mais eciente.
Resumo
Nesta aula voc se familiarizou com conceitos bsicos de Banco de Dados.
Esses conceitos sero desenvolvidos com mais detalhes ao longo do mate-
rial. Vimos como as exigncias modernas de um maior controle sobre os
dados armazenados levaram ao surgimento de sistemas de informao; ini-
cialmente, desenvolvidos como sistemas de arquivos tradicionais que cons-
tituam um grande avano em relao os mecanismos manuais de registro
das informaes, mas apresentavam srias limitaes que somente foram
corrigidas com a tecnologia de Banco de Dados. Tambm abordamos os di-
ferentes tipos de usurios para Bancos de Dados. Os sistemas gerenciadores
de Bancos de Dados (SGBDs) foram implementados em diferentes modelos
ao longo do tempo. Inicialmente surgiram os SGBDs de modelo em rede.
Com a evoluo tecnolgica, sucederam-no os modelos hierrquico, relacio-
nal e o objeto-relacional. Um modelo orientado a objetos esperado para
breve, mas ainda no se estabeleceu no mercado.
Atividades de aprendizagem
1. Liste em ordem cronolgica os modelos de BD.
Funcionarios Cargos
MATRICULA NOME CPF CARGO CODIGO NOME_CARGO
04 Pedro 125 01
Objetivos
MEDICO PACIENTE
Figura 2.1: Representao grca das entidades MEDICO e PACIENTE
Fonte: Elaborada pelo autor
MEDICO PACIENTE
NR_CRM MATRICULA
NOME NOME
CELULAR ENDERECO
TELEFONE
CELULAR
GENERO
Figura 2.2: Entidades e seus respectivos atributos
Fonte: Elaborada pelo autor
MEDICO PACIENTE
atende
Figura 2.3: Relacionamento entre duas entidades
Fonte: Elaborada pelo autor
MEDICO PACIENTE
PLANO_DE_SAUDE
FUNCIONARIO
coordena
PESSOA
Marido Esposa
casa com
Dene, tambm, que uma pessoa (Esposa) somente pode casar-se com
uma pessoa (Marido). Portanto, os direitos no so iguais nessa sociedade
e a cardinalidade dene isso com clareza. Um homem pode ter vrias mulhe-
res, mas uma mulher pode ter apenas um homem como marido.
PESSOA
IDENTIFICADOR
NOME
SEXO
IDENTIFICADOR_MARIDO
1 N
Marido Esposa
casa com
Figura 2.7: Cardinalidade um-para-muitos (1:N)
Fonte: Elaborada pelo autor
(2) NOME: nome completo da pessoa. No serve para identicar com preci-
so dada a possibilidade da ocorrncia de homnimos (pessoas de mes-
mo nome. Ex.: Jos da Silva).
PESSOA
IDENTIFICADOR NOME SEXO IDENTIFICADOR_MARIDO
1 Altair Souza M
2 Karla Silva F
3 Martha Souza F 1
4 Sueli Souza F 1
5 Ricardo Vitali M
6 Rita Vitali F 5
7 ngela Souza F 1
Observe que, na tabela PESSOA, Altair tem trs esposas (Martha, Sueli
e ngela). Elas possuem o nmero identicador dele na coluna/atributo
IDENTIFICADOR_MARIDO. Por outro lado, Karla apresenta esse atributo
sem a indicao de qualquer nmero (valor nulo). Signica que Karla
solteira. Rita (identicador = 6) casada com Ricardo (identicador = 5).
PESSOA
IDENTIFICADOR
NOME
SEXO
IDENTIFICADOR_ESPOSA
N 1
Marido Esposa
casa com
PESSOA
IDENTIFICADOR
NOME
SEXO
IDENTIFICADOR_CONJUGE
1 1
Marido Esposa
casa com
Figura 2.10: Cardinalidade um-para-um (1:1)
Fonte: Elaborada pelo autor
PESSOA
IDENTIFICADOR
NOME
SEXO
N N
casamento
IDENTIFICADOR_MARIDO
casa com
IDENTIFICADO_RESPOSA
PESSOA
IDENTIFICADOR NOME SEXO
1 Eduardo M
2 Ana Paula F
3 Ronaldo M
4 Cibele F
5 Anabela F
6 Ceclia F
7 Srgio M
CASAMENTO
IDENTIFICADOR_MARIDO IDENTIFICADOR_ESPOSA
1 2
1 6
3 2
3 4
3 6
FUNCIONARIO PROJETO
MATRICULA 1 N NUMERO
NOME
NOME DATA_INICIO
SEXO N DATA_FINAL_PREVISTA
gerencia DATA_FINAL_EFETIVA
N
EQUIPE
possui
1
FUNCAO
trabalha em
ID_FUNCAO MATRICULA
DESCRICAO NUMERO
(1) Manter dados sobre as obras do acervo, como nome dos autores, data
da aquisio, editora, edio e ttulo.
(4) Consultar livros por cdigo de identicao, ttulo da obra, nome de au-
tores e gnero da obra (autoajuda, dicionrio, literatura, etc.).
OBRA GENERO
N 1
NR_OBRA ID_GENERO
TITULO DESCRICAO
classica
AUTORIA
AUTOR
N N
ID_AUTOR
NOME
1 escreve
NR_OBRA
ID_AUTOR
referencia
N
N
MOVIMENTACAO
LIVRO USUARIO
N N
NR_LIVRO MATRICULA
DATA_AQUISICAO NOME
EDICAO movimenta SEXO
DATA NASCIMENTO
MATRICULA TELEFONE
N NR_LIVRO CELULAR
DATA_EMPRESTIMO E_MAIL
DATA PREVISTA ENDERECO
DATA_DEVOLUCAO
publica
EDITORA
ID_EDITORA
NOME FANTASIA
Nela foram usadas duas entidades: OBRA e LIVRO. A entidade LIVRO, por
exemplo, refere-se a uma edio em particular de uma obra. Considere uma
obra do sculo XIX, como Helena, de Machado de Assis. Ela j foi publica-
da por diferentes editoras em mais de um sculo de existncia. Portanto,
a entidade EDITORA no poderia estar relacionada entidade OBRA, mas
sim entidade LIVRO. Se fosse diferente, essa obra somente poderia ser
publicada por uma editora.
Ainda observando a Figura 2.14, notamos que um gnero pode classicar vrias
obras, mas uma obra pode ser classicada por um gnero. Assim, Helena e Os
Trs Mosqueteiros podem ser classicadas como literatura. Porm, nenhuma
dessas obras pode ser classicada em mais de um gnero simultaneamente.
Um autor pode escrever muitas obras, e uma obra, ser escrita por muitos
autores. Devido cardinalidade N:N surgiu a relao AUTORIA (retngulo
tracejado), possibilitando obras com mais de um autor, como em livros did-
ticos ou coletneas de artigos.
Um livro pode referenciar apenas uma obra, mas uma obra pode ser referen-
ciada por muitos livros. Por outro lado, Uma editora pode publicar muitos
livros, mas um livro pode ser publicado apenas por uma editora.
Um usurio pode movimentar vrios livros e um mesmo livro pode ser movi-
mentado por vrios usurios ao longo do tempo. Mais uma vez a cardinali-
dade N:N gerou a relao MOVIMENTACAO, a qual armazena emprstimos
e devolues de livros.
ESPECIALISTA
MEDICO ESPECIALIDADE
N N
COD_ESPECIALIDADE
CRM DESCRICAO
NOME
SEXO possui
TELEFOME
CELULAR CRM
E-MAIL COD_ESPECIALIDADE
CONSULTA
ID_PLANO
PACIENTE
ID_PACIENTE
ID_PACIENTE
N NOME
SEXO
TELEFONE
CRM CELULAR
DATA
HORA
PLANO_SAUDE
ID_PLANO
NOME_FANTASIA
2.3 Generalizao/especializao
de entidades
Existem situaes em que diferentes entidades apresentam algumas carac-
tersticas em comum, divergindo apenas em outras caractersticas. Na Figura
2.16, por exemplo, temos duas entidades nessa condio de semelhana:
MEDICO e PACIENTE.
MEDICO PACIENTE
CRM ID_PACIENTE
NOME NOME
SEXO SEXO
TELEFONE TELEFONE
CELULAR CELULAR
E_MAIL
Na Figura 2.17 temos uma entidade Pessoa que assume o papel de enti-
dade menos especializada. Ela chama para si os atributos comuns das en-
tidades mais especializadas: Mdico e Paciente. O smbolo triangular que
interliga essas entidades indica que os atributos de Pessoa so comparti-
lhados por MEDICO e PACIENTE, ou seja, MEDICO e PACIENTE herdam os
atributos de PESSOA. Entretanto, o atributo de ID_PACIENTE pertence so-
mente a PACIENTE; e CRM e E_MAIL so atributos exclusivos de MEDICO.
PESSOA
NOME
SEXO
TELEFONE
CELULAR
MEDICO PACIENTE
CRM ID_PACIENTE
E_MAIL
SOCIO DEPENDENTE
ID_SOCIO ID_SOCIO
NOME ID_DEPENDENTE
SEXO
1 N NOME
ENDERECO SEXO
TELEFONE DATA_NASCIMENTO
CPF
RG possui
DATA_NASCIMENTO
Resumo
Antes de sair criando tabelas, relacionamentos e consultas, devemos projetar
um BD que atenda satisfatoriamente aos objetivos de nossos usurios.
Atividades de aprendizagem
Na transformao do modelo conceitual Entidade-Relacionamento (MER)
em um modelo lgico relacional (MRN), as cardinalidades do relacionamento
entre as entidades exercem papel importante.
ATOR FILME
atua em
Objetivos
Na tabela ALUNO na Figura 3.1, cada linha foi subdividida em cinco colunas
(MATRICULA, NOME, SEXO, NASCIMENTO e CURSO). No exemplo existem seis
linhas armazenando as informaes de seis diferentes alunos de uma institui-
o de ensino. Os dados armazenados nas colunas de uma mesma linha so
ALUNO
MATRICULA NOME SEXO NASCIMENTO CURSO
FUNCIONARIO
NOME
SEXO
DATA_NASCIMENTO
CARTEIRA_IDENTIDADE
CPF
LOGRADOURO
COMPLEMENTO
BAIRRO
CIDADE
UF
CEP
TELEFONE
Chaves candidatas
Figura 3.4: Atributos da entidade FUNCIONARIO So um subconjunto espec-
Fonte: Elaborada pelo autor co das superchaves. Somente
podem ser chaves candidatas
as superchaves mnimas. Ou
seja, uma superchave formada
Portanto, a combinao de atributos {NOME, CPF}, apesar de ser super- pela combinao de mais de um
chave, no pode ser uma chave candidata, pois {CPF} tambm super- atributo pode ser classicada
como uma chave candidata
chave e subconjunto da combinao. O mesmo vale para a combinao apenas se essa combinao no
possuir qualquer subconjunto
{CARTEIRA_IDENTIDADE, CPF, NOME}, que no chave candidata, pois prprio que seja ele mesmo uma
existem dois subconjuntos que so superchaves. superchave.
ID_PACIENTE ID_PACIENTE
CRM
PLANO_SAUDE DATA
NOME
ID_PLANO SEXO
HORA
TELEFONE
ID_PLANO
NOME_FANTASIA CELULAR
Consulta tem dois atributos prprios: data e hora. Porm, sua chave primria
tambm composta de atributos de outras entidades: ID_PACIENTE, CRM e
DATA. Assim como no caso de Especialista, a replicao dos valores de um
dos atributos isoladamente possvel. Somente a repetio dos trs atribu-
tos simultaneamente seria um problema.
ALUNO CURSO
MATRICULA N 1 COD_CURSO
NOME_ALUNO NOME_CURSO
SEXO
NASCIMENTO
Matricula-se em
N N
HISTORICO
MATRICULA
GRADE_CURRICULAR
COD_DISCIPLINA
SEMESTRE
DISCIPLINA
N COD_DISCIPLINA N
NOME_DISCIPLINA
CARGA_HORARIA
EMENTA possui
cursa
NOTA_FINAL
COD_CURSO
FREQUENCIA
COD_DISCIPLINA
CONDICAO
PERODO
Existe uma regra para a determinao de qual tabela deve apresentar a chave
estrangeira no relacionamento de cardinalidade 1:N ou N:1. A tabela do lado
N sempre ca com a chave estrangeira (a chave primria do lado 1). Quan-
do a cardinalidade N:N, a chave estrangeira ca com nenhuma das tabelas
Na Figura 3.7, a tabela ALUNO tem agora a coluna COD_CURSO como cha-
ve estrangeira, pois, no relacionamento com CURSO, encontra-se do lado
N da cardinalidade 1:N.
ALUNO
MATRICULA NOME ALUNO SEXO NASCIMENTO COD_CURSO
12359 Jos da Silva M 14/02/1985 INF
12361 Andressa Simes F 25/08/1986 SAN
13000 Lina Silva F 22/09/1996 INF
CURSO
COD_CURSO NOME_CURSO
INF Informtica
SAN Saneamento Ambiental
ALUNO CURSO
MATRICULA COD_CURSO
NOME_ALUNO NOME_CURSO
SEXO
NASCIMENTO
CURSO.COD_CURSO
GRADE_CURRICULAR
CURSO.COD_CURSO
DISCIPLINA.COD_DISCIPLINA
PERIODO
HISTORICO
ALUNO.MATRICULA
DISCIPLINA.COD_DISCIPLINA
SEMESTRE
DISCIPLINA
NOTA_FINAL
FREQUENCIA COD_DISCIPLINA
CONDICAO
NOME_DISCIPLINA
CARGA_HORARIA
EMENTA
FUNCIONARIO PROJETO
MATRICULA NUMERO
NOME NOME
SEXO DATA_INICIO
FUNCAO.ID_FUNCAO DATA_FINAL_PREVISTA
DATA_FINAL_EFETIVA
FUNCIONARIO.MATRICULA_GERENTE
EQUIPE
FUNCIONARIO.MATRICULA
PROJETO.NUMERO
FUNCAO
ID_FUNCAO
DESCRICAO
MEDICO
ID NOME SEXO TELEFONES
MEDICO TELEFONE
ID_MEDICO NOME SEXO ID_MEDICO TELEFONES
1001 Osthogenes Ribeiro M 1001 3711-2278
1023 Christine lvares F 1001 9947-5611
1066 Renan Rui Monteforte M 1001 3345-0587
1023 8881-0099
1023 3335-7210
1066 9967-0909
PESSOA TELEFONE
ID_PESSOA
PESSOA.ID_PESSOA
NUMEROTELEFONE
NOME
SEXO
ESPECIALIDADE
ID_ESPEC
DESCRICAO
PACIENTE MEDICO
ID_PACIENTE ID_MEDICO
PESSOA.ID_PESSOA PESSOA.ID_PESSOA
ENDEREO ESPECIALIDADE.ID_ESPEC
FILME
NR_FILME TITULO ID_ATOR NOME_ATOR ANO_PRODUCAO
Supondo que todos os cinco atributos pertenam tabela FILME, nenhum deles
pode, sozinho, ser a chave primria. Anal, em todas as colunas temos valores
replicados. Portanto, essa chave primria deve ser composta; formada pela
combinao de dois ou mais atributos. Poderia ser NR_FILME e ID_ATOR. Para
essa combinao em particular no encontramos linhas com valores duplicados.
Assim, a combinao {NR_FILME + ID_ATOR} a chave primria.
A soluo para essa violao da 2FN est na Figura 3.14, onde os atributos
da antiga tabela FILME so redistribudos entre ela e a tabela ATOR. Outra
tabela, ELENCO, tornou-se necessria em razo da cardinalidade N:N do
relacionamento entre as duas tabelas. Anal, um ator pode atuar em mui-
tos lmes e um lme pode contar com muitos atores. A entidade ELENCO
contm apenas dois atributos, ambos chaves estrangeiras. Em FILME a chave
primria o atributo NR_FILME. Na ATOR, ID_ATOR. J em Elenco, com-
posta pela combinao de atributos {NR_FILME, ID_ATOR}.
VENDA
NR_PEDIDO COD_PRODUTO QUANTIDADE PRECO_UNITARIO SUBTOTAL
1035 10-900 10 40,99 409,90
1035 10-991 5 10,00 50,00
1213 20-560 3 35,20 105,60
A Figura 3.16 mostra outra violao da 3FN. A tabela FILME refere-se a uma
videolocadora, em que o valor da locao de um lme depende da catego-
ria em que ele est classicado. Se o lme um lanamento, seu preo de
R$ 4,00; se da categoria ouro, R$ 3,00; e da prata, R$ 2,00.
FILME
NR_FILME TITULO CATEGORIA PRECO
5598 Batman - The Dark Knight Prata 2,00
5600 Wall-E Ouro 3,00
5601 Se Beber, No Case Lanamento 4,00
5603 Avatar Lanamento 4,00
Figura 3.16: Outro Exemplo de violao da 3FN
Fonte: Elaborada pelo autor
FILME CATEGORIA
NR_FILME TITULO CATEGORIA ID_CATEGORIA PRECO
5598 Batman - The Dark Knight Prata Lanamento 4,00
5600 Wall-E Ouro Ouro 3,00
5601 Se Beber, No Case Lanamento Prata 2,00
5603 Avatar Lanamento
(2) ERWin,
(3) DB Design,
(4) brModelo,
Resumo
Nesta aula abordamos a modelagem lgica de dados. Um modelo lgico
objetiva adaptar o modelo conceitual (visto na aula anterior) teoria de
sistemas relacionais, denindo chaves primrias (simples ou compostas) e
chaves estrangeiras. As chaves primrias so responsveis por identicar uni-
vocamente um registro de uma tabela (entidade).
Atividades de aprendizagem
1. Muitas vezes, o administrador de DB se depara com situaes em que
possui o esquema do BD, porm no tem o modelo conceitual equivalen-
te. Baseado nisso, dada a denio do esquema abaixo, gere o modelo
conceitual equivalente (processo de engenharia reversa).
Funcionario Setor
Matricula CodSetor
Nome NomeSetor
NrCarteiraDeTrabalho Endereco
NrCarteiraDeIndentidade Funcionario.Matricula
NomeFilho1
NascimentoFilho1
NomeFilho2
NascimentoFilho2
NomeFilho3 Telefone
NascimentoFilho3
Telefone NrTelefone
Endereco
NrCPF DescricaoTelefone
Funcionario.Matricula
Artista Musica
Cod_Artista Cod_Musica
Nome Titulo
Pais.Cod_Pais Duracao
Artista.Cod_Artista
Objetivos
(5) Cria vises. Nem sempre desejvel que um grupo de usurios tenha
acesso a todas as colunas ou linhas de uma tabela. A SQL permite que se
restrinja esse acesso criando vises. Suponha, por exemplo, uma tabela
de FUNCIONARIOS que tenha como colunas {MATRICULA, NOME, SENHA,
CODDEPARTAMENTO}. Pode-se criar uma viso que permita a visualizao
de todas as colunas, exceto a senha. Pode-se tambm criar uma viso
que permita a visualizao das linhas de Funcionrios cuja coluna COD-
DEPARTAMENTO tenha valor Diretoria. Em seguida, o administrador do
BD pode conceder a grupos de usurios a permisso de acesso a uma ou
outra viso, e revogar a permisso de acesso direto tabela. Assim, alguns
usurios podero acessar {MATRICULA, NOME, CODDEPARTAMENTO},
mas no {SENHA}. Outros podero acessar todas as colunas da tabela,
mas no todas as linhas. Podero visualizar ou manipular apenas os dados
dos funcionrios lotados na Diretoria.
4.2 MySQL
O MySQL, no Brasil pronuncia-se Mai sse Que le, um SGBD desenvolvi-
do pela MySQL AB, que agora propriedade da Sun Microsystems. Em 2009,
a Sun foi adquirida pela Oracle, uma reconhecida desenvolvedora de SGBDs. O MySQL encontra-se na verso
5.4 e pode ser obtido por meio de
download na url: http://dev.mysql.
Rapidamente o MySQL converteu-se em um dos SGBDs mais populares no com/downloads/mysql/5.4.html.
(8) Apresenta interface de linha de cdigo (no estilo prompt do DOS), mas o
MySQL possui inmeras ferramentas com interface grca baseada em janelas
como a do Windows adquiridas separadamente: algumas gratuitas, outras no.
Diante das palavras Enter password: (Entre com a senha:) digite root
(com letras minsculas). Essa a senha padro inicial para o usurio de
mesmo nome: root. Logicamente, em uma organizao, a senha no pode
permanecer com esse valor. Mesmo porque o usurio root o que apresen-
ta maior nvel de autorizao no MySQL.
Aps digitar root e teclar <ENTER> podemos criar um BD novo com a sintaxe:
SHOW DATABASES;
Note que a senha informada pelo usurio diante dos dizeres Enter Password:
mascarada por caracteres * (um para cada caractere da senha). Essa uma
medida de segurana, pois os comandos executados no MySQL permanecem
visveis na tela do computador, e podem ser visualizados por qualquer pessoa
que passe no momento.
t Alerta que cada comando no MySQL deve ser nalizado com um ponto
e vrgula ou uma contrabarra seguida do caractere g (Commands
end with ; or \g.).
GENERO
OBRA
ID_GENERO
NR_OBRA
DESCRICAO
GENERO.ID_GENERO
AUTORIA
OBRA.NR_OBRA
AUTOR.ID_AUTOR
LIVRO
NR_LIVRO
AUTOR
DATA_AQUISICAO
EDICAO ID_AUTOR
OBRA.NR_OBRA
EDITORA.ID_EDITORA NOME
MOVIMENTACAO
EDITORA USUARIO.MATRICULA
LIVRO.NR_LIVRO
ID_EDITORA USUARIO
DATA_EMPRESTIMO
NOME_FANTASIA MATRICULA
DATA_PREVISTA
DATA_DEVOLUCAO NOME
SEXO
DATA_NASCIMENTO
ENDERECO
O CHAR, por outro lado, um tipo de dado mais antigo e menos otimiza-
do. O armazenamento do contedo Ana Souza de nove caracteres
em uma coluna CHAR de tamanho 45 caracteres, ir efetivamente ocupar
o espao de armazenamento relativo a todos os 45 caracteres. Nenhuma
economia de espao em disco ocorrer, pois o espao de 36 caracteres no
utilizado ainda estar reservado para a coluna.
Note que a coluna ID_AUTOR foi denida como do tipo inteiro (INTEGER),
de preenchimento obrigatrio (NOT NULL) e como chave primria simples
da tabela AUTOR (PRIMARY KEY). O tipo inteiro aceita apenas valores
numricos inteiros. Letras, smbolos, espao em branco e mesmo nmeros
reais com casas decimais no so aceitos como valores vlidos. A coluna
NOME foi denida como do tipo VARCHAR de tamanho 40 caracteres e
preenchimento obrigatrio (NOT NULL).
DESCRIBE <NOME_TABELA>;
Seja qual for a forma escolhida para a criao da tabela EDITORA, o coman-
do DESCRIBE nos revelar a estrutura da Figura 4.5 a seguir.
At aqui criamos tabelas sem chaves estrangeiras. Isso foi proposital, pois
quando denirmos a chave estrangeira da tabela OBRA, por exemplo, a ta-
bela GENERO necessariamente j dever existir em nosso BD. Somente assim
poderemos estabelecer o relacionamento entre a coluna ID_GENERO da ta-
bela GENERO e a coluna ID_GENERO da tabela OBRA (ver Figura 4.3). Uma
forma alternativa seria criar as tabelas OBRA e GENERO sem estabelecer o
relacionamento no ato da criao de OBRA. Esse relacionamento somente
seria feito em um momento posterior pela alterao da tabela OBRA por
meio do comando ALTER TABLE (que ser abordado mais adiante).
Note que a coluna Key (Chave) para ID_GENERO apresenta o valor NULL
indicando seu carter de chave que aceita valores mltiplos. Em sua tabela
de origem GENERO esse campo uma chave primria e, portanto, no
aceita valores duplicados: no pode existir mais de um registro na tabela
com o mesmo valor. Porm, em OBRA, esse campo no a chave primria,
mas sim a chave estrangeira. Por isso, pode apresentar inmeros registros
com o mesmo valor.
Mais uma vez, temos duas chaves estrangeiras em uma tabela. Na verdade,
poderiam existir tabelas com um nmero bem maior de chaves estrangeiras,
mas as novidades desse comando SQL de criao de tabela so:
A coluna (campo) MULTA foi denida como sendo NUMERIC(5,2). Esse tipo
de dado aceita nmeros com casas decimais. Nesse caso o valor numrico
tem capacidade para armazenar at cinco casas, sendo duas aps a vrgula.
Portanto, o valor mximo que pode ser armazenado 999,99 um valor
bem alto para uma multa de biblioteca.
O comando DROP TABLE deve ser usado sempre que quisermos apagar
uma tabela completamente: seus registros e sua estrutura.
1. Escreva comandos SQL para (1) criar um Banco de Dados de nome loja;
(2) abrir esse mesmo Banco de Dados e (3) criar tabelas conforme o
especicado pelo diagrama abaixo. Utilize o bom senso para denir os
tipos de dados para cada coluna.
ITEM_PEDIDO PEDIDO
NR_PEDIDO NR_PEDIDO
NR_PRODUTO
DATA_PEDIDO
PRECO_UNITARIO CLIENTE.NR_CLIENTE
QUANTIDADE
PRODUTO CLIENTE
NR_PRODUTO NR_CLIENTE
NOME NOME
PRECO_UNITARIO CNPJ
QUANT_ESTOQUE
Figura 4.10: Diagrama MRN de PEDIDO de CLIENTE
Fonte: Elaborada pelo autor
ERROR 1452 (23000): Cannot add or update a child row: a foreign key cons-
traint fails (`biblioteca/obra`, CONSTRAINT `obra_ibfk_1` FOREIGN KEY (`ID_
GENERO`) REFERENCES `genero` (`ID_GENERO`))
Note que o mesmo foi feito no comando acima. Para inserir um novo regis-
tro de OBRA, omitimos a lista de campos, mas informamos explicitamente
o valor de NR_OBRA = 5. De outra maneira, mesmo apesar do atributo
AUTO_INCREMENT dessa coluna, esse comando resultaria em um erro.
CLIENTE
NR_CLIENTE NOME CNPJ
1 Casas Gonalves Ltda 111.222.445-8
2 Sisne Informtica 212.331.890-0
PEDIDO
NR_PEDIDO DATA_PEDIDO NR_CLIENTE
1001 22-09-2009 1
1023 03-10-2009 2
1024 03-10-2009 1
2. Explique por que, uma vez feitas as inseres de registros do item ante-
rior, as seguintes inseres seriam impossveis:
PEDIDO
NR_PEDIDO DATA_PEDIDO NR_CLIENTE
1001 30-01-2010 1
1099 31-01-2010 9
Para afetar uma nica linha (registro) da tabela usamos uma condio base-
ada em sua chave primria (WHERE NR_OBRA = 4), onde apenas o registro
com NR_OBRA igual a 4 deveria ser alterado. Como uma chave primria no
pode conter valores duplicados, temos a certeza de que apenas dois resulta-
dos so possveis:
1. Um nico registro ser alterado (caso exista um registro com NR_OBRA = 4);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key cons-
traint fails (`Biblioteca/Obra`, CONSTRAINT `obra_ibfk_1` FOREIGN KEY (`ID_
GENERO`) REFERENCES `GENERO` (`ID_GENERO`))
A clusula SET do comando UPDATE pode ser empregada para alterar mais
de uma coluna simultaneamente.
Com base nas tabelas (Figura 4.16), informe quantos registros (linhas) sero
alterados pelos seguintes comandos.
ALUNO
MATRICULA NOME SEXO ID_CURSO
1 Ado Montenegro M INF
2 Snia Lopes F SAN
3 Mariana Andrade Lopes F INF
4 Srgio Gomes Xavier M COM
5 Tmara Montenegro F ECO
CURSO
ID_CURSO NOME_CURSO
COM Contabilidade
ECO Economia
INF Informtica
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key
constraint fails (`biblioteca`.`obra`, CONSTRAINT `obra_ibfk_1` FOREIGN KEY
(`ID_GENERO`) REFERENCES `genero` (`ID_GENERO`))
Figura 4.17: Contedo da tabela GENERO aps uma tentativa de excluso de registro
Fonte: Elaborada pelo autor
Suponha que a tabela OBRA esteja com os registros da Figura 4.15 (des-
considerando todas as alteraes feitas aps sua exibio com o comando
SELECT). Caso executemos o seguinte comando SQL:
Resumo
Nesta aula abordamos os comandos da linguagem de denio e manipu-
lao de dados da SQL, que surgiu na dcada de 1970 e tornou-se padro
para BDs nos anos 1980. Demos especial destaque para os comandos de
criao, alterao e excluso de tabelas; denio de relacionamentos entre
tabelas; alm de comandos SQL para a insero, alterao e excluso de
registros em tabelas. Tambm utilizamos comandos para criar BDs e efetuar
consultas simples. Entretanto a prxima aula ser exclusivamente para a ge-
rao de consultas bsicas e avanadas por meio da SQL.
Atividades de aprendizagem
Qual o risco que corremos quando esquecemos a clusula WHERE em
uma instruo DELETE?
Objetivos
At aqui (1) criamos um BD, (2) construmos tabelas dentro desse BD, (3)
inserimos e alteramos registros nessas mesmas tabelas e delas os exclumos.
Porm, de nada adianta escrever dados em tabelas se no sabemos como
ler ou recuperar esses dados. Isso feito por meio de consultas SQL.
A clusula SELECT serve para denir as colunas que tero seus valores exibi-
dos na consulta e a ordem de apresentao dessas colunas. A clusula FROM,
por sua vez, serve para indicar as tabelas de origem das referidas colunas.
O mesmo vale para a consulta da Figura 5.2, que exibe todos os registros da
tabela OBRA sem erros, antes das modicaes e excluses.
Note que a coluna ID_GENERO foi omitida na clusula SELECT e seus dados no
aparecem no resultado da consulta. Os dados de TITULO tambm so apresen-
tados antes de NR_OBRA, conforme sequncia determinada pelo SELECT.
SELECT <LISTA-COLUNAS>
FROM <LISTA-TABELAS>
ORDER BY <LISTA-COLUNAS>;
Figura 5.5: Resultado de uma consulta com a Clusula ORDER BY ... DESC
Fonte: Elaborada pelo autor
MEDICO ESPECIALIDADE
AGENDA CONVENIO
inteiro
DATA data ID_CONVENIO
ID_MEDICO inteiro
texto (60)
ID_CLIENTE inteiro NOME
ID_CONVENIO numero
VALOR_CLIENTE moeda
VALOR_CONVENIO moeda
CLIENTE
ID_CLIENTE inteiro
A clusula WHERE deve estar sempre aps o SELECT e FROM. Quando hou-
ver ORDER BY o WHERE dever ser posto antes dele. Assim, teramos a
seguinte sintaxe:
SELECT <LISTA-COLUNAS>
FROM <LISTA-TABELAS>
WHERE <CONDIES>
ORDER BY <LISTA-COLUNAS>;
A consulta SQL da Figura 5.10 lista os registros da tabela OBRA, com todas
as suas colunas onde ID_GENERO = LIT.
Figura 5.10: Resultado da consulta de registros da tabela OBRA limitados por gnero
Fonte: Elaborada pelo autor
Figura 5.11: Resultado da consulta de registros da tabela OBRA limitado por ttulo
Fonte: Elaborada pelo autor
Para fazermos uma consulta por valor parcial de uma coluna do tipo
VARCHAR ou CHAR, devemos utilizar o operador LIKE no lugar do =.
A consulta da Figura 5.12 fez uma busca por TITULO que comece com A
HISTORIA. O caractere curinga % indica que qualquer contedo pode
estar nessa posio. Portanto, o argumento A HISTORIA% indica um con-
tedo apenas comeado com A HISTORIA.
Uma pesquisa mais ampla pode ser feita empregando duas vezes o caractere
curinga. Na consulta da Figura 5.13, procuramos por registros da tabela OBRA
em que TITULO tenha %SISTEMA% em qualquer parte de seu contedo.
a) Exibir nome e data de nascimento para todo cliente do sexo feminino (F).
b) Exibir todas as informaes dos clientes cujo nome termine com Silva.
No comando a seguir:
Falha em razo de misturarmos pelo menos uma coluna com a funo sem
utilizar a clusula GROUP BY. Anteriormente, no houve necessidade da
clusula GROUP BY. Porm, se a referida funo estiver acompanhada de
pelo menos uma coluna no SELECT, a linguagem SQL exige a incluso do
GROUP BY acompanhado das colunas que precedem a funo SELECT.
Existem ainda outras funes que merecem ateno. A funo MAX( ), por
exemplo, retorna o maior valor existente em uma determinada coluna infor-
mada nos parnteses.
Existe tambm uma funo MIN( ) que retorna o menor valor de uma coluna
de tipo numrico (INTEGER, NUMERIC e DECIMAL) como mostra a Figura
5.23 a seguir.
Na Figura 5.25, o resultado da soma das multas agrupado (GROUP BY) por
MATRICULA. Assim, temos que o usurio com MATRICULA 103 pagou R$
70,00, enquanto o 104 pagou R$ 80,00. O somatrio resulta em R$ 150,00
o valor da consulta da Figura anterior (Figura 5.24).
Figura 5.28: Resultado da separao das partes que compem a data de nascimento
Fonte: Elaborada pelo autor
Existem ainda outras funes de data que o SGBD MySQL disponibiliza. Den-
tre elas h a funo CURDATE( ), que retorna a data corrente (data atual
fornecida pelo sistema). Na consulta da Figura 5.30 calculamos a idade de
cada USUARIO. Para tanto, utilizamos a funo RIGHT( ), alm da funo
CURDATE( ). A expresso YEAR(CURDATE( )) retorna o ano atual no caso,
2009. Analogamente, a expresso YEAR(DATA_NASCIMENTO) retorna o
ano de nascimento do USUARIO. Note que, na clusula SELECT, o ano de
nascimento subtrado do ano atual, na expresso:
(YEAR(CURDATE( )) YEAR(DATA_NASCIMENTO))
Apesar de nenhuma mensagem de erro ser exibida, a consulta a seguir est lon-
ge do que classicaramos como bem-sucedida. Eis um tipo de erro muito peri-
goso. Se no tivermos ateno, nem mesmo percebemos sua ocorrncia. Repa-
re que para cada TITULO de OBRA, nossa consulta estabeleceu uma ligao com
toda DESCRICAO de GENERO existente. Assim, por exemplo, HELENA apare-
ce classicada como AUTOAJUDA, DIDATICO E TECNICO, DIVULGACAO
CIENTIFICA, LITERATURA e RELIGIOSO. Porm, na prtica sabemos que
a famosa obra de Machado de Assis no pode ser tudo isso simultaneamente.
Em nosso BD ela foi cadastrada como uma OBRA do GENERO LITERATURA.
A clusula FROM recebeu como acrscimos as tabelas LIVRO (L) e OBRA (O).
Precisamos das duas tabelas para exibir a coluna TITULO. Em WHERE, a condio
M.NR_LIVRO = L.NR_LIVRO fora o relacionamento entre MOVIMENTACAO
e LIVRO. Todavia, a coluna TITULO no est em LIVRO, mas sim em OBRA. Por-
tanto, devemos tambm forar o relacionamento entre as tabelas LIVRO e
OBRA, atravs da condio L.NR_OBRA = O.NR_OBRA.
Resumo
Nesta aula tratamos de variados tipos de consultas SQL envolvendo apenas
uma tabela ou vrias tabelas simultaneamente, utilizando funes especiais
como COUNT, SUM, MAX, MIN, AVG, CURDATE, YEAR, MONTH e DAY. Vi-
mos tambm como denir as colunas das tabelas que devem ser visualizadas
pela clusula SELECT da SQL. Tambm abordamos como ltrar os registros
que devem aparecer pela clusula WHERE e como ordenar o resultado nal
da consulta pela clusula ORDER BY. Usamos tambm o operador LIKE para
consultas aproximadas de substrings.
Atividades de aprendizagem
Novamente, utilizando as tabelas de agendamento de consultas mdicas,
descreva o comando SQL para as seguintes consultas:
Objetivos
Agora, alm de root tambm temos um usurio chamado COMUM com senha
1234. Ele no est autorizado a excluir registros (DELETE) de nenhuma tabela
do Banco de Dados EXEMPLO, pois simplesmente lhe omitimos esse privilgio.
C:\>DIR *.
O volume na unidade C ACER
O nmero de srie do volume 406D-517A
Pasta de C:\
0 arquivo(s) 0 bytes
10 pasta(s) 120.542.089.216 bytes disponveis
C:\>
O MySQL est dentro do diretrio (ou pasta) Arquivos de Programas. Por isso,
vamos entrar nesse diretrio com o comando cd Arquivos de Programas.
C:\Arquivos de programas>dir *.
O volume na unidade C ACER
O nmero de srie do volume 406D-517A
Pasta de C:\Arquivos de programas
0 arquivo(s) 0 bytes
9 pasta(s) 120.522.969.088 bytes disponveis
C:\Arquivos de programas>
0 arquivo(s) 0 bytes
3 pasta(s) 120.522.416.128 bytes disponveis
C:\Arquivos de programas\mysql>
mysql>
Conrmado: o usurio COMUM no pode mais efetuar uma simples consulta re-
lacionada tabela FILMES (revogamos seus privilgios com o comando REVOKE).
COMUM tambm no mais pode inserir novos registros na tabela FILMES. Tam-
bm no pode faz-lo com a viso FILMES_NOVOS. O nico outro privilgio de
segurana que lhe restou o de alterar registros de FILMES_NOVOS (Figura 6.4).
Resumo
Nesta aula tratamos de questes relacionadas segurana da informao em
um Banco de Dados MySQL. Mais uma vez no esgotamos o assunto, mas
vimos como alterar a senha do administrador do Banco de Dados, como criar
novas contas de usurios e denir seus privilgios de segurana diferenciada-
mente. Tambm vimos como criar e utilizar as vises em um Banco de Dados.
Atividades de aprendizagem
Considere uma tabela de nome FUNCIONARIO com as seguintes colunas:
a) criar uma viso chamada FUNC em que no seja possvel visualizar a SE-
NHA e o SALARIO de qualquer funcionrio e nem os dados daqueles que
trabalham nos setores 1, 2 e 3.
b) criar nova conta de usurio com privilgios apenas para consultar e inse-
rir novos registros em FUNC.
Aula 7 Procedimentos
Armazenados e Gatilhos
Objetivos
mysql> DELIMITER ;
mysql> DELIMITER //
mysql> DELIMITER ;
O operador INTO usado nas clusulas SELECT armazena os resultados lidos nos
respectivos parmetros de sada. No comando SELECT MAX(BILHETERIA)
INTO MAIOR_BIL, por exemplo, o operador INTO armazena o valor en-
contrado da maior bilheteria no parmetro MAIOR_BIL.
mysql> DELIMITER //
mysql> DELIMITER ;
mysql> DELIMITER //
mysql> DELIMITER ;
O comando da Figura 7.4 gera os resultados somente para o ano de 2009. Caso
pretendamos exibir os resultados para o ano de 1972, devemos chamar o pro-
cedimento BILHETERIA_ANO com o ano de 1972 como parmetro (Figura 7.5).
Como existe apenas um lme com ANO de produo igual a 1972, os resul-
tados para MAIOR_BILHETERIA, MENOR_BILHETERIA e MEDIA_BILHETERIA
na Figura 7.5 so idnticos (R$ 600.000,00).
Para transferir uma quantia de uma conta para outra, vamos criar um proce-
dimento armazenado, conforme especicado logo abaixo.
mysql> DELIMITER //
mysql> DELIMITER ;
Ento uma mensagem exibida na tela informando que uma quantia igual a
VALOR foi retirada da CONTA_CORRENTE de nmero igual a CONTA_ORIGEM.
7.3 Gatilhos
Os gatilhos (triggersse) diferenciam dos procedimentos armazenados
Gatilhos (triggers)
So rotinas armazenadas por no necessitarem do comando CALL para sua execuo; ela ca con-
que, associadas a eventos dicionada ocorrncia de um evento predenido. Ao ocorrer, o gatilho
percebidos automaticamente
pelo MySQL, no precisam ser disparado automaticamente.
invocadas explicitamente pelo
usurio para serem executadas.
Quando o evento programado Vamos criar duas novas tabelas em nosso BD EXEMPLO: PRODUTO e VENDA.
acontece, o gatilho disparado
automaticamente.
mysql> CREATE TABLE PRODUTO (
-> ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> NOME VARCHAR(40) NOT NULL,
-> ESTOQUE INTEGER NOT NULL,
-> PRECO NUMERIC(6,2));
Query OK, 0 rows affected (0.02 sec)
mysql> DELIMITER //
ID = NEW.ID;
-> UPDATE PRODUTO SET ESTOQUE = @VELHO_ESTOQUE - NEW.
QUANTIDADE WHERE ID = NEW.ID;
-> END//
Query OK, 0 rows affected (0.06 sec)
mysql> DELIMITER ;
Figura 7.11: Contedo das tabelas VENDA e PRODUTO aps a venda de dez DVD players
Fonte: Elaborada pelo autor
Para o nosso prximo exemplo de gatilho, precisamos criar uma tabela para
armazenar alteraes efetuadas em registros da tabela FILMES.
mysql> DELIMITER //
mysql> DELIMITER ;
mysql> DELIMITER //
mysql> DELIMITER ;
Figura 7.15: Contedo das tabelas FILMES e FILMES_LOG aps excluso de registro
Fonte: Elaborada pelo autor
Resumo
Nesta aula aprendemos a criar rotinas em BDs: procedimentos armazenados
(Stored Procedure) ou gatilhos (Triggers). Tambm tratamos da convenincia do
uso dessas rotinas. Vimos que enquanto um procedimento armazenado deve
ser explicitamente invocado para que seja executado, os gatilhos so associados
a eventos de BDs, no precisando da instruo CALL; eles so executados, au-
tomaticamente, pelo SGBD antes ou depois da ocorrncia de um dado evento.
Atividades de aprendizagem
Crie um gatilho (trigger) a ser disparado sempre que uma excluso for
efetuada na tabela FUNCIONARIO (a mesma Atividade do nal da Aula
6). O gatilho dever armazenar os dados do registro excludo na tabela
FUNCIONARIOS_EXCLUIDOS, a qual dever apresentar as seguintes colunas:
Objetivos
INDICE FUNCIONARIO
NOME LOCALIZAO ID NOME SEXO SETOR
Andressa Alves 1007 Andressa Alves F 3
Pedro Souza 1015 Bernardo Souto M 3
Walter Silva 1021 Cludio Silva M 2
1022 Pedro Souza M 1
1023 Peterson Frei M 3
1024 Paula Ramos F 5
1029 Walter Silva M 1
1055 Woney Speran M 5
SELECT *
FROM FUNCIONARIO
WHERE NOME = WOLNEY SPERAN;
SELECT *
FROM FUNCIONARIO
WHERE NOME = PEDRO SOUZA;
Vamos supor que a tabela ARTISTA j tivesse sido criada sem a denio de
um ndice para a coluna NOME.
mysql> CREATE TABLE ARTISTA (ID INTEGER NOT NULL PRIMARY KEY
AUTO_INCREMENT, NOME VARCHAR(40) NOT NULL);
Query OK, 0 rows affected (0.13 sec)
Resumo
Nesta aula destacamos a importncia dos ndices (index) para a tecnologia
de BD. Vimos como criar ndices ainda durante a criao de tabelas e como
cri-los posteriormente, alterando a denio das tabelas.
Atividades de aprendizagem
A tabela com nome EXAME_ LABORATORIAL apresenta cinco colunas (Fi-
gura 8.3). So elas: ID_EXAME (Identicador do Exame nossa chave pri-
mria), COD_AMB (cdigo usado pela Associao Mdica Brasileira para
identicar o exame), NOME_CIENTIFICO, NOME (o nome abreviado do exa-
me) e DESCRICAO_MATERIAL (descrio do material utilizado n o exame:
sangue, fezes, urina, etc.).
EXAME_LABORATORIAL
ID_EXAME
COD_AMB
NOME_CIENTIFICO
NOME
DESCRICAO_MATERIAL
Figura 8.3: Exemplo de tabela de EXAME_LABORATORIAL
Fonte: Elaborado pelo autor
Objetivos
Quando uma transao completa sua execuo com sucesso, dizemos que
ela foi compromissada. Por outro lado, quando no consegue concluir sua
Transao execuo com sucesso, a transao assume a condio de abortada. A
Pode ser denida como um
conjunto de comandos de regra da atomicidade exige que todas as aes perpetradas por uma tran-
programao que, aps sua sao abortada devem ser desfeitas, de maneira que essa transao no
execuo, ainda preserva a
consistncia do BD. Caso o BD tenha efeito sobre o estado do Banco de Dados.
estivesse consistente antes da
execuo da transao, podemos
estar certos de que permanecer Para assegurar a consistncia dos dados, transaes costumam implementar
consistente aps sua execuo.
Conforme Korth, Silberschatz um histrico incremental com atualizaes adiadas. Considere nosso exem-
e Sudarshan (2006), toda plo da venda de um notebook quando, antes da venda ser efetuada, a situ-
transao atmica: ou todas
as instrues de uma transao ao no BD fosse a da Figura 9.1.
so executadas, ou ento
nenhuma delas . A possibilidade
de apenas parte das instrues PRODUTO LOG DO SISTEMA
associadas transao ser
executada simplesmente DESCRICAO ESTOQUE
inexistente. uma questo de Notebook 20
tudo ou nada.
TV Plasma 13
VENDA
A transao T1 foi iniciada, mas ainda no foi concluda. Ento o caixa regis-
tra a venda do notebook (um registro deve ser gravado na tabela VENDA).
Porm, antes que isso acontea, um novo registro inserido no arquivo de
LOG_DO_SISTEMA, informando a insero na tabela de VENDA.
VENDA
VENDA
Suponha que uma falha grave ocorra nesse exato momento e o BD tenha
de ser reiniciado. A transao ainda no foi compromissada e o BD tem
conscincia de sua condio, pois h um registro <T1, INICIO> no arquivo
LOG_DO_SISTEMA, mas no um registro <T1, FIM>. Portanto, a transao
no foi concluda/compromissada.
Ento, o BD aborta a transao T1. Contudo, nenhuma transao deve ser ape-
nas parcialmente executada como determina a regra do tudo ou nada. As-
sim, o BD cancela todas as operaes executadas por T1. No arquivo LOG_DO_
SISTEMA encontra uma referncia incluso de um registro na tabela VENDA.
Contudo, como no encontra esse registro na tabela, no precisa exclu-lo.
VENDA
1 Notebook 1
VENDA
1 Notebook 1
Por essa razo, caso uma falha ocorra nesse momento, o Banco de Dados
ainda ir desfazer todas as operaes associadas a T1. Ao ler o registro <T1,
Venda, <IT>Notebook<IT>, 1> o Banco de Dados entender que deve
excluir o registro de VENDA relativo ao Notebook. Por sua vez, ao ler o re-
gistro <T1, Produto, <IT>Notebook<IT>, 20, 19> o banco resolve alterar
o registro de PRODUTO relativo ao Notebook, substituindo o novo valor de
ESTOQUE (=19) pelo velho valor da mesma coluna (=20) (Figura 9.6).
Dessa forma, todas as operaes levadas a cabo pela transao T1 sero des-
feitas. Para todos os efeitos, como se a transao jamais tivesse existido.
O Banco de Dados permanece consistente, pois o ESTOQUE ter um valor
condizente com a realidade.
PRODUTO
LOG_DO_ SISTEMA
DESCRICAO ESTOQUE <T1, INCIO>
Notebook 19 <T1, Venda, Notebook, 1>
TV Plasma 13 <T1, Produto, Notebook, 20, 19>
VENDA
1 Notebook 1
PRODUTO LOG_DO_SISTEMA
DESCRICAO ESTOQUE <T1, INCIO>
Notebook 19 <T1, Venda, Notebook, 1>
TV Plasma 13 <T1, Produto, Notebook, 20, 19>
<T1, FIM>
VENDA
1 Notebook 1
SET AUTOCOMMIT=0
SET AUTOCOMMIT=1
Resumo
Nesta aula conhecemos o importante conceito de transao em Banco de
Dados. Notamos como essa tecnologia de vital importncia para a integri-
dade dos dados e para aquelas situaes em que devemos garantir que os
dados de diferentes tabelas sejam modicados simultaneamente. Em tais
situaes ou todas as tabelas envolvidas so atualizadas ou nenhuma delas
deve ser atualizada. Tambm exploramos a sintaxe SQL para a implemen-
tao de transaes em Bancos de Dados MySQL. Como visto na atividade
proposta ao nal desta aula, as transaes podem ser utilizadas em procedi-
mentos armazenados ou gatilhos.
Atividades de aprendizagem
Na Aula 7, foi apresentado um exemplo de procedimento armazenado (stored
procedure) para a transferncia de valores de uma conta-corrente para outra.
-> COMMIT;
Referncias
CHEN, Peter. Modelagem de dados: a abordagem entidade-relacionamento para
projeto lgico. Traduo de Ceclia Camargo Bartalotti. So Paulo: Makron Books, 1990.
HEUSER, Carlos Alberto. Projeto de Banco de Dados. Porto Alegre: Sagra Luzzato, 2004.
Currculo do professor-autor
Vanderson Jos Ildefonso Silva mestre em Informtica pela Universidade
Federal do Esprito Santo (UFES). Graduado em Cincias Econmicas e ps-
-graduado em Anlise de Sistemas pela mesma Instituio de Ensino Superior.
Atua na educao a distncia desde 2009, inicialmente como professor es-
pecialista e conteudista da disciplina de Economia e Finanas (CEAD) e pos-
teriormente como professor especialista e conteudista da disciplina de Banco
de Dados (e-Tec). Tambm professor do IFES (Campus Colatina) desde 1996,
trabalhando nos Cursos Tcnicos de Informtica, Superior em Tecnologia de
Redes de Computadores e Bacharelado em Sistemas de Informao.