Académique Documents
Professionnel Documents
Culture Documents
br
Banco de Dados
Vanderson Jos Ildefonso Silva
Colatina - ES
2011
Banco de Dados.indb 1
20/06/12 20:01
www.cliqueapostilas.com.br
Design Instrucional
Gustavo Pereira Mateus/UFSC
Coordenao do Curso
Allan Francisco Forzza Amaral/IFES
Web Master
Rafaela Lunardi Comarella/UFSC
Professores-autores
Vanderson Jos Ildefonso Silva/IFES
Web Design
Beatriz Wilges/UFSC
Mnica Nassar Machuca/UFSC
Diagramao
Andr Rodrigues/UFSC
Brbara Zardo/UFSC
Juliana Tonietto/UFSC
Nathalia Takeuchi/UFSC
Reviso
Jlio Csar Ramos/UFSC
Projeto Grco
e-Tec/MEC
S586b
INSTITUTO
FEDERAL
RIO GRANDE
DO SUL
Banco de Dados.indb 2
ISBN: 978-85-62934-73-5
1. Banco de dados. 2. Informtica. I. Instituto Federal do Esprito
Santo. II. Ttulo.
CDD: 005.74
20/06/12 20:01
www.cliqueapostilas.com.br
3
Banco de Dados.indb 3
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 4
20/06/12 20:01
www.cliqueapostilas.com.br
Indicao de cones
Os cones so elementos grcos utilizados para ampliar as formas de
linguagem e facilitar a organizao e a leitura hipertextual.
Ateno: indica pontos de maior relevncia no texto.
5
Banco de Dados.indb 5
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 6
20/06/12 20:01
www.cliqueapostilas.com.br
Sumrio
Palavra do professor-autor
Apresentao da disciplina
11
Projeto instrucional
13
17
17
21
22
23
35
37
42
2.3 Generalizao/especializao
de entidades
47
48
51
51
57
60
69
69
4.2 MySQL
71
72
74
88
94
98
7
Banco de Dados.indb 7
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
105
109
112
119
124
128
130
136
141
141
142
159
159
161
163
Banco de Dados.indb 8
127
127
e-Tec Brasil
103
103
165
165
170
Referncias
174
Currculo do professor-autor
175
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Palavra do professor-autor
Ol caro estudante!
A tecnologia de Bancos de Dados quase onipresente em sistemas de informao. Pode ser encontrada em sites de comrcio eletrnico e sistemas de
georreferenciamento. Muitas vezes utilizamos um Banco de Dados indiretamente e sem perceber. Por exemplo, sempre que fazemos uso da mquina de
busca do Google ou mesmo do Google Maps, acessamos um Banco de Dados.
Banco de dados uma fascinante rea de estudo. impossvel no se deixar
contagiar por sua elegncia e potencial tecnolgico. Porm, devo lembr-lo
que cada novo conhecimento adquirido encontra-se intimamente associado ao abordado anteriormente. Portanto, no acumule conceitos e tcnicas
sem a devida cota de estudo dirio. O fraco entendimento de um contedo
pode resultar em grave diculdade de assimilao do seguinte. Organize o
seu estudo e mantenha-se atualizado com o desenvolvimento das aulas.
Assim como nas disciplinas de programao de computadores, em Banco
de Dados somente possvel aprender fazendo. Logo, importante que
se esforce na resoluo dos exerccios propostos e at se aventure em voos
solo. Estou certo de que inmeras ideias e possibilidades aparecero em sua
mente medida que for se aprofundando nos conceitos e tcnicas apresentados. Vale a pena dar vazo sua criatividade. Talvez trabalhe em alguma
atividade que possa se beneciar com a criao de um Banco de Dados
adaptado sua realidade, ou talvez de uma empresa de um conhecido.
Apenas ler este material sem praticar os contedos no trar os resultados
que eu e voc esperamos.
Bons estudos!
Vanderson Jos Ildefonso Silva
9
Banco de Dados.indb 9
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 10
20/06/12 20:01
www.cliqueapostilas.com.br
Apresentao da disciplina
Nesta disciplina voc ser apresentado aos conceitos bsicos de Bancos de Dados e aprender a empreg-los como uma importante ferramenta para a manuteno 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.
Embora j seja uma tecnologia madura, com dcadas de existncia, ainda
demonstra grande valor como suporte a tecnologias mais recentes, como de
Data Warehouse (Armazm de Dados) e Data Mining (Minerao de Dados), e
imprescindvel para grande parcela dos prossionais da rea de informtica.
Este material tem como objetivo orient-lo no estudo da disciplina Banco
de Dados, por meio de dicas e sugestes, com destaque para os aspectos
mais importantes. Aqui voc encontrar conceitos com os quais trabalharemos ao longo do curso, o que no dispensa, claro, a utilizao de outros
livros tambm usados para a confeco deste trabalho, que trazem diversos
exemplos adicionais e aprofundamento maior em vrios aspectos. importante esclarecer que esses outros livros foram consultados para complementar alguns conceitos, a m de facilitar o seu entendimento, e constam nas
referncias deste material.
Bons Estudos!
Prof. Vanderson Jos Ildefonso Silva
11
Banco de Dados.indb 11
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 12
20/06/12 20:01
www.cliqueapostilas.com.br
Projeto instrucional
Disciplina: Banco de Dados (carga horria: 90 horas).
Ementa: Arquitetura de Sistemas Gerenciadores de Banco de Dados. Modelo de Dados. Integridade Referencial. Linguagens de Denio, Manipulao
e Controle de Dados. Segurana e Integridade. Controle de Transaes.
AULA
OBJETIVOS DE
APRENDIZAGEM
MATERIAIS
CARGA
HORRIA
(horas)
1. Conceitos de
Banco de Dados
10
2. Modelagem de
Dados: MER
10
3. Modelagem de
Dados: MRN
DB Designer.
10
(continua)
13
Banco de Dados.indb 13
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
AULA
OBJETIVOS DE
APRENDIZAGEM
MATERIAIS
CARGA
HORRIA
(horas)
4. Criao de um
Banco de Dados
SGBD MySQL.
10
5. Consultas SQL
SGBD MySQL.
10
6. Segurana da
Informao
SGBD MySQL.
10
(continua)
e-Tec Brasil
Banco de Dados.indb 14
14
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
AULA
7. Procedimentos
Armazenados e
Gatilhos
8. Criao de
ndices
9. Transaes em
Banco de Dados.
OBJETIVOS DE
APRENDIZAGEM
- Diferenciar um procedimento armazenado de um gatilho.
- Identicar situaes em que justicada a utilizao de procedimentos
armazenados e gatilhos.
- Criar procedimentos armazenados.
- Executar procedimentos armazenados.
- Apagar procedimentos armazenados.
- Efetuar passagens de parmetros em
procedimentos armazenados.
- Criar gatilhos que disparem antes ou
aps um evento.
- Denir o conceito de ndice no
contexto da tecnologia de Banco de
Dados.
- Descrever a importncia dos ndices
para os sistemas de Bancos de Dados.
- Criar ndices durante a criao das
tabelas.
- Criar novos ndices alterando tabelas
existentes.
- Conceituar transao no contexto dos
sistemas de Banco de Dados.
- Implementar transaes no SGBD
MySQL atravs de comandos SQL.
MATERIAIS
CARGA
HORRIA
(horas)
SGBD MySQL.
10
SGBD MySQL.
10
SGBD MySQL.
10
(concluso)
15
Banco de Dados.indb 15
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 16
20/06/12 20:01
www.cliqueapostilas.com.br
1.1 Denio
A humanidade sempre se dedicou produo de signos. Um signo ou smbolo 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.
At hoje, pesquisadores debruam-se sobre pinturas feitas em cavernas h
pelo menos 15.000 anos e debatem sobre seus signicados. Apesar de representarem animais ou cenas de caadas na pr-histria, escapa-nos sua motivao. Faziam parte de algum ritual religioso, eram o registro de uma importante atividade social ou apenas a expresso da subjetividade de seu pintor?
A oralidade primria precede a inveno da escrita e se caracteriza pelo uso
da palavra falada como a nica forma de gerir a memria social das comunidades. A cultura narrativa valorizava as parbolas, fbulas e mitos como
veculos naturais do conhecimento que se pretendia preservar de uma gerao para outra. Histrias e imagens eram associadas a algum fato que se
buscava memorizar.
Banco de Dados.indb 17
17
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 18
18
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
(1) Redundncia e inconsistncia de dados. Equipes de desenvolvedores criam diferentes aplicaes/sistemas ao longo do tempo. De maneira
anloga, em uma mesma organizao, diferentes linguagens de programao, por exemplo, podem ser usadas no desenvolvimento de diversos
sistemas de informaes. Logo, dados distintos podem estar duplicados.
Tal redundncia conduz a altos custos de armazenamento e diculdade
de atualizao das informaes.
(2) Diculdade no acesso aos dados. Dados espalhados em arquivos isolados no apresentam as facilidades de acesso e processamento das informaes dos BD. H pouca exibilidade em relao a demandas que no
tenham sido antecipadas quando o sistema foi projetado. Por exemplo,
uma vez desenvolvido o sistema, caso haja a necessidade de gerar relatrios com os nomes de todos os empregados com idade igual ou superior
a 40 anos, a ausncia de uma aplicao especca para esse objetivo traz
srios inconvenientes. Isso porque quando os usurios do sistema solicitarem esse novo aplicativo, sua implementao demandar tempo e recursos dos programadores para a gerao de um relatrio muito especco
que raramente ser usado. Outra soluo seria conseguir a impresso de
uma listagem com todos os empregados existentes para posterior extrao manual da informao desejada. Essa soluo tambm no satisfatria, pois o trabalho manual est sujeito a erros humanos.
(3) Isolamento de dados. Dados espalhados em diferentes arquivos e formatos dicultam a criao de novos aplicativos para sua recuperao.
Banco de Dados.indb 19
19
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
A tecnologia de BD trouxe
maior produtividade para o
desenvolvimento de sistemas de
informao. Anal, nos sistemas
tradicionais de arquivos, quando
implementadas, as caractersticas
inauguradas com o surgimento
dos BD eram incorporadas s
aplicaes isoladamente. Logo, a
complexidade do desenvolvimento
de sistemas de informao
aumentava consideravelmente,
resultando em:
(1) Prazos maiores para a
concluso dos sistemas de
informao e, consequentemente,
elevao dos custos envolvidos no
desenvolvimento.
(2) Obrigao de as equipes
desenvolvedoras (analistas e
programadores) dedicarem mais
tempo a programas que no
tratavam diretamente do sistema
de informao em questo,
mas sim de funcionalidades
que forneceriam suporte a esse
mesmo sistema.
(3) Ocorrncia de problemas
no previstos, favorecidos pela
ausncia de padronizao das
funcionalidades de suporte.
e-Tec Brasil
Banco de Dados.indb 20
20
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 21
21
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 22
22
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Na Figura 1.1, h um modelo em rede com dois diferentes tipos de registros: cliente e conta. O registro de cliente apresenta trs atributos:
nome, cidade e sexo. Por sua vez, o registro de conta possui apenas dois
atributos: nmero e saldo.
Banco de Dados.indb 23
23
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Nome
Reinaldo Antunes
Cidade
Vitria
Sexo
M
Nome
Marcela Souto
Cidade
Vitria
Sexo
F
Nome
Andr Marques
Cidade
Colatina
Sexo
M
Nmero
1045
Saldo
945,60
Nmero
1385
Saldo
107,00
Nmero
1447
Saldo
93,41
Nmero
1500
Saldo
1.266,00
e-Tec Brasil
Banco de Dados.indb 24
24
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
rvores binrias so um dos temas tratados na disciplina referente Programao em Estrutura de Dados.
Nome
Reinaldo Antunes
Cidade
Vitria
Sexo
M
Nome
Marcela Souto
Nome
Andr Marques
Cidade
Vitria
Cidade
Colatina
Sexo
F
Nmero
1500
Nmero
1045
Saldo
945,60
Nmero
1385
Saldo
107,00
Nmero
1447
Sexo
M
Saldo
93,41
Nmero
1447
Saldo
1.266,00
Saldo
93,41
Banco de Dados.indb 25
25
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
CIDADE
SEXO
Reinaldo Antunes
Vitria
Marcela Souto
Colatina
Andr Marques
Colatina
e-Tec Brasil
Banco de Dados.indb 26
26
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
tabela com os de outra. Caso contrrio, no teramos como saber com preciso a quais clientes cada conta pertence. Porm, as associaes entre registros 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.
Ponteiros tema da disciplina de Programao em Estrutura de Dados.
Na Figura 1.4 temos duas tabelas FILME e GENERO relacionadas entre si
atravs da coluna COD_GENERO. Essa coluna original da tabela GENERO,
mas foi duplicada na tabela FILME para estabelecer uma associao lgica
entre os registros das duas tabelas. Logo, sabemos que o lme Star Trek
classicado como co cientca, pois apresenta o valor FIC em sua
coluna COD_GENERO, e o mesmo valor na coluna correspondente da tabela
GENERO est associada descrio Fico Cientca.
FILME
NUMERO
TITULO
ANO
1099
El Cid
1961
DRA
1100
Star Wars
1977
FIC
1101
Star Trek
2009
FIC
1103
Transformers 2
2009
FIC
COD_GENERO
GENERO
COD_GENERO
DESCRICAO
DRA
Drama
FIC
Fico
Banco de Dados.indb 27
27
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
FILME
NUMERO
TITULO
ANO
1099
El Cid
1961
Drama
1100
Star Wars
1977
Fico - Cientca
1101
Star Trek
2009
Fico
1103
Transformers 2
2009
Fico - Cientca
DESCRICAO_GENERO
e-Tec Brasil
Banco de Dados.indb 28
28
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Cidade
SEXO
10
Reinaldo Antunes
Vitria
15
Marcela Souto
Colatina
37
Andr Marques
Colatina
ID_CLIENTE
CONTAS_CLIENTE
NUMERO_CONTA
CONTA
ID_CLIENTE
NUMERO_CONTA
SALDO
1045
10
1045
945,60
1385
15
1385
107,00
1447
15
1447
93,41
1447
37
1500
1.266,00
1500
37
Banco de Dados.indb 29
29
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
CONTAS_CLIENTE
SALDO
NUMERO_CONTA
ID_CLIENTE
1045
945,60
10
1385
107,00
15
1447
93,41
15
1447
93,41
37
1500
1.266,00
37
Redundncia de
dados (inecincia)
Por outro lado, se optssemos por duplicar NUMERO_CONTA na tabela CLIENTE, teramos outro problema para registrar as duas contas de Marcela Souto
nmeros 1385 e 1447 (Figura 1.8), pois teramos de cadastrar duas linhas
exatamente iguais para Marcela na tabela CLIENTE, exceto pelo contedo da
coluna duplicada de NUMERO_CONTA.
CONTAS_CLIENTE
ID_CLIENTE
NOME
ID_CLIENTE
10
Reinaldo Antunes
Vitria
SEXO
M
1045
15
Marcela Souto
Colatina
1385
15
Marcela Souto
Colatina
1447
37
Andr Marques
Colatina
1447
Andr Marques
Colatina
1500
NUMERO_CONTA
Redundncia de
dados (ineficincia)
Redundncia de
dados (ineficincia)
As consequncias mais srias para essas tentativas equivocadas de relacionamento das tabelas CLIENTE e CONTA seriam:
(1) Uso ineciente dos recursos de armazenamento: redundncia de dados
consumiria desnecessariamente o espao disponvel no disco rgido.
(2) Maior complexidade para a manuteno das informaes: a atualizao
do saldo em uma conta (Figura 1.7) ou a mudana de cidade para um
cliente (Figura 1.8) poderia alterar mais de um registro simultaneamente.
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.
e-Tec Brasil
Banco de Dados.indb 30
30
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 31
31
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Resumo
Nesta aula voc se familiarizou com conceitos bsicos de Banco de Dados.
Esses conceitos sero desenvolvidos com mais detalhes ao longo do material. Vimos como as exigncias modernas de um maior controle sobre os
dados armazenados levaram ao surgimento de sistemas de informao; inicialmente, desenvolvidos como sistemas de arquivos tradicionais que constituam 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 diferentes 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, relacional e o objeto-relacional. Um modelo orientado a objetos esperado para
breve, mas ainda no se estabeleceu no mercado.
e-Tec Brasil
Banco de Dados.indb 32
32
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Atividades de aprendizagem
1. Liste em ordem cronolgica os modelos de BD.
2. Cite causas que levaram ao surgimento do modelo Orientado a Objetos
de BD.
3. Por que BDs orientados a objetos no se tornaram popular no mercado?
Poderamos armar que a tecnologia de BD estagnou no modelo relacional incorporando poucas inovaes desde o incio da dcada de 1970?
4. As tabelas mostradas na Figura 1.9 correspondem ao modelo relacional
de BD.
Funcionarios
Cargos
MATRICULA
NOME
CPF
CARGO
CODIGO
NOME_CARGO
01
Ana
123
02
01
Programador
02
Maria
234
01
02
Topgrafo
03
Jos
245
03
03
Engenheiro
04
Pedro
125
01
5. (FCC 2006 SEFAZ PB Auditor Fiscal de Tributos Estaduais) Um gerenciador de Banco de Dados relacional:
a) Identica a relao entre seus registros a partir de ponteiros no sentido
lho-pai, unicamente.
b) Identica a relao entre dois ou mais registros a partir da sua justaposio.
c) No contempla a denio de dados pertinentes s tabelas.
d) Identica a relao entre seus registros a partir de ponteiros no sentido
pai-lho, unicamente.
e) Deve possibilitar a identicao nica de uma linha de uma tabela.
Banco de Dados.indb 33
33
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 34
20/06/12 20:01
www.cliqueapostilas.com.br
PACIENTE
(2) Atributos: so caractersticas ou propriedades relevantes de uma entidade. Por relevantes destacamos que nem todas as informaes sobre
uma entidade so pertinentes para o modelo: saber qual a cor do cabelo
do paciente ou o time de futebol para o qual um mdico torce em nada
contribui para a marcao de uma consulta. Por outro lado, o nome do
paciente, sua data de nascimento (forma de manter atualizada sua idade), um telefone para contato, o endereo e o sexo so informaes
relevantes para o contexto (Figura 2.2).
Banco de Dados.indb 35
35
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
MEDICO
PACIENTE
NR_CRM
NOME
CELULAR
MATRICULA
NOME
ENDERECO
TELEFONE
CELULAR
GENERO
MEDICO
PACIENTE
atende
MEDICO
PACIENTE
PLANO_DE_SAUDE
Figura 2.4: Relacionamento entre trs entidades (ternrio)
Fonte: Elaborada pelo autor
e-Tec Brasil
Banco de Dados.indb 36
36
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
FUNCIONARIO
coordena
Faa um diagrama que demonstre relacionamentos coerentes entre as seguintes entidades de um restaurante: MESA, PRATO, GARCOM e COMANDA
(pedidos feitos pelos ocupantes da mesa). Indique para cada entidade um
conjunto de atributos adequados.
Marido
Esposa
casa com
Banco de Dados.indb 37
37
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
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 mulheres, mas uma mulher pode ter apenas um homem como marido.
PESSOA
IDENTIFICADOR
NOME
SEXO
IDENTIFICADOR_MARIDO
1
Marido
N
Esposa
casa com
Figura 2.7: Cardinalidade um-para-muitos (1:N)
Fonte: Elaborada pelo autor
e-Tec Brasil
Banco de Dados.indb 38
38
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
PESSOA
IDENTIFICADOR
NOME
SEXO
IDENTIFICADOR_MARIDO
Altair Souza
Karla Silva
Martha Souza
Sueli Souza
Ricardo Vitali
Rita Vitali
ngela Souza
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).
Devemos destacar que a cardinalidade indicada no implica a obrigatoriedade de um homem ter mais de uma esposa. No exemplo, Ricardo tem
apenas uma esposa e poderiam ainda existir homens solteiros.
Considere agora outra sociedade onde os homens podero se casar apenas
com uma mulher, mas uma mulher poder casar-se com muitos homens (poliandria). Nosso MER sofreria uma alterao em sua cardinalidade, deixando
de apresentar um relacionamento um-para-muitos (1:N) para assumir um
relacionamento muitos-para-um (N:1).
A Figura 2.9 o resultado de uma sociedade polindrica. Curiosamente, ela
quase no difere da Figura 2.7. As nicas alteraes perceptveis so a troca
de posies entre N e 1 na indicao da cardinalidade, e a substituio do atributo IDENTIFICADOR_MARIDO pelo IDENTIFICADOR_ESPOSA.
Portanto, a ordem dos fatores inui sobre o resultado nal. O relacionamento agora indica que uma pessoa (Marido) pode casar-se com apenas
uma pessoa (Esposa) e que uma pessoa (Esposa) pode casar-se com
muitas pessoas (Maridos).
Banco de Dados.indb 39
39
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
PESSOA
IDENTIFICADOR
NOME
SEXO
IDENTIFICADOR_ESPOSA
N
1
Esposa
Marido
casa com
1
Marido
Esposa
casa com
e-Tec Brasil
Banco de Dados.indb 40
40
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
PESSOA
IDENTIFICADOR
NOME
SEXO
N
N
casamento
IDENTIFICADOR_MARIDO
casa com
IDENTIFICADO_RESPOSA
NOME
SEXO
Eduardo
Ana Paula
Ronaldo
Cibele
Anabela
Ceclia
Srgio
CASAMENTO
IDENTIFICADOR_MARIDO
IDENTIFICADOR_ESPOSA
Conforme a Figura 2.12, Eduardo (IDENTIFICADOR=1) possui duas ocorrncias na tabela CASAMENTO. Uma vez que do sexo masculino, seu identicador aparece na coluna (atributo) IDENTIFICADOR_MARIDO. Signica que
Banco de Dados.indb 41
41
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 42
42
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
PROJETO
FUNCIONARIO
N
MATRICULA
NOME
SEXO
gerencia
NUMERO
NOME
DATA_INICIO
DATA_FINAL_PREVISTA
DATA_FINAL_EFETIVA
N
N
possui
EQUIPE
FUNCAO
trabalha em
ID_FUNCAO
DESCRICAO
MATRICULA
NUMERO
Como indicam os atributos do modelo, um projeto ainda em andamento apresentaria a DATA_FINAL_EFETIVA com valor nulo. A existncia de
DATA_FINAL_PREVISTA e de DATA_FINAL_EFETIVA permite avaliar o atraso do projeto em andamento ou concludo.
Consideremos agora a modelagem de um BD desenvolvido para o gerenciamento de uma biblioteca. Para simplicar, a biblioteca empresta apenas
livros. No h revistas ou DVDs em seu acervo. Tambm vetado ao usurio
dessa biblioteca reservar um livro indisponvel no momento como nas bibliotecas em que o usurio pode entrar em uma la de reservas, de modo que,
ao ser devolvido um exemplar do livro reservado, os usurios que zeram a
reserva podem, conforme sua ordem na la, requisitar o livro. Por outro lado,
o BD modelado deve prover os seguintes requisitos:
(1) Manter dados sobre as obras do acervo, como nome dos autores, data
da aquisio, editora, edio e ttulo.
(2) Manter registro de todos os livros de uma mesma obra.
(3) Efetuar o emprstimo e devoluo de livros, mantendo registros detalhados ao longo do tempo.
(4) Consultar livros por cdigo de identicao, ttulo da obra, nome de autores e gnero da obra (autoajuda, dicionrio, literatura, etc.).
(5) Manter dados sobre os usurios da biblioteca: matrcula, nome, sexo,
data de nascimento, endereo e telefone.
Banco de Dados.indb 43
43
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
GENERO
1
NR_OBRA
TITULO
ID_GENERO
DESCRICAO
classica
AUTORIA
AUTOR
N
ID_AUTOR
NOME
escreve
NR_OBRA
ID_AUTOR
referencia
N
MOVIMENTACAO
LIVRO
N
NR_LIVRO
DATA_AQUISICAO
EDICAO
publica
USUARIO
N
movimenta
MATRICULA
NR_LIVRO
DATA_EMPRESTIMO
DATA PREVISTA
DATA_DEVOLUCAO
MATRICULA
NOME
SEXO
DATA NASCIMENTO
TELEFONE
CELULAR
E_MAIL
ENDERECO
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 publicada 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.
e-Tec Brasil
Banco de Dados.indb 44
44
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 45
45
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
ESPECIALISTA
ESPECIALIDADE
MEDICO
N
CRM
NOME
SEXO
TELEFOME
CELULAR
E-MAIL
COD_ESPECIALIDADE
DESCRICAO
possui
CRM
COD_ESPECIALIDADE
N
CONSULTA
ID_PLANO
ID_PACIENTE
PACIENTE
N
CRM
DATA
HORA
ID_PACIENTE
NOME
SEXO
TELEFONE
CELULAR
PLANO_SAUDE
ID_PLANO
NOME_FANTASIA
e-Tec Brasil
Banco de Dados.indb 46
46
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
(5) Como simplicao do modelo no ser necessrio armazenar os horrios de atendimento semanal para cada mdico. Consideraremos apenas
que todos os mdicos atendem todos os dias teis da semana em um
horrio xo e igual para todos.
Note que Consulta uma relao gerada a partir de um relacionamento
ternrio entre as entidades MEDICO, PACIENTE e PLANO_SAUDE.
2.3 Generalizao/especializao
de entidades
Existem situaes em que diferentes entidades apresentam algumas caractersticas 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
NOME
SEXO
TELEFONE
CELULAR
E_MAIL
ID_PACIENTE
NOME
SEXO
TELEFONE
CELULAR
Banco de Dados.indb 47
47
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
PESSOA
NOME
SEXO
TELEFONE
CELULAR
MEDICO
PACIENTE
CRM
E_MAIL
ID_PACIENTE
Generalizao: entidades de um nvel mais baixo de abstrao com caractersticas comuns; so agrupadas originando uma entidade de nvel mais alto.
Especializao: uma entidade de nvel mais alto de abstrao desmembrada em
vrias entidades de nvel mais baixo, com caractersticas parcialmente distintas.
Construa um diagrama ER completo para um sistema de supermercado que
permita as seguintes funcionalidades:
a) Manter informaes sobre produtos (cdigo, nome, preo unitrio, quantidade em estoque e estoque mnimo).
b) Registrar vendas de produtos nos caixas.
c) Registrar recebimentos discriminando o tipo: em dinheiro, cheque, carto de dbito, ou carto de crdito.
e-Tec Brasil
Banco de Dados.indb 48
48
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
SOCIO
DEPENDENTE
ID_SOCIO
NOME
SEXO
ENDERECO
TELEFONE
CPF
RG
DATA_NASCIMENTO
ID_SOCIO
ID_DEPENDENTE
NOME
SEXO
DATA_NASCIMENTO
possui
Resumo
Antes de sair criando tabelas, relacionamentos e consultas, devemos projetar
um BD que atenda satisfatoriamente aos objetivos de nossos usurios.
Um BD bem modelado demandar pouca ou nenhuma manuteno corretiva no futuro. Por isso, conveniente despender parte do tempo inicial projetando e modelando o BD propriamente dito. Uma vez concluda essa etapa,
pode-se dedicar tempo criao das tabelas, relacionamentos, consultas,
vises, procedimentos, etc.
Na modelagem de um BD, nos concentramos nos objetivos a que pretendemos atender com essa tecnologia. Se pretendermos criar um BD para um
sistema de controle acadmico que permita armazenar dados sobre alunos,
turmas, disciplinas, notas e frequncias, quais sero as tabelas necessrias e
seus respectivos atributos?
E se o sistema objetivar gerenciar o atendimento de consultas mdicas em
uma clnica? Certamente, sero outras as tabelas e atributos necessrios.
Mas, quais sero essas tabelas e como se relacionaro entre si?
Neste captulo abordamos a modelagem conceitual de dados. Um modelo
conceitual objetiva projetar os requisitos de negcio segundo a perspectiva
do usurio nal. Tendo em vista apenas o modelo relacional de BD, no precisamos ainda determinar qual SGBD utilizaremos para implementar nosso
BD, no importando se o SGBD ser o Oracle, o Microsoft SQL-Server, o
Sybase, o PostgreeSQL, o Firebird ou o MySQL. O que modelaremos pode ser
implementado em qualquer SGBD relacional.
Banco de Dados.indb 49
49
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
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
e-Tec Brasil
Banco de Dados.indb 50
50
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 51
51
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
NOME
SEXO
NASCIMENTO
CURSO
1099
Rodrigo Bvar
25/12/1992
Informtica
1203
Karina Gonalves
03/11/1998
Biologia
1399
Jos da Silva
27/02/1995
Matemtica
1500
Cesrio Antunes
16/12/1999
Farmcia
1701
Jos da Silva
03/10/1991
Informtica
Uma tabela pode armazenar milhares de linhas (registros). Imaginar a complexidade de localizar um registro especco em meio a milhares de outros
no difcil. As colunas podem ajudar a identicar uma linha especca,
distinguindo-a das demais.
Supondo que iremos acessar os dados de um determinado aluno; a busca
pela linha deve ser parametrizada pelo valor de uma ou mais colunas, mas
no de qualquer coluna. Anal, diferentes alunos podem, por exemplo, ter
o mesmo nome. Na Figura 3.1, essa situao encontra-se exemplicada nas
linhas 3 e 5 da tabela, onde esto registrados dois alunos de nome Jos da
Silva. A possibilidade de alunos homnimos torna a coluna Nome inadequada para a identicao de um registro em particular.
A Figura 3.2 mostra o resultado da busca na tabela ALUNO com o critrio de
pesquisa NOME = Jos da Silva; o fato de essa busca/consulta resultar
em mais de uma linha evidencia a inadequao da coluna NOME na identicao de uma linha em particular.
MATRICULA
NOME
SEXO
NASCIMENTO
CURSO
1399
Jos da Silva
27/02/1995
Matemtica
1701
Jos da Silva
03/10/1991
Informtica
e-Tec Brasil
Banco de Dados.indb 52
52
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
NOME
SEXO
NASCIMENTO
CURSO
1701
Jos da Silva
03/10/1991
Informtica
= 1701
Superchave
um conjunto de um ou mais
atributos que permite identicar
com preciso uma nica linha de
uma tabela.
FUNCIONARIO
NOME
SEXO
DATA_NASCIMENTO
CARTEIRA_IDENTIDADE
CPF
LOGRADOURO
COMPLEMENTO
BAIRRO
CIDADE
UF
CEP
TELEFONE
Figura 3.4: Atributos da entidade FUNCIONARIO
Fonte: Elaborada pelo autor
Portanto, a combinao de atributos {NOME, CPF}, apesar de ser superchave, no pode ser uma chave candidata, pois {CPF} tambm superchave e subconjunto da combinao. O mesmo vale para a combinao
{CARTEIRA_IDENTIDADE, CPF, NOME}, que no chave candidata, pois
existem dois subconjuntos que so superchaves.
Banco de Dados.indb 53
53
Chaves candidatas
So um subconjunto especco das superchaves. Somente
podem ser chaves candidatas
as superchaves mnimas. Ou
seja, uma superchave formada
pela combinao de mais de um
atributo pode ser classicada
como uma chave candidata
apenas se essa combinao no
possuir qualquer subconjunto
prprio que seja ele mesmo uma
superchave.
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Chave primria
uma chave candidata escolhida
pelo projetista de BD. o
principal meio de identicao
unvoca de uma linha em uma
entidade. Toda chave primria
obedece s seguintes regras:
(1) No pode conter valor
nulo (a chave primria de
preenchimento obrigatrio.); e
(2) No pode conter valores
duplicados (no pode existir
na entidade mais de uma linha
com o mesmo valor de chave
primria).
ESPECIALIDADE
CRM
COD_ESPECIALIDADE
NOME
DESCRICAO
ESPECIALISTA
CRM
COD_ESPECIALIDADE
SEXO
TELEFONE
CELULAR
EMAIL
PACIENTE
ID_PACIENTE
PLANO_SAUDE
ID_PLANO
NOME
ID_PACIENTE
CRM
DATA
SEXO
TELEFONE
NOME_FANTASIA
CONSULTA
CELULAR
HORA
ID_PLANO
e-Tec Brasil
Banco de Dados.indb 54
54
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 55
55
Chave estrangeira
um atributo ou conjunto de
atributos originrio de uma entidade que replicado em outra.
Essa replicao tem por objetivo
estabelecer uma associao entre
linhas das duas entidades. Sem as
chaves estrangeiras seria impossvel criar relacionamentos entre
entidades. Uma chave estrangeira
em uma determinada entidade
sempre ser uma chave primria
em sua entidade de origem.
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
ALUNO
CURSO
MATRICULA
NOME_ALUNO
SEXO
NASCIMENTO
COD_CURSO
NOME_CURSO
Matricula-se em
N
HISTORICO
MATRICULA
GRADE_CURRICULAR
COD_DISCIPLINA
SEMESTRE
DISCIPLINA
N
cursa
COD_DISCIPLINA
NOME_DISCIPLINA
CARGA_HORARIA
EMENTA
NOTA_FINAL
FREQUENCIA
CONDICAO
possui
COD_CURSO
COD_DISCIPLINA
PERODO
e-Tec Brasil
Banco de Dados.indb 56
56
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
NOME ALUNO
SEXO
NASCIMENTO
COD_CURSO
12359
Jos da Silva
14/02/1985
INF
12361
Andressa Simes
25/08/1986
SAN
13000
Lina Silva
22/09/1996
INF
CURSO
COD_CURSO
NOME_CURSO
INF
Informtica
SAN
Saneamento Ambiental
Banco de Dados.indb 57
57
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 58
58
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
ALUNO
CURSO
MATRICULA
COD_CURSO
NOME_ALUNO
SEXO
NASCIMENTO
CURSO.COD_CURSO
NOME_CURSO
GRADE_CURRICULAR
CURSO.COD_CURSO
DISCIPLINA.COD_DISCIPLINA
PERIODO
HISTORICO
ALUNO.MATRICULA
DISCIPLINA.COD_DISCIPLINA
SEMESTRE
DISCIPLINA
NOTA_FINAL
FREQUENCIA
CONDICAO
COD_DISCIPLINA
NOME_DISCIPLINA
CARGA_HORARIA
EMENTA
Banco de Dados.indb 59
59
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
PROJETO
MATRICULA
NUMERO
NOME
SEXO
FUNCAO.ID_FUNCAO
NOME
DATA_INICIO
DATA_FINAL_PREVISTA
DATA_FINAL_EFETIVA
FUNCIONARIO.MATRICULA_GERENTE
EQUIPE
FUNCAO
FUNCIONARIO.MATRICULA
PROJETO.NUMERO
ID_FUNCAO
DESCRICAO
1. Converta os diagramas ER das atividades da Aula 2 (o restaurante e o supermercado) em Modelos Relacionais Normalizados (MRNs) equivalentes.
2. Elabore um exemplo envolvendo trs tabelas preenchidas inteiramente,
baseado em um dos diagramas do exerccio anterior. Destaque as chaves
estrangeiras existentes.
e-Tec Brasil
Banco de Dados.indb 60
60
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
NOME
SEXO
1001
Osthogenes Ribeiro
1023
Christine lvares
1066
TELEFONES
9947-5611
3345-0587
8881-0099
3335-7210
9967-0909
3711-2278
TELEFONE
MEDICO
ID_MEDICO
NOME
1001
Osthogenes Ribeiro
1023
1066
SEXO
ID_MEDICO
TELEFONES
1001
3711-2278
Christine lvares
1001
9947-5611
1001
3345-0587
1023
8881-0099
1023
3335-7210
1066
9967-0909
Banco de Dados.indb 61
61
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
PESSOA
TELEFONE
ID_PESSOA
PESSOA.ID_PESSOA
NUMEROTELEFONE
NOME
SEXO
ESPECIALIDADE
ID_ESPEC
DESCRICAO
PACIENTE
MEDICO
ID_PACIENTE
ID_MEDICO
PESSOA.ID_PESSOA
ENDEREO
PESSOA.ID_PESSOA
ESPECIALIDADE.ID_ESPEC
A 2FN trata especicamente de quais atributos pertencem a quais entidades. A Figura 3.13 mostra essa violao, apresentando redundncia de dados. H, por exemplo, dois registros/linhas relativos ao lme Transformers,
de 2007. Os atributos NR_FILME, TITULO e ANO_PRODUCAO tiveram seus
valores replicados para que cadastrssemos dois atores nesse lme: Shia
LeBeouf e Megan Fox. E esse no o nico problema da tabela. Para registrar a participao de um mesmo ator em mais de um lme, repetimos
seu nome e identicador duas vezes. Foi o que aconteceu ao ator Zachary
Quinto. Essa tambm uma transgresso 2FN.
FILME
NR_FILME
TITULO
907
Transformers
ID_ATOR
SLB
NOME_ATOR
Shia LaBeouf
ANO_PRODUCAO
2007
907
Transformers
MFX
Megan Fox
2007
956
Star Trek
ZQT
Zachary Quinto
2009
998
Heroes
ZQT
Zachary Quinto
2006
e-Tec Brasil
Banco de Dados.indb 62
62
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
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.
Ainda assim, a tabela continua violando a 2FN. A coluna/atributo TITULO,
por exemplo, no depende de toda a chave primria composta, nem da
combinao de atributos {NR_FILME + ID_ATOR}, mas do atributo NR_FILME.
De maneira semelhante, o atributo NOME_ATOR no depende da chave primria composta por inteiro, mas simplesmente do atributo ID_ATOR (que
apenas parte da 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 muitos 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, composta pela combinao de atributos {NR_FILME, ID_ATOR}.
FILME
NR_FILME TITULO
ANO_PRODUCAO
ELENCO
ATOR
NR_FILME ID_ATOR
ID_ATOR
NOME_ATOR
907
Transformers
2007
907
SLB
SLB
Shia LaBeouf
956
Star Trek
2009
907
MFX
MFX
Megan Fox
998
Heroes
2006
956
ZQT
ZQT
Zachary Quinto
998
ZQT
Banco de Dados.indb 63
63
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
COD_PRODUTO
QUANTIDADE
PRECO_UNITARIO
1035
SUBTOTAL
10-900
10
40,99
409,90
1035
10-991
10,00
50,00
1213
20-560
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 categoria 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
5598
Prata
2,00
5600
Wall-E
Ouro
3,00
5601
Se Beber, No Case
Lanamento
4,00
5603
Avatar
Lanamento
4,00
PRECO
O problema apresentado na Figura 3.16 que o atributo PRECO apresenta uma interdependncia em relao ao atributo CATEGORIA, que
no faz parte da chave primria. A soluo a criao de uma tabela de
CATEGORIA e a migrao para l do atributo PRECO, obedecendo ento
a 3FN. A entidade FILME se relacionaria com ela e, portanto, teria uma
coluna de categoria (ID_CATEGORIA). Nessa soluo, o reajuste de preos
simples. Basta atualizar a tabela CATEGORIA e todos os Filmes estaro
com novos preos, conforme Figura 3.17 a seguir.
FILME
CATEGORIA
NR_FILME
TITULO
CATEGORIA
ID_CATEGORIA
5598
Prata
Lanamento
4,00
5600
Wall-E
Ouro
Ouro
3,00
5601
Se Beber, No Case
Lanamento
Prata
2,00
5603
Avatar
Lanamento
PRECO
e-Tec Brasil
Banco de Dados.indb 64
64
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 65
65
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
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 univocamente um registro de uma tabela (entidade).
Assim enfatizamos a converso de Modelos de Entidade e Relacionamentos
(MER) em Modelos Relacionais Normalizados (MRN). Para tanto, os modelos
gerados precisaram obedecer a um certo nmero de normas, identicadas
como Formas Normais (FN), das quais aqui nos restringimos s trs primeiras
.
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 equivalente. Baseado nisso, dada a denio do esquema abaixo, gere o modelo
conceitual equivalente (processo de engenharia reversa).
FABRICANTE {IDFABR, NOMEFABR}
MODELO {IDMODELO, NOMEMODELO, PRECO}
COR {IDCOR, DESCRICAOCOR}
AUTOMOVEL {IDAUTOM, IDFABR, IDMODELO, NRPLACA, NRCHASSI,
IDCOR}
CLIENTE {IDCLIENTE, NOMECLIENTE, TELEFONE}
VENDA {IDCLIENTE, IDAUTOM, DATAVENDA, VALOR, DATAENTREGA}
2. O pequeno diagrama de MRN da Figura 3.18 apresenta alguns problemas graves. Identique-os um a um, explique as diculdades que causam
e, nalmente, corrija-o.
e-Tec Brasil
Banco de Dados.indb 66
66
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Funcionario
Setor
Matricula
CodSetor
Nome
NrCarteiraDeTrabalho
NrCarteiraDeIndentidade
NomeFilho1
NascimentoFilho1
NomeFilho2
NascimentoFilho2
NomeFilho3
NascimentoFilho3
Telefone
Endereco
NrCPF
NomeSetor
Endereco
Funcionario.Matricula
Telefone
NrTelefone
DescricaoTelefone
Funcionario.Matricula
Musica
Cod_Artista
Cod_Musica
Nome
Pais.Cod_Pais
Titulo
Duracao
Artista.Cod_Artista
Pais
Album
AlbumMusica
Cod_Pais
Cod_Album
Album.Cod_Album
Musica.Cod_Musica
Nome
Nome
Banco de Dados.indb 67
67
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 68
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 69
69
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 70
70
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
4.2 MySQL
O MySQL, no Brasil pronuncia-se Mai sse Que le, um SGBD desenvolvido pela MySQL AB, que agora propriedade da Sun Microsystems. Em 2009,
a Sun foi adquirida pela Oracle, uma reconhecida desenvolvedora de SGBDs.
Rapidamente o MySQL converteu-se em um dos SGBDs mais populares no
mundo especialmente para desenvolvimento de aplicaes na web. Grande
parte dessa popularidade se deve ao fato de apresentar a opo gratuita,
software livre. Porm, essa no a nica razo de sua aceitao, pois o PostgreeSQL, seu principal concorrente open source, apresenta mais recursos.
Banco de Dados.indb 71
71
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
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 apresenta maior nvel de autorizao no MySQL.
Aps digitar root e teclar <ENTER> podemos criar um BD novo com a sintaxe:
CREATE DATABASE <NOME DO BANCO DE DADOS>;
Como exemplo, vamos criar um BD de nome BIBLIOTECA com o comando:
CREATE DATABASE BIBLIOTECA;
E teclar <ENTER>. Para comprovar sua criao executamos o comando:
SHOW DATABASES;
O resultado desse comando a apresentao de uma lista com todos os BDs
existentes em sua mquina. Voc pode ter vrios Bancos de Dados MySQL
criados em seu computador, como na Figura 4.2.
e-Tec Brasil
Banco de Dados.indb 72
72
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
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.
O MySQL devolve uma resposta em ingls em que:
t Sada o usurio nal com um Bem-vindo ao MySQL Monitor
(Welcome to the MySQL monitor).
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.).
t Informa que a identicao da sua conexo 1 (Your MySQL connection
id is 1.). Esse nmero pode variar, dependendo de quantos usurios estiverem conectados ao BD no momento (incluindo aplicativos em execuo).
t Esclarece a verso do MySQL que est sendo executada (5.1.39), bem
como a sua licena de uso (GPL) (Server version: 5.1.39-community
MySQL Community Server (GPL)).
t Informa comandos para acessar a ajuda (help) ou limpar a tela: Type
help; or \h for help. Type \c to clear the current input statement..
Caso o usurio nal digite help; ou \h, o MySQL apresentar uma tela
de ajuda com uma lista de comandos disponveis acompanhada de uma
breve descrio para cada um. Por outro lado, se o usurio nal digitar
\c o MySQL limpar a tela do monitor.
Banco de Dados.indb 73
73
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Em seguida, o usurio se depara com o prompt do MySQL (mysql>) seguido do cursor piscando sua direita. Ento, o comando CREATE DATABASE
BIBLIOTECA; foi digitado pelo usurio. O MySQL lhe devolve uma resposta:
Query OK, 1 row affected (0.05 sec). Nessa mensagem, o usurio
informado de que o comando foi executado com sucesso (Query OK), de
que uma linha foi afetada no BD (1 row affected) e de que sua execuo
gastou 0,05 segundos (0.05 sec). Logo, essa mensagem indica que o Banco de Dados BIBLIOTECA foi criado com sucesso.
Desconado, o usurio digitou o comando SHOW DATABASES;. Em
resposta, o MySQL lhe devolve uma tabela com uma coluna chamada
databases (Bancos de Dados). Cada linha da tabela traz a lista de nomes
de BDs existentes no servidor.
Observe que, na Figura 4.2, existem quatro Bancos de Dados gravados. O
BD BIBLIOTECA, que acabamos de criar; e os INFORMATION_SCHEMA,
MYSQL e TEST que so BDs criados pelo instalador do SGBD MySQL.
Criamos o BD BIBLIOTECA, mas ainda no o abrimos. Para efetuar qualquer
operao no BD BIBLIOTECA, como criar as tabelas e nelas inserir dados, precisamos antes abrir ou entrar nesse BD utilizando o comando USE do MySQL:
USE <NOME-DO-BANCO DE DADOS>;
Ou seja, digitamos USE, o nome do BD que abriremos e o ponto e vrgula:
mysql> USE BIBLIOTECA;
Database changed
Ao pressionar a tecla <ENTER>, o MySQL devolveu a seguinte resposta:
Database changed, o usurio obteve sucesso e abriu ou entrou no BD
BIBLIOTECA. Agora, uma ao do usurio afetar somente esse BD.
e-Tec Brasil
Banco de Dados.indb 74
74
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
GENERO
OBRA
ID_GENERO
NR_OBRA
DESCRICAO
GENERO.ID_GENERO
AUTORIA
OBRA.NR_OBRA
AUTOR.ID_AUTOR
LIVRO
NR_LIVRO
AUTOR
DATA_AQUISICAO
EDICAO
OBRA.NR_OBRA
EDITORA.ID_EDITORA
ID_AUTOR
NOME
MOVIMENTACAO
EDITORA
ID_EDITORA
NOME_FANTASIA
USUARIO.MATRICULA
LIVRO.NR_LIVRO
DATA_EMPRESTIMO
DATA_PREVISTA
DATA_DEVOLUCAO
USUARIO
MATRICULA
NOME
SEXO
DATA_NASCIMENTO
ENDERECO
A entidade USUARIO foi levemente alterada. Os atributos CEP, E_MAIL, TELEFONE e CELULAR foram omitidos no intuito de simplicar o exemplo.
Veja um exemplo simplicado do comando SQL para a criao de uma tabela:
mysql> CREATE TABLE GENERO (
-> ID_GENERO CHAR(3) NOT NULL PRIMARY KEY,
-> DESCRICAO VARCHAR(25) NOT NULL );
Query OK, 0 rows affected (0.44 sec)
Banco de Dados.indb 75
75
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
Criamos ento a tabela GENERO CREATE TABLE GENERO (...). O parntese aberto logo aps o nome da tabela indica que, em seguida, descreveremos uma lista de colunas/atributos. A denio de cada atributo deve ser
separada de outra por vrgula.
Assim, o trecho ID_GENERO CHAR(3) NOT NULL PRIMARY KEY, dene
uma coluna com as seguintes caractersticas:
t Nome da coluna ID_GENERO.
t Tipo de dado: caractere (com tamanho mximo delimitado em trs caracteres): CHAR(3). O tipo caractere aceita combinaes de algarismos
(de 0 a 9), letras (de A a Z ou de a a z) e smbolos como
#, @, !, . ou mesmo espaos em branco ( ). A delimitao
de tamanho igual a 3 signica que essa coluna pode armazenar combinaes de at trs caracteres. Exemplo: LIT, CIE, AA, F ou .
t A expresso NOT NULL (NO NULO) determina que o preenchimento obrigatrio. Em outras palavras, o SGBD no permitir que se
tente inserir uma linha (registro) nessa tabela sem que se informe algum
valor para essa coluna. Essa expresso no obrigatria em todos os
atributos, pois eventualmente podem existir colunas cujo preenchimento
no seja obrigatrio.
t A expresso PRIMARY KEY (CHAVE PRIMRIA) dene essa coluna como a chave primria simples dessa tabela. Mais adiante mostraremos como denir chaves primrias compostas.
Aps a vrgula, denimos a segunda coluna da tabela GENERO (DESCRICAO
VARCHAR(25) NOT NULL);). Seu nome DESCRICAO e o tipo de dado
VARCHAR de tamanho 25 caracteres. Seu preenchimento tambm obrigatrio (NOT NULL) anal, no faz sentido criar um identicador de gnero
sem a respectiva descrio. Como essa a ltima coluna da tabela, sua denio
no sucedida por vrgula. Em seu lugar, fechamos o parntese e acrescentamos um ponto e vrgula. O parntese fechado indica que a lista de colunas da
tabela foi encerrada e o ponto e vrgula sinaliza a concluso do comando.
O tipo de dados VARCHAR (caractere varivel) semelhante ao CHAR (caractere). A diferena que CHAR armazena dados de tamanho xo, enquanto
VARCHAR, dados com tamanho varivel. Portanto, se atribuirmos o conte-
e-Tec Brasil
Banco de Dados.indb 76
76
Banco de Dados
20/06/12 20:01
www.cliqueapostilas.com.br
Banco de Dados.indb 77
77
e-Tec Brasil
20/06/12 20:01
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 78
78
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Banco de Dados.indb 79
79
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
Seja qual for a forma escolhida para a criao da tabela EDITORA, o comando 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 tabela GENERO necessariamente j dever existir em nosso BD. Somente assim
poderemos estabelecer o relacionamento entre a coluna ID_GENERO da tabela 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).
O comando para a criao da tabela OBRA :
mysql> CREATE TABLE OBRA (
-> NR_OBRA INTEGER NOT NULL AUTO_INCREMENT,
-> TITULO VARCHAR (60) NOT NULL,
-> ID_GENERO CHAR (3) NOT NULL,
-> PRIMARY KEY (NR_OBRA),
-> FOREIGN KEY (ID_GENERO)
-> REFERENCES GENERO (ID_GENERO) ON DELETE RESTRICT );
Query OK, 0 rows affected (0.09 sec)
Esse comando SQL apresenta a clusula FOREIGN KEY (Chave Estrangeira) para especicar que a coluna ID_GENERO da tabela OBRA faz referncia
da tabela GENERO. Portanto, ID_GENERO chave primria na tabela
GENERO e chave estrangeira na tabela OBRA. Ao estabelecermos ID_GENERO como chave estrangeira em OBRA, o SGBD assegura a integridade
referencial dos dados. Isso signica que:
t ID_GENERO em OBRA somente poder conter valores previamente inseridos em ID_GENERO de GENERO. Em outras palavras, no podemos ca-
e-Tec Brasil
Banco de Dados.indb 80
80
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
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.
O comando SQL para criar a tabela LIVRO :
mysql> CREATE TABLE LIVRO (
-> NR_LIVRO INTEGER NOT NULL AUTO_INCREMENT,
-> DATA_AQUISICAO DATE NOT NULL,
-> EDICAO INTEGER,
-> NR_OBRA INTEGER NOT NULL,
-> ID_EDITORA CHAR(5) NOT NULL,
-> PRIMARY KEY (NR_LIVRO),
-> FOREIGN KEY (NR_OBRA) REFERECES OBRA (NR_OBRA)
-> ON DELETE RESTRICT,
-> FOREIGN KEY (ID_EDITORA) REFERENCES
-> EDITORA (ID_EDITORA) ON DELETE RESTRICT );
Query OK, 0 rows affected (0.39 sec)
Banco de Dados.indb 81
81
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 82
82
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Banco de Dados.indb 83
83
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
Note que a DATA_DEVOLUCAO e a MULTA no so campos de preenchimento obrigatrio. Apresentam valor yes na coluna Null. Anal, a DATA_DEVOLUCAO permanecer nula (sem preenchimento) at que o livro seja nalmente devolvido pelo usurio e a MULTA somente ser preenchida quando
DATA_DEVOLUCAO estiver preenchida e for posterior DATA_PREVISTA para
a devoluo do livro.
O comando SHOW TABLES; (Figura 4.8) listar o nome de todas as tabelas
criadas em nosso banco BIBLIOTECA.
O comando DROP TABLE deve ser usado sempre que quisermos apagar
uma tabela completamente: seus registros e sua estrutura.
mysql> DROP TABLE MOVIMENTACAO;
Query OK, 0 rows affected (0.05 sec)
O comando acima exclui a tabela MOVIMENTACAO. Aps executado, o comando SHOW TABLES; exibe uma lista de sete tabelas e no oito (Figura 4.9).
e-Tec Brasil
Banco de Dados.indb 84
84
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Vamos recriar a tabela MOVIMENTACAO ligeiramente diferente para introduzirmos o comando de alterao de tabelas (ALTER TABLE).
mysql> CREATE TABLE MOVIMENTACAO (
-> MATRICULA INTEGER NOT NULL,
-> NR_LIVRO INTEGER NOT NULL,
-> DATA_EMPRESTIMO DATE NOT NULL,
-> DATA_PREVISTA DATE NOT NULL,
-> DATA_DEVOLUCAO DATE,
-> PRIMARY KEY (MATRICULA, NR_LIVRO, DATA_EMPRESTIMO ) );
Query OK, 0 rows affected (0.00 sec)
No inclumos o campo MULTA, nem chaves estrangeiras (FOREIGN KEY). Se
percebermos o erro depois de criar a tabela, restam-nos duas alternativas:
t Destruir a tabela (DROP TABLE) para, em seguida, recri-la sem erros.
t Alterar a tabela (ALTER TABLE), fazendo os devidos acrscimos.
Banco de Dados.indb 85
85
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 86
86
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
ITEM_PEDIDO
NR_PEDIDO
NR_PRODUTO
PRECO_UNITARIO
QUANTIDADE
PEDIDO
NR_PEDIDO
DATA_PEDIDO
CLIENTE.NR_CLIENTE
PRODUTO
CLIENTE
NR_PRODUTO
NR_CLIENTE
NOME
PRECO_UNITARIO
QUANT_ESTOQUE
NOME
CNPJ
Banco de Dados.indb 87
87
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 88
88
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Banco de Dados.indb 89
89
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 90
90
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Banco de Dados.indb 91
91
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 92
92
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Banco de Dados.indb 93
93
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
CLIENTE
NOME
CNPJ
111.222.445-8
Sisne Informtica
212.331.890-0
NR_CLIENTE
PEDIDO
NR_PEDIDO
DATA_PEDIDO
NR_CLIENTE
1001
22-09-2009
1023
03-10-2009
1024
03-10-2009
2. Explique por que, uma vez feitas as inseres de registros do item anterior, as seguintes inseres seriam impossveis:
PEDIDO
NR_PEDIDO
DATA_PEDIDO
NR_CLIENTE
1001
30-01-2010
1099
31-01-2010
e-Tec Brasil
Banco de Dados.indb 94
94
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Banco de Dados.indb 95
95
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 96
96
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
NOME
SEXO
ID_CURSO
Ado Montenegro
INF
Snia Lopes
SAN
INF
COM
Tmara Montenegro
ECO
CURSO
ID_CURSO
NOME_CURSO
COM
Contabilidade
ECO
Economia
INF
Informtica
SAN
Saneamento Ambiental
Banco de Dados.indb 97
97
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
Banco de Dados.indb 98
98
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Figura 4.17: Contedo da tabela GENERO aps uma tentativa de excluso de registro
Fonte: Elaborada pelo autor
Banco de Dados.indb 99
99
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
e-Tec Brasil
100
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Resumo
Nesta aula abordamos os comandos da linguagem de denio e manipulao 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 gerao 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?
101
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
20/06/12 20:02
www.cliqueapostilas.com.br
103
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
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.
e-Tec Brasil
104
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Observe que a consulta da Figura 5.3 restringe a quantidade de colunas da tabela OBRA que devem ser exibidas e altera a ordem de exibio dessas colunas.
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 apresentados antes de NR_OBRA, conforme sequncia determinada pelo SELECT.
105
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
Figura 5.5: Resultado de uma consulta com a Clusula ORDER BY ... DESC
Fonte: Elaborada pelo autor
e-Tec Brasil
106
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
107
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
ESPECIALIDADE
ID_MEDICO
inteiro
COD_ESPECIALIDADE
texto (3)
NOME
COD_ESPECIALIDADE
SEXO
texto (40)
texto (3)
texto (1)
DESCRICAO
texto (35)
AGENDA
CONVENIO
DATA
ID_MEDICO
ID_CLIENTE
data
inteiro
inteiro
ID_CONVENIO
VALOR_CLIENTE
VALOR_CONVENIO
numero
moeda
moeda
ID_CONVENIO
NOME
inteiro
texto (60)
CLIENTE
ID_CLIENTE
inteiro
NOME
SEXO
NASCIMENTO
TELEFONE
texto (40)
texto (1)
data
texto (16)
e-Tec Brasil
108
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
a) Exibir o nome e o cdigo da especialidade para todos os mdicos e ordenar o resultado por nome do mdico em ordem alfabtica decrescente.
b) Exibir o nome e a data de nascimento para todos os clientes e ordenar o
resultado por data de nascimento.
Figura 5.10: Resultado da consulta de registros da tabela OBRA limitados por gnero
Fonte: Elaborada pelo autor
109
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
Figura 5.11: Resultado da consulta de registros da tabela OBRA limitado por ttulo
Fonte: Elaborada pelo autor
e-Tec Brasil
110
Banco de Dados
20/06/12 20:02
www.cliqueapostilas.com.br
Para a Figura 5.14, o critrio de ltragem dos registros baseou-se na coluna NR_OBRA. Essa consulta trouxe os registros de OBRA com valor de
NR_OBRA superior a 3.
111
e-Tec Brasil
20/06/12 20:02
www.cliqueapostilas.com.br
Em algumas situaes, interessante que a consulta retorne um nico registro. Nesses casos devemos usar a chave primria na clusula WHERE. Foi exatamente o que zemos na Figura 5.16. O critrio de ltragem NR_OBRA =
7. Como essa coluna a chave primria da tabela OBRA, o resultado dessa
consulta somente poderia ser um nico registro ou nenhum.
e-Tec Brasil
112
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
No comando a seguir:
mysql> SELECT ID_GENERO, COUNT(*) AS TOTAL_OBRAS FROM OBRA;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),
COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY
clause
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.
A Figura 5.19 agrupou a contagem (GROUP BY) por ID_GENERO. Em consequncia, obtemos quantos registros de OBRA existem para cada GENERO.
113
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
e-Tec Brasil
114
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
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).
115
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
Existem ainda as funes relativas a colunas do tipo DATE. A consulta da Figura 5.28, por exemplo, seleciona a DATA_NASCIMENTO e a separa em ano
(funo YEAR( )), ms (funo MONTH( )) e dia (funo DAY( )).
e-Tec Brasil
116
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
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. Dentre 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))
117
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
e-Tec Brasil
118
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
119
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
e-Tec Brasil
120
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
Apesar de nenhuma mensagem de erro ser exibida, a consulta a seguir est longe do que classicaramos como bem-sucedida. Eis um tipo de erro muito perigoso. Se no tivermos ateno, nem mesmo percebemos sua ocorrncia. Repare que para cada TITULO de OBRA, nossa consulta estabeleceu uma ligao com
toda DESCRICAO de GENERO existente. Assim, por exemplo, HELENA aparece 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.
Uma maneira de consertar o erro da consulta anterior forar o relacionamento entre as duas tabelas com a clusula WHERE denindo que a coluna
ID_GENERO da tabela GENERO deve ser igual coluna ID_GENERO da tabela
OBRA como na Figura 5.34 a seguir.
121
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
e-Tec Brasil
122
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
123
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
Para que concluir, acrescentamos a condio ao WHERE que ltra os registros da tabela MOVIMENTACAO para reter os relativos ao USUARIO de
matricula = 105.
SELECT NOME, DATA_EMPRESTIMO , M.NR_LIVRO, O.TITULO
FROM USUARIO U, MOVIMENTACAO M, LIVRO L, OBRA O
WHERE U.MATRICULA = M.MATRICULA
AND M.NR_LIVRO = L.NR_LIVRO
AND L.NR_OBRA = O.NR_OBRA
AND U.MATRICULA = 105;
Utilizamos a coluna MATRICULA de USUARIO (U.Matricula), mas tambm
poderamos usar a coluna da tabela MOVIMENTACAO (M.MATRICULA).
Desde a verso 3.23.17 o SGBD MySQL aceita os comandos INNER JOIN e
LEFT JOIN. O comando INNER JOIN fora o relacionamento entre as tabelas GENERO e OBRA (FROM GENERO INNER JOIN OBRA) pela coluna
ID_GENERO (USING (ID_GENERO);). Anal, essa coluna existe nas duas
tabelas. ID_GENERO chave primria em GENERO e chave estrangeira
em OBRA.
SELECT DESCRICAO, TITULO
FROM GENERO
INNER JOIN OBRA
USING (ID_GENERO);
e-Tec Brasil
124
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
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. Vimos 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.
125
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
Atividades de aprendizagem
Novamente, utilizando as tabelas de agendamento de consultas mdicas,
descreva o comando SQL para as seguintes consultas:
a) Exibir o nome do convnio, o nome do cliente e a data da consulta para
toda consulta agendada entre 20/fevereiro/2010 e 25/maro/2010.
b) Exibir o nome do convnio e a quantidade de consultas agendadas para
a data de 03 de abril de 2010.
c) Nome dos mdicos e a quantia gerada em dinheiro por todas as consultas atendidas (VALOR_CLIENTE + VALOR_CONVENIO) no ms de janeiro
de 2010. Observe que para cada consulta h a possibilidade de um Plano
de Sade pagar parte do valor e o cliente pagar a outra parcela. Para
cliente particular, o valor pago pelo convnio sempre zero.
e-Tec Brasil
126
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
127
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
e-Tec Brasil
128
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
129
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
e-Tec Brasil
130
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
Em seguida digite dir *. E tecle <ENTER>. O resultado ser a lista de diretrios (pastas) existentes na unidade C do disco rgido, como mostrado
logo abaixo:
C:\>DIR *.
O volume na unidade C ACER
O nmero de srie do volume 406D-517A
Pasta de C:\
12/10/2009 23:40
23/07/2009 11:56
03/10/2009 22:58
11/10/2009 00:07
17/03/2009 19:48
10/10/2009 21:53
05/10/2009 09:24
17/03/2009 20:07
12/09/2008 00:53
22/11/2009 17:53
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
Arquivos de programas
Book
Documents and Settings
i386
Intel
Python26
Sun
users
VALUEADD
WINDOWS
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:\>cd arquivos de programas
Vamos agora listar os diretrios dentro de 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
12/10/2009 23:40 <DIR> .
12/10/2009 23:40 <DIR> ..
23/07/2009 11:54 <DIR> Acer
10/10/2009 21:56 <DIR> fabFORCE
131
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
.
..
MySQL Server 5.1
0 arquivo(s)
0 bytes
3 pasta(s) 120.522.416.128 bytes disponveis
C:\Arquivos de programas\mysql>
H um diretrio de nome MySQL Server 5.1. Vamos acess-lo pelo comando cd MySQL Server 5.1. Em seguida entraremos no diretrio bin
com o comando cd bin e acessaremos o MySQL como usurio COMUM.
C:\Arquivos de programas\MySQL>cd mysql server 5.1
C:\Arquivos de programas\MySQL\MySQL Server 5.1>
e-Tec Brasil
132
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
133
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
13/08/2009 23:43
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
04/09/2009 21:37
2.282.112 mysqladmin.exe
5.459.968 mysqladmin.pdb
2.372.224 mysqlbinlog.exe
5.926.912 mysqlbinlog.pdb
2.278.016 mysqlcheck.exe
6.041.600 mysqld.exe
5.708.778 mysqld.map
21.385.216 mysqld.pdb
2.335.360 mysqldump.exe
5.599.232 mysqldump.pdb
2.273.920 mysqlimport.exe
5.427.200 mysqlimport.pdb
2.972.800 MySQLInstanceCong.exe
2.278.016 mysqlshow.exe
5.427.200 mysqlshow.pdb
1.802.880 mysql_upgrade.exe
1.728.512 my_print_defaults.exe
1.716.224 perror.exe
1.708.032 resolveip.exe
e-Tec Brasil
134
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
135
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
Considere que, por alguma razo, o usurio COMUM no deva ter acesso
sobre todas as colunas e linhas da tabela FILMES. Ento resolvemos lhe impor
algumas restries: somente acessar FILMES produzidos de 2009 em diante
(restrio de linhas) e no visualizar a coluna BILHETERIA (restrio de coluna).
Inicialmente, revogamos todos os privilgios do usurio COMUM sobre FILMES.
mysql> REVOKE ALL ON EXEMPLO.* FROM COMUM;
Query OK, 0 rows affected (0.00 sec)
O comando revoga todos os privilgios (REVOKE ALL) do usurio COMUM (FROM COMUM) sobre tudo que h no BD EXEMPLO
(ON EXEMPLO.*). Contudo, para que essa mudana se efetive no podemos
nos esquecer do comando:
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.11 sec)
Finalmente, criamos uma viso (VIEW) com as restries anteriormente sugeridas:
CREATE VIEW FILMES_NOVOS AS SELECT ID, TITULO, ANO FROM FILMES
WHERE ANO >= 2009;
Query OK, 0 rows affected (0.05 sec)
e-Tec Brasil
136
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
137
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
Note que COMUM conseguiu alterar o TITULO em FILMES_NOVOS do registro com ID = 4. O TITULO passou de WOLVERINE ORIGENS para
X-MEN ORIGENS: WOLVERINE. E essa alterao no se restringe aos dados da viso. Esse registro tambm foi alterado na tabela FILMES que serviu
de base para a gerao da viso FILMES_NOVOS.
e-Tec Brasil
138
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
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 diferenciadamente. 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:
MATRICULA INTEGER NOT NULL PRIMARY KEY,
NOME VARCHAR(50) NOT NULL,
SEXO CHAR(1) NOT NULL,
TELEFONE VARCHAR(15),
SETOR INTEGER NOT NULL,
SALARIO NUMERIC(6,2), e
SENHA VARCHAR(20).
A empresa proprietria desse BD est preocupada com a segurana dessa
tabela e lhe passa a incumbncia de:
a) criar uma viso chamada FUNC em que no seja possvel visualizar a SENHA 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 inserir novos registros em FUNC.
c) revogar todos os privilgios sobre a tabela FUNCIONARIO para esse novo
usurio.
Escreva corretamente os comandos que atendero s incumbncias acima
listadas.
139
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
20/06/12 20:03
www.cliqueapostilas.com.br
Aula 7 Procedimentos
Armazenados e Gatilhos
Objetivos
Diferenciar um procedimento armazenado de um gatilho.
Identicar situaes que justiquem o uso de procedimentos armazenados e gatilhos.
Criar procedimentos armazenados.
Executar procedimentos armazenados.
Apagar procedimentos armazenados.
Efetuar passagens de parmetros em procedimentos armazenados.
Criar gatilhos que disparem antes ou aps um evento.
Alguns SGBDs e o MySQL um deles permitem armazenar no somente
dados, mas tambm pequenos programas que acessem e manipulem esses
mesmos dados. Esses miniprogramas so geralmente identicados como rotinas armazenadas e podem ser basicamente de dois tipos: procedimentos
armazenados ou gatilhos.
Rotinas armazenadas
So um conjunto de comandos
SQL que podem convenientemente ser armazenados em um
servidor.
(2) Padronizam as operaes de BD, que deixam de depender, excessivamente, da memria e da disciplina de usurios humanos. Se todo dia, por
exemplo, h a necessidade de executar uma sequncia de operaes que
envolve a incluso de registros em uma tabela T1 e a consequente atualiza-
141
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
Novamente entramos no BD EXEMPLO, acessando o MySQL como root (Administrador). Para a criao de um procedimento armazenado (stored procedure),
utilizamos o comando CREATE PROCEDURE, conforme exemplo abaixo:
mysql> DELIMITER //
mysql> CREATE PROCEDURE bilheteriaMedia()
-> BEGIN
-> SELECT ANO, AVG(BILHETERIA) AS BILHETERIA_MEDIA
-> FROM FILMES
-> GROUP BY ANO;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
e-Tec Brasil
142
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
Antes do comando CREATE PROCEDURE, executamos o comando DELIMITER //, que substitui temporariamente o caractere ; pelos // como
nalizador de comandos no MySQL. Signica que ao deparar com um ponto e vrgula, o interpretador de comandos do MySQL no entende que o
usurio terminou a digitao do comando. til, por exemplo, na linha do
GROUP BY ANO;. Sem o comando DELIMITER // antes, certamente
haveria um erro nessa linha. A denio do procedimento armazenado
termina com o comando END//. Ento, o interpretador de comandos do
MySQL entende que o usurio j completou o comando. Aps a criao
do procedimento, executamos o comando DELIMITER; para que o ponto e vrgula volte a ser o nalizador de comandos.
O procedimento armazenado acima foi criado com o nome de bilheteriaMedia (CREATE PROCEDURE BilheteriaMedia( )). Os comandos do procedimento propriamente comeam com o comando BEGIN (Incio). Em
seguida, h uma consulta SQL normal que comea com SELECT e termina
com GROUP BY ANO;. Em seguida, o comando END// fecha o bloco
de comando iniciado com BEGIN. Ou seja, para todo comando BEGIN
deve haver um comando END.
O objetivo desse procedimento exibir a mdia das bilheterias por ano
de produo dos FILMES. Para execut-la, utilizamos o comando CALL
BILHETERIAMEDIA( ) conforme mostrado na Figura 7.1 a seguir.
143
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
e-Tec Brasil
144
Banco de Dados
20/06/12 20:03
www.cliqueapostilas.com.br
145
e-Tec Brasil
20/06/12 20:03
www.cliqueapostilas.com.br
mysql> DELIMITER //
mysql> CREATE PROCEDURE ANALISE_RESULTADOS()
-> BEGIN
-> SET @MAIOR = 0;
-> SET @MENOR = 0;
-> SET @MEDIA = 0;
-> CALL ANALISE_BILHETERIA(@MAIOR, @MENOR, @MEDIA);
-> SELECT @MAIOR AS MAIOR_BILHETERIA,
-> @MENOR AS MENOR_BILHETERIA,
-> @MEDIA AS BILHETERIA_MEDIA;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
Repare que toda a sequncia de passos necessria para os resultados foi
encapsulada por um novo procedimento: ANALISE_RESULTADOS. ele que
cria as variveis de memria (@MAIOR, @MENOR e @MEDIA) e executa
ANALISE_BILHETERIA, para depois exibir os resultados gerados por este ltimo procedimento (Figura 7.3).
e-Tec Brasil
146
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
Como existe apenas um lme com ANO de produo igual a 1972, os resultados para MAIOR_BILHETERIA, MENOR_BILHETERIA e MEDIA_BILHETERIA
na Figura 7.5 so idnticos (R$ 600.000,00).
147
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
e-Tec Brasil
148
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
149
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
Ento uma mensagem exibida na tela informando que uma quantia igual a
VALOR foi retirada da CONTA_CORRENTE de nmero igual a CONTA_ORIGEM.
A varivel de memria SALDO_DESTINO alimentada por uma consulta SQL
com o SALDO da CONTA_CORRENTE em que NR_CONTA = CONTA_DESTINO.
Ele ento atualizado com a soma de SALDO_DESTINO com VALOR transferido. Uma mensagem exibida na tela para informar que o VALOR foi depositado
na CONTA_CORRENTE em que NR_CONTA = CONTA_DESTINO.
Para testar esse procedimento armazenado, precisaremos antes inserir alguns registros na tabela CONTA_CORRENTE, conforme os comandos abaixo:
mysql> INSERT INTO CONTA_CORRENTE VALUES (107,662,335,2900.80);
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO CONTA_CORRENTE VALUES (129,662,335,200.10);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO CONTA_CORRENTE VALUES (108,662,343,55200.00);
Query OK, 1 row affected (0.00 sec)
Passamos a ter trs contas correntes na tabela. Duas pertencem ao mesmo
cliente.
e-Tec Brasil
150
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
Como a consulta da Figura 7.8 comprova, tudo transcorreu como espervamos. A conta 107, aps a retirada de R$ 300,00, cou com SALDO de R$
2.600,00. Por sua vez, a conta 129 teve seu SALDO alterado para R$ 500,10.
151
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
7.3 Gatilhos
Gatilhos (triggers)
So rotinas armazenadas
que, associadas a eventos
percebidos automaticamente
pelo MySQL, no precisam ser
invocadas explicitamente pelo
usurio para serem executadas.
Quando o evento programado
acontece, o gatilho disparado
automaticamente.
e-Tec Brasil
152
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
153
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
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
Observe que foram vendidos 10 aparelhos de DVD, descontados da coluna ESTOQUE em PRODUTO. Antes, havia 40 aparelhos de DVD e agora
restam apenas 30. No precisamos alterar o estoque, pois o gatilho nos
poupou dessa tarefa.
e-Tec Brasil
154
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
Para o nosso prximo exemplo de gatilho, precisamos criar uma tabela para
armazenar alteraes efetuadas em registros da tabela FILMES.
mysql> CREATE TABLE FILMES_LOG(
-> NR_ENTRADA INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> ID_VELHO INTEGER,
-> ID_NOVO INTEGER,
-> TITULO_VELHO VARCHAR(60),
-> TITULO_NOVO VARCHAR(60),
-> ANO_VELHO INTEGER,
-> ANO_NOVO INTEGER,
-> BILHETERIA_VELHA NUMERIC(6,2),
-> BILHETERIA_NOVA NUMERIC(6,2)
);
Query OK, 0 rows affected (0.00 sec)
Assim, a tabela FILMES_LOG armazena os dados de antes da alterao
do registro (ID_VELHO, TITULO_VELHO, ANO_VELHO e BILHETERIA_VELHA), assim como os dados aps essa alterao (ID_NOVO, TITULO_NOVO,
ANO_NOVO, BILHETERIA_NOVA).
mysql> DELIMITER //
mysql> CREATE TRIGGER MANTER_LOG_ALTERACAO
-> AFTER UPDATE ON FILMES FOR EACH ROW BEGIN
-> NSERT INTO FILMES_LOG ( ID_VELHO, ID_NOVO, TITULO_VELHO,
TITULO_NOVO, ANO_VELHO, ANO_NOVO, BILHETERIA_VELHA, BILHETERIA_NOVA )
-> VALUES ( OLD.ID, NEW.ID, OLD.TITULO, NEW.TITULO, OLD.ANO,
NEW.ANO, OLD.BILHETERIA, NEW.BILHETERIA );
-> END //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
O gatilho acima dispara sempre que uma alterao produzida em
algum registro da tabela FILMES, inserindo um novo registro na tabela
FILMES_LOG. Para obter o valor antigo de uma coluna, utilizamos o
prefixo OLD.. Analogamente, para obter o novo valor de uma coluna
utilizamos o prefixo NEW. Alteramos simultaneamente o TITULO e
ANO de produo do FILME com ID = 5 (Figura 7.12).
155
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
A alterao foi bem-sucedida (Figura 7.13) e o gatilho gerou um novo registro na tabela criada de FILMES_LOG (Figura 7.14).
Um ltimo exemplo de gatilho traz como novidade o evento antes da excluso na tabela FILMES (BEFORE DELETE ON FILMES).
mysql> DELIMITER //
mysql> CREATE TRIGGER MANTER_LOG_EXCLUSAO
-> BEFORE DELETE ON FILMES FOR EACH ROW BEGIN
-> INSERT INTO FILMES_LOG (ID_VELHO, TITULO_VELHO,
-> ANO_VELHO, BILHETERIA_VELHA)
e-Tec Brasil
156
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
Figura 7.15: Contedo das tabelas FILMES e FILMES_LOG aps excluso de registro
Fonte: Elaborada pelo autor
157
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
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, automaticamente, 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:
NR_EXCLUSAO INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
DATA_EXCLUSAO DATE NOT NULL,
MATRICULA INTEGER NOT NULL PRIMARY KEY,
NOME VARCHAR(50) NOT NULL,
SEXO CHAR(1) NOT NULL,
TELEFONE VARCHAR(15),
SETOR INTEGER NOT NULL,
SALARIO NUMERIC(6,2), e
SENHA VARCHAR(20).
e-Tec Brasil
158
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
8.1 ndices
Quando fazemos uma consulta em uma ou mais tabelas, o BD pode ter de
lidar com uma massa considervel de registros. Imagine o trabalho que gera
a busca de um registro em uma tabela com 7 mil registros. Se a busca for
sequencial e o registro procurado estiver ocupando a posio 5.354, o banco
comear a busca a partir do primeiro registro e vericar, um a um, cada
registro, at que nalmente encontre o registro desejado ou chegue ao nal
da tabela. Nesse caso, o BD efetuaria a leitura em exatamente 5.354 registros at nalmente encontrar o procurado.
159
ndice (INDEX)
um recurso utilizado pelos BDs
para a rpida localizao de registros em tabelas; trata-se de um
arquivo que funciona de maneira
semelhante ao ndice de um livro
ou o catlogo de uma biblioteca.
Conforme Korth, Silberschatz
e Sudarshan (2006), quando
procuramos um livro por um
determinado autor, recorremos
a um catlogo de autores e uma
cha de papel nos diz exatamente onde localiz-lo. Para
facilitar nossa pesquisa, as chas
do catlogo so mantidas em
ordem alfabtica. Isso evita que
tenhamos de olhar cha a cha.
Normalmente pegamos qualquer
cha, avaliamos se ela est alfabeticamente antes ou depois da
cha que procuramos. Se estiver
antes, ento descartamos as que
esto antes da cha em avaliao
e nos dedicamos a procurar nas
chas subsequentes. Dessa forma,
a busca mais eciente. Localizamos a cha mais rapidamente.
Em BD, em vez de catlogos, h
tabelas e no lugar de chas de
papel temos registros.
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
INDICE
NOME
FUNCIONARIO
LOCALIZAO
ID
NOME
SEXO
SETOR
Andressa Alves
1007
Andressa Alves
Pedro Souza
1015
Bernardo Souto
Walter Silva
1021
Cludio Silva
1022
Pedro Souza
1023
Peterson Frei
1024
Paula Ramos
1029
Walter Silva
1055
Woney Speran
e-Tec Brasil
160
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
161
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
A criao de um ndice para NOME foi estratgica. Anal, no difcil imaginar que um usurio no acostumado com os identicadores (ID) criados para
cada ARTISTA, venha a solicitar buscas pela coluna NOME:
mysql> SELECT * FROM ARTISTA WHERE NOME LIKE %LENNON%;
Empty set (0.08 sec)
O critrio de pesquisa utilizado o de NOME com a string LENNON
em qualquer parte de seu contedo. Como criamos um ndice, a leitura
no ser sequencial.
mysql> SHOW INDEX FROM ARTISTA;
O comando SHOW INDEX FROM <NOME-DA-TABELA>; exibe dados
de todos os ndices criados para uma tabela especca (Figura 8.2).
e-Tec Brasil
162
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
163
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
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 (Figura 8.3). So elas: ID_EXAME (Identicador do Exame nossa chave primria), COD_AMB (cdigo usado pela Associao Mdica Brasileira para
identicar o exame), NOME_CIENTIFICO, NOME (o nome abreviado do exame) 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
e-Tec Brasil
164
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
165
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
Transao
Pode ser denida como um
conjunto de comandos de
programao que, aps sua
execuo, ainda preserva a
consistncia do BD. Caso o BD
estivesse consistente antes da
execuo da transao, podemos
estar certos de que permanecer
consistente aps sua execuo.
Conforme Korth, Silberschatz
e Sudarshan (2006), toda
transao atmica: ou todas
as instrues de uma transao
so executadas, ou ento
nenhuma delas . A possibilidade
de apenas parte das instrues
associadas transao ser
executada simplesmente
inexistente. uma questo de
tudo ou nada.
Quando uma transao completa sua execuo com sucesso, dizemos que
ela foi compromissada. Por outro lado, quando no consegue concluir sua
execuo com sucesso, a transao assume a condio de abortada. A
regra da atomicidade exige que todas as aes perpetradas por uma transao abortada devem ser desfeitas, de maneira que essa transao no
tenha efeito sobre o estado do Banco de Dados.
Para assegurar a consistncia dos dados, transaes costumam implementar
um histrico incremental com atualizaes adiadas. Considere nosso exemplo da venda de um notebook quando, antes da venda ser efetuada, a situao no BD fosse a da Figura 9.1.
PRODUTO
LOG DO SISTEMA
DESCRICAO
ESTOQUE
Notebook
20
TV Plasma
13
VENDA
NR VENDA
DESCRICAO
QUANTIDADE
e-Tec Brasil
166
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
PRODUTO
LOG DO SISTEMA
DESCRICAO
ESTOQUE
Notebook
20
TV Plasma
13
<T1, INCIO>
VENDA
NR VENDA
DESCRICAO
QUANTIDADE
LOG DO SISTEMA
DESCRICAO
ESTOQUE
<T1, INCIO>
Notebook
20
TV Plasma
13
VENDA
NR VENDA
DESCRICAO
QUANTIDADE
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 apenas parcialmente executada como determina a regra do tudo ou nada. Assim, 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.
167
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
LOG DO SISTEMA
DESCRICAO
ESTOQUE
<T1, INCIO>
Notebook
20
TV Plasma
13
VENDA
NR VENDA
DESCRICAO
QUANTIDADE
Notebook
LOG DO SISTEMA
DESCRICAO
ESTOQUE
<T1, INCIO>
Notebook
20
TV Plasma
13
VENDA
NR VENDA
DESCRICAO
QUANTIDADE
Notebook
e-Tec Brasil
168
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
LOG_DO_ SISTEMA
DESCRICAO
ESTOQUE
<T1, INCIO>
Notebook
19
TV Plasma
13
VENDA
NR_VENDA
DESCRICAO
QUANTIDADE
Notebook
169
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
PRODUTO
LOG_DO_SISTEMA
DESCRICAO
ESTOQUE
<T1, INCIO>
Notebook
19
TV Plasma
13
VENDA
NR_VENDA
DESCRICAO
QUANTIDADE
Notebook
A simples existncia dos registros <T1,INICIO> e <T1,FIM> caracteriza a transao T1 como compromissada.
e-Tec Brasil
170
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
A sequncia de comandos da Figura 9.8 exemplica a utilizao de transaes no MySQL. O comando START TRANSACTION; inicia a transao. Em
seguida fazemos uma consulta (SELECT) para visualizar o ESTOQUE dos produtos. Ento, inserimos um novo registro na tabela VENDA (INSERT) e atualizamos (UPDATE) um registro de PRODUTO. Finalmente, conrmamos todas
as atualizaes com o comando COMMIT (compromissar). Se tivssemos
concludo a transao com o comando ROLLBACK, todas as atualizaes
teriam sido desfeitas.
Se uma falha qualquer ocorresse entre os comandos INSERT e UPDATE,
o prprio MySQL executaria o comando ROLLBACK. Porm, isso somente
seria possvel se, antes dos comandos INSERT e UPDATE, o comando START
TRANSACTION fosse executado. Se o usurio do BD se esquecer desse ltimo comando, a transao simplesmente no existe e falhas poderiam conduzir o BD a uma situao de inconsistncia.
171
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
Resumo
Nesta aula conhecemos o importante conceito de transao em Banco de
Dados. Notamos como essa tecnologia de vital importncia para a integridade 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 implementao de transaes em Bancos de Dados MySQL. Como visto na atividade
proposta ao nal desta aula, as transaes podem ser utilizadas em procedimentos 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.
Esse procedimento armazenado de nome TRANSFERENCIA recebe como parmetros de entrada (1) o nmero da conta-corrente de onde o dinheiro ser retirado, (2) o nmero da conta onde ser depositado e (3) o valor a ser transferido.
Apesar de pronto e testado, esse procedimento armazenado no faz uso de
transao. Sua tarefa alter-lo para que passe a trabalhar com uma transao. Ela impedir a possibilidade de um valor debitado em uma conta no
ser creditado em outra.
e-Tec Brasil
172
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
173
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
Referncias
CHEN, Peter. Modelagem de dados: a abordagem entidade-relacionamento para
projeto lgico. Traduo de Ceclia Camargo Bartalotti. So Paulo: Makron Books, 1990.
Date, C. J. Bancos de dados: introduo aos sistemas de bancos de dados. Traduo de
Hlio Auro Golveia. 8. ed. Rio de Janeiro: Campus, 2004.
ELMASRI, R.; NAVATHE, E. Sistemas de Bancos de Dados. Traduo de Marlia
Guimares Pinheiro. 4. ed. So Paulo: Pearson Addison Wesley, 2005.
FALBO, R. A. Projeto de sistemas: notas de aula. Disponvel em: <http://ebookbrowse.
com/projeto-estruturado-de-sistemas-programa-ricardo-falbo-2010-1-pdf-d53398277>.
Acesso em: 28 jun. 2011.
HEUSER, Carlos Alberto. Projeto de Banco de Dados. Porto Alegre: Sagra Luzzato, 2004.
KORTH, Henry F.; SILBERSCHATZ, Abraham; SUDARSHAN, S. Sistema de Banco de
Dados. Traduo de Marlia Guimares Pinheiro e Cludio Csar Canhette. Rio de Janeiro:
Campus, 2006.
KORTH, Henry F.; SILBERSCHATZ, Abraham; SUDARSHAN, S. Database System Concepts.
Disponvel em: <http://www.db-book.com>. Acesso em: 23 mar. 2011.
LVY, Pierre. As tecnologias da inteligncia: o futuro do pensamento na era da
informtica. Traduo de Carlos Irineu da Costa. Rio de Janeiro: Editora 34, 1993.
TAHAGHOGHI, S.; WILLIAMS, H. Aprendendo MySQL. Traduo de Alonso Dias. Rio de
Janeiro: Alta Books, 2007.
e-Tec Brasil
174
Banco de Dados
20/06/12 20:04
www.cliqueapostilas.com.br
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 especialista e conteudista da disciplina de Economia e Finanas (CEAD) e posteriormente 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.
Currculo do professsor-autor
175
e-Tec Brasil
20/06/12 20:04
www.cliqueapostilas.com.br
20/06/12 20:04