Você está na página 1de 165

PROJETO E OTIMIZAÇÃO DE BANCO DE

DADOS
Professor: Renato Augusto dos Santos Cortes
Índice
Apresentação ................................................................................................................................ 7
Aula 1: Modelo relacional ............................................................................................................. 9
Introdução ............................................................................................................................. 9
Conteúdo .............................................................................................................................. 10
Conceitos do modelo relacional .................................................................................. 10
Definição matemática de relação................................................................................. 10
Conceitos do modelo relacional .................................................................................. 11
Projeto (design) de bancos de dados .......................................................................... 12
Exemplo de diagrama de entidades e relacionamentos (modelo conceitual) .... 12
Exemplo de relações ou tabelas (modelo físico) ....................................................... 13
Conceitos .......................................................................................................................... 13
Regras de integridade do modelo relacional ............................................................. 15
Atividade Proposta .......................................................................................................... 16
Referências........................................................................................................................... 17
Exercícios de fixação ......................................................................................................... 17
Notas ........................................................................................................................................... 20
Chaves de resposta ..................................................................................................................... 20
Aula 1 ..................................................................................................................................... 20
Exercícios de fixação ....................................................................................................... 20
Aula 2: Álgebra relacional ........................................................................................................... 22
Introdução ........................................................................................................................... 22
Conteúdo .............................................................................................................................. 23
Introdução......................................................................................................................... 23
Álgebra relacional ............................................................................................................ 23
Operadores da álgebra relacional ................................................................................ 24
Classificações da álgebra relacional quanto à sua origem ...................................... 24
Classificações da álgebra relacional quanto ao número de relações ................... 24
Classificações da álgebra relacional quanto à área matemática............................ 25
Operações primitivas da álgebra relacional ............................................................... 25
Operação de projeção .................................................................................................... 25
Operação de seleção ...................................................................................................... 27
Operação de projeção com seleção ............................................................................ 28
Produto Cartesiano ......................................................................................................... 29

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 1


Produto cartesiano com projeção e seleção ............................................................. 30
União .................................................................................................................................. 31
Modelo de dados - exemplo .......................................................................................... 31
Interseção.......................................................................................................................... 33
Diferença ........................................................................................................................... 34
Junção ............................................................................................................................... 36
Junção natural ................................................................................................................. 37
Atividade proposta .......................................................................................................... 37
Referências........................................................................................................................... 40
Exercícios de fixação ......................................................................................................... 40
Chaves de resposta ..................................................................................................................... 43
Aula 2 ..................................................................................................................................... 43
Exercícios de fixação ....................................................................................................... 43
Aula 3: Linguagem SQL – Parte 1 ................................................................................................ 45
Introdução ........................................................................................................................... 45
Conteúdo .............................................................................................................................. 46
Introdução à linguagem SQL e suas divisões sintáticas .......................................... 46
Principais características da SQL .................................................................................. 46
Grupos de comandos SQL ............................................................................................. 47
Tipos de domínios básicos ............................................................................................ 48
Linguagem de Definição de Dados (DDL) – criação de uma tabela...................... 49
Linguagem de Definição de Dados (DDL) – SQL Constraints ................................. 51
Linguagem de Definição de Dados (DDL) – alteração de uma tabela .................. 52
Linguagem de Definição de Dados (DDL) – remoção de uma tabela .................. 52
Linguagem de Definição de Dados (DDL) – truncando uma tabela ..................... 53
Linguagem de Definição de Dados (DDL) – criação e remoção de índices ........ 53
Atividade proposta .......................................................................................................... 54
Referências........................................................................................................................... 54
Exercícios de fixação ......................................................................................................... 55
Chaves de resposta ..................................................................................................................... 58
Aula 3 ..................................................................................................................................... 58
Exercícios de fixação ....................................................................................................... 58
Aula 4: Linguagem SQL – Parte 2 ................................................................................................ 59
Introdução ........................................................................................................................... 59
Conteúdo .............................................................................................................................. 60
Introdução......................................................................................................................... 60

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 2


Inclusão de tuplas em uma tabela ............................................................................... 61
Atualização dos dados de uma tabela ......................................................................... 62
Remoção de dados de uma tabela............................................................................... 63
Conceito de transação.................................................................................................... 63
Propriedades ACID .......................................................................................................... 64
Controle de transações .................................................................................................. 64
Comando SELECT............................................................................................................ 65
SELECT - operadores ...................................................................................................... 65
SELECT – consulta simples ............................................................................................ 66
DISTINCT ........................................................................................................................... 67
WHERE ............................................................................................................................... 68
Operações no comando SELECT ................................................................................. 70
Operadores lógicos ......................................................................................................... 71
Operador LIKE .................................................................................................................. 71
Operador BETWEEN ........................................................................................................ 73
Operador IN ...................................................................................................................... 73
Operador NULL/NOT NULL ........................................................................................... 74
ALIAS .................................................................................................................................. 74
Concatenação de campos ............................................................................................. 75
Ordenação do resultado................................................................................................. 76
Atividade proposta .......................................................................................................... 78
Referências........................................................................................................................... 78
Exercícios de fixação ......................................................................................................... 78
Chaves de resposta ..................................................................................................................... 82
Aula 4 ..................................................................................................................................... 82
Exercícios de fixação ....................................................................................................... 82
Aula 5: Linguagem SQL – Parte 3 ................................................................................................ 84
Introdução ........................................................................................................................... 84
Conteúdo .............................................................................................................................. 85
Tabelas de exemplo ........................................................................................................ 85
Select – funções de agregação ..................................................................................... 85
Agrupamentos .................................................................................................................. 86
Cláusula having ................................................................................................................ 86
Junção e junção interna (INNER JOIN)....................................................................... 86
Usando joing using ......................................................................................................... 88
Junção natural (natural join) ......................................................................................... 88

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 3


Usando ALIAS ................................................................................................................... 89
Várias tabelas no JOIN ................................................................................................... 89
Autojunção ....................................................................................................................... 89
Tipos de junção e operações ........................................................................................ 90
Subconsulta ...................................................................................................................... 94
Operador EXISTS/NOT EXISTS....................................................................................... 95
Operador ALL ................................................................................................................... 95
Operador ANY .................................................................................................................. 96
Criação de visões (VIEWS) ............................................................................................. 96
Linguagem de controle de dados (DCL) ..................................................................... 99
Comando GRANT ............................................................................................................ 99
Atividade proposta .......................................................................................................... 99
Referências......................................................................................................................... 100
Exercícios de fixação ....................................................................................................... 100
Notas ......................................................................................................................................... 105
Chaves de resposta ................................................................................................................... 105
Aula 5 ................................................................................................................................... 105
Exercícios de fixação ..................................................................................................... 105
Aula 6: Indexação ...................................................................................................................... 108
Introdução ......................................................................................................................... 108
Conteúdo ............................................................................................................................ 109
Índices – conceitos básicos ......................................................................................... 109
Tipos básicos de índices............................................................................................... 110
Índices sobre arquivos sequenciais............................................................................ 110
Atualização de índice: exclusão .................................................................................. 115
Atualização de índice: inserção .................................................................................. 115
Arquivos de índice de árvore B+................................................................................. 116
Estrutura de nós da árvore B+ ..................................................................................... 117
Definição de um índice em SQL ................................................................................. 120
Atividade proposta ........................................................................................................ 121
Referências......................................................................................................................... 122
Exercícios de fixação ....................................................................................................... 122
Notas ......................................................................................................................................... 124
Chaves de resposta ................................................................................................................... 124
Aula 6 ................................................................................................................................... 124
Exercícios de fixação ..................................................................................................... 124

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 4


Aula 7: Transações .................................................................................................................... 126
Introdução ......................................................................................................................... 126
Conteúdo ............................................................................................................................ 127
Introdução a transações............................................................................................... 127
Conceito de transação.................................................................................................. 127
Operações de leitura/escrita ........................................................................................ 128
Execução das operações .............................................................................................. 128
Exemplo de acesso aos dados .................................................................................... 129
Estados de uma transação ........................................................................................... 130
Transição de estados de uma transação .................................................................. 131
Propriedades de uma transação ................................................................................. 132
Atomicidade.................................................................................................................... 132
Consistência ................................................................................................................... 133
Isolamento ...................................................................................................................... 134
Durabilidade ou persistência ....................................................................................... 135
Gerência básica de transações.................................................................................... 135
Transações em SQL....................................................................................................... 136
Consistência dos dados ................................................................................................ 138
Controle de concorrência ............................................................................................ 139
Problema da perda de atualização ............................................................................. 139
Problema da atualização temporária (leitura suja) ................................................. 140
Problema da agregação incorreta .............................................................................. 140
Problema da leitura não-repetitiva ............................................................................ 140
Atividade Proposta ........................................................................................................ 141
Referências......................................................................................................................... 142
Exercícios de fixação ....................................................................................................... 143
Chaves de resposta ................................................................................................................... 145
Aula 7 ................................................................................................................................... 145
Exercícios de fixação ..................................................................................................... 145
Aula 8: Otimização e proces. de consultas ................................................................................ 146
Introdução ......................................................................................................................... 146
Conteúdo ............................................................................................................................ 147
Conceito de performance em Banco de Dados ...................................................... 147
Arquitetura funcional de um SGBD ............................................................................ 149
Componentes envolvidos na execução de uma consulta .................................... 150
Fluxo de execução de uma consulta SQL ................................................................. 151

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 5


Componentes envolvidos ............................................................................................ 151
Fluxo dentro do otimizador CBO................................................................................ 153
Gerador de planos ......................................................................................................... 153
Gerador de registros ..................................................................................................... 154
Executor de SQL ............................................................................................................. 154
Plano de execução (exemplo SGBD Oracle) ............................................................. 154
Gerando planos de execução no SGBD Oracle ....................................................... 154
Colunas do plano de execução................................................................................... 155
Métodos de acesso ........................................................................................................ 156
Índices .............................................................................................................................. 157
Ações para melhoria de comandos SQL ................................................................... 158
Atividade proposta ........................................................................................................ 159
Referências......................................................................................................................... 159
Exercícios de fixação ....................................................................................................... 160
Notas ......................................................................................................................................... 162
Chaves de resposta ................................................................................................................... 163
Aula 8 ................................................................................................................................... 163
Exercícios de fixação ..................................................................................................... 163
Conteudista ............................................................................................................................... 164

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 6


Projeto e otimização de banco de dados -
Apostila

Apresentação
As instituições hoje têm nos seus dados o mais precioso ativo. Quem tem o
domínio sobre suas informações tem grande vantagem competitiva. O grande
desafio reside em lidar com os grandes volumes de dados gerados pelo mundo
moderno. Armazenar, recuperar e manipular os dados das organizações é
missão crítica.

Os Sistemas Gerenciadores de Banco de Dados Relacionais (SGBDR) são o


ponto central nesse contexto. Os pesquisadores de sistemas de armazenamento
de bancos de dados têm desenvolvido novas tecnologias para permitir maior
eficiência no gerenciamento, armazenamento e na recuperação de dados.

No entanto, o desenvolvimento tecnológico por si só não traz resultados


duradouros sem um bom projeto de banco de dados, desde o modelo
conceitual, passando pelo modelo lógico, até o modelo físico. É imprescindível
que os desenvolvedores de sistemas tenham conhecimento aprofundado do
funcionamento dos SGBDR e da linguagem SQL para produzir modelos de
dados eficientes e consultas performáticas.

Neste contexto é de fundamental importância a compreensão da sintaxe SQL,


do controle de transação e das técnicas de otimização de consultas, permitindo
o uso eficiente dos recursos do SGBDR.

Sendo assim, essa disciplina tem como objetivos:


1. Esclarecer os conceitos fundamentais do Modelo Relacional;

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 7


2. Empregar comandos utilizando a Linguagem SQL;
3. Aplicar índices;
4. Registrar transações;
5. Desenvolver consultas a bancos de dados.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 8


Aula 1: Modelo relacional
Introdução
Nesta aula, serão apresentados os conceitos do Modelo Relacional, a estrutura
relacional de dados e as regras de integridade relacional.

Objetivo:
1. Apresentar os conceitos do Modelo Relacional;
2. Descrever as regras de integridade do Modelo Relacional.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 9


Conteúdo

Conceitos do modelo relacional


O Modelo Relacional é um modelo de dados proposto pelo pesquisador Edgar F.
Codd em 1970 e tem seus fundamentos na teoria de conjuntos. Está baseado
no princípio de que os dados são guardados em tabelas relacionais, também
chamadas de relações.

Uma tabela ou relação consiste em uma entidade bidimensional, constituída de


linhas (ou tuplas) e colunas (ou atributos). Cada linha da tabela representa uma
coleção de valores de dados relacionados, que podem ser interpretados como
fatos que descrevem uma entidade ou um relacionamento.

O nome da tabela e os nomes das colunas são usados para ajudar na


interpretação do significado dos valores em cada linha da tabela. Um banco de
dados relacional é um banco de dados que modela os dados de tal forma que
eles sejam percebidos pelo usuário como tabelas. O termo está relacionado aos
dados organizados segundo o Modelo Relacional, ou a um Sistema Gerenciador
de Banco de Dados Relacional (SGBDR) – do inglês Relational Database
Management System (RDBMS) – um software que implementa a abstração.

Definição matemática de relação


Considere conjuntos, não necessariamente disjuntos D1, D2, ..., Dn de valores
atômicos.

R é uma relação sobre estes conjuntos (domínios de R), se e somente se R é


um conjunto de n-uplas (tuplas) ordenadas <d1, d2, ... , dn>, tal que para
i=1,2,...,n di pertence a Di.

Exemplo:
A = {1, 2, 3, 4, 5}
B = {2, 3, 4, 6, 7}

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 10


R = B é o dobro de A
R = {(2,1), (4,2), (6,3)}

Conceitos do modelo relacional


Vejamos agora os conceitos do modelo relacional:

Relação = Tabela bi-dimensional, composta de linhas e colunas de dados


Relação recursiva = Relaciona o objeto a si mesmo
Atributo = Coluna
Grau de uma relação = Número de atributos
Tupla = Cada linha da relação
Domínio de um atributo = Conjunto ao qual pertence os valores de um atributo
Exemplo: O atributo SEXO de uma tabela ALUNO só pode conter os valores M
(masculino) e F (feminino).

Valor nulo de um atributo de uma tupla = Atributo inaplicável ou com valor


desconhecido

Atenção
Esquema de Banco de Dados Relacional = Nomes das relações
seguidos pelos nomes dos atributos, com os atributos chaves
sublinhados e com as chaves estrangeiras identificadas (duplo
sublinhado).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 11


Projeto (design) de bancos de dados
Temos aqui um esquema de um projeto (design) de um banco de dados. Veja
como é o seu funcionamento:

Exemplo de Esquema (Modelo Lógico)


FUNCIONÁRIO (MAT, NOME, ENDERECO, CPF, DT_ADM, CODDEPTO,
CODCARGO)
CARGO (CODCARGO, DESC_CARGO)
DEPARTAMENTO (CODDEPTO, NOME_DEPTO)

Exemplo de diagrama de entidades e relacionamentos (modelo


conceitual)
Observe o exemplo de um diagrama de entidades e relacionamentos (modelo
conceitual) e suas características:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 12


Exemplo de relações ou tabelas (modelo físico)
Vejamos agora um exemplo de um modelo físico em forma de tabelas:

Conceitos
Entenda o conceito de cada item de uma relação:

Atributo identificador
O atributo ou conjunto de atributos que será utilizado para identificar instâncias
de uma entidade faz parte do modelo conceitual.

Chave
Designa o conceito de item de busca, isto é, um atributo ou conjunto de
atributos que será utilizado nas consultas à base de dados. É um conceito
lógico da aplicação.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 13


Índice
É um recurso físico que visa otimizar a recuperação de uma informação via
método de acesso. O banco de dados usa o índice de maneira semelhante ao
índice remissivo de um livro, verifica um determinado assunto no índice e
depois localiza a sua posição em uma determinada página.

Obs.: Uma chave pode ser utilizada como índice, mas um índice não é,
necessariamente, uma chave.

Chave candidata
Deve ser única, ou seja, nenhuma tupla de uma mesma relação pode ter o
mesmo valor para o atributo escolhido como chave candidata. Deve ser
irredutível, nenhum subconjunto da chave candidata pode ter sozinho a
propriedade de ser único. Pode ser:

Simples: quando é composta por apenas um atributo;


Composta: quanto possui mais de um atributo para formar a chave.

Chave primária
É um caso especial da chave candidata. É a escolhida entre as candidatas para
identificar unicamente uma tupla.

Chave estrangeira
É quando um atributo de uma relação é chave primária em outra. Constitui
um conceito de vital importância no modelo relacional: é o elo lógico entre as
tabelas (relacionamentos).

Através das operações com as chaves estrangeiras que se garante a


Integridade Referencial do banco de dados que você verá a seguir.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 14


Regras de integridade do modelo relacional
Conheça agora as regras de integridade do modelo relacional:

Regras de integridade

Regras que devem ser obedecidas em todos os estados válidos da base de


dados (podem envolver uma ou mais linhas de uma ou mais tabelas. São elas:

a) Domínio
b) Chave
c) Entidade
d) Referencial

Integridade de domínio

Especificam que dentro de cada tupla o valor de cada atributo deve ser um
valor atômico. Os tipos de dados associados aos domínios incluem:

• Inteiros (inteiro curto, inteiro e inteiro longo);


• Números reais (ponto flutuante e flutuante de precisão dupla);
• Caracteres booleanos;
• Cadeias de caracteres (data, hora, timestamp) etc.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 15


Integridade de chave

A chave é um atributo ou conjunto de atributos cujo valor ou combinação de


valores deve ser único em qualquer instância da relação.

Integridade de entidade

O valor da chave não pode ser vazio (nulo). A chave primária serve como
representante na base de dados de uma entidade – se a chave primária for
vazia, a linha não corresponde a nenhuma entidade.

Integridade referencial

As chaves estrangeiras tem que ser respeitadas, ou seja, se existe um


determinado valor para o atributo na tabela onde ele é chave estrangeira esse
valor deve existir na tabela onde ele é chave primária.

Integridade semântica

Restrições de integridade semântica ou regras do negócio também podem ser


especificadas no Banco de Dados. Essas restrições dependem da semântica do
negócio ou da aplicação. Exemplos:

Um funcionário só pode participar de 3 projetos ao mesmo tempo.


O menor salário da empresa deve ser maior ou igual ao salário mínimo vigente.
Todo funcionário deve estar lotado em um departamento.

Atividade Proposta
(AOCP/BRDE – 2011 - ANALISTA DE SISTEMAS) Na terminologia formal do
modelo relacional, encontramos os seguintes termos: tupla, atributo, relação e
domínio. Defina-os individualmente.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 16


Chave de resposta:
Existem alguns termos utilizados na terminologia do modelo relacional formal,
entre eles destacam-se os abaixos relacionados e suas respectivas definições:

• O termo Tupla refere-se a uma linha de uma relação;


• O termo Atributo refere-se a um cabeçalho de coluna de uma relação;
• O termo Relação refere-se a uma tabela;
• O termo Domínio (D) refere-se a um conjunto de valores atômicos.

Considerando que, por atômicos, entendemos que cada valor no domínio é


indivisível no que diz respeito ao modelo relacional.

Referências
ELMASRI, R.; NAVATHE, S., Sistemas de banco de dados. 4. ed. Pearson
Education do Brasil, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. 5. ed. Sistema
de banco de dados. Rio de Janeiro: Campus, 2006.

Exercícios de fixação
Questão 1
Em relação ao modelo relacional, marque a alternativa correta.
a) A chave estrangeira não precisa ser única, mas não pode ser nula.
b) O domínio de um atributo corresponde ao seu tipo de dado.
c) O valor de um atributo de uma tupla é nulo quando o seu valor é
desconhecido.
d) A integridade referencial é garantida através da chave primária.
e) Uma chave pode ser um índice, mas um índice é obrigatoriamente uma
chave.

