Livro Banco de Dados
Livro Banco de Dados
Livro Banco de Dados
Curitiba
2016
FAEL
Carta ao Aluno | 7
1. Bancos de dados | 9
2. Modelagem de Dados | 25
4. SQL | 59
5. SQL DML | 79
6. SQL Avançado | 103
8. Recursos Avançados | 151
Conclusão | 205
Gabarito | 207
Referências | 219
Prezado(a) aluno(a),
Hoje é comum referir-se à informação como o maior patri-
mônio de uma organização. Considerando que grande parte dos
sistemas de informação e aplicativos em geral manipulam dados e
informações que ficam armazenados permanentemente, conhecer
sobre banco de dados torna-se imprescindível.
Banco de dados é uma das grandes áreas da computação,
responsável por cuidar das técnicas de coleta, armazenagem, recu-
peração e distribuição de dados. O termo banco de dados também
designa genericamente o software utilizado para gerenciar todos os
dados de um empreendimento. A área de banco de dados é ampla e
fascinante, com um mercado de trabalho atraente, diferentes áreas
de atuação e muitas vagas à espera de bons profissionais.
– 8 –
Bancos de dados
Objetivos de aprendizagem:
22 definir bancos de dados;
22 mostrar seus principais conceitos;
22 apresentar seus principais tipos e estruturas.
1.1 Definição
Segundo Date (2000), sistema de banco de dados é basicamente um sis-
tema computadorizado de armazenamento de registros, ou seja, um sistema
cujo propósito é armazenar informações e permitir ao usuário buscar e atualizar
as informações quando solicitado. Elmasri e Navathe (2013) definem banco de
dados como uma coleção de dados relacionados, em que dados indicam fatos
conhecidos que podem ser registrados e apresentam significado implícito.
Bancos de dados precisam de um equipamento onde os dados possam
ser armazenados e posteriormente recuperados. Esses dados podem ser defi-
nidos como qualquer tipo de estrutura que precisa ser armazenada – inicial-
mente, os dados eram apenas letras e números, por exemplo: nome, endereço,
telefone, salário; hoje em dia são armazenadas também voz e imagens.
Inicialmente bancos de dados foram criados para serem utilizados em insti-
tuições financeiras e, principalmente, pelas Forças Armadas, que tinham o obje-
tivo de armazenar grande quantidade de dados que depois pudessem ser recu-
perados. Com a evolução dos computadores de grande porte (Mainframes) para
os computadores pessoais (personal computers – PC) passaram a existir bancos de
dados de pequeno e médio porte, que são utilizados em empresas de menor porte.
Bancos de dados são formados pelo hardware, que é a parte física em que
os dados estão armazenados, e pelo software, que gerencia os dados. Atual-
mente, há equipamentos como celulares e tablets com grande capacidade de
armazenamento que também utilizam recursos de bancos de dados.
– 10 –
Fonte: Shutterstock.com/Colorlife.
– 11 –
– 12 –
1.2 Conceitos
Os programas que foram incluídos nos sistemas gerenciadores de banco
de dados servem para auxiliar e resolver problemas como os apresentados por
Silberchatz (1999).
22 Inconsistência e redundância de dados: evita que a informação
seja repetida em diversos lugares e de maneira diferente umas das
outras. Por exemplo, a mudança de endereço de um cliente poderia
ser atualizada em um lugar e não no outro, deixando a dúvida de
qual o endereço deve ser o correto.
22 Dificuldade de acesso aos dados e isolamento dos dados: garantir
que, ao projetar o banco de dados, sejam atendidas todas as solici-
tações e ações necessárias às tarefas dos usuários, agregando dados
que estejam dispersos em vários arquivos.
22 Problemas de integridade: os valores dos dados atribuídos e arma-
zenados devem satisfazer restrições para garantir a consistência. Por
exemplo, todo cliente cadastrado deve ter um nome.
22 Problemas de atomicidade: em caso de falhas em um sistema de banco
de dados, deve-se garantir que a transação executada seja completa-
mente finalizada ou totalmente desfeita. Por exemplo, no caso de trans-
ferência de saldo entre contas correntes, se após o saque da conta ori-
ginal ocorrer uma falha, o sistema deve garantir, já que não foi possível
crédito na conta destino, que o dinheiro seja devolvido à conta origem.
22 Anomalias no acesso recorrente: muitas vezes acontece o acesso
simultâneo a determinados dados em um banco, nesse caso, o
SGBD deve garantir que o dado seja acessado pelas demais solicita-
ções somente depois de finalizada a ação já iniciada.
22 Problemas de segurança: somente as pessoas autorizadas devem
acessar o banco de dados e de acordo com privilégio permitido a
cada um dos usuários.
Importante
A sigla ACID resume os itens que são garantidos pelo SGBD: Atomici-
dade, Consistência, Integridade e Durabilidade.
– 13 –
– 14 –
– 15 –
Subsistemas de controle de
concorrência/backup/recuperação
Execução de Entrada/saída do
Banco de dados armazenado
consulta e transação: banco de dados
– 16 –
Esquema Interno
Nível Interno (físico)
– 17 –
– 18 –
– 19 –
Sistema Operacional
Barramento do sistema
CPU Dispositivos de
Memória Disco E/S (impressoras, ...
unidades de ta...)
Hardware/Firmware
– 20 –
Rede
– 21 –
...
Servidor Servidor
Rede de comunicação
– 22 –
GUI, Camada de
Cliente
Interface Web apresentação
Síntese
O capítulo trouxe o banco de dados para o mundo conceitual. Inicialmente,
tinha-se uma visão abstrata e obscura do funcionamento de banco de dados e de
um sistema gerenciador de banco de dados. Apresentou-se suas principais dife-
renças e a evolução de serviços oferecidos, garantindo integridade, durabilidade,
– 23 –
– 24 –
Modelagem de Dados
Objetivos de aprendizagem:
22 apreender entidade;
22 conhecer relacionamentos;
22 Modelo Entidade Relacionamento;
22 Modelo Entidade Relacionamento Estendido.
Importante
Quando analistas começam a avaliar o negócio para construir uma
solução, escolhem uma modelagem para desenvolvimento, que pode
ser análise estruturada, orientada a objeto, entre outras. Essas solu-
ções são utilizadas para o desenvolvimento do sistema em si, e não
do banco de dados; para a modelagem e o desenvolvimento do
banco de dados são utilizadas outras ferramentas.
Importante
Durante o levantamento de dados, nunca “ache”, tenha sempre cer-
teza, pergunte quantas vezes forem necessárias e revise o projeto
com o cliente.
– 26 –
LEVANTAMENTO
E ANÁLISE
DE REQUISITOS
Requisitos funcionais
Requisitos de dados
ANÁLISE FUNCIONAL
PROJETO CONCEITUAL
Para saber quais dados devem ser armazenados, deve-se discutir com
o cliente quais informações transitam entre os processos, identificar as
características de cada um deles e verificar quais realmente precisam ser
armazenados. Essa é uma etapa cansativa e delicada e não deve ser feita
com pressa e incertezas.
Nos itens a seguir, começaremos a estudar elementos que constituem a
base para os modelos lógicos e físicos.
– 27 –
2.2 Entidade
Entidade é o elemento principal para a criação do modelo de entidade
relacionamento. É nessa estrutura que se esclarecem quais são as característi-
cas do objeto ou elemento que se pretende definir (DATE, 2000).
Uma entidade pode ser uma estrutura do mundo real, por exemplo,
um carro, como também pode ser uma estrutura abstrata, como o aluguel de
um carro. No caso do carro, tem-se características que separam um carro de
uma moto ou de um caminhão: marca, modelo, ano de fabricação, chassi,
quantidade de portas, entre outros. Pode-se tocar no carro, ele existe de
forma concreta, mas, no caso do aluguel do carro, não existe um elemento
concreto que se possa tocar, existem somente características que o definem:
placa, data da locação, cliente, entre outros.
Uma entidade é composta por atributos, que são características, proprie-
dades, elementos que a definem como uma estrutura única diferente de outra
entidade. Aquilo que diferencia um carro de uma moto, por exemplo.
2.3 Atributos
Os atributos definem a entidade, e cada atributo é um elemento com
valor que caracteriza a entidade.
Segundo Silberchatz, Korth e Sudarshan (1999), os tipos de atributos são:
22 simples ou compostos – os atributos simples são estruturas atômi-
cas que não podem ser dividas em outras menores, por exemplo,
idade. E os atributos compostos são formados por mais de uma
estrutura, como data de nascimento, formada por dia, mês, ano.
22 monovalorados ou multivalorados – monovalorados são atribu-
tos que só podem ter um único valor em determinado momento,
por exemplo, a data de nascimento é única para cada pessoa, mas
telefones podem ser vários: celular, residencial e comercial; nesse
caso, são multivalorados.
22 nulos – são atributos que ainda não têm valores, mas em determi-
nado momento receberão valor, por exemplo: existe um registro
– 28 –
Importante
Siga sempre um padrão de nomenclatura para todas as entidades e
atributos, seja para início com letras maiúsculas ou minúsculas, seja
com abreviações, entre outros.
– 29 –
Saiba mais
Para nomes de entidades e atributos, é importante utilizar somente
letras, números e _ (sublinhado), começando sempre por letra. Isso
evita problemas posteriores com importação e exportação de dados
e estruturas e facilita a criação de comandos e acesso a outros ban-
cos de dados. É possível utilizar caracteres especiais e acentos, mas
não é recomendável.
2.4 Relacionamento
Entre as entidades, podem existir associações, que são chamadas de rela-
cionamentos.
Os relacionamentos podem ter vários níveis (ELMASRI; NAVATHE, 2013):
22 binários – entre duas entidades;
22 ternário – entre três entidades;
22 “n-ário” – entre mais de três entidades.
Quanto maior for a quantidade de relacionamentos entre as entidades,
mais complexo ficará o banco de dados. Relacionamentos também podem ter
atributos, e isso acontece quando a associação entre as entidades gera mais
dados que precisam ser armazenados. Basicamente, são as entidades que não
são concretas, o resultado e alguma ação ou tarefa que precisa ser armazenada,
por exemplo, o aluguel de um carro.
Definir os relacionamentos é mais complexo do que se imagina. As enti-
dades têm características que as definem claramente. Os relacionamentos
podem existir entre várias tabelas e dependendo da ação do processo que pode
causar essa associação nem sempre é fácil visualizar. Algumas vezes é neces-
sário olhar os possíveis valores de atributos para encontrar o relacionamento.
– 30 –
Importante
Outro fator a ser considerado é se o relacionamento e obrigatório ou
não. Quando for obrigatório (participação total), para cada elemento
existente na E1, existirá pelo menos um elemento relacionado na E2.
Para relacionamentos não obrigatórios (participação parcial), para
cada elemento na E1 pode não existir nenhum elemento relacionado
na E2 ou podem existir um ou mais elementos referenciados na E2.
– 31 –
FUNCIONARIO
PROJETO
F1
F2 P1
F3 P2
F4
P3
F5
– 32 –
Funcionario
Supervisiona
– 33 –
TIPO ATRIBUTO
ENTIDADE
ATRIBUTO
TIPO ENTIDADE CHAVE
FRACA
ATRIBUTO
MULTI
TIPO VALORADO
RELACIONAMENTO
ATRIBUTO
COMPOSTO
TIPO
RELACIONAMENTO
ATRIBUTO
IDENTIFICADOR
DERIVADO
E1 1 R N E2 E1 R E2
Taxa de Cardinalidade 1:N para Participação Parcial de E1 em R,
E1:E2 em R Participação Total de E2 em R
R
Restrição Estrutural (min, max) na
Participação de E1 em R
– 34 –
O modelo da Figura 2.8 mostra o DER de uma empresa que tem vários
departamentos nos quais trabalham vários funcionários. Os funcionários
podem ter nenhum, um ou vários dependentes. Existem vários projetos vin-
culados a departamento nos quais vários funcionários podem atuar.
– 35 –
2.5.1 Chaves
Outras restrições muito importantes em uma entidade são as chaves. A
entidade possui um atributo cujos valores são distintos para cada elemento
entidade individual. Esse atributo é chamado chave e seus valores podem ser
utilizados para identificar cada elemento da entidade de forma única ou apli-
car a integridade referencial entre relacionamentos.
As chaves podem ser:
22 candidatas – atributos que atendem à condição de chave primária.
Por exemplo: CPF, RG.
22 primárias (primary key) – atributo cujo conteúdo não se repete
em nenhum elemento dentro da entidade; dessa forma, esse atri-
buto consegue identificar cada elemento individualmente. Ele deve
ser único e não nulo. Por exemplo: CNPJ.
22 concatenadas ou compostas – quando a entidade não apresenta
nenhum atributo que seja chave candidata, ela não teria chave. Mas
ainda existe a opção de juntar um ou mais atributos, e a combina-
ção desses atributos atender às necessidades da chave primária. Por
exemplo: no relacionamento Aluguel, que tem os atributos CPF,
Dt_hr_locacao, ao combinarmos esses dois, temos uma chave pri-
mária, afinal, um cliente pode alugar dois carros no mesmo dia,
mas não na mesma hora, minuto e segundo.
22 estrangeiras (foreign key) – servem para criar a integridade referencial,
ou seja, criar dentro do banco o relacionamento existente no modelo.
Saiba mais
Quando existe mais de uma chave candidata, quais critérios devem ser
utilizados para escolher a melhor para ser a chave primária?
22 Escolher a de menor tamanho.
22 Entre atributos numéricos e strings, escolher o numérico.
22 Escolher o atributo mais usado pela aplicação.
– 36 –
Num_peca
PECA
– 37 –
Para fazermos uma comparação, veja a Figura 2.10. Temos três relacio-
namentos binários: um representa quais peças o fornecedor pode fornecer,
quais fornecedores atendem aos projetos e quais peças podem ser enviadas
para o projeto; essa representação diz o que pode ser feito, o que pode ser for-
necido e a quem, bem diferente do exemplo da Figura 2.9, que mostra quem
forneceu quais e quantas peças para quais projetos.
Fnome Proj_nome
M N
FORNECEDOR FORNECE PROJETO
M M
Num_peca
PODE_FORNECER USA
N N
PECA
Importante
Modelar corretamente exige treino, testes e experiência. Cada vez que
os requisitos são analisados, o Administrador de banco de dados (DBA)
aprofunda o conhecimento e melhora o modelo, e somente a prática
dirá quais das soluções citadas pode ser a melhor. Em caso de dúvida,
deve-se perguntar ao cliente de que ele precisa exatamente, se deve ser
de acordo com a Figura 2.8 ou a Figura 2.9. Ambas estão corretas, tudo
depende da necessidade do cliente.
– 38 –
FUNCIONARIO
Tipo_emprego
d
'Secretaria’ 'Engenheiro
– 39 –
Importante
Superclasse e subclasse não se referem ao modelo orientado a
objetos, e sim à definição de grupos de relacionamento em banco
de dados.
Numero_passageiros Numero_eixos
Velocidade_maxima Capacidade_peso
CARRO Preco Preco CAMINHAO
Cod_veiculo Id_veiculo
Placa Placa
– 40 –
VEICULO
d
Numero_eixos
Numero_passageiros
Velocidade_maxima Capacidade_peso
CARRO CAMINHAO
Síntese
Este capítulo trouxe o banco de dado do mundo conceitual para o
modelo lógico e apresentou as etapas de modelagem de banco de dados. Mos-
trou-se o que é um modelo de entidade relacionamento, suas estruturas, seus
relacionamentos, suas cardinalidades; o que são chaves e quais são seus tipos;
e como escolher a chave primária entre as chaves candidatas. Foi apresentado,
ainda, como identificar superclasse e subclasse para auxiliar na decisão de
especializar ou generalizar.
– 41 –
– 42 –
Objetivos de aprendizagem:
22 compreender o modelo relacional;
22 mapear o modelo entidade relacionamento para o modelo relacional;
22 mostrar normalização;
22 normalizar 1.a, 2.a e 3.a forma normal.
Importante
Guarde as nomenclaturas, pois elas são usadas em diferentes
literaturas, concursos e no Exame Nacional de Desempenho de
Estudantes (Enade).
Veremos a aplicação desse modelo no mapeamento do modelo rela-
cional, no qual os conceitos serão explicados passo a passo.
– 44 –
passos para cada situação que precise ser mapeada; para exemplificar, será
utilizado o modelo da Figura 3.1.
Figura 3.1 – Modelo entidade relacionamento
– 45 –
– 46 –
– 47 –
– 48 –
– 49 –
– 50 –
VEICULO
Numero_eixos
Numero_passageiros d
Velocidade_maxima Capacidade_peso
CARRO CAMINHAO
3.4 Normalização
Segundo Silberchatz, Korth e Sudarshan (1999), existem determinadas
condições que podem interferir na qualidade de um projeto de banco de
dados. Essas propriedades indesejáveis podem ser:
22 informações repetidas;
22 inconsistências de dados;
22 incapacidade de representação de algumas informações.
– 51 –
Saiba mais
Para maiores informações sobre anomalias 4a e 5a formas normais,
consulte a bibliografia do capítulo.
– 52 –
– 53 –
Observe a Figura 3.12. Para resolver o problema, foi criada uma tabela
projeto e adicionado o nome do projeto (atributo projeto). Agora o modelo
está de acordo com a 2FN.
– 54 –
– 55 –
Saiba mais
Existem inúmeros exemplos na bibliografia; analise e tente normali-
zar vários deles. A experiência deixará esses conceitos muito mais
consolidados e fáceis de reconhecer.
– 56 –
Saiba mais
Precisão indica até que faixa de valor do tipo de dados será utilizada,
por exemplo, no MS SQL server temos int, smallint e bigint, todos
são inteiros com tamanhos diferentes para suportar faixas diferentes
de valores.
Síntese
Com o conhecimento adquirido neste capítulo, você deve estar pronto
para preparar todo o material necessário e implementar o banco de dados
físico. Depois de converter para o modelo relacional, normalizar até a terceira
forma normal e preparar a documentação. Agora falta somente escolher o
SGBD que será utilizado e fazer a última análise e os ajustes dos tipos de
dados no dicionário de dados, afinal, cada SGBD oferece vários tipos diferen-
tes, e então construir o banco de dados.
– 57 –
– 58 –
SQL
Importante
Os SGBDs têm características detalhadas sobre os serviços e paco-
tes que estão incluídos em cada versão. Observe cuidadosamente
o que é realmente necessário para esta solução, qual a versão do
SGBD, se ela é adequada ao sistema operacional utilizado nos ser-
vidores e nas máquinas do cliente.
Objetivos de aprendizagem:
22 apresentar a estrutura física de um SGBD;
22 criar banco dados;
22 utilizar Data Definition Language (DDL).
Saiba mais
Qualquer SGBD que utilize o padrão SQL ANSI pode ser facil-
mente portável entre diferentes arquiteturas de bancos de dados.
– 60 –
– 61 –
ON PRIMARY
( NAME = ‘NomeLogicodoArquivodeData’,
LOG ON
( NAME = ‘NomeLogicodoArquivodeLog,
FILENAME = ‘Path\NomeFisico_log.ldf’ ,
SIZE = 1024KB , FILEGROWTH = 10%)
– 62 –
– 63 –
– 64 –
– 65 –
– 66 –
Saiba mais
Existem outros tipos de dados e estes variam tanto na precisão
quanto na declaração nos diferentes SGBDs, consulte sempre as
informações de cada fabricante para ter certeza da utilização do
tipo de dado correto, isso também pode variar de acordo com o
sistema operacional no qual o banco foi instalado, existem diferen-
ças entre tamanho ocupado por tipo de dado numa arquitetura 32
ou 64 bits.
– 67 –
Exemplo:
– 68 –
Exemplo:
– 69 –
Exemplo:
nome varchat(70),
Idade smallint,
nome varchat(70),
Idade smallint)
– 70 –
Use DbFael
Go
Create table Aluno
(CPF Numeric (11) not null constraint pk_
cpf primary key,
Nome varchar(100) not null,
Endereco varchar(100) not null,
Complemento varchar(100),
Dt_Nasc date not null,
Sexo char(1) constraint ck_sexo check
(sexo in (‘F’,’M’)),
Telefone char (15)
)
– 71 –
– 72 –
– 73 –
Saiba mais
Os nomes dos atributos devem ser únicos por tabela e o nome das
restrições devem ser únicos no banco de dados.
– 74 –
4.3.1 Select
A operação Select é utilizada para selecionar um conjunto de linhas
(tuplas) de uma relação, sendo que estas tuplas devem satisfazer uma condi-
ção de seleção. A sintaxe uma operação select é:
σ <condição de seleção> ( <nome da relação> )
22 A letra grega minúscula sigma – é utilizada para representar a ope-
ração de seleção;
22 Condição de seleção. É uma expressão lógica (booleana) aplicada
sobre os atributos da relação;
22 Nome da relação. É o nome da tabela sobre a qual será aplicada a
operação select.
Exemplo: este exemplo recupera todas as colunas da relação (tabela)
Aluno desde que o Sexo seja feminino, e armazena o resultado na Consulta.
Consulta = – Sexo = ‘F’ (Aluno)
Os operadores que podem ser aplicados na operação Select são:
22 relacionais: <, >, <>, <=, >=, =;
22 lógicos: and, or, not.
4.3.2 Project
A operação Project seleciona um conjunto especifico de colunas de uma
relação. A sintaxe da operação project é:
Π <lista de atributos> (<nome da relação>)
22 A letra grega Π representa a operação project;
22 Lista de atributos indica quais os atributos que o usuário deseja
selecionar;
– 75 –
Síntese
Este capítulo apresentou como funciona a estrutura de armazenamento
de um bando de dados com seus arquivos físicos e suas referências lógicas que
são armazenados nos metadados do banco. Como criar o banco de dados a
partir de um modelo físico de dados, criando tabelas e restrições que existem
para proteger os dados e a integridade.
– 76 –
– 77 –
SQL DML
Importante
A tarefas de DML podem ser definidas pelos acrônimos CRUD (Create,
read, update, delete) ou CERA (criar, excluir, recuperar e apagar)
Objetivos de aprendizagem:
22 apresentar DML;
22 mostrar a utilização dos comandos básicos de DML;
22 mostrar exemplos práticos de DML.
5.1 Select
Um banco de dados é formado por uma coleção de tabelas (tuplas ou
relação) cada uma designada por um único nome. Cada tabela possui várias
colunas (atributos). Para acessar o conteúdo destes atributos (registro ou
linha), utilizamos a linguagem de manipulação de dados, especificamente o
comando Select. Esta instrução é utilizada para recuperar os dados do banco,
ela não é a mesma operação Select da álgebra relacional, existem muitas
opções para o comando Select que não são apresentados na álgebra relacional.
A estrutura básica de uma expressão Select em SQL consiste em três
cláusulas (Siberschatz, 1999):
22 select – é operação de projeção (Π) na álgebra relacional. É usada
para mostrar os atributos desejados no resultado de uma consulta.
22 from – é operação do produto cartesiano (X). Associa as tabelas que
serão pesquisadas durante a evolução de uma expressão.
22 where – é a operação de seleção (σ). Consiste em um predicado
envolvendo atributos da tabela que aparece no from.
Uma consulta simples em SQL, figura 5.1, onde C são as colunas refe-
renciadas, T são as tabelas e P é o predicado.
– 80 –
Em álgebra relacional:
Π C1, C2, ..., Cn (σP (T1 x T2 x ... x Tn))
Ao ser executado, o SQL forma um produto cartesiano (combinação
de todas as linhas de todas as tabelas envolvidas) entre as tabelas existentes
no From, executa uma seleção usando o predicado do Where e projeta os
resultados sobre os atributos da cláusula Select. Obtendo como resultado da
consulta outra tabela, chamada de result set ou conjunto resultado.
Exemplo: Encontre os nomes de todos os alunos da tabela Aluno (figura 5.2).
– 81 –
Saiba mais
Se na query (consulta), não existir cláusula Where, o predicado P é
verdadeiro, ou seja, não haverá nenhuma restrição; então todos os
registros serão apresentados.
:Select distinct
nome
From Aluno
– 82 –
Select *
From Aluno
Ou
Select Aluno.*
From Aluno
– 83 –
5.2 Where
Da mesma maneira que muitas vezes recuperar todos os atributos não é
necessário, também pode-se aplicar uma condição (predicado) sobre as colu-
nas, mas neste caso para restringir a quantidade de registros no resultado de
acordo com o conteúdo da coluna.
O where é utilizado para aplicar a condição lógica e retornar os registros
caso estejam de acordo com a condição. Para selecionar o nome de todos os
alunos do sexo feminino, a query é demonstrada na figura 5.6.
– 84 –
Veja que a cláusula Where não interfere na cláusula Select, neste exem-
plo foi utilizado a projeção para recuperar o nome e o salário, em conjunto
com o predicado Sexo = ‘F’ no Where.
O SQL usa os operadores lógicos AND, OR e NOT (figura 5.7), e os
operadores de comparação <, <=, >, >=, = e <> (figura 5.8) na cláusula Where.
– 85 –
Importante
Quando o resultado não for aquele esperado, verifique a cláusula Where,
os exemplos citados são bem simples, mas na prática um Where pode
ser muito complexo.
5.3 Aliases
O result set tem um cabeçalho onde geralmente fica o nome de cada
coluna, ou sem valor no caso de aplicar fórmulas ou operadores matemáticos.
Em determinadas situações, existe a necessidade de nomear ou renomear o
nome de uma tabela ou coluna em uma query:
22 seja para eliminar ambiguidades (quando existem referências a atri-
butos com o mesmo nome, em tabelas diferentes ou no caso de
acesso recursivo a tabela);
– 86 –
O alias está sendo utilizado para mudar o campo que estaria sem cabe-
çalho na aplicação de fórmula, para o valor de Salário (observe que está acen-
tuado). O resultado é mesmo utilizando AS, como na figura 12 ou utilizando
espaço como na figura 13. A utilização de um ou outro depende de dois
fatores, se existir um padrão, utilize-o, senão, a escolha fica a critério do DBA,
que utiliza o que for mais natural, mas após a escolha de usar ou não o AS,
todas as queries devem seguir o mesmo padrão.
– 87 –
O alias pode ser usado para nomear tabelas. Em SQL avançado, será
muito útil, principalmente para evitar ambiguidades. A figura 5.14 mostra
que além de nomear a tabela, o alias pode ser utilizado para especificar qual o
campo se refere a cada tabela.
– 88 –
O alias não altera qualquer valor na tabela original, ele só muda o result
set. Nas recomendações de nome de atributos e tabelas não se recomenda
caracteres especiais, caso seja necessária acentuação ou semelhante deve-se
utilizar os aliases.
5.4 Ordenação
No mundo dos negócios, muitas vezes se faz necessária a utilizada de
dados ordenados, para que sejam exibidos em relatórios. O SQL oferece a
cláusula order by, que permite que os registros de um resultado de uma con-
sulta apareçam em uma determinada ordem.
A sintaxe da ordenação é
Order by C1, C2, ... CN
– 89 –
Para cada atributo do order by, pode-se definir se a ordenação vai ser
ascendente [asc] figura 15, que é default e pode ser omitida na query, ou se
vai ser descendente [desc], que deve ser declarada explicitamente, figura 17.
Saiba mais
Utilize ordenação com cuidado, muitos recursos são utilizados, principal-
mente em banco de dados com tabelas muitos grandes.
– 90 –
– 91 –
Saiba mais
Nulo quer dizer ausência de valor, ou seja, espaço em branco, não
é nulo, é caractere; zero não é nulo é um valor numérico válido.
5.6 Insert
Uma das funções importantes do SQL é o Insert, este comando valida
a restrições de valores de cada atributo no momento em que os dados estão
sendo inseridos dentro do banco de dados. As restrições (constrainst) de
Check, Primary Key, Foreign Key, Unique, Not Null, Default são validada
neste momento.
A sintaxe do Insert é
Insert into tabela
Values
(V1, V2, ..., Vn)
Neste caso, os valores V devem ter o mesmo tipo de dado especifi-
cado no Create Table e também os valores a serem inseridos devem estar
na mesma ordem em que as colunas foram criadas no momento em que a
tabela foi criada.
Ou
Insert into tabela
(C1, C2, ..., Cn)
Values
(V1, V2, ..., Vn)
Neste caso, os valores V não precisam estar na mesma ordem de criação
das colunas no Create Table, e sim, na ordem que foram definidas as colunas
C na cláusula insert. Esta forma é obrigatória quando:
22 existir campo auto incremento na tabela;
– 92 –
– 93 –
– 94 –
Sempre são inseridos registros inteiros de cada vez, mesmo que nem
todos os atributos recebam valor.
5.7 Delete
Assim como precisamos inserir dados no banco, existem momentos que
apagar os dados é muito necessário. Este comando remove tuplas (registros)
– 95 –
de uma tabela. Ele pode remover vários registros por vez ou somente um ou
grupos de registros que atendem a uma cláusula Where.
Outro fator importante é a integridade referencial, caso a intenção seja
deletar dados que tem correspondentes em outras tabelas isso não será permi-
tido para que não existam registros órfãos.
Importante
Sem cláusula where, o delete vai apagar todos os registros da tabela, as
vezes é necessário, mas tome cuidado se é realmente isso que se quer
fazer, o mesmo vale para o Where que pode não ser tão restritiva quanto
se deseja.
Sintaxe do Delete
Delete Tabela
Onde todos os registros serão apagados.
Ou
Delete Tabela
Where Condição
Onde somente os registros que atenderem o predicado Where serão apa-
gados, se nenhum registro atender a condição, nada será apagado.
A figura 5.26 apresenta um erro de integridade referencial, na tentativa
de deletar todos os alunos, inclusive aqueles que tem dependente. Neste caso,
nada foi apagado.
Figura 5.26 – Delete – Integridade Referencial
– 96 –
O delete apresentado na figura 27, mostra que não ocorreu nenhum erro
de restrição, portanto, o registro cujo o CPF (PK) que era 33 foi apagado.
Existe outra opção para apagar todos os registros de uma tabela, conhe-
cido como comando truncate. Ele elimina todos os registros de uma tabela,
mas precisa de privilégios especiais para ser executado, além de permissão de
leitura e escrita. O truncate é mais rápido que o delete, pois não registra as
exclusões das linhas individuais na Log do banco de dados.
A sintaxe é
Truncate Table nome da tabela
A figura 5.28 apresenta um exemplo da eliminação de todas a linhas de
uma tabela utilizando o comando Trucate.
– 97 –
5.8 Update
Com as atualizações da vida real, como mudança de endereço, telefone,
aumento de preços, de salários, promoções, entre outros, passa a ser necessá-
ria a atualização do banco de dados para que ele corresponda com a realidade.
Para isso, o SQL tem o comando Update. este comando é utilizado para
modificar valores de um ou mais atributos de um ou mais registros selecionados.
A sintaxe para o Update é
Update Tabela
Set C1 = V1,
C2= V2,
....
CN = VN
Where Condição
O Where pode ser omitido caso se deseje alterar todas as linhas da tabela.
Os valores a serem atribuídos para as colunas podem ser valores fixos,
fórmulas e até mesmo cálculos de outras colunas.
A figura 5.29 apresenta a execução de um Update com Where, que atua-
liza dois específicos registros.
Figura 5.29 – Update
– 98 –
Pode-se alterar qualquer campo desde que não quebre nenhuma res-
trição. Alguns SGBDs não permitem a atualização da chave primária, só os
demais campos. Se no Update houver alguma tentativa de quebra de restri-
ções, uma mensagem de erros será apresentada e o Update não será executado.
– 99 –
Observe que:
22 “La%” – strings que comecem com “La”;
22 “%aro%” – strings que possua uma substring “aro”;
22 “_ _ _” – strings com somente 3 caracteres;
22 “_ _ _%” – strings com pelo menos 3 caracteres.
Dependendo da configuração de linguagem, podemos ter algumas dife-
renças na pesquisa, No SQL server existe um item chamado Collation, que
define alguns parâmetros para consultas com strings. Seguem alguns deles:
22 AS – Accent Sensitive, palavras acentuadas são diferentes de palavras
não acentuadas, ou seja, leva em consideração a acentuação, a é
diferente de A;
22 AI – Accent Insensitive, desconsidera a acentuação, por exemplo, a
= á = à;
22 CS – Case Sensitive: Maiúsculas não são iguais a minúsculas.
22 CI – Case Insensitive: Maiúsculas e minúsculas são iguais
Comparando o resultado da querie nas figuras 5.31 e 5.32, pode-se
observas o funcionamento do parâmetro AS (Accent Sensitive), na figura 31
ele trouxe um registro, mas na figura 5.32, o result set foi vazio, pois ão é
diferente de ao.
– 100 –
Saiba mais
Acesse a internet e procure por SQL Server Transact-SQL DML
Reference – Microsoft, você vai ver o manual completo com todas
as opções que cada comando apresentado aqui oferecem.
Síntese
Neste capítulo foi apresentada uma introdução ao SQL DML, come-
çando com o Select e sua combinação com álgebra relacional, cada uma das
cláusulas do Select foi apresentado, o From e o Where e quais operadores
lógicos e de comparação podem ser usados.
Depois, foi apresentada a ordenação de registros para o result set, e a
forma de tratamento de valores nulos.
O comando Insert veio a seguir, com exemplos práticos e diferentes for-
mar de adicionar dados da tabela, seguido pelo Delete para apagar registros e
o Update atualizar dados no banco.
Finalizamos o capítulo com formas de comparação de string e detalhes.
Saiba mais
Acesse a internet e procure mais no site da Microsoft sobre
Collation. Isso vai melhorar bastante o entendimento sobre as
diversas linguagens como o chinês, árabe, russo, entre outras são
tratados pelo SGBD.
– 101 –
Atividades
Utilizando o modelo a seguir, faça o que se pede.
– 102 –
SQL Avançado
Objetivos de aprendizagem:
22 mostrar funções agregadas;
22 apresentar junções;
22 subconsultas aninhadas;
22 uniões;
22 visões.
– 104 –
– 105 –
– 106 –
– 107 –
Importante
As repetições são importantes no cálculo da média, mas se pre-
cisa eliminar as repetições, pode-se utilizar o distinct na expressão
agregada.
SQL não permite o uso do distinct com count (*), somente distinct count
(atributo).
– 108 –
– 109 –
6.3 Junções
Junções são utilizadas quando precisamos acessar dados de outras tabelas
que tem relacionamento entre si. A junções podem ser:
22 inner join (interna);
22 left outer join (externa à esquerda);
22 right outer join (externa à direita);
22 outer Full join (externa à direita e à esquerda combinadas);
22 cross join (cruzada).
– 110 –
Select atributos
From tabela1
Inner Join tabela2
On Condição de Junção
[ Inner Join tabelaN
On Condição de Junção]
– 111 –
Select atributos
From tabela1
Left [Outer] Join tabela2
On Condição de Junção
A utilização da palavra
Outer é facultativa e pode ser
omitida. A condição de junção
é a mesma do Inner Join. Na
figura 6.11, temos o exemplo do
Left Join, e o resultado são todos
os registros da tabela Aluno, e
para os alunos que têm depen-
dentes, aparece em seguida o
nome do dependente corres-
pondente. Para os alunos que
não têm dependentes, o valor
do atributo é NULL.
– 112 –
Select atributos
From tabela1
Right [Outer] Join tabela2
On Condição de Junção
– 113 –
– 114 –
– 115 –
– 116 –
Sintaxe:
Select atributos
From Tabela
Where Atributo IN
(Select atributo from Tabela2 [Where con-
dição]
Ou
Select atributos
From Tabela1
Where Atributo NOT IN
(Select atributo from Tabela2 [Where con-
dição]
– 117 –
– 118 –
Importante
Tome cuidado ao usar as subconsultas aninhadas em tabelas muitos gran-
des, pois a comparação feita uma a uma vai consumir muito tempo e
muitos recursos.
6.5 Uniões
As uniões (union) combinam os resultados de duas ou mais queries em
um único result set. Todas as linhas de todas as consultas dentro da união vão
sendo adicionas.
As uniões exigem que as seguintes regras sejam obedecidas:
22 os tipos de dados
não precisam ser Figura 6.18 – Union
iguais, mas devem
ser compatíveis
para a conversão
implícita;
22 a quantidade e a
ordem das colu-
nas devem ser as
mesmas em todas
as consultas.
O exemplo da figura
6.18 apresenta a utiliza-
ção de union. Observe
que o select é feito em
duas tabelas Aluno e Fun-
cionário. Os atributos
não têm o mesmo nome,
mas são de tipos compa-
tíveis, então o comando
funciona corretamente. Fonte: elaborada pelo autor.
– 119 –
A figura 6.19 apresenta uma union das mesmas tabelas, mas além do
Nome, também é solicitado o sexo. A tabela Aluno tem este atributo, mas
a tabela funcionário não tem. Neste caso, houve a necessidade de se colocar
NULL para indicar que nas linhas que não tivesse o valor para sexo será
preenchido com ele.
– 120 –
View (visão) é uma tabela virtual formada por linhas e colunas de dados
vindos de outras tabelas ou views criadas por uma query.
A importância de uma view é que, ao criá-la, pode-se filtrar os nomes de
colunas, conteúdo de uma tabela ou mais tabelas a serem exibidas, agrupando e
protegendo determinadas colunas e simplificando o código para o programador.
As views não ocupam espaço no banco de dados. Suas linhas e colunas
são geradas dinamicamente no momento em que é feita uma referência a ela.
Sintaxe:
A figura 6.20 apresenta a criação de uma view para a tabela aluno, apre-
sentando somente os atributos Nome, Sexo e Salário. Veja que foi utilizado
um alias no nome e no salário para ocultar os verdadeiros nomes de colunas.
A figura 6.21 nos mostra que podemos criar views com union. A flexi-
bilidade de utilização das visões é bem grande, praticamente pode-se utilizar
qualquer query para criar uma view.
– 121 –
Para utilizar uma view, você aplica um select, como se a view fosse uma
tabela como as demais. Pode-se aplicar também Order By, Group By, Where
etc (figuras 6.22 e 6.23).
– 122 –
Em uma view, podem ser feitas as operações select, insert, update e delete,
desde que não interfira em nenhuma restrição. Portanto, seja cuidadoso na
criação de views somente para leitura.
Para alterar o conteúdo de uma visão, utilize a seguinte sintaxe.
– 123 –
Síntese
Este capítulo apresentou várias funções oferecidas pela SQL para que
o SGBD seja utilizado da melhor maneira. Foram vistas funções agregadas,
que já fazem vários cálculos sobre os atributos, e que podem ser utilizadas
funções de agrupamento e aplicar condições sobre os grupos utilizando a
cláusula having.
As junções mostraram que se pode recuperar dados entre várias tabelas
seguindo os relacionamentos entre elas. Já a consultas aninhadas podem uti-
lizar um result set como entrada para uma cláusula where.
Atividades
Dado o modelo a seguir, faça as seguintes tarefas:
– 124 –
– 125 –
Objetivos de aprendizagem:
22 explicar o conceito de transação;
22 apresentar a extensão da linguagem SQL Transact SQL;
22 compreender Stored Procedures.
7.1 Transação
Existem determinadas ações dentro de um banco de dados que atuali-
zam vários registros. Às vezes, durante essa atualização, ocorrem falhas que
podem ser falhas de sistemas, como falta de energia, ou falhas de hardware,
como um disco defeituoso ou uma fonte com problemas. O SGBD deve
garantir que, caso essas falhas ocorram, o conteúdo do banco de dados
continue sendo confiável. Para resolver esse problema, foi criado o conceito
de transação.
Segundo Elmasri e Navathe (2013), uma transação é uma unidade atô-
mica de trabalho que deve ser completamente concluída ou completamente
desfeita. As transações possuem várias propriedades, conhecidas como ACID,
sigla formada por:
22 atomicidade – uma transação deve ser totalmente realizada ou
deverá ser desfeita;
22 consistência – uma transação deve ser executada do começo ao fim
sem a interferência de outras transações, garantindo a consistência
dos dados;
22 isolamento – mesmo existindo várias transações sendo executadas
ao mesmo tempo, a transação deve ser executada isoladamente,
sem interferir em outras transações;
22 durabilidade – as mudanças aplicadas pela transação no banco de
dados devem ser armazenadas no banco e não podem ser perdida
por causa de falhas.
– 128 –
– 129 –
Falha Terminada
Begin tran[saction]
Commit [Tran]
-- Ou
Rollback [Tran]
– 130 –
– 131 –
– 132 –
Importante
Aprenda mais sobre Transact SQL executando o tutorial da
Microsoft sobre T SQL: <https://msdn.microsoft.com/pt-br/
library/ms365303(v=sql.120).aspx>.
Função Sintaxe
Declaração de variáveis DECLARE @V1, @V2, ... @Vn Tipo de dados
BEGIN
Indicadores de blocos
END
SELECT @V1 = valor1, @V2 = valor2
Atribuição de valores Ou
SET @V1 = valor1
While WHILE condição
– 133 –
Função Sintaxe
CASE expressão
WHEN Condição THEN resultado
Case
[ ELSE resultado do Else ]
END
CONVERT (tipo de dado des-
Convert
tino [ ( tamanho ) ] , expressão )
Cast CAST (expressão AS tipo de dado [ ( tamanho ) ] )
Data do sistema GETDATE()
DATEPART (Parte que se deseja, data) Parte que se
Retorna parte da data
deseja é DD para, dia MM, para mês, YYYY para ano
– 134 –
– 135 –
– 136 –
– 137 –
– 138 –
Todas as SPs devem ter um nome único em cada banco de dados. Colo-
ca-se o nome da SP o mais próximo de sua utilização, os parâmetros são
facultativos e podem ser de INPUT quando vêm com entrada para a SP ou
OUTPUT quando são retornados pela SP. RECOMPILE e ENCRYPTION
são as opções para recompilar e criptografar as SPs, e FOR REPLICATION
indica que a SP é usada para replicação. Logo depois do AS, vêm os coman-
dos SQL. Todos os que foram vistos até agora podem ser utilizados dentro de
uma SP, e muitos outros.
O exemplo da Figura 7.10 mostra a criação de uma Stored Procedure,
nesse caso chamada pLeAalunos, que faz o select de todas as colunas da tabela
aluno e ordena por nome.
– 139 –
– 140 –
– 141 –
– 142 –
EXECUTE pLe-
1 AlunosNome
EXECUTE pLeA-
2 lunosNome ‘J%’
EXECUTE pLe-
AlunosNome
3
@Nome = ‘A%’
EXECUTE pLe-
AlunosNome
4
‘[CK]ars[OE]n’
EXECUTE pLe-
AlunosNome
5
‘João’
– 143 –
– 144 –
EXECUTE pSomaSalario @
1 Salario = @Total OUTPUT
– 145 –
– 146 –
Saiba mais
Para obter uma lista completa dos procedimentos do sistema, procure
na internet por SQL Server Procedimentos armazenados do sistema.
– 147 –
Síntese
Este capítulo é muito impor-
tante para a utilização dos recursos
avançados de banco de dados. Por
isso, foi apresentado o conceito
de transação que garante as regras
ACID, mantendo o banco consis-
tente quando uma ou várias ope-
rações são efetuadas no banco de
dados e quando várias transações Fonte: elaborado pelo autor.
são geradas simultaneamente.
Também foi apresentada a função do arquivo de log de transação, que auxilia
a gerenciar as transações.
Foram exploradas funções de extensão da linguagem SQL (Transact-
-SQL), permitindo que sejam criados programas dentro do banco de dados e
também foi visto que esses programas podem ser armazenados permanente-
mente no banco de dados com as Stored Procedures.
– 148 –
– 149 –
Recursos Avançados
Objetivos de aprendizagem:
22 apresentar as variáveis de ambiente;
22 cursores;
22 tabelas temporárias;
22 triggers.
– 152 –
Importante
Existe um comando que é utilizado para matar (suspender a exe-
cução) processos que estão processando ou travados e por algum
motivo não há mais necessidade de continuar sua execução, este é
o comando KILL. Esta instrução poderá demorar algum tempo para
ser concluída, principalmente quando envolver um rollback de uma
transação longa.
O comando KILL pode ser usado para terminar uma conexão nor-
mal, o que finaliza internamente as transações associadas à ID (pode
ser identificado usando @@spid, ou a SP de sistema sp_who2) da
sessão especificada.
8.2 Cursores
Existe uma estrutura especial que permite retornar um result set e tra-
balhar com esse conjunto, linha a linha, para fazer várias ações dentro de um
T-SQL ou de uma SP.
– 153 –
Sintaxe:
– 154 –
Agora que foi apresentada a sintaxe do cursor, tem-se mais uma ferra-
menta para auxiliar no seu trabalho:
22 open cursor – utilizado para executar o select que foi definido den-
tro do cursor.
Sintaxe:
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { cursor_name } | @cursor_variable_name
}
[ INTO @variable_name [ ,...n ] ]
– 155 –
– 156 –
Close nomeCursor
Deallocate: nomeCursor
CreateProcedure pLeAluno
@Nome varchar(70)=’%’
as
Declare @idade smallint,
@Datadate,
@DataAtualdatetime
Set @dataAtual =Getdate()
-- Declaração do Cursor
Declare cTeste cursorfor
– 157 –
While@@FETCH_STATUS= 0
Begin
End
Close cTeste
Deallocate cTeste
– 158 –
como condição na cláusula where; logo depois é feito o Open Cursor que
executa o comando que foi declarado dentro do cursor. É neste momento que
o select é realmente executado. A variável @@Error é validada, para garantir
que a execução do cursor ocorreu corretamente, quando aberto. O ponteiro
aponta para o primeiro registro do result set, na sequência é feito um fetch
que recupera os dados do result set da linha apontada naquele momento e
atribui o valor de cada coluna em cada variável, seguindo a ordem do select,
ou seja, de acordo com a posição das colunas devem estar as variáveis que
vão recebê-las. Após associar as variáveis com o conteúdo da coluna o fetch
NEXT, posiciona o ponteiro do cursor para o próximo registro do result set.
No while é verificado o valor de @@Fetch_status. Enquanto for = 0, os
registros estão sendo recuperados com sucesso do result set. Dentro do while
tem-se o Print do nome do aluno, seguido da idade (que é calculada a partir
da subtração da data atual, recuperada pelo getdate), pela data de nascimento.
Um novo Fetch é feito dentro do while para ir recuperando as demais linhas
do result set. Quando chegar ao último registro, na próxima leitura o @@
fetch_status passa a ser –1, ocasionando a saída do while. Depois o cursor é
fechado, e todos os recursos são liberados com o Deallocate.
A figura 8.3 mostra a execução da SP, sem passar parâmetro e traz o
resultado da execução.
Resultado:
Figura 8.3 – Cursor
– 159 –
– 160 –
– 161 –
8.4 Triggers
Uma trigger, também conhecida como gatilho, é um tipo especial de
procedimento armazenado, que é disparado automaticamente quando uma
determinada ação ocorre no servidor de banco de dados.
Triggers são estruturas simples para criação, mas pode conter códigos
complexos. Portanto, deve-se analisar bem a solução criada.
Existem dois tipos de triggers:
22 Data Manipulation Language (DML);
22 Data Definition Language (DDL).
Triggers DML são executadas quando um usuário tenta modificar dados
por meio de comandos de INSERT, UPDATE ou DELETE em uma tabela
ou view. Elas são disparadas quando qualquer evento válido é acionado, e não
depende de quais linhas da tabela serão afetadas ou não.
Sintaxe:
– 162 –
– 163 –
– 164 –
– 165 –
Enquanto na figura 8.10, ele foi inserido na tabela AlunoHist, com Acão
D e a data de alteração.
– 166 –
Síntese
Este capítulo apresenta vários recursos avançados, como utilização de
funções de sistema e outras técnicas que permitem a criação de programas
mais complexos como cursores que permitem o acesso e manipulação linha a
linha de cada registro e atributo. Também a utilização de tabelas temporárias
que são muito úteis em situação que se precisa de armazenamento volátil
dos dados para auxiliar nos cálculos e ações. E finalizando com a utilização
de triggers que permite geração de relatórios, proteção de dados, armazena-
mento de histórico para futuras auditorias.
– 167 –
22 Crie uma ou mais triggers que, para cada ação, gravem o registro do
aluno, a ação que está sendo executada e a data e hora da modificação:
22 Crie para Insert, delete e update;
22 Apresente uma alternativa de solução diferente da exposta como
exemplo no livro; teste a trigger para cada ação.
– 168 –
Objetivos de aprendizagem:
22 apresentar backup e restore;
22 mostrar criação, manutenção de ids e privilégios;
22 otimização de comandos SQL.
9.1 Backup
O que aconteceria se, por algum motivo, o banco de dados fosse per-
dido? Qual o impacto que ele teria para a empresa?
Falhas podem acontecer e deve-se estar preparado para recuperar os
dados, caso esses problemas aconteçam. Os principais tipos de falha são:
22 lógicas – erros de usuário, sejam propositais ou não, que removem
ou alteram dados ou estruturas;
22 sistema operacional ou instância do banco corrompida;
22 físicas – problemas no hardware, em alguma peça do servidor ou
storage (armazenamento), ou até mesmo crash (dano completo) de
um servidor;
22 desastres naturais ou artificiais – incêndios, alagamentos.
O backup oferece uma proteção fundamental, para registros críticos
dos bancos de dados. Para minimizar o risco de perda, deve ser feito backup
dos bancos, para manter salvas as ações frequentes nos dados, cuja melhor
forma de recuperação, em caso de perda, é uma estratégia de backup e
restauração bem planejada.
Um backup é a geração de um ou mais arquivos físicos que podem ser
armazenados em discos, fitas, e outros dispositivos. Esse arquivo contém os regis-
tros do banco de dados, de forma que possam ser recuperados posteriormente.
– 170 –
Importante
O início de qualquer estratégia dever ser sempre com o backup
completo. Para usar o incremental ou o backup de log, deve existir
um backup completo.
– 171 –
Saiba mais
Existem bancos de dados que devem estar online 24 horas
por dia, para isso, além do backup, existem soluções de alta
disponibilidade.
BACKUP DATABASEnome_bancodedados
TO backup_device[ ,...n ]
[ WITH com_opções[ ,...o ] ] ;
– 172 –
BACKUP Lognome_bancodedados
TO backup_device[ ,...n ]
[ WITH com_opções[ ,...o ] ] ;
Importante
O modelo de recuperação deve ser selecionado no banco de
dados antes de começar qualquer estratégia de backup e restore,
pois só funcionarão corretamente depois da solução escolhida.
– 173 –
USE master ;
ALTER DATABASE NomeBanco SET RECOVERY SIMPLE ;
USE master ;
ALTER DATABASE NomeBanco SET RECOVERY FULL ;
– 174 –
Importante
Banco de dados e os backups devem estar em dispositivos separa-
dos, pois se o dispositivo que contém o banco de dados falhar, seus
backups ficarão indisponíveis.
Agora fazendo backup de log (figura 9.4), o Stats foi alterado para 20.
– 175 –
– 176 –
Saiba mais
Durante o processo de restore, o banco não fica disponível para
utilização pelo usuário. Somente quando o SBDB executar com-
pletamente todas as fases do restore, o banco ficará disponível
para utilização.
– 177 –
Sintaxe:
– 178 –
Após o restore da log com NORECOVERY (que foi omitido, pois é a opção
default), observe, figura 9.8, que o banco agora está disponível para utilização.
9.3 Otimização
Existem inúmeras técnicas de otimização que podem ser utilizadas em
cada SGBD, e cada uma delas depende das especificidades com a qual o
SGBD executa suas queries e planos de execução. Neste item será discutida a
importância do índice sua otimização.
Os índices são estruturas utilizadas para recuperar informações em uma
tabela com o menor número possível de operações de leituras, deixando a
pesquisa mais rápida e eficiente. Os índices podem ser:
– 179 –
– 180 –
– 181 –
9.4 Segurança
Para acessar os bancos de dados, é necessário que existam logins e
usuários. Os logins são utilizados para conexão com o banco de dados e
– 182 –
USE [master]
GO
CREATELOGIN [LogindoSQL] WITHPASS-
WORD=N’Password’[MUST_CHANGE,]DEFAULT_
DATABASE=[DefaultDatabase],CHECK_EXPIRA-
TION=ON|OFF,CHECK_POLICY=ON|OFF
GO
– 183 –
– 184 –
– 185 –
Síntese
Esse capítulo é um dos mais importantes, porque garante a manutenção
do banco de dados com as estratégias de backup e restore, que devem ser
muito bem planejadas. Geralmente os backups ficam fisicamente em outro
centro de dados, separado do local de armazenamento do banco.
Em relação à otimização, um ponto a ser bem analisado é a criação de
índices e verificar sua utilização, o que pode ser feito vendo o plano de exe-
cução e observando qual caminho está sendo seguido.
E por último, a estrutura de logins, usuários e privilégios. Lembre-se, se
o seu sistema não está corretamente protegido, você pode ter dados maquia-
dos, alterados, apagados e inconsistentes, portanto planeje muito bem quem
pode acessar o banco de dados e o que pode ser feito.
– 186 –
– 187 –
Tecnologias Avançadas
Objetivos de aprendizagem:
22 introdução ao Business Intelligence;
22 apresentação do Data Warehouse;
22 mostra do Data Mining.
– 190 –
partir deste ponto temos dados prontos para serem analisados, relatórios, data
mining, OLAP (Online Analytical Processing), e outros recursos.
– 191 –
DW Banco Operacional
Orientado ao assunto Orientado à transação
Dados Históricos Dados atuais
Grande quantidade de dados Média e grande quantidade de dados
Carga de acordo com a granularidade Atualizações diárias
Desnormalizado Normalizado
– 192 –
DW Banco Operacional
– 193 –
Apresentar
Acessar Transformar Distribuir Armazenar Localizar
& Analisar
Fluxo
Cada uma das etapas deve ser discutida e revisada antes da sua
implementação.
– 194 –
ião
S
g
Re
N
Suco
Cola
Produto
Leite
Creme
Cadeira
Sabonte
1 2 3 4 5 6 7
Mês
Fonte: MSDN (2007).
– 195 –
– 196 –
– 197 –
Saiba mais
Faça o tutorial de Modelagem dimensional para SQL Server em
<https://msdn.microsoft.com/pt-br/library/hh231691(v=sql.120).
aspx>.
– 198 –
– 199 –
– 200 –
– 201 –
– 202 –
Saiba mais
Faça o tutorial de Data mining do SQL Server em <https://msdn.
microsoft.com/pt-br/library/ms167167(v=sql.120).aspx>.
Síntese
Neste capítulo foi apresentada uma introdução às técnicas avançadas que
utilizam banco de dados. Muitas dessas técnicas já são utilizadas em empresas
de grande e médio porte, mas podem ser aplicadas em empresas pequenas.
Foi apresentado BI, com suas etapas e as tecnologias aplicadas, entre
elas temos o OLAP para criação e demonstração das informações obtidas nas
aplicações de data warehouse e data mining.
Alguns SGBDs oferecem essas ferramentas embutidas na compra da fer-
ramenta, outras oferecem em pacotes separados. Os tutoriais sugeridos para o
MS SQL Server auxiliam na melhor compreensão do funcionamento prático.
Da teoria à prática
22 Pesquise e explique qual a diferença entre OLAP x OLTP
22 Explique por que BI é importante para as empresas.
22 Qual a importância da utilização de data warehouse?
22 Qual a importância da utilização de data mining?
– 203 –
Quem trabalha na área de banco de dados atua em uma das três frentes
principais: construção de aplicativos para clientes utilizando um gerenciador
de dados; administração do gerenciador, que é quem autoriza o uso dos diver-
sos conjuntos de dados armazenados para os diversos usuários (setores e/ou
funcionários da empresa) e se responsabiliza pela manutenção do sistema em
operação adequada; e na construção dos gerenciadores de dados.
Por ser uma pessoa que trabalha há muito tempo com SGBDs e por ser
totalmente apaixonada por essa área, preparei o livro de forma que, com o
conhecimento adquirido neste estudo, você esteja preparado para começar a
trabalhar na área de banco de dados, caso tenha interesse. De qualquer forma,
o livro atende ao público em geral, mesmo para quem vai seguir outra área e
precise do conhecimento básico em bancos de dados.
Com o material apresentado, você terá o conhecimento necessário para
fazer análise e modelagem do banco de dados, criação do banco no SGBD,
programação em SQL e planejamento de backups para garantir a segurança
dos dados em caso de falha.
Aproveite para executar os tutoriais apresentados nas dicas e não esqueça
das recomendações importantes, como seguir padrão e rever todas as etapas
com o cliente.
Este é apenas o começo da viagem, a área de banco de dados é muito
ampla e com muitas oportunidades de mercado.
Obrigada e bom estudo.
– 206 –
1. Banco de dados
22 Confeitaria de pequeno porte utilizando sistema operacional
Windows 10.
Resposta: SQL Server Express ou My SQL.
22 Papelaria de médio porte utilizando sistema operacional Linux Ubuntu.
Resposta: My SQL.
22 Sistema de agendamento de pacotes de viagens, com mais de 300
lojas no Brasil, utilizando sistema Windows 8.1.
Resposta: SQL Server.
22 Sistemas de geoprocessamento para análise da geografia do estado
do Amazonas.
Resposta: Oracle.
2. Modelagem de Dados
Este modelo é somente para referência, não é obrigatório inserir os tipos
de dados nem as chaves estrangeiras.
– 208 –
4. SQL
22 crie o Banco de dados
– 209 –
Tipo varchar(10)
Nome varchar(200),
– 210 –
5. SQL DML
22 Selecione o nome e o preço de todos os produtos.
R – Select Nome, Preço From Produto.
22 Selecione o nome de todos os clientes que moram em Brasília.
R – Select Nome From Cliente Where Cidade like ‘Brasilia’
22 Selecione o nome e o preço dos produtos que custam menos de R$
100, ordenado pelo preço, começando pelo menor valor.
R – Select Nome, Preco from Produto Where preco < 100 Order
by Preco
22 Selecione todos os clientes que tenha a substring ANA no nome.
R – Select * From Cliente Where Nome like ‘%ana%’
– 211 –
6. SQL Avançado
a)
Create database Teste;
Go
Use Teste
Go
CREATE TABLE Cargo
(
CodCargo smallint NOT NULL,
NomeCargo varchar(50) NULL,
ValorCargo smallmoney NULL,
PRIMARY KEY(CodCargo)
)
go
CREATE TABLE Funcionario
(
CPF numeric (11),
NomeFuncionario varchar(70) NOT NULL,
CodCargo Smallint Not NULL,
PRIMARY KEY(CPF),
FOREIGN KEY (CodCargo) REFERENCES CARGO (Cod-
Cargo)
)
GO
INSERT CARGO (CodCargo, NomeCargo, ValorCargo)
VALUES (1, ‘Recepcionista’, 1400.00)
INSERT CARGO (CodCargo, NomeCargo, ValorCargo)
VALUES (2, ‘Vendedor’, 1200.00)
INSERT CARGO (CodCargo, NomeCargo, ValorCargo)
VALUES (3, ‘Faxineiro’ , 1050.00)
GO
-- Povoando a tabela FUNCIONARIO
INSERT FUNCIONARIO (CPF, NomeFuncionario, Cod-
Cargo) VALUES (11, ‘João da Silva’ , 1)
INSERT FUNCIONARIO (CPF, NomeFuncionario, Cod-
Cargo) VALUES (12, ‘Maria de Souza’ , 2)
INSERT FUNCIONARIO (CPF, NomeFuncionario, Cod-
Cargo) VALUES (13, ‘Carla Brunni’ , 3)
GO
– 212 –
b)
c)
d)
Select *
From vwExercicio
Order by nomeCargo desc
– 213 –
@CPF Numeric(11)
as
Set @Salario = 0
From Aluno
Delete Aluno
Commit
Else
Rollback
– 214 –
8. Recursos Avançados
– 215 –
Resposta b)
Resposta c)
Resposta d)
USE [master]
GO
CREATE LOGIN [IdTest] WITH PASS-
WORD=N’P@$$w0rd’’ ‘
MUST_CHANGE, DEFAULT_DATABASE=[dbAluno],
CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
USE [DbAluno]
GO
CREATE USER [IdTest] FOR LOGIN [IdTest]
GO
USE [DbAluno]
GO
ALTER ROLE [IdTest] ADD MEMBER [IdTest]
GO
– 216 –
Resposta b)
Resposta c)
– 217 –
Resposta d)
– 218 –
– 220 –
– 221 –