Questão 2
Em relação aos conceitos apresentados, marque a alternativa correta.
a) Uma relação ou tabela é composta apenas por linhas ou tuplas de dados.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 17


b) Uma relação recursiva representa um loop no Banco de Dados.
c) Um atributo é o mesmo que uma linha da tabela.
d) O grau de uma relação corresponde ao número de atributos dessa
relação.
e) Um “Esquema” representa o índice de uma coluna da tabela.

Questão 3
Em relação as chaves, marque a alternativa correta.
a) A chave candidata não precisa ser única.
b) A chave candidata é um caso especial da chave primária.
c) A chave estrangeira ocorre quando um atributo é chave estrangeira em
outra relação.
d) Um índice é recurso lógico para otimizar a recuperação de uma
informação.
e) Uma chave estrangeira é o elo lógico entre as tabelas (relacionamentos).

Questão 4
Em relação ao Modelo Relacional, marque a alternativa incorreta.
a) O Modelo Relacional foi proposto pelo pesquisador Edgar F. Codd na
década de 1990.
b) O Modelo Relacional tem seus fundamentos na teoria de conjuntos.
c) O nome da tabela e os nomes das colunas são usados para ajudar na
interpretação do significado dos valores em cada linha da tabela.
d) Uma linha é também chamada de tupla.
e) Uma coluna é também chamada de atributo.

Questão 5
São etapas do projeto de Banco de Dados, exceto:
a) Coleta e análise de requisitos de dados
b) Análise de requisitos funcionais
c) Projeto físico
d) Projeto conceitual

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 18


e) Projeto lógico

Questão 6
São Regras de Integridade, exceto.
a) Domínio
b) Chave
c) Entidade
d) Referencial
e) Índice

Questão 7
Os seguintes tipos de dados podem estar associados a um domínio, exceto:
a) Inteiros
b) Símbolos
c) Números reais
d) Caracteres booleanos
e) Cadeias de caracteres

Questão 8
Em relação a regra de integridade da entidade e referencial, podemos afirmar:
a) O valor da chave primária pode ser vazio.
b) A chave primária não serve como representante de uma entidade.
c) O valor da chave estrangeira deve existir na tabela onde o atributo
relacionado é chave primária.
d) A chave estrangeira não pode ser nula.
e) A chave estrangeira não pode conter valores duplicados.

Questão 9
A afirmação “O salário do servidor público não pode ultrapassar o salário do
presidente da república” está associada ao seguinte termo:
a) Restrição de chave primária
b) Integridade referencial

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 19


c) Definição de um índice
d) Restrição de integridade semântica
e) Associação de tipos

Notas
Atributo identificador: Conjunto de atributos que será utilizado para
identificar instâncias de uma entidade.
Chave Estrangeira (Foreing Key): Mecanismo que permite a implementação
de relacionamentos no modelo relacional.
Chave Primária (Primary Key): Um campo ou conjunto de campos
escolhidos pelo projetista do banco de dados como de significado principal para
a identificação exclusiva de um registro dentro de uma tabela de dados.
Chave: Designa o conceito de item de busca.
Domínio (Domain): Conjunto de valores que um determinado atributo (ou
campo) pode assumir.
Índice: Recurso físico que visa otimizar a recuperação de uma informação.
Integridade Referencial: Utilizada para garantir a integridade dos dados
entre tabelas relacionadas.
Regras de integridade: Regras que estabelecem quando uma base de dados
está correta.

Chaves de resposta
Aula 1
Exercícios de fixação
Questão 1 - C
Justificativa: Um valor nulo significa ausência de valor ou valor desconhecido.

Questão 2 - D
Justificativa: O número de atributos da relação corresponde ao seu grau.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 20


Questão 3 - E
Justificativa: A chave estrangeira permite a ligação entre duas tabelas.
Questão 4 - A
Justificativa: O Modelo Relacional foi proposto por F. Codd na década de 1970.

Questão 5 - B
Justificativa: A análise de requisitos funcionais não é uma etapa do projeto de
banco de dados.
Questão 6 - E
Justificativa: Não existe regra de integridade chamada Índice.

Questão 7 - B
Justificativa: Símbolos não correspondem a um tipo de dados associado a um
domínio.

Questão 8 - C
Justificativa: Se existe um determinado valor para o atributo na tabela onde ele
é chave estrangeira, esse valor deve existir na tabela onde ele é chave
primária.

Questão 9 - D
Justificativa: Restrições de integridade semântica ou regras do negócio.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 21


Aula 2: Álgebra relacional
Introdução
Nesta aula, será apresentado o conceito de álgebra relacional. Serão estudadas
as operações de seleção e projeção, operações de conjunto, produto cartesiano
e junção.

Objetivo:
1. Conhecer o conceito de álgebra relacional, operações de seleção e projeção;
2. Realizar operações de conjunto, produto cartesiano e junção.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 22


Conteúdo

Introdução
A álgebra relacional pode ser definida como uma linguagem de consulta formal,
uma coleção de operações de alto nível sobre relações ou conjuntos. O
pesquisador E. F. Codd propôs tal álgebra como a base das linguagens de
consulta de banco de dados em seu modelo relacional de, dados visto na Aula
1.

A principal aplicação da álgebra relacional é sustentar a fundamentação teórica


de banco de dados relacional, particularmente linguagem de consulta para tais
bancos de dados, entre os maiores o SQL.

Na álgebra relacional alguns operadores são primitivos e os outros são


derivados em termos dos primitivos.

Linguagens Formais de Consulta ao Modelo Relacional

Álgebra Relacional

Linguagem procedural.

Cálculo Relacional

Relaciona Linguagem não procedural ou linguagem declarativa.

Álgebra relacional
Provê um fundamento formal para operações do modelo relacional.

Utilizada como base para implementar e otimizar as consultas nos sistemas


gerenciadores de banco de dados relacional (SGBDRs).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 23


Operadores da álgebra relacional

Classificações da álgebra relacional quanto à sua origem


Cinco operadores são ditos primitivos ou fundamentais, ou seja, através deles
qualquer expressão de consulta de dados é possível. São eles: seleção,
projeção, produto cartesiano, união e diferença.

Derivam dos operadores fundamentais. São definidos para facilitar a


especificação de certos procedimentos. São eles: interseção, junção (normal
e natural) e divisão.

Operadores que não se enquadram nos itens anteriores. São eles:


renomeação e alteração.

Classificações da álgebra relacional quanto ao número de


relações
Operam em uma única tabela. São eles: seleção, projeção, renomeação e
alteração.

Operam em duas tabelas. São eles: união, interseção, diferença, produto


cartesiano, junção e divisão.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 24


Classificações da álgebra relacional quanto à área matemática
Operadores adicionais, definidos pela álgebra relacional para manipulação de
dados. São eles: seleção, projeção, junção, divisão, renomeação e
alteração.

Operadores usuais da teoria de conjuntos da matemática. São eles: união,


interseção, diferença e produto cartesiano.

Funções matemáticas de agregação para uma coleção de valores de dados.


Entre as mais comuns estão a soma, média, máximo, mínimo e contador.

Operações primitivas da álgebra relacional


Modelo de Dados - Exemplo

Operação de projeção
Representada pela letra grega PI, é uma operação que produz um subconjunto
com os atributos passados como argumento e com todas as linhas do conjunto
inicial. É classificada como uma operação unária por operar sobre apenas um
conjunto de entrada.

π nome_coluna1, nome_coluna2, ... , nome_colunaN (nome_tabela)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 25


Argumentos: nome_coluna1, nome_coluna2, ... , nome_colunaN
Conjunto de Entrada: nome_tabela (relação)

Exemplo 1:
Mostrar o nome de todos os funcionários.

π NOME (FUNCIONÁRIO)

Exemplo 2:
Mostrar o nome e a data de admissão de todos os funcionários.

π NOME, DT_ADM (FUNCIONÁRIO)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 26


Operação de seleção
Representada pela letra grega sigma, é uma operação que produz um
subconjunto com os mesmos atributos do conjunto inicial, porém com as linhas
que satisfazem a uma determinada condição (chamada de predicado). A
seleção pode ser entendida como uma operação que filtra as linhas de uma
relação (tabela), e é uma operação unária, pois opera sobre um único conjunto
de dados.

σ predicado (nome_tabela)

Argumentos: predicado (filtro)


Conjunto de Entrada: nome_tabela

Exemplo 1:
Selecionar os funcionários que são analistas (código do cargo ‘AN’)

σ CODCARGO=’AN’ (FUNCIONÁRIO)

Exemplo 2:
Selecionar os funcionários que são analistas (código do cargo ‘AN’) e que
pertencem ao departamento de Tecnologia da Informação (código do
departamento ‘TI’)

σ CODCARGO=’AN’ ^ CODDEPTO=’TI’ (FUNCIONÁRIO)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 27


Exemplo 3:
Selecionar os funcionários que são analistas (código do cargo ‘AN’) ou que
pertencem ao departamento de Recursos Humanos (código do departamento
‘RH’)

CODCARGO=’AN’ v CODDEPTO=’RH’ (FUNCIONÁRIO)

Operação de projeção com seleção


Uso combinado das operações de seleção para filtrar linhas e projeção para
delimitar colunas em um subconjunto resultante.

π nome_coluna(s) (σ predicado (nome_tabela))

Exemplo 1:
Selecionar a matrícula e o nome dos funcionários admitidos após o ano de
2001.

π MAT, NOME (σ DT_ADM ≥ ’01/01/2001’ (FUNCIONÁRIO))

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 28


Exemplo 2:
Selecionar nome e data de admissão dos funcionários admitidos após o ano de
2001 e que não são analistas (código do cargo ‘AN’).

π NOME, DT_ADM (σ DT_ADM ≥ ’01/01/2001’ ^ CODCARGO ≠ ’AN’


(FUNCIONÁRIO))

Produto Cartesiano
O produto cartesiano de duas relações ou tabelas tem como resultado uma
terceira relação contendo todas as combinações possíveis entre os elementos
das relações originais.

A relação ou tabela resultante terá um número de colunas que é igual à soma


das quantidades de colunas das duas relações iniciais, e um número de linhas
igual ao produto do número de suas linhas. Dessa forma, o produto cartesiano

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 29


de uma relação 1 que possua 5 colunas e 3 linhas com uma relação 2 com 2
colunas e 5 linhas, a relação resultante terá 5+2 = 7 colunas e 3*5 = 15 linhas.

Exemplo 1:
Produto cartesiano de funcionários e cargos.

Resultado:

Produto cartesiano com projeção e seleção


Uso combinado das operações de seleção, projeção com produto cartesiano
para produzir um subconjunto resultantes com linhas e colunas filtradas e os
dados de mais de uma tabela.

Exemplo 1:
Selecionar o nome do funcionário e a descrição do seu cargo (atributo
DESC_CARGO) para funcionários admitidos à partir de 2003.

π NOME, DESC_CARGO (σ DT_ADM ≥ ’01/01/2003’ ^


FUNCIONÁRIO.CODCARGO=CARGO.CODCARGO(FUNCIONÁRIO X
CARGO))

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 30


União
O resultado é uma relação que contém todas as linhas da primeira relação
seguidas de todas as linhas da segunda relação. A relação resultante possui a
mesma quantidade de colunas que as relações originais, e tem um número de
linhas que é no máximo igual à soma das linhas das relações fornecidas como
operandos, já que as linhas que são comuns a ambas as relações aparecem
uma única vez no resultado. As relações devem possuir o mesmo número de
atributos.

Modelo de dados - exemplo

Exemplo 1:
Relacionar o nome dos clientes que têm conta ou empréstimo.

π NOME (σ CLIENTE.COD_CLI=CONTA.COD_CLI (CLIENTE X CONTA))

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 31


π NOME (σ CLIENTE.COD_CLI=EMPRESTIMO.COD_CLI (CLIENTE X
EMPRÉSTIMO))

R1 = π NOME (σ CLIENTE.COD_CLI=CONTA.COD_CLI (CLIENTE X CONTA))


R2 = π NOME (σ CLIENTE.COD_CLI=EMPRESTIMO.COD_CLI (CLIENTE X
EMPRESTIMO))
R3 = R1 U R2

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 32


Interseção
Produz como resultado uma relação que contém, sem repetições, todos os
elementos que são comuns às duas tabelas fornecidas como operandos. As
relações devem possuir o mesmo número de atributos.

Exemplo 1:
Relacionar o nome dos clientes que têm conta e empréstimo.

π NOME (σ CLIENTE.COD_CLI=CONTA.COD_CLI (CLIENTE X CONTA))

π NOME (σ CLIENTE.COD_CLI=EMPRESTIMO.COD_CLI (CLIENTE X


EMPRESTIMO))

R1 = π NOME (σ CLIENTE.COD_CLI=CONTA.COD_CLI (CLIENTE X CONTA))


R2 = π NOME (σ CLIENTE.COD_CLI=EMPRESTIMO.COD_CLI (CLIENTE X
EMPRESTIMO))
R3 = R1 R2

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 33


Diferença
O resultado é uma relação que possui todas as linhas que existem na primeira
relação e não existem na segunda. As relações devem possuir o mesmo
número de atributos.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 34


Exemplo 1:
Relacionar o nome dos clientes que têm conta e não têm empréstimo.

π NOME (σ CLIENTE.COD_CLI=CONTA.COD_CLI (CLIENTE X CONTA))

π NOME (σ CLIENTE.COD_CLI=EMPRESTIMO.COD_CLI (CLIENTE X


EMPRÉSTIMO))

Resultado:
R1 = π NOME (σ CLIENTE.COD_CLI=CONTA.COD_CLI (CLIENTE X CONTA))

R2 = π NOME (σ CLIENTE.COD_CLI=EMPRESTIMO.COD_CLI (CLIENTE X


EMPRESTIMO))

R3 = R1 ∩ R2

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 35


Junção
O resultado da operação junção é uma relação com todas as combinações das
tuplas na relação1 (R1) e relação2 (R2) que satisfazem a condição de junção.

Exemplo 1:
Relacionar todas as informações dos clientes que têm empréstimos.

CLIENTE |X| CLIENTE.COD_CLI=EMPRÉSTIMO.COD_CLI


EMPRÉSTIMO

Resultado:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 36


Junção natural
Quando os atributos usados na condição de junção têm o mesmo nome nas
duas relações não é necessário especificá-los. Dá-se o nome de junção natural.

Exemplo 1:
Relacionar o nome e CPF dos clientes do Rio de Janeiro que têm empréstimos.

π NOME, CPF (σ CLIENTE.CIDADE=’RIO DE JANEIRO’(CLIENTE |X|


EMPRESTIMO))

Obs.: A coluna COD_CLI tem o mesmo nome na tabela EMPRÉSTIMO e na


tabela CLIENTE.

Atividade proposta
Atividade 1
Dadas às relações, escreva as sentenças da Álgebra Relacional que respondem
às questões propostas.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 37


a) Selecionar o código do cliente e o código da agência dos empréstimos
maiores que de 300,00.
b) Selecionar os códigos dos clientes que têm conta na agência 04, mas não
têm empréstimo na mesma agência.

As relações são:

AGÊNCIA
Código Nome Cidade
01 Centro Rio de Janeiro
02 Arariboia Niterói
03 Centro Rio de Janeiro
04 Centro São Gonçalo

CLIENTE
Código Nome Cidade
01 Luiz Niterói
02 João Niterói
03 Ana Rio de Janeiro
04 Maria Rio de Janeiro
05 Pedro Rio de Janeiro
06 João Rio de Janeiro
07 Mário Rio de Janeiro
08 Renato São Gonçalo
09 Felipe São Gonçalo
10 Kátia São Gonçalo
EMPRÉSTIMO
Número Cód_cliente Cód_agência Quantia
01 01 01 100,00
02 01 04 300,00
03 06 01 100,00

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 38


04 07 04 300,00
05 05 04 200,00

CONTA
Número Cód_cliente Cód_agência Saldo
01 01 01 100,00
02 07 01 400,00
03 02 01 200,00
04 03 02 300,00
05 08 02 200,00
06 04 02 300,00
07 04 03 400,00
08 03 03 300,00
09 07 04 100,00
10 02 04 100,00
11 09 04 200,00

Chave de resposta:
a) π cod_cli,cod_ag (squantia > 300,00 (EMPRÉSTIMO))
b) π cod_cli (σcod_ag = 04 (CONTA) - πcod_cli (σcod_ag = 04 (EMPRESTIMO)

Material complementar

Para saber mais sobre álgebra relacional, leia os textos disponíveis


em nossa biblioteca virtual.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 39


Referências
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 4. ed. Pearson
Education do Brasil, 2005.

Exercícios de fixação
Questão 1
Em relação a álgebra relacional, marque a alternativa correta.
a) Corresponde a uma coleção de operações de baixo nível sobre relações.
b) É a base das linguagens de consulta a banco de dados.
c) Só existem operadores primitivos.
d) Não pode ser utilizada para otimizar consultas em SGBDR.
e) É linguagem declarativa, não procedural.

Questão 2
Em relação aos operadores da álgebra relacional, marque a alternativa correta.
a) Podem ser classificados quanto a origem, número de relações e área
matemática.
b) São operadores derivados: interseção, junção e projeção.
c) São exemplos de operadores renomeação, alteração e seleção.
d) Os operadores primitivos são definidos para facilitar certos
procedimentos.
e) Os operadores união, interseção, diferença e seleção são binários.

Questão 3
Sobre os operadores da álgebra relacional, marque a alternativa incorreta.
a) São exemplos de operadores usuais da teoria de conjuntos da
matemática: união, interseção, diferença e produto cartesiano.
b) São funções matemáticas de agregação: soma, média, máximo e
mínimo.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 40


c) O símbolo σ representa uma operação de seleção.
d) O símbolo ← representa uma operação de renomeação.
e) O símbolo π representa uma operação de projeção.

Questão 4
Seja a tabela ALUNO (MAT, NOME, END, SEXO, DT_NASC). A sentença da
álgebra relacional que responde à proposição “Recuperar a matrícula e o nome
de todos os alunos do sexo masculino (atributo SEXO = ‘M’) é:
a) π MAT, NOME (π SEXO=’M’ (ALUNO)).
b) σ SEXO=’M’ (ALUNO).
c) π MAT, NOME (σ SEXO=’M’ (ALUNO)).
d) σ MAT, NOME (π SEXO=’M’ (ALUNO)).
e) π SEXO=’M’ (ALUNO).

Questão 5
Seja a tabela ALUNO (MAT, NOME, END, SEXO, DT_NASC). A sentença da
álgebra relacional que responde à proposição “Recuperar o nome de todos os
alunos nascidos no ano 2000) é:
a) σ NOME (π DT_NASC ≥ ’01/01/2000’ v DT_NASC ≤ ’31/12/2000’
(ALUNO)).
b) π NOME (σ DT_NASC > ’01/01/2000’ ^ DT_NASC < ’31/12/2000’
(ALUNO)).
c) π NOME (σ DT_NASC = ’2000’ (ALUNO)).
d) π NOME (σ DT_NASC ≥ ’01/01/2000’ ^ DT_NASC ≤ ’31/12/2000’
(ALUNO)).
e) π NOME (σ DT_NASC ≥ ’01/01/2000’ (ALUNO)).
Questão 6
A relação resultante do produto cartesiano de uma relação 1 que possua 7
colunas e 4 linhas com uma relação 2 com 3 colunas e 6 linhas terá:
a) 11 colunas e 18 linhas.
b) 10 colunas e 24 linhas.
c) 13 colunas e 7 linhas.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 41


d) 24 colunas e 10 linhas.
e) 7 colunas e 13 linhas.

Questão 7
A expressão π NOME (σ
FUNCIONARIO.CODCARGO=CARGO.CODCARGO(FUNCIONARIO X CARGO))
representa:
a) Um Produto Cartesiano com Projeção e Seleção.
b) Uma Junção.
c) Somente um Produto Cartesiano.
d) Uma Junção Natural.
e) Somente uma Seleção e Projeção.

Questão 8
Qual operação da Álgebra Relacional produz como resultado uma relação que
contém, sem repetições, todos os elementos que são comuns às duas tabelas
fornecidas como operandos?
a) União
b) Diferença
c) Interseção
d) Junção Natural
e) Projeção

Questão 9
Em uma operação de Diferença é necessário que:
a) As relações satisfaçam a condição de junção.
b) As relações possuam o mesmo número de linhas.
c) Seja possível realizar uma operação de Junção Natural.
d) Apenas uma relação esteja envolvida.
e) As relações possuam o mesmo número de atributos.

Questão 10

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 42


A expressão CLIENTE |X| CLIENTE.COD_CLI=EMPRÉSTIMO.COD_CLI
EMPRÉSTIMO
Pode ser substituída pela expressão:
a) σ CLIENTE.COD_CLI= EMPRÉSTIMO.COD (CLIENTE X EMPRÉSTIMO).
b) CLIENTE U EMPRÉSTIMO.
c) CLIENTE ∩ EMPRÉSTIMO.
d) CLIENTE |X| EMPRÉSTIMO.
e) π NOME (CLIENTE |X| EMPRÉSTIMO).

Chaves de resposta
Aula 2
Exercícios de fixação
Questão 1 - B
Justificativa: Conforme proposto por E.F. Codd.

Questão 2 - A
Justificativa: Os operadores da álgebra relacional podem ser classificados
quanto a origem, número de relações e área matemática.

Questão 3 - D
Justificativa: O símbolo ← representa uma operação de atribuição e não de
renomeação.

Questão 4 - C
Justificativa: A combinação das operações de projeção e seleção tem a sintaxe:
π nome_coluna(s) (σ predicado (nome_tabela)).

Questão 5 - D

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 43


Justificativa: A combinação das operações de projeção e seleção tem a sintaxe:
π nome_coluna(s) (σ predicado (nome_tabela)).

Questão 6 - B
Justificativa: Terá 7+3= 10 colunas e 4*6= 24 linhas.

Questão 7 - A
Justificativa: Produto Cartesiano combinado com as operações de Projeção e
Seleção.

Questão 8 - C
Justificativa: A interseção produz como resultado uma relação que contém, sem
repetições, todos os elementos que são comuns às duas tabelas fornecidas
como operandos.

Questão 9 - E
Justificativa: A interseção produz como resultado uma relação que contém, sem
repetições, todos os elementos que são comuns às duas tabelas fornecidas
como operandos.

Questão 10 - D
Justificativa: Uma operação de junção onde os atributos da condição de junção
tenham o mesmo nome pode ser substituída por uma junção natural.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 44


Aula 3: Linguagem SQL – Parte 1
Introdução
Nesta aula, faremos uma introdução à linguagem SQL e suas divisões
sintáticas. Inicialmente, trataremos da Linguagem de Definição de Dados
(DDL); em seguida, serão apresentados os tipos de dados mais utilizados e as
sentenças para criação, alteração e exclusão de tabelas.

Objetivo:
1. Introduzir a linguagem SQL e suas divisões sintáticas;
2. Conhecer a Linguagem de Definição de Dados (DDL).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 45


Conteúdo

Introdução à linguagem SQL e suas divisões sintáticas


SQL é um acrônimo para Structured Query Language ou Linguagem de
Consulta Estruturada. Consiste em uma linguagem de pesquisa declarativa
padrão para acesso a banco de dados relacionais. A base da linguagem está
relacionada à álgebra relacional, estudada na aula anterior.

Dr. E. F. Codd

Historicamente, a SQL foi desenvolvida pela IBM, nos anos 70, dentro do
Projeto R, como parte da pesquisa do Dr. E. F. Codd, que visava demonstrar a
viabilidade da implementação do modelo relacional. Originalmente, a linguagem
se chamava SEQUEL, acrônimo para “Structured English Query Language”
(Linguagem de Consulta Estruturada), e foi desenvolvida para acesso ao
System R, sistema de banco de dados construído pela IBM no seu Centro de
Pesquisas de Almaden, em San Jose, Califórnia.

Logo, a linguagem se tornaria um padrão para acesso a banco de dados


relacionais.

Em 1986, o ANSI (American National Standarts Institute) publicou um padrão


SQL, denominado SQL-86. Seguiram-se outras publicações posteriores: SQL-89
(padrão estendido), SQL-92 (SQL2), SQL:1999 (SQL3), SQL:2003, SQL:2006,
SQL:2008 e SQL:2011.

Principais características da SQL


Manipulação e controle de bancos de dados relacionais
O acesso ao banco de dados pode ser feito das seguintes formas:

• Através de ambiente interativo de consultas;


• Embutida em linguagens hospedeiras (por exemplo, linguagens C e Java).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 46


Recursos:

• Alto poder de consulta;


• Gerenciamento de índices;
• Construção de visões;
• Execução de instruções em blocos.

Grupos de comandos SQL


A SQL pode ser dividida em subconjuntos de comandos conforme as operações
que se deseja efetuar em um banco de dados.

DDL

Data Definition Language


Linguagem de Definição de Dados
Comandos para definir, alterar e remover tabelas, visões e índices.
Exemplos: CREATE TABLE, CREATE INDEX, CREATE VIEW, ALTER TABLE,
ALTER INDEX, DROP INDEX, DROP VIEW.

DML

Data Manipulation Language


Linguagem de Manipulação de Dados
Comandos para inserir, remover, atualizar e consultar os dados armazenados
nas tabelas.
Exemplos: INSERT, DELETE e UPDATE.

DCL

Data Control Language


Linguagem de Controle de Dados

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 47


Comandos para trabalhos em ambiente multiusuário, que permitem estabelecer
níveis de segurança e manipular transações.
Exemplos: GRANT e REVOKE.

DTL

Data Transaction Language


Linguagem de Transação de Dados
Comandos para interagir com áreas de controle de transação.
Exemplos: COMMIT e ROLLBACK.

DQL

Data Query Language


Linguagem de Consulta de Dados
Comando para especificar uma consulta (“query”) como uma descrição do
resultado desejado.
Exemplo: SELECT.

Tipos de domínios básicos


CHAR(n) ou CHARACTER(n)

Cadeia de caracteres de tamanho fixo, com o tamanho n definido pelo usuário.

VARCHAR(n)

Cadeia de caracteres de tamanho variável, com o tamanho máximo n definido


pelo usuário.

INT ou INTEGER

Número inteiro, geralmente de 32768 a 32767.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 48


SMALLINT

Número inteiro pequeno, geralmente de 0 a 65535.

NUMERIC(t, d)

Número de ponto decimal fixo, que consiste de t dígitos totais e d dígitos à


direita do ponto decimal, com t e d definidos pelo usuário.

REAL

Número de ponto flutuante.

DOUBLE PRECISION

Número de ponto flutuante de dupla precisão.

FLOAT(n)

Número de ponto flutuante com a precisão n definida pelo usuário.

DATE

Formato de data, contendo dia, mês e ano.

TIME

Formato de horário, contendo horas, minutos e segundos.

Linguagem de Definição de Dados (DDL) – criação de uma tabela


Sintaxe

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 49


CREATE TABLE

nome_tabela
(nome_coluna tipo [NOT NULL] [SET DEFAULT valor],
....,
PRIMARY KEY (nome_colunas),
[UNIQUE (nome_coluna)],
[FOREIGN KEY (nome_coluna)
REFERENCES nome_tabela (nome_coluna)]
[CHECK condição])

Exemplo 1: Criação da tabela disciplina

CREATE TABLE DISCIPLINA


(CodD CHAR(5),
NomeD VARCHAR(20) NOT NULL,
CargaD INTEGER NOT NULL,
AreaD VARCHAR(20),
PreReqD CHAR(5),
UNIQUE (NomeD),
PRIMARY KEY (CodD)
CHECK CargaD > 0 AND CargaD <= 6 )

Exemplo 2: Criação da tabela grade

CREATE TABLE GRADE


(CodC CHAR(5),
CodD CHAR(5),
CodP CHAR(5),
Sala INTEGER,
PRIMARY KEY (CodC, CodD, CodP),
FOREIGN KEY (CodC) REFERENCES CURSO (CodC),

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 50


FOREIGN KEY (CodD) REFERENCES DISCIPLINA (CodD),
FOREIGN KEY (CodP) REFERENCES PROFESSOR (CodP)

Linguagem de Definição de Dados (DDL) – SQL Constraints


NOT NULL

Indica que uma coluna não pode armazenar valores nulos.

UNIQUE

Garante que uma linha de uma coluna contém valores únicos.

PRIMARY KEY

Garante que uma coluna (ou combinação de duas ou mais colunas) tem uma
identidade única, que permite encontrar uma determinada linha da tabela.

FOREIGN KEY

Garante a integridade referencial dos dados em uma tabela para coincidir com
os valores da tabela referenciada.

CHECK

Garante que o valor em uma coluna atende a uma condição específica.

DEFAULT

Especifica um valor padrão quando não há valor para a coluna.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 51


Linguagem de Definição de Dados (DDL) – alteração de uma
tabela
Sintaxe

ALTER TABLE nome_tabela


[ADD nome_coluna tipo [NOT NULL]]
[DROP COLUMN nome_coluna [CASCADE/RESTRICT]]
[MODIFY nome_coluna]

Exemplo 1: Adição da coluna MensC à tabela curso

ALTER TABLE CURSO


ADD MensC NUMERIC(6,2);

Exemplo 2: Modificação do tamanho da coluna NomeD da tabela


disciplina para varchar(50)

ALTER TABLE DISCIPLINA


MODIFY NomeD VARCHAR(50);

Linguagem de Definição de Dados (DDL) – remoção de uma


tabela
Remove a tabela e seus dados.

Sintaxe

DROP TABLE nome_tabela CASCADE/RESTRICT;


Exemplo: Remoção da tabela grade
DROP TABLE GRADE;

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 52


Linguagem de Definição de Dados (DDL) – truncando uma tabela
Remove os dados, mas mantém a estrutura da tabela.

Sintaxe

TRUNCATE TABLE nome_tabela;


Exemplo: Truncando a tabela grade
TRUNCATE TABLE GRADE;

Linguagem de Definição de Dados (DDL) – criação e remoção de


índices
Os índices são estruturas de dados que contêm os valores de uma ou mais
colunas e são utilizadas para obter mais rapidamente os dados das tabelas. O
tema será objeto de uma aula a seguir.

Sintaxe para criação:

CREATE INDEX nome_índice


ON nome_tabela ( nome_coluna [ASC|DESC],...);
Exemplo: Criação de índice sobre a coluna CidadeP da tabela
professor
CREATE INDEX Xcidadeprof
ON PROFESSOR (CidadeP ASC);

Atenção
A cláusula ASC é padrão e não precisa ser especificada. Significa
que os valores no índice estarão em ordem ascendente. A
cláusula DESC indica que os valores no índice estarão em ordem
descendente.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 53


Atividade proposta
Escreva os comandos em SQL para responder às seguintes
proposições:
a) Criar as tabelas Func (cod_func number(2), nome varchar(50), dta_nasc
date, salário number(9,2), nro_depto number(1)) e Depto (nro_depto
number(1), nome varchar(50));
b) Acrescentar a coluna DTA_ADM à tabela FUNC;
c) Criar um índice em ordem descendente para o atributo DTA_NASC da tabela
Func.

A) CREATE TABLE DEPTO


(NRO_DEPTO NUMBER(1),
NOME VARCHAR2(50),
PRIMARY KEY (NRO_DEPTO));
CREATE TABLE FUNC
(COD_FUNC NUMBER(2),
NOME VARCHAR2(50),
DTA_NASC DATE,
SALARIO NUMBER(9,2),
NRO_DEPTO NUMBER(1),
PRIMARY KEY (COD_FUNC),
FOREIGN KEY (NRO_DEPTO) REFERENCES DEPTO (NRO_DEPTO));
B) ALTER TABLE FUNC ADD DTA_ADM DATE;
C) CREATE INDEX IDX_DTA_NASC ON FUNC(DTA_NASC DESC);

Referências
ELMASRI, R.; NAVATHE, S. Sistemas de Banco de Dados. 4ª ed. Pearson
Education do Brasil, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5ª ed. Rio de Janeiro: Campus, 2006.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 54


Exercícios de fixação
Questão 1
Leia as afirmativas a respeito da linguagem SQL e, em seguida, marque a
alternativa incorreta.
a) Consiste em uma linguagem de pesquisa.
b) Utilizada para acesso a banco de dados relacionais.
c) A base da linguagem está relacionada à álgebra relacional.
d) Padronizada pelo instituto ANSI.
e) É linguagem não declarativa, procedural.

Questão 2
A respeito dos recursos da linguagem SQL, marque verdadeiro (V) ou falso (F).
( ) Tem alto poder de consulta.
( ) Permite o gerenciamento de índices.
( ) Não pode estar em linguagem hospedeira.
( ) Permite a construção de visões.
( ) Não permite a execução em blocos.
a) V-V-F-V-F
b) F-F-F-V-V
c) V-F-F-V-F
d) V-V-F-V-V
e) F-V-F-V-F

Questão 3
São subconjuntos de comandos da linguagem SQL, exceto:
a) DDL
b) DML
c) DCL
d) DSL
e) DQL

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 55


Questão 4
Os seguintes tipos de domínios básicos são possíveis na SQL, exceto:
a) Char(n)
b) Varchar(n)
c) Double Real
d) Int
e) Float

Questão 5
Veja o esquema da tabela ALUNO (MAT CHAR(5) Chave Primária, NOME
VARCHAR(50) não nulo, CODCURSO CHAR(2)). Marque a alternativa que
corresponde à sentença para criação da referida tabela.
a) CREATE TABLE ALUNO(MAT VARCHAR(5) primary key, NOME CHAR(50)
NULL, CODCURSO CHAR(2))
b) CREATE TABLE ALUNO(MAT CHAR(5) primary key, NOME VARCHAR NOT
NULO, CODCURSO VARCHAR))
c) CREATE TABLE ALUNO(MAT CHAR(5) primary key, NOME VARCHAR(50)
NOT NULL, CODCURSO CHAR(2))
d) CREATE TABLE ALUNO(MAT CHAR(5) foreign key, NOME CHAR(50) NOT
NULL, CODCURSO CHAR(2))
e) CREATE TABLE ALUNO(MAT VARCHAR primary key, NOME CHAR NOT
NULL, CODCURSO INT)

Questão 6
Marque verdadeiro (V) ou falso (F) nas afirmativas a respeito das restrições em
SQL.
( ) UNIQUE – Garante que uma linha de uma coluna contém valores únicos.
( ) PRIMARY KEY – Garante a integridade referencial dos dados em uma
tabela.
( ) CHECK – Garante que o valor em uma coluna atende a uma condição
específica.
( ) DEFAULT – Especifica um valor padrão quando não há valor para a coluna.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 56


( ) NULL – Indica que uma coluna não pode armazenar valores nulos.
a) F-V-V-V-F
b) V-V-V-V-F
c) V-F-V-V-F
d) V-V-V-V-V
e) F-V-V-V-F

Questão 7
A sentença ALTER TABLE CURSO DROP COLUMN MensC realiza a seguinte
operação:
a) Exclui a tabela CURSO.
b) Adiciona a coluna MensC à tabela CURSO.
c) Altera a coluna MensC da tabela CURSO.
d) Exclui a coluna MensC da tabela CURSO.
e) Trunca a tabela CURSO.

Questão 8
A sentença CREATE INDEX IDX_SAL ON ALUNO (SALARIO DESC) realiza a
seguinte operação:
a) Cria o índice IDX_SAL na coluna SALARIO da tabela ALUNO, em ordem
descendente.
b) Cria o índice IDX_SAL na coluna ALUNO da tabela SALARIO, em ordem
descendente.
c) Cria o índice IDX_SAL na coluna SALARIO da tabela ALUNO, em ordem
crescente.
d) Cria o índice IDX_SAL na tabela ALUNO, sem ordenação específica.
e) Cria o índice SALARIO na coluna IDX_SAL da tabela ALUNO, em ordem
descendente.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 57


Chaves de resposta
Aula 3
Exercícios de fixação
Questão 1 - E
Justificativa: A linguagem SQL é uma linguagem declarativa e não procedural.

Questão 2 - A
Justificativa: A linguagem SQL pode estar em linguagem hospedeira e permite a
execução em blocos.

Questão 3 - D
Justificativa: DSL não é um subconjunto de comandos da SQL.

Questão 4 - C
Justificativa: Double Real não é um tipo de domínio da SQL.

Questão 5 - C
Justificativa: A sintaxe correta é CREATE TABLE ALUNO(MAT CHAR(5) primary
key, NOME VARCHAR(50) NOT NULL, CODCURSO CHAR(2));

Questão 6 - C
Justificativa: Quem garante a integridade referencial é a FOREIGN KEY. NOT
NULL – Indica que uma coluna não pode armazenar valores nulos.

Questão 7 - D
Justificativa: ALTER TABLE CURSO DROP COLUMN col1 é a sentença correta
para excluir a coluna de uma tabela.

Questão 8 - A
Justificativa: A afirmativa correta é “Cria o índice IDX_SAL na coluna SALARIO
da tabela ALUNO, em ordem descendente”.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 58


Aula 4: Linguagem SQL – Parte 2
Introdução
Nesta aula, trataremos da Linguagem de Manipulação de Dados (DML). Serão
estudadas as sentenças de inserção, atualização e exclusão de dados nas
tabelas.

Objetivo:
1. Estudou a Linguagem de Manipulação de Dados (DML), sentenças de
inserção, atualização e exclusão de dados nas tabelas;
2. Realizar consultas simples.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 59


Conteúdo

Introdução
A linguagem de manipulação de dados é usada para modificar registros em um
banco de dados. As seguintes tabelas exemplo serão utilizadas.

Curso
CodC NomeC DuracaoC MensC

C1 Análise Sist. 4 400

C2 Eng. Mecatrônica 5 600

C3 Ciência Comp. 4 450

C4 Eng. Elétrica 4 600

C5 Turismo 3 350

Disciplina
CodD NomeD CargaD AreaD PreReqD

D1 TLP1 2 Computação D2

D2 Cálculo 1 4 Matemática null

D3 Inglês 2 Humanas null

D4 Ed. Física 3 Saúde null

D5 G. Analítica 5 Matemática D2

D6 Projeto Final 6 null D1

Professor
CodP NomeP CidadeP TituloP

P1 Joaquim Rib. Preto Mestre

P2 Paulo Batatais Espec.

P3 André Rib. Preto Doutor

P4 Gil S. Carlos Doutor

P5 Juliana S. Carlos Pós Doc

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 60


Grade
CodC CodD CodP Sala

C1 D6 P1 305

C2 D2 P2 305

C3 D2 P2 305

C4 D1 P5 201

C4 D3 P3 204

C5 D4 P3 204

C5 D4 P4 207

A linguagem de manipulação de dados é usada para modificar registros em um


banco de dados. As seguintes tabelas exemplo serão utilizadas.

Inclusão de tuplas em uma tabela


Inserir dados em uma tabela significa preencher uma linha de determinada
tabela com dados correspondentes aos tipos determinados naquela tabela. Essa
inserção de dados deve seguir as regras de integridade da tabela, assim como
respeitar as regras de chave primária e chaves estrangeiras estabelecidas na
tabela.

Sintaxe

INSERT
INTO nome_tabela (coluna1, coluna2, .... , colunaN)
VALUES (valor1, valor2, ... , valorN)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 61


Exemplo: Inserir uma linha na tabela Professor
INSERT
INTO Professor (CodP, NomeP, CidadeP, TituloP)
VALUES (‘P1', 'Joaquim', 'Rib Preto', 'Mestre')

Os valores valor1 , valor2 etc. seguem a ordem dos campos da tabela, sendo
utilizado valor vazio (' ') ou a sentença NULL para campos que não necessitem
de preenchimento. Dados de tipo numérico podem ser escritos sem a
necessidade de aspas simples. Dados do tipo caractere (como char e varchar)
devem ser escritos entre aspas simples.

Atualização dos dados de uma tabela


Alterar dados em uma tabela significa atualizar um dado de uma determinada
tabela por outro dado do mesmo tipo.

O comando Update pode ser realizado sem o WHERE. Neste caso todas as
linhas da tabela serão atualizadas com o valor determinado no comando. Para
os casos onde se necessite atualizar apenas linhas que cumpram determinada
condição, essa condição é estabelecida com a inclusão do comando WHERE.

Sintaxe

UPDATE nome_tabela
SET nome_coluna = valor, .....
[WHERE (condição de localização)

Exemplo: Alterar o valor da mensalidade do curso de Ciência da Computação


para 650,00.

UPDATE Curso
SET MensC = 650
WHERE NomeC = ‘Ciência Comp’

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 62


Remoção de dados de uma tabela
Apagar dados em uma tabela significa eliminar uma ou mais linhas de uma
determinada tabela. Para isso utilizamos a instrução DELETE.

O comando Delete pode ser realizado sem o WHERE. Neste caso todas as linhas
da tabela determinada serão excluídas. Utilizamos WHERE quando desejamos
eliminar os registros que obedeçam a certa condição.

Sintaxe

DELETE FROM nome_tabela


WHERE (condição de localização)

Exemplo: Remover da tabela Professor todos os professores que têm título de


Doutor.

DELETE FROM Professor


WHERE TituloP = ‘Doutor’

Conceito de transação
Uma TRANSAÇÃO é uma unidade de execução programada que acessa e
provavelmente atualiza vários itens de dados. Uma transação deve acessar uma
base de dados consistente. Durante a execução da transação é possível que a
base de dados passe por um estado de inconsistência. Quando a transação é
confirmada (COMMIT), a base de dados deverá estar consistente.

O gerenciamento de transações lida com 2 situações principais:

• Falhas de vários tipos: hardware, energia, travamento de aplicações etc.


• Execução concorrente de múltiplas transações.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 63


Propriedades ACID
Atomicidade

Ou todas ou nenhuma das operações da transação serão devidamente


refletidas na base de dados.

Consistência

Após a execução de uma transação, a base de dados deverá retornar a um


estado consistente dos dados.

Isolamento

Apesar de múltiplas transações poderem ser executadas concorrentemente,


cada uma delas deverá estar isolada dos efeitos da execução das outras.
Resultados intermediários de uma transação deverão ficar ocultos para as
outras.

Durabilidade

Depois que uma transação termina com sucesso, as alterações que ela realizou
sobre o banco de dados persistirão mesmo que haja falhas do sistema.

Controle de transações
Todas as transações realizadas com o banco deverão ser confirmadas pelo
usuário para que sejam realmente efetivadas, ou então descartadas, caso o
usuário deseje.

• Para confirmar uma transação - ou um bloco de transações - utiliza-se o


comando COMMIT.
• Para descartar uma transação - ou um bloco de transações - utiliza-se o
comando ROLLBACK.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 64


O bloco de transações é definido a partir da última ocorrência de COMMIT, ou a
partir do início da seção.

Comando SELECT
Linguagem de consulta de dados é usada para extrair informações de uma base
de dados. Em um banco de dados, selecionar dados significa efetuar uma
consulta enviando o comando que retornará com as informações solicitadas
(linhas de uma ou mais tabelas). Para efetuar essas consultas utilizamos o
comando SELECT.

Sintaxe

SELECT [DISTINCT] nome_coluna, ....


FROM nome_tabela, ....
[WHERE (condições) [ sub-select] ]
[GROUP BY nome_coluna, ....]
[HAVING (condições)]
[ORDER BY nome_coluna {ASC | DESC}, ....]
[{INTERSECT | MINUS | UNION} comando_select]

SELECT - operadores
A tabela a seguir mostra os principais operadores utilizados na sintaxe das
cláusulas que envolvem condições.

Observe as várias funções em SQL que permitem operar sobre os dados


resultantes da consulta.

GRUPO FUNÇÃO DESCRIÇÃO


Agregação AVG (col) Média dos valores da coluna
SUM (col) Soma de valores da coluna
MAX (col) Valor máximo da coluna

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 65


MIN (col) Valor mínimo da coluna
COUNT Total de tuplas
Caracter UPPER (col) Converte caracteres minúsculos em maiúsculos
LOWER (col) Converte caracteres maiúsculos em minúsculos
SUBSTR (col, pos, n) Substring da coluna, iniciando em pos, com n
caracteres
Números ROUND (col/const, n) Arredondamento em n da coluna (ou da constante)
TRUNC (col/const, n) Truncamento em n da coluna (ou da constante)
ABS (col/constr) Valor absoluto da coluna ou da constante
Data/Hora MONTH (data) Mês da data
YEAR (data) Ano da data
MINUTE (hora) Minuto da hora
Conversão TO_CHAR (num data) Número (ou data) para caracter
TO_NUMBER (char) Minuto da caracter para número
TO_DATE (char) Minuto da caracter para data

SELECT – consulta simples


O comando SELECT deve conter o nome do campo (ou campos) que deve ser
retornado e qual tabela (ou tabelas) se referencia.

Exemplo 1: Nomes das disciplinas.

SELECT NOMED
FROM DISCIPLINA

Resultado

NOMED
TLP1
Cálculo 1
Inglês
Ed Física

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 66


G analítica
Projeto Final

Exemplo 2: Salas onde as aulas serão ministradas.

SELECT SALA
FROM GRADE

Resultado

SALA
305
305
305
201
204
204
207

DISTINCT
A cláusula DISTINCT é usada para suprimir linhas duplicadas no resultado.

Exemplo 3: Salas onde as aulas serão ministradas, sem repetição.

SELECT DISTINCT SALA


FROM GRADE

Resultado
SALA
305
201
204

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 67


207

WHERE
A cláusula WHERE permite aplicar condições para filtrar as linhas que retornam
da consulta. A condição deve respeitar o tipo de dado da coluna. Para colunas
com conteúdo do tipo caractere devem ser usadas aspas simples (‘ ‘) no objeto
de comparação. Para colunas com tipo numérico basta colocar o valor sem
aspas na comparação.

Exemplo 4: Nome e código dos professores de Ribeirão Preto.

SELECT NOMEP, CODP


FROM PROFESSOR
WHERE CIDADEP = 'Rib Preto'

Resultado

NOME
Joaquim
André

CODP
P1
P#

Exemplo 5: Código e nome das disciplinas com carga horário maior ou igual a
5.

SELECT CODD, NOMED


FROM DISCIPLINA
WHERE CARGAD >= 5

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 68


Resultado

CODD
D5
D6

NOMED
G Analítica
Projeto Final

Quando desejamos trazer todos os campos utilizamos o asterisco (*).

Exemplo 6: Todas as colunas da grade do curso C4.

SELECT *
FROM GRADE
WHERE CODC = 'C4'

Resultado

CODC
C4
C4

CODD
D1
D3

CODP
P5
P3

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 69


SALA
201
204

Operações no comando SELECT


É possível efetuar uma operação aritmética sobre o dado de uma coluna no
comando SELECT.

Exemplo 7: Nome e duração em meses de cada curso.

SELECT NOMEC, (DURACAOC * 12) FROM CURSO

Resultado

NOMEC
Análise Sist
Eng Mecatrônica
Ciência Comp
Eng Elétrica
Turismo

DURACAOC * 12
48
60
60
60
36

Exemplo 8: Nomes dos cursos cuja mensalidade é inferior a 500 reais.

SELECT NOMEC
FROM CURSO

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 70


WHERE MENSC &#60; 500

Resultado

NOMEC
Análise Sist
Ciência Comp
Turismo

Operadores lógicos
Critérios combinados podem ser especificados utilizando operadores lógicos
AND/OR.

Exemplo 9: Código e carga horária das disciplinas da área de Matemática, com


carga horária maior ou igual a 5.

SELECT CODD, CARGAD


FROM DISCIPLINA
WHERE AREAD = 'Matemática'
AND CARGAD >= 5

Resultado

CODD
D5

CARGAD
5

Operador LIKE
Utilizado em consultas em atributos do tipo caractere para filtrar conteúdos
onde ocorrem sequências de strings. O caractere porcentagem (%) indica a

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 71


posição em que o conteúdo será procurado e o caractere sublinhado (_) indica
o número de caracteres envolvidos na pesquisa. Veja os exemplos:

Exemplo 10: O código e o nome de todos os cursos de engenharia.

SELECT CODC, NOMEC


FROM CURSO
WHERE NOMEC LIKE 'Eng%'

Resultado

CODC
C2
C4

NOMEC
Eng Mecatrônica
Eng Elétrica

Exemplo 11: As salas do segundo andar (número fica na casa dos 200) onde
serão ministradas aulas.

SELECT DISTINCT SALA


FROM GRADE
WHERE TO_CHAR(SALA) LIKE '2__'

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 72


Resultado
SALA
201
204
207

Operador BETWEEN
Utilizado quando é necessário recuperar linhas entre valores de um intervalo.
Os valores contidos no comando fazem parte do intervalo.

Exemplo 12: Código dos cursos cuja mensalidade está entre 400 e 550 reais.

SELECT CODC
FROM CURSO
WHERE MENSC BETWEEN 400 AND 550

Resultado

CODC
C1
C3

Operador IN
Utilizado quando para recuperar linhas onde os valores a serem comprados
estão em uma lista.

Exemplo 13: Nome das disciplinas que são da área de Computação ou de


Humanas ou de Saúde.
SELECT NOMED
FROM DISCIPLINA
WHERE AREAD IN ('Computação', 'Humanas', 'Saúde')

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 73


Resultado

NOMED
TLP1
Inglês
Ed Física

Operador NULL/NOT NULL


Verifica se o valor de uma coluna é nulo ou não (IS NULL/IS NOT NULL).

Exemplo 14: Nome das disciplinas que não pertencem a nenhuma área
específica.

SELECT NOMED
FROM DISCIPLINA
WHERE AREAD IS NULL

Resultado

NOMED
Projeto Final

ALIAS
O alias é usado para substituir nomes na consulta. Existem dois tipos de alias:
de coluna e de tabela.

O alias de coluna é aplicado na lista de colunas do comando SELECT através


da cláusula AS e usado para alterar o nome da coluna na apresentação do
resultado da consulta.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 74


O alias de tabela é usado na cláusula FROM após o nome da tabela e serve
para substituir o nome da tabela dentro da consulta. Muito utilizado no
comando de junção que será visto mais adiante.

Exemplo 15: Nome e duração em meses de cada curso.

SELECT NOMEC AS CURSO,


(DURACAOC * 12) AS DURACAO_MESES
FROM Curso

Resultado

NOMEC
Análise Sist
Eng Mecatrônica
Ciência Comp
Eng Elétrica
Turismo

DURACAO_MESES
48
60
60
60
36

Concatenação de campos
Utilizamos concatenação de campos quando é necessário combinar vários
campos diferentes em uma coluna de saída da consulta.

Exemplo 16: Códigos dos cursos com seu nome e mensalidade concatenados.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 75


SELECT CODC,
NOMEC || ' ' || MENSC || ' reais' AS INFO_CURSO
FROM CURSO

Resultado

CODC
C1
C2
C3
C4
C5

INFO_CURSO
Análise Sist 400 reais
Eng Mecatrônica 600 reais
Ciência Comp 450 reais
Eng Elétrica 600 reais
Turismo 350 reais

Ordenação do resultado
Para ordenar o resultado da consulta utilizamos a cláusula ORDER BY. É
possível ordenar o resultado em ordem crescente ou decrescente utilizando a
cláusula ASC ou DESC.

Exemplo 17: Nomes dos cursos ordenados de forma ascendente.


SELECT NOMEC
FROM CURSO
ORDER BY NOMEC ASC

Resultado
NOMEC

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 76


Análise Sist
Ciência Comp
Eng Elétrica
Eng Mecatrônica
Turismo

Também é possível utilizar a posição da coluna para indicar a que coluna será
aplicada a cláusula ORDER BY.

Exemplo 18: Código e nomes dos cursos ordenados por nome de forma
decrescente.

SELECT CODC, NOMEC


FROM CURSO
ORDER BY 2 DESC

Resultado

CODC
C5
C4
C2
C3
C1

NOMEC
Turismo
Eng Elétrica
Eng Mecatrônica
Ciência Comp
Análise Sist

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 77


Atividade proposta
Seja a tabela: Func (cod_func, nome, dta_nasc, salario, cod_superv).
Escreva os comandos em SQL para responder às seguintes proposições:
a. Recupere o código dos funcionários que são supervisores.
b. Recupere o código dos funcionários que não têm supervisores.

Chave de resposta:
a. SELECT DISTINCT COD_SUPERV FROM FUNC.
b. SELECT COD_FUNC FROM FUNC WHERE COD_SUPERV IS NULL.

Referências
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 4. ed. Pearson
Education do Brasil, 2005.

Exercícios de fixação
Questão 1
Considere o esquema de uma empresa conforme segue:
Func (cod_func, nome, dta_nasc, salário, nro_depto, cod_superv)
Depto (nro_depto, nome)
Projeto (cod_proj, nome, duração, nro_depto)
Participa (cod_proj, cod_func, horas_trab)
O comando em SQL para inserir valores nas tabelas Depto e Projeto são:
a) INSERT INTO DEPTO VALUES (1, ‘Recursos Humanos’) e INSERT INTO
PROJETO VALUES (‘WEB’, ‘Nova Intranet’, 100, 1).
b) INSERT INTO DEPTO (1, ‘Recursos Humanos’) e INSERT INTO PROJETO
(‘WEB’, ‘Nova Intranet’, 100, 1).
c) INSERT INTO DEPTO, PROJETO VALUES (1, ‘Recursos Humanos’),
VALUES (‘WEB’, ‘Nova Intranet’, 100, 1).
d) INSERT DEPTO (1, 3) e INSERT PROJETO (‘WEB’, ‘Nova Intranet’).
e) INSERT PROJETO (1, 3) e INSERT DEPTO (‘WEB’, ‘Nova Intranet’).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 78


Questão 2
Considere as tabelas da questão 1. O comando SQL para zerar a duração de
todos os projetos do departamento 5:
a) DELETE FROM PROJETO SET SALARIO = 0
b) DELETE FROM PROJETO SET SALARIO = 0 WHERE NRO_DEPTO = 5
c) UPDATE PROJETO SET SALARIO = 0
d) UPDATE PROJETO SET SALARIO = 0 WHERE NRO_DEPTO = 5
e) TRUNCATE PROJETO

Questão 3
Considere as tabelas da questão 1. O comando SQL para remover todas as
participações em projetos do funcionário 20:
a) DROP TABLE PARTICIPA WHERE COD_FUNC=20
b) TRUNCATE TABLE PARTICIPA
c) DELETE FROM PARTICIPA WHERE COD_FUNC=20
d) DELETE FROM PARTICIPA
e) ALTER TABLE PARTICIPA SET COD_FUNC=20

Questão 4
Marque verdadeiro (V) ou Falso (F) nas afirmativas abaixo.
( ) Uma transação deve acessar uma base de dados consistente.
( ) A afirmação “Ou todas ou nenhuma das operações da transação serão
devidamente refletidas na base de dados” tem relação com a atomicidade.
( ) Após a execução de uma transação, a base de dados pode estar
inconsistente.
( ) Para confirmar uma transação utiliza-se o comando COMMIT.
( ) Depois que uma transação termina com sucesso, as alterações que ela
realizou sobre o banco de dados não precisam persistir.
a) V-V-F-V-F
b) V-V-V-V-F
c) F-V-F-V-F
d) V-V-V-F-F

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 79


e) F-F-V-V-V

Questão 5
Considere o esquema de uma empresa conforme segue:
Func (cod_func, nome, dta_nasc, salário, nro_depto, cod_superv)
Depto (nro_depto, nome)
Projeto (cod_proj, nome, duração, nro_depto)
Participa (cod_proj, cod_func, horas_trab)
Marque a alternativa que contém o comando em SQL para recuperar o nome e
o salário dos funcionários do departamento 5, com salário na faixa entre 1000 e
2000.
a) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO BETWEEN 1000
AND 2000
b) SELECT NOME, SALARIO FROM FUNC WHERE NRO_DEPTO = 5 AND
SALARIO BETWEEN 1000 AND 2000
c) SELECT NOME, SALARIO FROM FUNC WHERE NRO_DEPTO = 5
d) SELECT NOME, SALARIO FROM FUNC WHERE NRO_DEPTO = 5 OR
SALARIO BETWEEN 1000 AND 2000
e) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO = 1000 AND
NRO_DEPTO BETWEEN 1 AND 5

Questão 6
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para obter o nome e o salário líquido (85% do salário bruto)
dos funcionários supervisionados pelo funcionário 23.
a) SELECT NOME, SALARIO FROM FUNC WHERE COD_FUNC=23.
b) SELECT NOME, (SALARIO * 0.85) AS SLIQ FROM FUNC WHERE
COD_SUPERV=23.
c) SELECT NOME, SALARIO FROM FUNC WHERE COD_SUPERV=23 AND
SALARIO=85.
d) SELECT NOME, SAL_LIQ FROM FUNC WHERE COD_SUPERV=23.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 80


e) SELECT NOME, (SALARIO * 1.85) AS SLIQ FROM FUNC WHERE
COD_SUPERV=23.

Questão 7
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para recuperar o nome completo, em ordem alfabética, dos
funcionários cujo nome inicia por “MAR”.
a) SELECT NOME FROM FUNC WHERE NOME LIKE ‘MAR%’.
b) SELECT NOME FROM FUNC WHERE NOME LIKE ‘%MAR’ ORDER BY
NOME.
c) SELECT NOME FROM FUNC WHERE NOME LIKE ‘MAR%’ ORDER BY
NOME ASC.
d) SELECT NOME FROM FUNC WHERE NOME LIKE ‘_MAR%’ ORDER BY
NOME DESC.
e) SELECT NOME FROM FUNC WHERE NOME LIKE ‘MAR%’ ORDER BY 2
DESC.

Questão 8
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para recuperar o código do projeto, duração e número dos
departamentos dos projetos “FATURAMENTO”, “INTRANET” e “NOVOS
PRODUTOS”.
a) SELECT COD_PROJ, DURACAO, NRO_DEPTO FROM PROJETO WHERE
NOME IN (‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).
b) SELECT COD_PROJ, DURACAO, NRO_DEPTO FROM PROJETO WHERE
NOME = (‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).
c) SELECT COD_PROJ, DURACAO FROM PROJETO WHERE NOME IS
(‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).
d) SELECT COD_PROJ FROM PARTICIPA WHERE NOME IN
(‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 81


e) SELECT COD_PROJ, DURACAO, NRO_DEPTO FROM PROJETO WHERE
NOME = ‘FATURAMENTO’ AND NOME = ‘INTRANET’ AND NOME =
‘NOVOS PRODUTOS’.

Chaves de resposta
Aula 4
Exercícios de fixação
Questão 1 - A
Justificativa: O comando SQL correto é: INSERT INTO DEPTO VALUES (1,
‘Recursos Humanos’) e INSERT INTO PROJETO VALUES (‘WEB’, ‘Nova Intranet’,
100, 1).

Questão 2 - D
Justificativa: A sentença para atualizar a tabela PROJETO e zerar o conteúdo da
coluna projeto das linhas do departamento 5 é UPDATE PROJETO SET SALARIO
= 0 WHERE NRO_DEPTO = 5.

Questão 3 - C
Justificativa: O comando para remover todas as participações em projetos do
funcionário 20 é DELETE FROM PARTICIPA WHERE COD_FUNC=20.

Questão 4 - A
Questão 5 - B
Justificativa: A sentença correta é SELECT NOME, SALARIO FROM FUNC
WHERE NRO_DEPTO = 5 AND SALARIO BETWEEN 1000 AND 2000.

Questão 6 - B
Justificativa: A sentença correta é SELECT NOME, (SALÁRIO * 1.85) AS SLIQ
FROM FUNC WHERE COD_SUPERV=23.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 82


Questão 7 - C
Justificativa: A sentença correta é SELECT NOME FROM FUNC WHERE NOME
LIKE ‘MAR%’ ORDER BY NOME ASC.

Questão 8 - A
Justificativa: A sentença correta é SELECT COD_PROJ, DURACAO, NRO_DEPTO
FROM PROJETO WHERE NOME IN (‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS
PRODUTOS’);

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 83


Aula 5: Linguagem SQL – Parte 3
Introdução
Nesta aula, serão apresentadas as funções de grupo, cláusulas GROUP BY e
HAVING, comandos de junção, subconsultas aninhadas, correlatas e operadores
de conjunto. Também serão explicados os comandos para criação de outros
objetos de banco de dados, como, por exemplo, criação de visões, além de
comandos relacionados à linguagem de controle de dados (DCL).

Objetivo:
1. Apresentar funções de grupo, cláusulas GROUP BY e HAVING;
2. Explicar os comandos de junção, autojunção e operadores de conjunto;
3. Mostrar as subconsultas aninhadas, criação de visões e comandos
relacionados à linguagem de controle de dados (DCL).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 84


Conteúdo

Tabelas de exemplo
Como vimos na aula anterior, a linguagem de manipulação de dados é usada
para modificar registros em um banco de dados. Observe as seguintes tabelas
de exemplo:

Select – funções de agregação


Soma um campo numérico.
Sintaxe: SELECT SUM(Nome_Campo) FROM Nome_tabela;

Calcula o valor médio de um conjunto de valores para um campo numérico.


Sintaxe: SELECT AVG(Nome_Campo) FROM Nome_tabela;

Conta a quantidade de dados para um campo.


Sintaxe: SELECT COUNT(Nome_Campo) FROM Nome_tabela;

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 85


Mostra o maior valor em um conjunto de dados para um campo.
Sintaxe: SELECT MAX(Nome_Campo) FROM Nome_tabela;

Mostra o menor valor em um conjunto de dados para um campo.


Sintaxe: SELECT MIN(Nome_Campo) FROM Nome_tabela;

Atenção
Exemplo: valor mínimo, máximo e médio das mensalidades dos
cursos cuja duração é de 4 anos.
SELECT MIN(MensC), MAX(MensC), AVG(MensC)
FROM Curso
WHERE DuracaoC = 4
Resultado:

Agrupamentos
A cláusula GROUP BY permite agrupar o conteúdo por uma ou mais colunas.

Cláusula having
A cláusula having seleciona grupos de linhas após as agregações e
agrupamentos serem efetuados.
Exemplo: salas que são utilizadas para mais de uma aula e as respectivas
quantidades destas.

Junção e junção interna (INNER JOIN)


Junção
Uma junção entre duas tabelas corresponde a um produto cartesiano que gera
uma relação resultante que contém todas as colunas das tabelas originais.
Na cláusula FROM, utilizamos os nomes das tabelas que possuem os campos
que queremos trazer.

Junção interna (INNER JOIN)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 86


Na junção interna entre duas tabelas, somente são recuperadas as linhas da
tabela resultante que satisfazem a condição de junção.

Os atributos comuns às duas tabelas quando utilizados no comando SELECT ou


no critério de junção devem ser qualificados da seguinte forma:
TABELA.ATRIBUTO. Se um ALIAS for utilizado na cláusula FROM, este substitui
o nome da tabela dentro da consulta. Existem duas possibilidades de sintaxe
para a junção interna:

Exemplo 1: Todas as informações sobre a grade e as disciplinas do curso C4.

SELECT *
FROM Grade, Disciplina
WHERE Disciplina.CodD = Grade.CodD
AND CodC = 'C4'

Nessa sintaxe, as tabelas são separadas por vírgula na cláusula FROM, e a


condição de junção fica na cláusula WHERE. Outros critérios podem ser
adicionados para filtrar linhas.

A sintaxe equivalente é:

SELECT *
FROM Grade INNER JOIN Disciplina
ON Disciplina.CodD = Grade.CodD
WHERE CodC = 'C4'

Nessa sintaxe, as tabelas são separadas na cláusula FROM pelo comando


INNER JOIN (ou apenas JOIN em alguns bancos de dados), e a condição de
junção fica após a cláusula ON. Outros critérios para filtrar linhas ficam na
cláusula WHERE.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 87


No exemplo, todas as colunas das duas tabelas estarão presentes na tabela
resultante.

Resultado

CodC CodD CodP Sala CodD NomeD CargaD AreaD


C4 D1 P5 201 D1 TLP1 2 Computação
C4 D3 P3 204 D3 Inglês 2 Humanas

Usando joing using


Caso as colunas usadas na junção tenham o mesmo nome nas duas relações,
podemos usar o comando USING.

Exemplo: todas as informações sobre a grade e as disciplinas do curso C4.


SELECT *
FROM Grade INNER JOIN Disciplina
USING (CodD)
WHERE CodC = 'C4'

Junção natural (natural join)


Para fazer uma junção em que os atributos de junção têm o mesmo nome nas
duas relações, podemos realizar uma junção natural usando o comando
NATURAL JOIN. Os atributos repetidos são removidos da relação resultante.

Exemplo: todas as informações sobre a grade e as disciplinas do curso C4, sem


repetição de colunas.
SELECT *
FROM Grade NATURAL JOIN Disciplina
ON Grade.CodD = Disciplina.CodD
WHERE CodC = 'C4'
Resultado

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 88


CodC CodD CodP Sala NomeD CargaD AreaD
C4 D1 P5 201 TLP1 2 Computação
C4 D3 P3 204 Inglês 2 Humanas

Usando ALIAS
Podemos substituir o nome da relação dentro da consulta usando um ALIAS. As
referências à relação podem ser substituídas em qualquer local da consulta.

Exemplo: código, nome, carga horária, sala e curso das disciplinas que estão na
grade.
SELECT G.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina D, Grade G
WHERE D.CodD = G.CodD

Ou na sintaxe
SELECT G.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina D INNER JOIN Grade G
ON D.CodD = G.CodD

Várias tabelas no JOIN


Podemos realizar a junção com mais de duas relações na consulta. Basta que
cada par de relações tenha um critério de junção correspondente.

Autojunção
Ocorre quando uma relação faz junção com ela mesma.

Exemplo 1

Exemplo 1: nomes das disciplinas cujo prerrequisito é “Cálculo1”.


SELECT Disc1.NomeD
FROM Disciplina Disc1, Disciplina Disc2
WHERE Disc2.CodD = Disc1.PreReqD AND

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 89


Disc2.NomeD = “Cálculo1”
Resultado
Disc1.NomeD
LP1
G Analítica

Exemplo 2

Tipos de junção e operações


Vejamos agora outros tipos junção e operações e suas características.

Junção externa (OUTER JOIN)

Uma junção externa é uma seleção que não requer que os registros de uma
tabela possuam registros equivalentes em outra.

Esse tipo de junção se subdivide dependendo de qual tabela não terá


correspondência de registros: a tabela esquerda, a direita ou ambas.

Left outer join

O resultado dessa seleção sempre contém todos os registros da tabela


esquerda (a primeira tabela mencionada na consulta), mesmo quando não
existam registros correspondentes na tabela direita. Quando não há
correspondência, retorna um valor NULL. Exemplo: nome dos professores e
código da disciplina ministrada, incluindo os professores sem alocação.

SELECT NomeP, CodD


FROM Professor P LEFT OUTER JOIN Grade G
ON P.CodP = G.CodP

Resultado:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 90


CodD NomeP
D6 Joaquim
D2 Paulo
D2 Paulo
D1 Gil
D3 Andre
D4 Andre
D4 Gil
Null Juliana

Right outer join

Inversa à anterior e retorna sempre todos os registros da tabela à direita (a


segunda tabela mencionada na consulta), mesmo se não existir registro
correspondente na tabela à esquerda. O valor NULL é retornado quando não há
correspondência.

Exemplo: código do curso e nome das disciplinas relacionadas, incluindo as


disciplinas não alocadas.

SELECT CodC, NomeD


FROM Grade G RIGHT OUTER JOIN Disciplina D
ON G.CodD = D.CodD

Resultado:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 91


CodC NomeD
C1 Projeto Final
C2 Cálculo1
C3 Cálculo1
C4 TLP1
C4 Inglês
C5 Ed Física
C5 Ed Física
Null G Analítica

Full outer join

Essa operação apresenta todos os dados das tabelas à esquerda e à direita,


mesmo que não possuam correspondência em outra tabela.

Assim, a tabela combinada possuirá todos os registros de ambas as tabelas e


apresentará valores nulos para os registros sem correspondência.

Operação de conjunto

As operações de conjunto UNION, INTERSECT e EXCEPT operam sobre relações


e correspondem às operações da álgebra relacional U, ∩ e ― .

Pelo menos duas consultas estarão envolvidas na operação, e as colunas


relacionadas a elas devem ser do mesmo tipo.

Cada uma das operações acima elimina automaticamente os registros


duplicados. Para manter todos os registros duplicados, deve-se utilizar os
comandos UNION ALL, INSERSECT ALL e EXCEPT ALL.

Vejam as tabelas de exemplo:

emprestimo(numero_emprestimo, nome_agencia, quantia)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 92


tomador(nome_cliente, numero_emprestimo)
conta(numero_conta, nome_agencia, saldo)
depositante(nome_cliente, numero_conta)

UNION

Exemplo: encontra todos os clientes que possuem conta e/ou empréstimo.

(SELECT NOME_CLIENTE FROM DEPOSITANTE)


UNION
(SELECT NOME_CLIENTE FROM TOMADOR)

INTERSECT

Exemplo: encontra todos os clientes que possuem um empréstimo e uma


conta.

(SELECT NOME_CLIENTE FROM TOMADOR)


INTERSECT
(SELECT NOME_CLIENTE FROM DEPOSITANTE)

EXCEPT

Exemplo: encontra todos os clientes que possuam conta, mas não possuam
empréstimo.

(SELECT NOME_CLIENTE FROM DEPOSITANTE)


EXCEPT
(SELECT NOME_CLIENTE FROM TOMADOR)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 93


Subconsulta
Uma subconsulta é uma instrução SELECT que está encadeada dentro de outra
instrução SELECT. A consulta interior é designada por seleção interna e é
executada em primeiro lugar, sendo o seu resultado utilizado para completar a
consulta principal ou externa.

Caso a consulta interna retorne apenas uma linha, podem ser usados
operadores lógicos na comparação (&gt; , &lt; , &gt;&#61; , &lt;&#61;,
&lt;&gt;) Quando mais de uma linha for encontrada no resultado interno, os
operadores IN, ANY, ALL, EXISTS que manipulam sobre conjuntos de valores
devem ser utilizados.

Exemplo 1: obter os nomes dos cursos com mensalidade maior que a média
das mensalidades entre os cursos.

SELECT NOMEC, MENSC


FROM CURSO
WHERE MENSC > (SELECT AVG(MENSC) FROM CURSO)

Resultado:

1) SELECT AVG(MENSC) FROM CURSO

AVG(MENSC)
480

2) SELECT NOMEC, MENSC FROM CURSO WHERE MENSC > 480

NomeC MensC
Eng Mecatrônica 600
Eng Elétrica 600

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 94


Exemplo 2: nome e área das disciplinas do curso C4.

SELECT NomeD, AreaD


FROM Disciplina
WHERE CodD IN (SELECT CodD FROM Grade WHERE CodC = 'C4')

Resultado:

1) SELECT CodD FROM Grade WHERE CodC = 'C4'

NomeD AreaD
TLP1 Computação
Inglês Humanas

2) SELECT NomeD, AreaD FROM Disciplina WHERE CodD IN (…)

CodD
D1
D3

Operador EXISTS/NOT EXISTS


Permite à consulta externa verificar se a consulta interna devolveu alguma
linha. O valor das linhas não é importante, apenas a cardinalidade do conjunto.
A correspondência é feita entre a tabela da consulta externa com a tabela da
consulta interna, na cláusula WHERE desta última. Devolve TRUE se a
cardinalidade for superior a 0 (zero), e FALSE caso seja igual a 0 (zero). Este
operador pode ser negado com a cláusula NOT.

Operador ALL
Permite a uma consulta externa fazer comparações usando < ou > com os
elementos de um conjunto devolvido pela subconsulta. Este operador devolve

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 95


TRUE se todas as linhas do conjunto satisfazem a condição, ou seja, devolve
FALSE se alguma linha não a satisfaz. Pode ser negado com NOT.

Exemplo: nomes dos cursos que possuam duração maior que todos os cursos
de mensalidade inferior a 500 reais.

SELECT NomeC
FROM Curso
WHERE DuracaoC ALL (SELECT DuracaoC FROM Curso WHERE MensC < 500)

Operador ANY
Permite a uma consulta externa fazer comparações usando < ou > com os
elementos de um conjunto devolvido pela subconsulta. Este operador devolve
TRUE se uma das linhas do conjunto satisfaz a condição, ou seja, devolve
FALSE se nenhuma satisfaz a condição. Pode ser negado com NOT.

Exemplo: nomes dos cursos que possuam duração maior que qualquer um dos
cursos de mensalidade inferior a 500 reais.

SELECT NomeC
FROM Curso
WHERE DuracaoC > ANY (SELECT DuracaoC FROM Curso WHERE MensC <
500)

Criação de visões (VIEWS)


Uma visão é um objeto do banco de dados criado a partir da execução de uma
consulta sobre outras tabelas existentes. Após a sua criação, as consultas à
visão podem ser realizadas de forma idêntica às tabelas comuns do banco. As
visões podem ser muito úteis em várias situações, como:

Substituição de consultas longas e complexas por outras mais simples,


obtendo-se o mesmo resultado;

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 96


Utilização de funções de agregação na definição de condições de pesquisa;
Delimitação prática do acesso dos usuários a um conjunto específico dos dados
contidos nas tabelas do banco, tornando os outros inacessíveis e invisíveis.

Sintaxe:
CREATE VIEW nome_visão [(nome_coluna, ...)]
AS SELECT...

O comando SELECT de criação da visão não pode conter a cláusula ORDER BY.

Exemplo 1: visão para alunos consultarem os dados dos cursos sem mostrar os
valores das respectivas mensalidades.

CREATE VIEW Vis_Curso_Aluno (Código, Curso, Duração)


AS SELECT CodC, NomeC, DuracaoC FROM Curso

Para acessar os dados:

SELECT * FROM Vis_Curso_Aluno

Exemplo 2: visão para a secretária consultar a grade de forma amigável e


eficiente.

CREATE VIEW Vis_Grade_Secr (Cod_Curso, Curso, Cod_Disciplina, Disciplina,


Cod_Professor, Professor, Sala)
AS SELECT CodC, NomeC, CodD, NomeD, CodP, NomeP, Sala
FROM Grade, Curso, Disciplina, Professor
WHERE Grade.CodC = Curso.CodC AND
Grade.CodD = Disciplina.CodD AND
Grade.CodP = Professor.CodP

Para acessar os dados:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 97


SELECT * FROM Vis_Grade_Secr

Atualizações através das visões


Os dados do banco podem ser atualizados através da visão, ou seja, uma vez
executado um comando INSERT, UPDATE ou DELETE sobre a visão, os dados
da tabela que a originou também serão atualizados; porém, essas operações
somente poderão ser realizadas se a visão atender aos seguintes requisitos:

– Não possuir junções, ou seja, ter sido criada sobre uma única tabela;
– Não possuir colunas derivadas de funções de agregação;
– Não possuir a cláusula DISTINCT na sua consulta;
– Não possuir as cláusulas GROUP BY ou HAVING na sua consulta.

Caso contrário, a visão será "read-only", e as atualizações deverão ser


realizadas sobre as tabelas originais.

A visão do exemplo 1 poderá ser usada para atualizar a tabela Curso, desde
que o usuário possua privilégios para isto; porém, a visão do exemplo 2 é
"read-only", pois é formada a partir de uma junção.

Remoção de visões

Sintaxe: DROP VIEW nome_visão

Exemplo: Remover a visão Vis_Curso_Aluno

DROP VIEW Vis_Curso_Aluno

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 98


Linguagem de controle de dados (DCL)
A linguagem de controle de dados (DCL) refere-se a um subconjunto da
linguagem SQL destinada a prover os comandos de administração de acesso
aos objetos do banco de dados.

Os comandos para conceder e revogar os privilégios são final.


Os privilégios para cada usuário de acesso a um banco de dados são definidos
para diferentes operações, como: SELECT, INSERT, UPDATE, ALTER, etc.

Comando GRANT
Concede acesso à base de dados e seus objetos.
Sintaxe: GRANT privilégio(s) ON objeto TO usuário(s)

Atenção
Vejamos também sobre o comando REVOKE
Este comando retira acesso à base de dados e aos seus
objetos.Sintaxe: REVOKE privilégio(s) ON tabela ou visão FROM
usuário(s)Exemplo: retirar todos os privilégios na tabela Grade
para os usuários Joao e Paulo.

Atividade proposta
Veja as seguintes tabelas:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO, COD_SUPERV)
DEPTO (NRO_DEPTO, NOME)
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO)
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Escreva o comando em SQL para criar uma visão chamada Func_Proj, contendo
o nome do funcionário, do seu departamento e dos projetos que ele participou.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 99


Material complementar

Para saber mais sobre o padrão SQL, leia o texto disponível em


nossa biblioteca virtual.

Referências
ELMASRI, R.; NAVATHE, S., Sistemas de Banco de Dados. 4. Ed. Pearson
Education do Brasil, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5ª ed. Rio de Janeiro: Campus, 2006.

Exercícios de fixação
Questão 1
Considere o seguinte esquema de uma empresa:
Func (cod_func, nome, dta_nasc, salario, nro_depto, cod_superv)
Depto (nro_depto, nome)
Projeto (cod_proj, nome, duracao, nro_depto)
Participa (cod_proj, cod_func, horas_trab)
A opção que contém o comando em SQL para obter o maior e o menor salário
da empresa é:
a) SELECT MAX(SALARIO), MIN(SALARIO) FROM FUNC
b) SELECT MAIOR(SALARIO), MENOR(SALARIO) FROM FUNC
c) SELECT SUM(SALARIO), AVG(SALARIO) FROM FUNC
d) SELECT COUNT(SALARIO), AVG(SALARIO) FROM FUNC
e) SELECT MIN(SALARIO), MAX(SALARIO) FROM FUNC

Questão 2
Considere as tabelas da questão 1. A opção que contém o comando em SQL
para obter a média de salários de cada departamento da empresa é:
a) SELECT AVG(SALARIO) FROM DEPTO

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 100


b) SELECT MEDIA(SALARIO) FROM FUNC
c) SELECT NRO_DEPTO, AVG(SALARIO) FROM FUNC GROUP BY NRO_DEPTO
d) SELECT SUM(SALARIO) FROM FUNC WHERE NRO_DEPTO
e) SELECT COUNT(SALARIO) FROM FUNC GROUP BY NRO_DEPTO

Questão 3
Considere as tabelas da questão 1. A opção que contém o comando em SQL
para obter a quantidade de funcionários em cada departamento onde a média
salarial seja maior ou igual a R$ 2.000,00 é:
a) SELECT NRO_DEPTO, COUNT(*) >=2000 FROM FUNC GROUP BY
NRO_DEPTO
b) SELECT COUNT(SALARIO) FROM FUNC HAVING AVG(SALARIO) >= 2000
c) SELECT NRO_DEPTO, SUM(COD_FUNC) FROM FUNC GROUP BY
NRO_DEPTO HAVING AVG(SALARIO) >= 2000
d) SELECT COUNT(SALARIO) FROM FUNC WHERE AVG(SALARIO >= 2000
e) SELECT NRO_DEPTO, COUNT(*) FROM FUNC GROUP BY NRO_DEPTO
HAVING AVG(SALARIO) >= 2000

Questão 4
Considere o seguinte esquema de uma empresa:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO,
COD_SUPERV)
DEPTO (NRO_DEPTO, NOME)
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO)
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Marque a alternativa que contém o comando em SQL utilizado para recuperar
os nomes dos funcionários e dos projetos que eles participaram.
a) SELECT NOME, NOME FROM PROJETO P, FUNC F WHERE P.COD_FUNC =
F.COD_FUNC
b) SELECT F.NOME, P.NOME FROM PARTICIPA PA, PROJETO P, FUNC F WHERE
PA.COD_PROJ=P.COD_PROJ AND PA.COD_FUNC = F.COD_FUNC
c) SELECT F.NOME, P.NOME FROM PROJETO P, FUNC F

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 101


d) SELECT * FROM PARTICIPA PA, PROJETO P, FUNC F
e) SELECT F.NOME, PA.NOME FROM PARTICIPA PA, FUNC F WHERE
PA.COD_FUNC = F.COD_FUNC

Questão 5
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL utilizado para obter os nomes dos funcionários que
participaram de projetos e os respectivos totais de horas trabalhadas.
a) SELECT F.NOME, TOTAL(HORAS_TRAB) FROM PARTICIPA PA, FUNC F
b) SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE
PA.COD_FUNC = F.COD_FUNC
c) SELECT F.NOME, MAX(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE
PA.COD_FUNC = F.COD_FUNC GROUP BY F.NOME
d) SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE
PA.COD_FUNC = F.COD_FUNC GROUP BY F.NOME
e) SELECT NOME, SUM(HORAS_TRAB) FROM PARTICIPA GROUP BY NOME

Questão 6
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para recuperar nomes dos funcionários e dos respectivos
supervisores.
a) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S
b) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_FUNC =
S.COD_SUPERV
c) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_SUPERV =
S.COD_FUNC
d) SELECT F.NOME, F.NOME_SUPERV FROM FUNC F
e) SELECT F.NOME, PA.NOME FROM FUNC F, PARTICIPA PA WHERE
F.COD_FUNC = PA.COD_FUNC

Questão 7
Considere o seguinte esquema de uma empresa:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 102


CARGO (COD_CARGO, DESCRICAO, SALARIO_MIN, SALARIO_MAX)
FUNCIONARIO (MATRICULA, NOME, COD_CARGO, MAT_CHEFE, DT_NASC,
SALARIO)
CONTRATADO (MATRICULA, NOME, COD_CARGO, SALARIO)
Marque a alternativa que contém o comando em SQL utilizado para recuperar o
nome do funcionário e a descrição do seu cargo, listando os cargos sem
funcionários.
a) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F LEFT OUTER JOIN
CARGO C ON F.COD_CARGO=C.COD_CARGO
b) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F FULL OUTER JOIN
CARGO C ON F.COD_CARGO=C.COD_CARGO
c) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F OUTER JOIN CARGO
C ON F.COD_CARGO=C.COD_CARGO
d) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F INNER JOIN CARGO C
ON F.COD_CARGO=C.COD_CARGO
e) SELECT F.NOME, C.DECRICAO FROM FUNCIONARIO F RIGHT OUTER JOIN
CARGO C ON F.COD_CARGO=C.COD_CARGO

Questão 8
Considere as tabelas da questão 4. Marque a alternativa que contém o
comando em SQL utilizado para recuperar os nomes dos funcionários e
contratados que têm salário maior que R$ 1.500,00.
a) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) UNION
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
b) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) INTERSECT
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
c) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) JOIN
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
d) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) EXCEPT
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
e) SELECT F.NOME, C.NOME FROM FUNCIONARIO F, CONTRATADO C WHERE
SALARIO > 1500

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 103


Questão 9
Considere o seguinte esquema de uma empresa:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO,
COD_SUPERV)
DEPTO (NRO_DEPTO, NOME)
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO)
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Marque a alternativa que contém o comando em SQL utilizado para listar o
nome e o salário dos funcionários cuja remuneração é maior que a média
salarial da empresa.
a) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > AVG(SALARIO)
b) SELECT NOME, SALARIO>AVG(SALARIO) FROM FUNC
c) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > (SELECT
AVG(SALARIO) FROM FUNC)
d) SELECT NOME, SALARIO FROM FUNC WHERE EXISTS > (SELECT
AVG(SALARIO) FROM FUNC)
e) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO > (SELECT
MEDIA(SALARIO) FROM FUNC)

Questão 10
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL utilizado para retornar os códigos dos projetos cuja duração
foi menor que a de todos os projetos do departamento 5.
a) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < (SELECT DURACAO
FROM PROJETO WHERE NRO_DEPTO = 5)
b) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < ALL (SELECT
DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
c) SELECT COD_PROJ FROM PROJETO WHERE DURACAO IN (SELECT
DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
d) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < NRO_DEPTO = 5
e) SELECT COD_PROJ FROM PROJETO WHERE EXISTS (SELECT DURACAO
FROM PROJETO WHERE NRO_DEPTO = 5)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 104


Questão 11
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL utilizado para conceder privilégios para que o usuário Pedro
insira dados na tabela Func, podendo repassar estes direitos.
a) GRANT INSERT TO PEDRO ON FUNC WITH GRANT OPTION
b) GRANT INSERT ON FUNC TO PEDRO
c) GRANT INSERT ON PEDRO TO FUNC WITH GRANT OPTION
d) GRANT INSERT ON FUNC TO PEDRO CASCADE
e) GRANT INSERT ON FUNC TO PEDRO WITH GRANT OPTION

Questão 12
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL utilizado para eliminar todos os privilégios do usuário Pedro
na tabela Func.
a) REVOKE ALL ON FUNC FROM PEDRO
b) REVOKE PRIVILEGES ON FUNC FROM PEDRO
c) REVOKE PUBLIC ON FUNC FROM PEDRO
d) REVOKE ALL FROM PEDRO ON FUNC
e) REVOKE ALL ON PEDRO FROM FUNC

Notas
DCL: Data Control Language
SQL: Structured Query Language ou Linguagem de Consulta Estruturada.

Chaves de resposta
Aula 5
Exercícios de fixação
Questão 1 - A
Justificativa: O comando SQL correto é: SELECT MAX(SALARIO), MIN(SALARIO)
FROM FUNC.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 105


Questão 2 - C
Justificativa: O comando SQL correto é: SELECT NRO_DEPTO, AVG(SALARIO)
FROM FUNC GROUP BY NRO_DEPTO.

Questão 3 - E
Justificativa: O comando SQL correto é: SELECT NRO_DEPTO, COUNT(*) FROM
FUNC GROUP BY NRO_DEPTO HAVING AVG(SALARIO) >= 2000.

Questão 4 - B
Justificativa: A sentença correta é SELECT F.NOME, P.NOME FROM PARTICIPA
PA, PROJETO P, FUNC F WHERE PA.COD_PROJ=P.COD_PROJ AND
PA.COD_FUNC = F.COD_FUNC.

Questão 5 - D
Justificativa: A sentença correta é SELECT F.NOME, SUM(HORAS_TRAB) FROM
PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC GROUP BY
F.NOME.

Questão 6 - C
Justificativa: A sentença correta é SELECT F.NOME, S.NOME FROM FUNC F,
FUNC S WHERE F.COD_SUPERV = S.COD_FUNC.

Questão 7 - E
Justificativa: A sentença correta é SELECT F.NOME, C.DECRICAO FROM
FUNCIONARIO F RIGHT OUTER JOIN CARGO C ON
F.COD_CARGO=C.COD_CARGO.

Questão 8 - A
Justificativa: A sentença correta é (SELECT NOME FROM FUNCIONARIO WHERE
SALARIO > 1500) UNION (SELECT NOME FROM CONTRATADO WHERE
SALARIO > 1500).

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 106


Questão 9 - C
Justificativa: A sentença correta é SELECT NOME, SALARIO FROM FUNC
WHERE SALARIO > (SELECT AVG(SALARIO) FROM FUNC).

Questão 10 - B
Justificativa: A sentença correta é SELECT COD_PROJ FROM PROJETO WHERE
DURACAO < ALL (SELECT DURACAO FROM PROJETO WHERE NRO_DEPTO =
5).

Questão 11 - E
Justificativa: A sentença correta é GRANT INSERT ON FUNC TO PEDRO WITH
GRANT OPTION.ativa

Questão 12 - A
Justificativa: A sentença correta é REVOKE ALL ON FUNC FROM PEDRO.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 107


Aula 6: Indexação
Introdução
Nesta aula, serão apresentados os conceitos fundamentais de índices, sua
importância e utilização. Serão apresentados os tipos de índices, índices
ordenados, índices densos e esparsos, índice multinível e a definição de um
índice em SQL.

Objetivo:
1. Conhecer os conceitos fundamentais de índices, sua importância e utilização;
os tipos de índices, índices ordenados, índices densos e esparsos, índice
multinível;
2. Definir um índice em SQL.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 108


Conteúdo

Índices – conceitos básicos


O que são os índices? São estruturas de dados auxiliares cujo objetivo é
tornar o acesso a registros mais rápido baseado em certos campos usados para
a indexação.

No contexto de banco de dados, um índice é uma estrutura (ou arquivo)


auxiliar associada a uma tabela. Sua função é acelerar o tempo de acesso às
linhas de uma tabela, criando ponteiros para os dados armazenados em
colunas específicas. O banco de dados usa o índice de maneira semelhante ao
índice remissivo de um livro, verifica um determinado assunto no índice e
depois localiza a sua posição em uma determinada página.

Atenção
Chave de busca – É um atributo ou conjunto de atributos para
pesquisar registros em um arquivo.
Um arquivo de índice consiste em registros (chamados entradas
de índice) na forma:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 109


Tipos básicos de índices
Conheça dois tipos básicos de índices:

Índices ordenados

Chaves de busca são armazenadas em ordem classificada.

Índices de hash

Chaves de busca são distribuídas uniformemente entre “baldes” usando uma


"função de hash".

Estrutura de índices: Como forma de estrutura dos índices temos:

• Índice primário: baseado na chave de ordenação;


• Índice de agrupamento: baseado no campo de ordenação não chave de um
arquivo;
• Índice secundário: baseado em qualquer campo não ordenado de um arquivo;
• Índices multiníveis;
• Árvores B e B+;
• Tabelas hash.

Índices sobre arquivos sequenciais


Vejamos agora a respeito dos índices sobre arquivos sequenciais:

Índice denso

O registro de índice aparece para cada valor de chave de busca no arquivo.


Sequência de blocos contendo apenas as chaves dos registros e os ponteiros
para os próprios registros.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 110


Índice denso = (chave-ponteiro, registro)

Exemplo: Um índice denso sobre um arquivo de dados sequencial.

Índice esparso

Contém registros de índice somente para alguns valores de chave de busca.


Aplica-se quando os registros são ordenados sequencialmente por chave de
busca.

Gasta menos espaço e gera menos sobrecarga de manutenção para inserções e


exclusões que o índice denso. Geralmente mais lento que o índice denso para
localizar registros.

Índice esparso = (chave-ponteiro, blocos de dados). Aponta para o primeiro


registro do bloco.

Exemplo: Um índice esparso sobre um arquivo de dados sequencial.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 111


Índice primário

No índice primário as tuplas são classificadas pela chave primária. A estrutura é


composta pelo arquivo classificado (com dados) e arquivo de índices. O índice
tem a estrutura (chave de pesquisa, ponteiro). Útil quando a chave de pesquisa
é a chave primária. Exemplo:

Índice secundário

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 112


O índice secundário ocorre quando o campo de indexação é um campo não
ordenado do arquivo de dados. Podem haver muitos índices secundários para
um mesmo arquivo. Exemplo:

Índice multinível

Se o índice primário não couber na memória, o acesso se torna dispendioso.


Para reduzir o número de acessos de disco aos registros de índice, trate o
índice primário mantido em disco como um arquivo sequencial e construa um
índice esparso sobre ele.

índice externo – um índice esparso do índice primário


índice interno – o arquivo de índice primário

Se até mesmo o índice externo for muito grande para caber na memória
principal, outro nível de índice pode ser criado, e assim por diante. Os índices
em todos os níveis precisam ser atualizados na inserção ou exclusão no
arquivo.

Exemplo:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 113


Arquivo de Índice Arquivo de Dados
Matricula Ponteiro Matricula Nome Salario CodDepto
10 10 João 3000 RH
Arquivo de Índice
20 20 Maria 2500 RH
Matricula Ponteiro
10
30 30 Pedro 4000 TI
30
50 40 40 Paula 4500 TI

50 50 Marta 3000 EN
60 60 Tiago 5000 TI

índice externo (esparso) índice interno

Arquivo de Índice
Matrícula Ponteiro
10 
30 
50 

Arquivo de Índice
Matrícula Ponteiro
10 
20 

30 
40 

50 
60 

Arquivo de Dados
Matrícula Nome Salário CodDepto
10 João 3000 RH
20 Maria 2500 RH

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 114


30 Pedro 4000 TI
40 Paula 4500 TI

50 Marta 3000 EN
60 Tiago 5000 TI

Atualização de índice: exclusão


Se o registro excluído foi o único registro no arquivo com seu valor de chave de
busca específico, a chave de busca também é excluída do índice. Exclusão de
índice de único nível:

Índices densos - a exclusão da chave de busca é semelhante à exclusão de


registro do arquivo.

Índices esparsos - se houver uma entrada para a chave de busca no índice,


ela é excluída substituindo a entrada no índice pelo próximo valor de chave de
busca no arquivo (em ordem de chave de busca). Se o próximo valor de chave
de busca já tiver uma entrada de índice, a entrada é excluída em vez de ser
substituída.

Atualização de índice: inserção


Utiliza-se o valor de chave de busca para encontrar o registro a ser inserido.

• Índices densos - se o valor da chave de busca não aparecer no índice, deve


ser inserido.
• Índices esparsos - se o índice armazena uma entrada para cada bloco do
arquivo, nenhuma mudança precisa ser feita no índice, a menos que um novo
bloco seja criado. Nesse caso, o primeiro valor de chave de busca que aparece
no novo bloco é inserido no índice.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 115


Algoritmos de inserção multinível (além de exclusão) são simples extensões dos
algoritmos de único nível.

Arquivos de índice de árvore B+


A árvore B+ é uma variação da estrutura de dados de árvore B. Suas
propriedades, algoritmos de inserção, busca e remoção de chaves são
diferentes dos utilizados em árvores B, mas com uma gama de aplicações muito
semelhantes em banco de dados e sistemas de arquivos.

A premissa dessa variação da árvore B é manter todas as chaves de busca em


seus nós folha de forma que o acesso sequencial ordenado das chaves de
busca seja um processo mais eficiente do que em árvores B.

Tem as seguintes características:

• Todas as chaves são mantidas em folhas;


• As chaves são repetidas em nós não folha formando um índice;
• As folhas são ligadas oferecendo um caminho sequencial para percorrer as
chaves.

Exemplo: Árvore B+

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 116


Atenção
Os arquivos sequenciais indexados tem uma grande
desvantagem: o desempenho diminui quando o arquivo
aumenta, pois muitos blocos de estouro são criados. É preciso
reorganizar periodicamente o arquivo inteiro..

Vantagem dos arquivos de índice B+: reorganizam-se automaticamente com


pequenas mudanças locais, em face a inserções e exclusões. A reorganização
do arquivo inteiro não é necessária para manter o desempenho.

Desvantagem das árvores B+: trabalho extra de inserção e exclusão,


sobrecarga de espaço.

Vantagens das árvores B+ superiores às desvantagens, e por isso muito usadas


em banco de dados.

Uma árvore B+ é uma árvore com raiz satisfazendo as seguintes propriedades:

 Todos os caminhos da raiz até a folha são do mesmo tamanho;


 Cada nó que não é uma raiz ou uma folha tem entre [n/2] e n filhos;
 Um nó de folha tem entre [(n–1)/2] e n–1 valores.

Casos especiais:
 Se a raiz não for uma folha, ela tem pelo menos 2 filhos;
 Se a raiz for uma folha (ou seja, não houver outros nós na árvore), ela
pode ter entre 0 e (n-1) valores.

Estrutura de nós da árvore B+


Conheça agora a estrutura de nós da árvore B+:

Nó típico

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 117


Fonte: SILBERSCHATZ; KORTH, 2006

• Ki são os valores de chave de busca;

• Pi são ponteiros para os filhos (para nós não de folha) ou ponteiros para
registros ou baldes de registros (para nós de folha);

• As chaves de busca em um nó são ordenadas K1< K2 < K3 < . . . <Kn–1.

Nós de folha da árvore B+

• Para i = 1, 2, . . ., n–1, o ponteiro Pi ou aponta para um registro de arquivo


com valor de chave de busca Ki, ou para um balde de ponteiros para registros
de arquivo, cada registro tendo valor de chave de busca Ki. Só precisa de
estrutura de balde se a chave de busca não formar uma chave primária.

• Se Li, Lj forem nós de folha e i &#60; j, os valores de chave de busca de Li


são menores que os valores de chave de busca de Lj ;

• Pn aponta para o próximo nó de folha na ordem da chave de busca.


Fonte: SILBERSCHATZ; KORTH, 2006

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 118


Nós de não folha da árvore B+

• Os nós não de folha formam um índice esparso multinível sobre os nós de


folha. Para um nó não de folha com m ponteiros;

• Todas as chaves de busca na sub-árvore à qual P1 aponta são menores que


K1;

• Para 2 ≤ i ≤ n – 1, todas as chaves de busca na sub-árvore à qual Pi aponta


têm valores maiores ou iguais a Ki–1 e menores que Km–1.
Fonte: SILBERSCHATZ; KORTH, 2006

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 119


Atenção
Veja também um exemplo de uma árvore B+:

Definição de um índice em SQL


A implementação adequada dos índices por um Sistema de Banco de Dados
pode tornar o acesso à informação mais rápido. Alguns critérios podem ser
levados em conta na indicação para criação de índices:

1 - Quando uma coluna contiver uma grande faixa de valores;

2 - Quando uma ou mais colunas foram usadas frequentemente em junções ou


na cláusula WHERE;

3 - Se a tabela for muito grande e as consultas recuperam menos que 5 % dos


registros.

A criação de um índice é feita com o comando CREATE INDEX que tem a


seguinte sintaxe:

CREATE INDEX nome_indice ON nome_tabela (coluna1,coluna2, ... , colunaN)


A lista coluna1,coluna2, ... , colunaN corresponde à lista de atributos da relação
(ou tabela) que formam a chave de busca para o índice.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 120


Exemplo 1: Seja a tabela: func(mat, nome, sobrenome, salário, codcargo).
Crie um índice sobre a coluna CODCARGO da tabela FUNC.
CREATE INDEX IDX_CODCARGO ON FUNC (CODCARGO)
Obs.: Apesar de não ser regra, é aconselhável colocar um prefixo, tal como
"IDX_", antes de um nome de índice para diferenciá-lo de outros objetos da
base de dados.

Exemplo 2: Seja a tabela: func(mat, nome, sobrenome, salário, codcargo).


Crie um índice sobre as colunas NOME e SOBRENOME da tabela FUNC.
CREATE INDEX IDX_NOME ON FUNC (NOME,SOBRENOME)

Atenção
Cláusula UNIQUE
A utilização da cláusula UNIQUE permite garantir que os valores
no índice sejam únicos. Para isso é necessário que a coluna
referenciada contenha apenas valores distintos.
Exemplo 3: Criar um índice único chamado IDX_CPF na coluna
CPF da tabela FUNC.
CREATE INDEX IDX_CPF ON FUNC(CPF)
Comando DROP INDEX
Para eliminar o índice a sintaxe é: DROP INDEX nome_indice
Exemplo 3: Eliminar o índice IDX_NOME.
DROP INDEX IDX_NOME

Atividade proposta
Sabendo que a árvore B+ é uma variação da estrutura de dados da árvore B,
liste as suas principais características.

Chave de resposta:
• Todas as chaves são mantidas em folhas;
• As chaves são repetidas em nós não folha formando um índice;

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 121


• As folhas são ligadas oferecendo um caminho sequencial para percorrer as
chaves.

Material complementar

Para saber mais sobre o padrão SQL e sobre o Oracle®


Database SQL Reference, leia os textos disponíveis em nossa
biblioteca virtual.

Referências
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.
ELMASRI, R.; NAVATHE, S., Sistemas de Banco de Dados. 4. ed. Pearson
Education do Brasil, 2005.

Exercícios de fixação
Questão 1
Um índice é uma estrutura auxiliar associada a uma tabela. Cria ponteiros para
os dados armazenados em colunas específicas para acelerar o tempo de acesso
às linhas de uma tabela. São exemplos de estruturas de índices, EXCETO:
a) Índice primário.
b) Índice de agrupamento.
c) Índices multiníveis.
d) Índice remissivo.
e) Tabelas hash.

Questão 2
A respeito dos índices sobre arquivos sequenciais, faça a associação entre as
colunas:
1. Índice Denso
2. Índice Esparso

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 122


( ) Contém registros de índice para alguns valores de chave de busca.
( ) Tem a estrutura (chave-ponteiro, registro).
( ) Gasta menos espaço e gera menos sobrecarga de manutenção.
( ) Tem a estrututura (chave-ponteiro, blocos de dados).
( ) O registro de índice aparece para cada valor de chave de busca.
a) 2 – 1 – 2 - 2 – 1
b) 1 – 1 – 2 – 1 – 2
c) 2 – 2 – 1 – 1 – 1
d) 1 – 1 – 1 – 1 – 2
e) 2 – 2 – 2 – 2 - 1

Questão 3
A respeito da estrutura de dados Árvore B+, são verdadeiras as afirmativas,
EXCETO:
a) Todas as chaves são mantidas em folhas.
b) Tem como vantagem não gerar sobrecarga de espaço.
c) As chaves são repetidas em nós não folha formando um índice.
d) As folhas são ligadas oferecendo um caminho sequencial para percorrer
as chaves.
e) Reorganiza-se automaticamente com pequenas mudanças locais.

Questão 4
Seja a tabela participa(mat, codproj, horas_trab). O comando SQL para criar o
índice IDX_PARTICIPA sobre as colunas MAT e CODPROJ da tabela PARTICIPA
é:
a) CREATE INDEX IDX_PARTICIPA FROM PARTICIPA(MAT,CODPROJ).
b) CREATE INDEX PARTICIPA ON PARTICIPA(MAT).
c) CREATE INDEX IDX_PARTICIPA ON (MAT,CODPROJ).
d) CREATE INDEX PARTICIPA AS PARTICIPA(MAT,CODPROJ).
e) CREATE INDEX IDX_PARTICIPA ON PARTICIPA(MAT,CODPROJ).

Questão 5

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 123


O comando SQL para eliminar o índice IDX_PARTICIPA é:
a) DROP INDEX IDX_PARTICIPA(MAT,CODPROJ).
b) DROP INDEX IDX_PARTICIPA ON PARTICIPA(MAT).
c) DROP INDEX IDX_PARTICIPA.
d) DROP INDEX PARTICIPA AS PARTICIPA(MAT,CODPROJ).
e) DROP INDEX IDX_PARTICIPA OFF PARTICIPA(MAT,CODPROJ).

Notas
Árvore B: Estrutura de dados projetada para funcionar especialmente em
memória secundária.
Árvore B+: Estrutura de dados do tipo árvore derivada das árvores B, mas
com uma forma diferente de armazenamento de suas chaves.
Chave de busca: Atributo para pesquisar registros em um arquivo.
Índices de hash: Chaves de busca são distribuídas uniformemente usando
uma "função de hash".
Índices ordenados: Chaves de busca são armazenadas em ordem
classificada.
Ponteiro: Indica o local de armazenamento dos itens indexados.
SQL: Structured Query Language ou Linguagem de Consulta Estruturada

Chaves de resposta
Aula 6
Exercícios de fixação
Questão 1 - D
Justificativa: Índice remissivo não é uma estrutura de índice.

Questão 2 - A
Justificativa: Definições de Índices Denso e Esparso.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 124


Questão 3 - B
Justificativa: A árvore B+ tem como desvantagem gerar sobrecarga de espaço.

Questão 4 - E
Justificativa: A sentença correta é CREATE INDEX_PARTICIPA ON
PARTICIPA(MAT,CODPROJ).

Questão 5 - C
Justificativa: A sentença correta é DROP INDEX IDX_PARTICIPA.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 125


Aula 7: Transações
Introdução
Nesta aula, trataremos do conceito de transação, seus estados, propriedades
ACID, execução de transações concorrentes e controle de transação em SQL.

Objetivo:
1. Entender o conceito de transação, seus estados e propriedades ACID;
2. Executar transações concorrentes e controle de transação em SQL.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 126


Conteúdo

Introdução a transações
Um Sistema Gerenciador de Banco de Dados (SGBD) é um sistema de
processamento de operações de acesso ao Banco de Dados, são multiusuários
e processam simultaneamente operações disparadas por vários usuários e
deseja-se sempre alta disponibilidade e baixo tempo de resposta.

Na prática, temos a execução intercalada de conjuntos de operações, por


exemplo:

enquanto um processo i faz uma operação de entrada/saída, outro processo j é


selecionado para execução no processador.

Conceito de transação
Assim, uma transação é uma unidade lógica de processamento em um SGBD,
composta por uma ou mais operações. Os limites de uma transação podem ser
determinados em SQL. De forma abstrata e simplificada, uma transação pode
ser encarada como um conjunto de operações de leitura e escrita de dados.

Uma transação precisa ver um banco de dados consistente. Durante a execução


da transação, o banco de dados pode ser temporariamente inconsistente.

Quando a transação é completada com sucesso (é confirmada), o banco de


dados precisa ser consistente. Após a confirmação da transação, as mudanças
que ele faz no banco de dados persistem, mesmo se houver falhas de sistema.

Dois problemas principais para resolver:

Falhas de vários tipos, como falhas de hardware e falhas de sistema.


Execução simultânea de múltiplas transações.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 127


Exemplo
A transferência de fundos de uma conta-corrente para uma conta poupança é
uma operação única do ponto de vista do cliente, porém, dentro dos sistemas
de banco de dados, ela envolve várias operações.

Operações de leitura/escrita
As operações de acesso ao banco de dados que uma transação pode fazer são:

read(x)

Transfere o item de dados x do BD para um buffer local alocado à transação


que executou a operação de read. O valor de x é colocado dentro de uma
variável de programa.

write(x)

Transfere o item de dados x do buffer local da transação que executou o write


de volta para o BD. O valor da variável de programa é passado para o item de
dado no BD.

Execução das operações


Executar read(x)

Encontrar o endereço do bloco de disco que contém x.

Copiar esse bloco de disco para dentro do buffer/memória principal, se ele já


não estiver lá.

Copiar o item x do buffer para a variável de programa.

Executar write(x)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 128


Encontrar o endereço do bloco de disco que contém x.
Copiar o bloco de disco para a memória principal se ele já não estiver lá.

Copiar o item x da variável de programa x para a localização correta no buffer.

Copiar o bloco alterado do buffer de volta para o disco (imediatamente ou mais


tarde).

Exemplo de acesso aos dados

Exemplo 1
Acesso concorrente ao dado x.

read(x);
x := x + M;

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 129


write(x);
read(y);
y := y + N;
write(y);

read(x);
x := x – N;
write(x);

Exemplo 2
Seja T1 uma transação que transfere 50 reais da conta A para a conta B.
Essa transação pode ser definida como:

T1: read(A);
A := A - 50;
write(A);
read(B);
B := B + 50;
write(B);

Estados de uma transação


O SGBD monitora uma transação quanto ao seu estado e que operações já
executou. São estados de uma transação:

Ativa

Em processo de efetivação

Efetivada, em processo de aborto

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 130


Concluída

Transição de estados de uma transação

Ativa
• Estado inicial de toda transação selecionada para execução enquanto ativa.
• Uma transação executa uma ou mais operações read e write.

Em processo de efetivação
• Entra nesse estado após executar sua última operação (solicitação de
commit).
• Neste momento o SGBD precisa garantir que as suas atualizações sejam
efetivadas com sucesso (não sofra falhas).
• São aplicadas técnicas de recuperação (recovery).

Efetivada
• Entra nesse estado após o SGBD confirmar que todas as modificações da
transação estão garantidas no BD (Commit OK).
• Exemplos: gravação em Log, descarga de todos os buffers em disco.

Em processo de aborto

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 131


• Entra nesse estado se não puder prosseguir a sua execução.
• Pode passar para esse estado enquanto ativa ou em processo de efetivação.
• Exemplos: violação de Restrição de Integridade (RI), pane no sistema
operacional.
• Ações já realizadas devem ser desfeitas (Rollback).

Concluída
• Estado final de uma transação.
• Indica uma transação que deixa o sistema.
• As informações da transação mantidas em catálogo podem ser excluídas.
• Operações feitas, dados manipulados, buffers utilizados etc.
• Se a transação não foi concluída com sucesso, ela pode ser reiniciada
automaticamente.

Propriedades de uma transação


Para preservar a integridade dos dados, o SGBD deve assegurar as seguintes
propriedades, chamadas de propriedades ACID:

TOMICIDADE

ONSISTÊNCIA

SOLAMENTO

URABILIDADE OU PERSISTÊNCIA

Atomicidade
Todas as operações da transação devem ser efetivadas com sucesso no banco
de dados ou nenhuma delas se efetiva. O objetivo é preservar a integridade do
banco de dados.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 132


A responsabilidade de garantir a recuperação em caso de falhas é do
subsistema de recuperação contra falhas (subsistema de recovery) do SGBD
que desfaz as ações de transações parcialmente executadas.
A atomicidade deve ser garantida, pois uma transação pode manter o banco de
dados em um estado inconsistente durante a sua execução.

Consistência
Uma transação sempre conduz o banco de dados de um estado consistente
para outro estado também consistente.
A responsabilidade pode ser atribuída ao:

DBA
Definir todas as restrições de integridade (RIs) para garantir estados e
transições de estado válidos para os dados.
Exemplos: salário > 0; salário novo > salário antigo

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 133


Subsistema de recuperação (recovery):
Desfazer as ações da transação que violou a integridade.

Isolamento
No contexto de um conjunto de transações concorrentes, a execução de uma
transação Tx deve funcionar como se Tx executasse de forma isolada. A
transação Tx não deve sofrer interferências de outras transações executadas
concorrentemente.

Um escalonamento representa uma lista de ações (leitura, escrita, rollback ou


commit) de um conjunto de transações em que a ordem em que duas ações de
uma transação T aparecem no escalonamento é a mesma em que aparecem na
transação.

Exemplo: Escalonamento válido/inválido

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 134


Durabilidade ou persistência
As modificações realizadas por uma transação que concluiu com sucesso devem
persistir no banco de dados. Mesmo que ocorra alguma falha posterior no
banco de dados as modificações persistem.

Em caso de falha o subsistema de recuperação (recovery) refaz as transações


executadas com sucesso.

Gerência básica de transações

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 135


Transações em SQL
Uma transação consiste geralmente nas operações que seguem:

• operação DDL (Data Definition Language);


• operação DCL (Data Control Language);
• conjunto de operações DML (Data Manipulation Language).

A transação começa quando for executada a 1ª operação SQL


executável e termina com um dos seguintes eventos:

• comando COMMIT ou ROLLBACK é emitido;


• operação DDL ou DCL é executada (commit automático);
• usuário desconecta do banco de dados (commit automático);
• sistema falha (rollback automático).

O próximo comando SQL inicia automaticamente a próxima transação quando


uma transação termina.

As operações de controle das transações são:

COMMIT

Finaliza a transação atual tornando permanentes todas as alterações de dados


pendentes.

SAVEPOINT
<nome_savepoint>

Marca um ponto de gravação dentro da transação atual, sendo utilizado para


dividir uma transação em partes menores.

ROLLBACK [TO SAVEPOINT <nome_savepoint>

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 136


Rollback finaliza a transação atual, descartando todas as alterações de dados
pendentes.

ROLLBACK TO SAVEPOINT

Descarta o ponto de gravação determinado e as alterações seguintes a ele.

Exemplo 1:
INSERT INTO Depto (NRO_Depto, NomeDepto, Mat_Gerente)
VALUES (20, 'Engenharia', 5);
UPDATE Func SET salario = salario * 1.10
WHERE NRO_Depto = 8;
COMMIT;
DELETE FROM Func;
ROLLBACK;

No exemplo, o departamento 20 é inserido, os salários dos funcionários do


departamento 8 são atualizados, mas nenhum funcionário é excluído.

Exemplo 2:
INSERT INTO Depto (NRO_Depto, NomeDepto, MAT_Gerente)
VALUES (21, 'TI', 4);
SAVEPOINT ponto1;
DELETE FROM Func;
ROLLBACK TO SAVEPOINT ponto1;
UPDATE Func SET salario = salario * 1.10
WHERE ID_Depto = 8;
COMMIT;

No exemplo, o departamento 21 é inserido, os salários dos funcionários do


departamento 8 são atualizados, mas nenhum funcionário é excluído.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 137


Caso uma operação DML falhe durante a execução, será feito rollback somente
dessa operação. Alguns SGBDs implementam um savepoint implícito à operação
que está sendo executada. Todas as outras alterações são mantidas.

O usuário deve finalizar as transações explicitamente usando uma operação


COMMIT ou ROLLBACK.

Consistência dos dados


Os tipos de acesso ao banco de dados são, basicamente:

leitura (SELECT);

alteração (INSERT, UPDATE e DELETE).

Quando uma transação efetua um commit, os dados são definitivamente


alterados no banco de dados e a cópia dos dados anteriores é eliminada. Assim,
as outras transações passam a ter acesso aos próprios dados já alterados.

Quando uma transação efetua um rollback, os dados anteriores são copiados


novamente para o banco de dados, retornando assim à sua versão anterior.

Quando uma transação altera o banco de dados, é feita uma cópia dos dados
anteriores à alteração em um local chamado segmento de rollback. Se uma
outra transação quiser acessar esses dados, serão acessados os dados que
estão no segmento de rollback.

Quando uma transação efetua um commit, os dados são definitivamente


alterados no banco de dados e a cópia dos dados anteriores é eliminada do
segmento de rollback. Assim, as outras transações passam a ter acesso aos
próprios dados já alterados.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 138


Controle de concorrência
As técnicas de controle de concorrência são utilizadas para garantir que
transações concorrentes sejam executadas adequadamente.

Os principais problemas que ocorrem quando transações concorrentes são


executadas sem controle são:

Problema da perda de atualização.

Problema da atualização temporária (leitura suja).

Problema da agregação incorreta.

Problema da leitura não repetitiva.

Problema da perda de atualização


Ocorre quando duas transações que acessam os mesmos itens do banco de
dados possuem operações entrelaçadas, de modo que torne incorreto o valor
de algum item do banco de dados.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 139


Problema da atualização temporária (leitura suja)
Ocorre quando uma transação atualiza um item do banco de dados e, por
algum motivo, a transação falha; no caso, o item atualizado é acessado por
uma outra transação antes de seu valor ser retornado ao valor anterior.

Problema da agregação incorreta


Se uma transação estiver calculando uma função de agregação em um número
de itens, enquanto outras transações estiverem atualizando alguns desses
itens, a função agregada pode considerar alguns itens antes que eles sejam
atualizados e outros depois que tenham sido atualizados.

Problema da leitura não-repetitiva


Ocorre quando uma transação T lê um item duas vezes e o item é alterado por
uma outra transação T’ entre as duas leituras de T. Portanto, T recebe
diferentes valores para suas duas leituras do mesmo item.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 140


Atividade Proposta
Considere duas transações T1 e T2. T1 tem um escalonamento válido e T2 tem
um escalonamento inválido. Considere que A=500 e B=500.
a) Qual o valor de A e B no final da execução de T1 e T2 nos dois
escalonamentos?
b) Qual o problema que ocorre no escalonamento 2 (inválido)?

Escalonamento 1 (válido)
T1 T2
1 read(A)
2 A=A-100
3 write(A)
4 read(A)
5 A=A+A*0,1
6 write(A)
7 read(B)
8 B=B+100
9 write(B)
10 read(B)
11 B=B-A
12 write(B)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 141


Escalonamento 2 (inválido)
T1 T2
1 read(A)
2 A=A-100
3 read(A)
4 A=A+A*0,1
5 write(A)
6 read(B)
7 write(A)
8 read(B)
9 B=B+100
10 write(B)
11 B=B-A
12 write(B)

Chave de resposta:

a)
Escalonamento 1: A=440 e B=160
Escalonamento 2: A=550 e B=50

b)
No escalonamento 2, a instrução 7 de T1, “write(A)”, interfere no valor de A da
transação T2.
Da mesma forma, a instrução 12 de T2, “write(B)”, interfere no valor de B da
transação T1.

Referências
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 4. ed. Pearson
Education do Brasil, 2005.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 142


Exercícios de fixação
Questão 1
São estados de uma transação, exceto:
a) Ativa
b) Em processo de efetivação
c) Efetivada
d) Monitorada
e) Concluída

Questão 2
As propriedades de uma transação tem o objetivo de preservar a integridade
dos dados do banco de dados. São propriedades de uma transação, exceto:
a) Atomicidade
b) Consistência
c) Interferência
d) Durabilidade
e) Persistência

Questão 3
Uma transação não deve sofrer interferências de outras transações executadas
concorrentemente. A característica apresentada diz respeito à seguinte
propriedade das transações:
a) Concorrência
b) Isolamento
c) Efetivação
d) Persistência
e) Durabilidade

Questão 4
São operações de controle das transações, exceto:
a) Commit
b) Savepoint

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 143


c) Rollback
d) Rollback to Savepoint
e) Update

Questão 5
Seja uma transação com os seguintes comandos em SQL:
INSERT INTO Cargo (CodCargo, Descricao) VALUES ('AN', 'Analista');
UPDATE Func SET salario = salario * 1.20 WHERE NRO_Depto = 10;
COMMIT;
DELETE FROM Func;
ROLLBACK;
Podemos afirmar que:
a) O cargo de analista é inserido, os salários dos funcionários do
departamento 10 são atualizados, mas nenhum funcionário é excluído.
b) O cargo de analista é inserido, os funcionários do departamento 10
recebem aumento de 2%, mas nenhum funcionário é excluído.
c) O cargo de analista é inserido, os salários dos funcionários do
departamento 10 são atualizados e todos os funcionários são excluídos.
d) O cargo de código ‘AN’ é inserido, os salários dos funcionários do
departamento 20 são atualizados, mas nenhum funcionário é excluído.
e) O cargo de código ‘AN’ é inserido, os salários dos funcionários do
departamento 10 são atualizados, mas o comando Rollback desfaz todas
as atualizações anteriores.

Questão 6
Considerando as afirmações abaixo, não é um problema que ocorre quando
transações concorrentes são executadas:
a) Perda de atualização
b) Atualização temporária (leitura suja)
c) Agregação incorreta
d) Em processo de efetivação
e) Leitura não repetitiva

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 144


Chaves de resposta
Aula 7
Exercícios de fixação
Questão 1 - D
Justificativa: Monitorada não é um estado de uma transação.

Questão 2 - C
Justificativa: Interferência não é uma propriedade das transações.

Questão 3 - B
Justificativa: A característica apresentada é o isolamento.

Questão 4 - E
Justificativa: A sentença Update não é uma operação de controle das
transações.

Questão 5 - A
Justificativa: A afirmação correta é: “O cargo de analista é inserido, os salários
dos funcionários do departamento 10 são atualizados, mas nenhum funcionário
é excluído”.

Questão 6 - D
Justificativa: “Em processo de efetivação” é um estado válido de uma
transação.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 145


Aula 8: Otimização e proces. de consultas
Introdução
Nesta aula, será apresentado o conceito de performance em Banco de Dados,
quais componentes estão envolvidos na execução de uma consulta e as
medidas de custo relacionadas. Também faremos análise de Plano de Execução
de uma consulta e aprenderemos o uso mais adequado de índices.

Objetivo:
1. Conhecer o conceito de performance em Banco de Dados.
2. Aplicar o plano de execução de uma consulta e uso adequado de índices.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 146


Conteúdo

Conceito de performance em Banco de Dados


A tradução literal de “TUNING” seria sintonia ou ajuste de alguma coisa para
que funcione melhor. Um Sistema Gerenciador de Banco de Dados (SGBD) é
um produto de software sofisticado permitindo vários ajustes. Sua flexibilidade
permite fazer mudanças de configuração que afetam a performance do banco
de dados.

O que é performance de banco de dados?

A taxa entre os pedidos que o SGBD atende e a demanda para informação pode
ser denominada performance de banco de dados.

Workload

São os pedidos do SGBD que definem a demanda.


Corresponde ao conjunto de transações online, jobs batch, pesquisas ad hoc
etc.

Throughput

Define a capacidade do computador de processar os dados.


Ele é uma composição de velocidade de I/O, velocidade da CPU, capacidades
de paralelismo da máquina e a eficiência do sistema operacional e o software
básico envolvido.

Recursos

O hardware e as ferramentas de software disponíveis para o sistema.

Otimização

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 147


Todos os sistemas podem ser otimizados, mas bancos de dados relacionais são
os únicos em que a otimização de pesquisas é primariamente realizada
internamente ao SGBD.

Contenção

Pode acontecer contenção quando a demanda (workload) para um recurso


particular é alta.

Combinado todos os conceitos:

Performance de banco de dados então pode ser definida como a otimização


de recursos usados para aumentar o “throughput” e minimizar a contenção,
permitindo que o maior “workload” possível possa ser processado.

Não importa o quanto um SGBD é complexo e cheio de características, a coisa


mais problemática para os que o utilizam é a sua performance. Se houver
problema de performance, o uso da aplicação declinará e as supostas
vantagens competitivas disponibilizadas pela aplicação não ocorrerão.

O planejamento para o gerenciamento da performancedo banco de dados é


um componente crucial de qualquer implementação de aplicação.

Um plano completo de gerenciamento de performance incluirá


ferramentas para ajudar a monitorar a performance da aplicação e o ajuste do
SGBD.

Por “TUNING” da base de dados poderíamos entender como uma customização


do sistema sob medida para que a performance atenda melhor as suas
necessidades.

A atividade de sintonia fina envolve:

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 148


• Hardware e sistemas operacionais.
• Gerência de memória e acesso a discos.
• Controle de concorrência e recuperação.
• Uso de índices adequados.
• Otimização e reescrita de consultas.
• Projeto de banco de dados adequado.

Arquitetura funcional de um SGBD


Otimizador e Processador de Consultas

• Responsável pelo tratamento de requisição em linguagem de alto nível com


verificação sintática e semântica em relação ao esquema;

• Faz a otimização das consultas;

• Determina o plano de acesso aos dados, indicando estruturas de


armazenamento e eventuais índices.

Gerente de Armazenamento

Consiste em dois componentes:


• Gerente de Memória: responsável pela alocação de páginas em memória
principal;
• Gerente de Arquivos: responsável pela localização e acesso de blocos em
disco.

Gerente de Transações, Concorrência e Recuperação

• Controle da unidade básica de trabalho em um SGBD;

• Garantia de consistência dos dados com execução concorrente de múltiplas


transações;

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 149


• Gerência dos bloqueios (LOCKS);

• Responsável pelo log do sistema e pela recuperação.

Metadados

• Componente central de todo o SGBD;


• Chamado de Catálogo ou Dicionário de Dados;
• Dados sobre os dados;
• Informações sobre:
- Objetos de usuário;
- Usuários;
- Autorização;
- Estrutura;
- Dados do sistema;
- Parâmetros de sistema.

Componentes envolvidos na execução de uma consulta


Para que um comando SQL possa ser executado, quatro componentes são
utilizados:

• Analisador gramatical (parser)


• Otimizador (optimizer)
• Gerador de registros (row source generator)
• Executor de SQL (SQL executor)

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 150


Fluxo de execução de uma consulta SQL
Usuário

Validação
sintática e Resultado
semântica Consulta SQL

Analisador Dicionário de
Gerador do
Plano de (Parser) Dados
Consulta
Estatística

Otimizador RBO CBO Otimizador


Otimizador
Baseado em Baseado em
Regras Custo
Plano de
Execução

Plano de Consulta

Transforma o Gerador de Executor


plano em de SQLs
Registros
“executável”

Componentes envolvidos
Quando uma consulta é enviada por um usuário do banco de dados, o primeiro
componente utilizado é o analisador gramatical, verificando a sintaxe e
semântica do comando. Ao concluir seu trabalho, o analisador gramatical
encaminha o resultado para o btimizador. A escolha do otimizador depende
da configuração realizada pelo administrador de banco de dados.

O otimizador modifica a consulta de forma a melhorar seu desempenho e


encaminha o plano otimizado para o gerador de registros. Este componente
será o responsável por gerar o plano de execução do comando e encaminhá-lo
para o executor de SQL gerar o resultado final.

Analisador gramatical

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 151


Analisa se a sintaxe e a semântica de um comando estão corretas. Durante a
análise intática, o analisador gramatical verifica se os comandos foram descritos
da maneira correta, enquanto na análise semântica o analisador gramatical
confere se os objetos referenciados realmente existem no banco de dados.
Esse componente também identifica as visões utilizadas nos comandos e
coloca-as em blocos separados, que serão otimizados separadamente pelo
transformador de consultas.

Otimizador

É o principal componente para a execução de um comando, sendo responsável


pela identificação da melhor forma de resolvê-lo. O Oracle possui duas formas
de aperfeiçoar os comandos:
• Baseada nas regras de negócio (RBO);
• Baseada no custo (CBO).

RBO (Rule-Based Optimizer)

Essa forma de otimização considera as regras de negócio para escolher a forma


de recuperar as informações do banco de dados.
Para melhorar o desempenho de uma consulta, o RBO verifica apenas uma
maneira de otimização. Ao encontrar a primeira forma aplicável, ele abandona o
processo sem verificar se outros mecanismos podem ser aplicados.

CBO (Cost-Based Optimizer)

Executa o comando de forma que consuma o mínimo de recursos de


processamento. Para isso, o servidor de banco de dados busca maneiras
alternativas para escrever o mesmo comando de forma que sua execução seja
um processo mais simples.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 152


Fluxo dentro do otimizador CBO

Gerador de planos
A ordem de junção (join order) é a sequência em que os diferentes itens da
junção são acessados e ordenados.

Por exemplo:

Caso a ordem de junção seja “alunos”, “turmas” e “disciplinas”, então a tabela


“alunos” é acessada em primeiro lugar. Em seguida é feito o acesso à tabela de
“turmas”, e uma junção com os dados de “alunos” será realizada. Finalmente, a
tabela “disciplinas” é acessada, e a junção é feita com o resultado da junção de
“alunos” x “turmas”.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 153


Gerador de registros
Recebe o plano otimizado do otimizador e gera o plano de execução, que é um
conjunto de fontes de dados estruturados como uma árvore, onde cada fonte
de dados retorna um conjunto de registros.

Executor de SQL
Componente que executa o plano de execução e produz o resultado final. Cada
registro gerado pelo gerador de registros é executado por esse componente.

Plano de execução (exemplo SGBD Oracle)


Um plano de execução de uma instrução SQL corresponde a uma sequência de
operações que o Banco de Dados (BD) realiza para executar uma instrução.

O plano de execução inclui um método de acesso para cada tabela que o


comando acessa e uma disposição das tabelas (a ordem de junção) e esses
métodos de acesso incluem índices, hash clusters, e table scans.

Gerando planos de execução no SGBD Oracle


Para visualizar o plano de execução de uma consulta utilizamos o comando
EXPLAIN PLAN. Esse comando armazena em uma tabela de sistema chamada
PLAN_TABLE o caminho de execução da consulta.

A tabela PLAN_TABLE é populada com os dados do plano de execução toda vez


que a instrução EXPLAIN PLAN é executada. Uma vez que a PLAN_TABLE é
preenchida, as consultas dos planos podem ser geradas acessando os dados
armazenados.

São disponibilizados alguns scripts para visualizar os planos de execução de


modo mais claro.

Os scripts ficam localizados em: “$ORACLE_HOME/rdbms/admin/”

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 154


O primeiro tem o nome de “utlxplan.sql”, este script é utilizado para criar a
tabela PLAN_TABLE.
O segundo script é o “utlxpls.sql”, que apresenta o plano de execução
formatado.

Para executar um plano de execução deve-se utilizar o comando: EXPLAIN


PLAN FOR [CÓDIGO_SQL].

Exemplo:

EXPLAIN PLAN FOR SELECT DISTINCT * from emp;


Para visualizar o resultado do plano de execução deve-se utilizar o script
“utlxpls.sql” conforme abaixo:
SQL> @$ORACLE_HOME/rdbms/admin/utlxpls.sql
Também é possível consultar a tabela de planos usando a procedure
DBMS_XPLAN:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);:

Resultado:

Colunas do plano de execução


ID

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 155


Número associado a esse passo dentro do plano de execução.

OPERATION

Nome da operação interna executada nesse passo.

NAME

Nome do objeto.

ROWS

Número de linhas acessadas.

BYTES

Número de bytes acessados

COST (%CPU)

Custo da operação.

TIME

Tempo gasto.

Métodos de acesso
Full table scan

• Leitura de todos os blocos em sequência.


• Nas situações em que se recupera um percentual grande da tabela (> 10%),
ou a tabela tenha poucos blocos, esse método é menos custoso.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 156


Rowid scan

• Rowid contém o endereço do registro (arquivo físico + bloco + localização no


bloco).
• É o método de acesso mais rápido.
• Pouco usado, pois o Rowid pode mudar ao exportar/importar os dados da
tabela.

Cluster scan

• Registros de tabelas relacionadas mantidos no mesmo bloco (NF e item NF,


por exemplo).
• Índice com a chave do cluster + rowid.

Hash scan

• Aplicação de uma função 'hash' a chave do cluster.


• Índice não é necessário.

Índices
Índices concatenados

Índices compostos por mais de uma coluna da tabela, aumentando a


seletividade do índice e podendo eliminar o acesso à tabela.

Orientações:
• Colunas usadas com frequência na clausula WHERE;
• Colunas referenciadas em muitas consultas;
• Ordem das colunas: a ordem mais utilizada, colunas mais seletivas
posicionadas na frente.

Índices baseados em função

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 157


Para que o índice baseado em função seja usado, a cláusula WHERE ou ORDER
BY deve ser idêntica à expressão do índice:
SELECT ... FROM funcionario WHERE UPPER (nome func)

Índices e chaves estrangeiras (FK)

É recomendável a criação de índices em todas as FKs:


• Agilização dos joins de tabelas;
• Para não haver 'LOCK' em toda a tabela filha, quando se realiza, na tabela
pai, 'DELETE' em um registro ou 'UPDATE' na coluna referenciada pela FK.

Critérios para criação de índices


Para criação de índices alguns critérios podem ser levados em consideração:

1 - Uso frequente na cláusula WHERE.

2 - Uso frequente em JOINS.

3 - Devem possuir alta seletividade (índices b-tree).

4 - Evitar índice em colunas alteradas frequentemente (degrada operações


DML).

Ações para melhoria de comandos SQL


lgumas premissas importantes podem ser consideradas para a melhoria da
performance dos comandos em SQL:

• Atualizar periodicamente as estatísticas de otimização (de tabelas e índices).


• Analisar e alterar o plano de execução.
• Reestruturar o comando quando necessário.
• Reestruturar os índices envolvidos no comando.
• Modificar ou desabilitar CONSTRAINTS e TRIGGERS quando necessário.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 158


• Reestruturar os dados.
• Armazenar o plano de execução.
• Reduzir a quantidade de acesso aos dados.

Atividade proposta
Sejam os dois planos de execução que seguem. Compare o conteúdo
apresentado pela saída da tabela PLAN_TABLE e responda:
a) Qual a consulta que executa no menor tempo?
b) Qual a principal mudança em relação às duas consultas?
href="docs/a08_t17.pdf" Clique aqui para ver os planos de execução.

Chave de resposta:
a) A query SELECT * FROM EMP WHERE MATRICULA=2845 executa em um
tempo menor (00:00:01 contra 00:00:27).
b) Foi acrescentado um filtro na consulta (where matricula=2845). Nessa
execução temos um evento chamado INDEX RANGE SCAN, que significa que o
otimizador utilizou um índice no seu plano de execução, o que é mais
performático.

Material complementar

Para saber mais sobre banco de dados, leia os textos disponíveis


em nossa biblioteca virtual.

Referências
BRYLA, Bob. Oracle database 11g: manual do DBA. Porto Alegre: Bookman,
2009.

ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 4. ed. Pearson


Education do Brasil, 2005.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 159


SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.

Exercícios de fixação
Questão 1
Em relação ao tema performance de banco de dados, faça a associação entre
as colunas abaixo:
1 - Workload
2 - Throughput
3 - Recursos
4 - Otimização
5 - Contenção
( ) Define a capacidade do computador de processar os dados.
( ) São os pedidos do SGBD que definem a demanda.
( ) Ocorre quando a demanda por um recurso particular é alta.
( ) Nos Bancos de dados relacionais é realizada internamente no SGBD.
( ) O hardware e as ferramentas de software disponíveis para o sistema.
a) 2 – 3 – 1 – 4 – 5
b) 2 -1 – 5 – 4 – 3
c) 5 – 4 – 3 -1 – 2
d) 3 – 1 – 5 – 2 – 4
e) 2 – 1 – 4 – 5 – 3

Questão 2
A respeito do Gerente de Transações, Concorrência e Recuperação, marque
verdadeiro (V) ou falso (F) nas afirmativas abaixo:
( ) Controle da unidade básica de trabalho em um SGBD.
( ) Garantia de consistência dos dados sem concorrência de transações.
( ) Gerência dos bloqueios (LOCKS).
( ) Responsável pelo log do sistema e pela recuperação.
( ) Responsável pela localização e acesso de blocos em disco.
a) V – V – V – F – F

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 160


b) V – V – F – V – F
c) V – F – V – V – F
d) F – V – V – V – F
e) V – F – V – F – F

Questão 3
São informações contidas nos metadados do Banco de Dados, EXCETO:
a) Objetos de usuário
b) Usuários
c) Autorização
d) Estrutura
e) Páginas Web

Questão 4
São componentes envolvidos na execução de uma consulta, EXCETO:
a) Analisador gramatical
b) Otimizador
c) Gerente de limpeza de disco
d) Executor de SQL
e) Gerador de registros

Questão 5
A respeito da geração de planos de execução no SGBD Oracle, marque a opção
CORRETA:
a) A tabela EXPLAIN PLAN contém o caminho de execução da consulta.
b) O script “utlxpls.sql”, cria a tabela PLAN_TABLE.
c) O script “utlxplan.sql”, apresenta o plano de execução formatado.
d) ROWS é o número associado ao comando dentro do plano de execução.
e) A procedure DBMS_XPLAN é usada para consultar a tabela de planos.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 161


Questão 6
Em relação às afirmações abaixo sobre Métodos de Acesso, marque Verdadeiro
(V) ou falso (F):
( ) FULL TABLE SCAN - Leitura de todos os blocos em sequência.
( ) ROWID SCAN - É o método de acesso mais lento.
( ) CLUSTER SCAN - Registros de tabelas relacionadas em blocos diferentes.
( ) HASH SCAN - Índice não é necessário.
( ) FULL TABLE SCAN – Usado quando recuperamos um percentual grande de
linhas da tabela.
a) V – F – V – F – V
b) F – V – F – V – V
c) F – F – V – V – F
d) V – F – F – V – V
e) V – F – V – V – V

Notas
Árvore B: Estrutura de dados projetada para funcionar especialmente em
memória secundária.
Árvore B+: Estrutura de dados do tipo árvore derivada das árvores B, mas
com uma forma diferente de armazenamento de suas chaves.
Chave de busca: Atributo para pesquisar registros em um arquivo.
Índices de hash: Chaves de busca são distribuídas uniformemente usando
uma "função de hash".
Índices ordenados: Chaves de busca são armazenadas em ordem
classificada.
Ponteiro: Indica o local de armazenamento dos itens indexados.
SQL: Structured Query Language ou Linguagem de Consulta Estruturada

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 162


Chaves de resposta
Aula 8
Exercícios de fixação
Questão 1 - B
Justificativa: Performance de banco de dados pode ser definida como a
otimização de recursos usados para aumentar o “throughput” e minimizar a
contenção, permitindo que o maior “workload” possível possa ser processado.

Questão 2 - C
Justificativa: Garantia de consistência dos dados com concorrência de
transações e localização e acesso de blocos em disco é responsabilidade do
gerente de armazenamento.

Questão 3 - E
Justificativa: Páginas web não estão contidas nos metadados (dicionário de
dados).

Questão 4 - C
Justificativa: Gerente de limpeza de disco não é componente da execução de
uma consulta.

Questão 5 - B
Justificativa: Também é possível consultar a tabela de planos usando a
procedure DBMS_XPLAN.

Questão 6 - D
Justificativa: ROWID SCAN é o método de acesso mais rápido e CLUSTER SCAN
são registros de tabelas relacionadas nos mesmos blocos.

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 163


Conteudista
Renato Augusto dos Santos Cortes é Graduado em Engenharia Elétrica pela
Universidade Gama Filho, Pós-graduado em Análise de Sistemas pela Fundação
Educacional Rosemar Pimentel e Mestre em Sistemas de Gestão pela Qualidade
pela Universidade Federal Fluminense. Foi coordenador de projetos na Telemar
até outubro de 2006. Foi líder do núcleo de TI da regional RJ do INCRA.
Professor Assistente da Universidade Estácio de Sá desde 1998, vem atuando
nos cursos de Graduação e Pós-graduação ligados a Tecnologia da Informação.
Atualmente, é Coordenador de Informática do Ministério Público Federal na
Procuradoria da República no RJ. Possui experiência na área de Ciência da
Computação, com ênfase em gestão da informação, atuando principalmente
nos seguintes temas: Gerência de Projetos, Infraestrutura de TI, Análise e
Projeto de Sistemas, Banco de Dados e Governança de TI.

Curriculo Lattes: http://lattes.cnpq.br/0034780691218515

PROJETO E OTIMIZAÇÃO DE BANCO DE DADOS 164

Você também pode gostar