Structure Query Language (SQL)

Propaganda
Solutech Informática.
Introdução à Banco de Dados:
Página.: 1
Solutech Informática.
Banco de Dados:
Introdução
Devido a carência de literatura destinada ao ensino de Banco de Dados e SQL para estudantes, elaboramos a presente
apostila, que não possui o intento de esgotar tão abrangente volume de informações, servindo tão somente para
estabelecer um mínimo de conhecimentos destinados a introduzir o estudante no mundo dos Gerenciadores de Banco
de dados e da Linguagem SQL.
Banco de Dados
Todos nós sabemos existirem gigantescas bases de dados gerenciando nossas vidas. De fato sabemos que nossa conta
bancária faz parte de uma coleção imensa de contas bancárias de nosso banco. Nosso Título Eleitoral ou nosso
Cadastro de Pessoa Física, certamente estão armazenados em Bancos de Dados colossais. Sabemos também que
quando sacamos dinheiro no Caixa Eletrônico de nosso banco, nosso saldo e as movimentações existentes em nossa
conta bancária já estão à nossa disposição.
Nestas situações sabemos que existe uma necessidade em se realizar o armazenamento de uma série de informações
que não se encontram efetivamente isoladas umas das outras, ou seja, existe uma ampla gama de dados que se referem
a relacionamentos existentes entre as informações a serem manipuladas.
Estes Bancos de Dados, além de manterem todo este volume de dados organizado, também devem permitir
atualizações, inclusões e exclusões do volume de dados, sem nunca perder a consistência. E não podemos esquecer que
na maioria das vezes estaremos lidando com acessos concorrentes a várias tabelas(classe) de nosso banco de dados,
algumas vezes com mais de um acesso ao mesmo registro de uma mesma tabela!
Um Banco de Dados representará sempre aspectos do Mundo Real. Assim sendo uma Base de Dados (ou Banco de
Dados, ou ainda BD) é uma fonte de onde poderemos extrair uma vasta gama de informações. A forma mais comum de
interação Usuário e Banco de Dados, dá-se através de sistemas específicos que por sua vez acessam o volume de
informações geralmente através da linguagem SQL.
DBA - DBP
Os Administradores de Banco de Dados (DBA) são responsáveis pelo controle ao acesso aos dados e pela coordenação
da utilização do BD. Já os projetistas de Banco de Dados (DBP) são analistas que identificam os dados a serem
armazenados em um Banco de Dados e pela forma como estes serão representados.
Analistas e Programadores de Desenvolvimento
Os Analistas e Programadores de Desenvolvimento, criam sistemas que acessam os dados da forma necessária ao
Usuário Final, que é aquele que interage diretamente com o Banco de Dados.
SGBD – Sistemas Gerenciadores de Banco de Dados
Os SGBDs são sistemas responsáveis em armazenar dados e fornecer serviços capazes de manipulá-los.
Para armazenar os dados em um disco, os SGBDs possuem uma forma estruturada padrão de representar os registros e
campos, fornecendo serviços que permitem a criação e alteração dessas definições de dados.
Fornecem ainda, um mecanismo interno para manter os dados no disco e para saber onde está cada elemento em
particular. Também são responsabilidades dos SGBDs disponibilizar serviços para incluir, classificar, atualizar e
eliminar os dados armazenados.
Resumindo:
Um SGBD é uma coleção de programas que permitem ao usuário definir, construir e manipular Bases de Dados para as
mais diversas finalidades.
Página.: 2
Solutech Informática.
Considerações Finais
Atualmente, existe uma tendência de mercado em se dizer que qualquer problema será resolvido, caso a empresa
adquira um Banco de Dados. Naturalmente, em um ambiente com acesso constante ao Banco de Dados (acesso
concorrente, obviamente), onde a segurança seja de vital importância e que o desempenho da aplicação escrita estiver
comprometendo a empresa, considerando-se logicamente uma aplicação bem escrita, sem dúvida a aquisição de um
Banco de Dados poderá ser o primeiro passo na solução do problema.
Analogamente ao que ocorreu com o aparecimento das primeiras linguagens de programação voltadas ao Windows,
onde estas foram apresentadas como capazes de alavancar os negócios da empresa, e no geral causaram mais frustração
do que solução, a aquisição do Banco de Dados, pode gerar o mesmo tipo de problema.
É fundamental que a empresa candidata a utilizar um Banco de Dados, normalize-se totalmente, pois soluções “quebragalho”, típicas do ambiente que dispõe de um Gerenciador de Arquivo, tendem a ser impossíveis em um ambiente
estruturado sobre o Banco de Dados. Portanto, sob pena de se realizar um grande investimento, e não se colher fruto
algum, é muito conveniente, que a empresa antes de adquirir um Banco de Dados, passe por um processo de adaptação,
preferencialmente contando com pessoal especializado, geralmente consultores, que não tenham qualquer ligação com
fabricantes de Bancos de Dados.
Características Gerais de um SGBD
Os SGBD tem sete características operacionais elementares sempre observadas, que passaremos a listar:
Característica 1: Controle de Redundâncias- A redundância consiste no armazenamento de uma mesma informação
em locais diferentes, provocando inconsistências. Em um Banco de Dados as informações só se encontram
armazenadas em um único local, não existindo duplicação descontrolada dos dados. Quando existem replicações dos
dados, estas são decorrentes do processo de armazenagem típica do ambiente Cliente-Servidor, totalmente sob controle
do Banco de Dados.
Característica 2: Compartilhamento dos Dados- O SGBD deve incluir software de controle de concorrência ao
acesso dos dados, garantindo em qualquer tipo de situação a escrita/leitura de dados sem erros.
Característica 3: Controle de Acesso- O SGDB deve dispor de recursos que possibilitem selecionar a autoridade de
cada usuário. Assim um usuário poderá realizar qualquer tipo de acesso, outros poderão ler alguns dados e atualizar
outros e outros ainda poderão somente acessar um conjunto restrito de dados para escrita e leitura.
Característica 4: Interfaceamento- Um Banco de Dados deverá disponibilizar formas de acesso gráfico, em
linguagem natural, em SQL ou ainda via menus de acesso, não sendo uma "caixa-preta" somente sendo passível de ser
acessada por aplicações.
Característica 5: Esquematização- Um Banco de Dados deverá fornecer mecanismos que possibilitem a compreensão
do relacionamento existentes entre as tabelas e de sua eventual manutenção.
Característica 6: Controle de Integridade- Um Banco de Dados deverá impedir que aplicações ou acessos pelas
interfaces possam comprometer a integridade dos dados.
Característica 7: Backups- O SGBD deverá apresentar facilidade para recuperar falhas de hardware e software,
através da existência de arquivos de "pré-imagem" ou de outros recursos automáticos, exigindo minimamente a
intervenção de pessoal técnico.
Existe a possibilidade de encontramos Bancos de Dados que não satisfaçam completamente todas as características
acima, o que não o inválida como Banco de Dados. Na prática podemos encontrar situações onde a primeira
característica não seja importante, e as redundâncias podem ser aceitas em algumas situações sob controle da aplicação
(algo não muito recomendado, mas passível de aceitação).
Página.: 3
Solutech Informática.
A segunda característica (Compartilhamento dos Dados) pode ser desconsiderada principalmente em ambiente de
desenvolvimento, ou ainda em aplicações remotas.
O Controle de Acesso pode ser descartado em pequenas empresas, sendo que o aplicativo em questão, mais o software
de rede, podem facilmente se incumbir desta característica, no caso de pequenas empresas, com reduzido número de
pessoas na área operacional.
O Backup em tempo de execução, é uma característica sempre disponível, porém temos aplicações que invariavelmente
são comprometidas por falhas de hardware, e outras, que o mesmo tipo de falha não causa perda alguma de dados ou de
integridade. Então, cada Banco de Dados tem esta característica melhor ou pior implementada, cabendo ao
Administrador de Banco de Dados escolher aquele que lhe oferecer mais segurança.
Devemos ressaltar ainda, que podemos ter um Banco de Dados Modelo A, que respeite integralmente as regras básicas
e disponha de todas as características apresentadas, enquanto um Modelo B que apesar de respeitar as regras básicas,
não suporte uma ou outra característica desejável, mas tenha um desempenho excelente, enquanto o Modelo A seja
apenas razoável no quesito desempenho, nos levará seguramente a escolher o Modelo B como sendo o ganhador para
nossa instalação!
Isto ocorre pois, na prática, todo usuário deseja um tempo de resposta muito pequeno. O chamado “prazo de entrega”
muito comum em Bancos de Dados operando nos limites de sua capacidade, ou nos casos onde o hardware está muito
desatualizado, é fonte de inúmeros problemas para o pessoal de informática. Neste caso é melhor abrirmos mão de uma
Interface Amigável, de um Gerenciamento Automático de Backups ou ainda de outras características que não
julgarmos fundamentais, para nos livrarmos do problema de má performance do Banco de Dados.
A escolha do Banco de Dados da empresa, portanto é uma decisão muito delicada, na medida em que está irá acarretar
troca de aplicativos e troca de hardware. Os investimentos diretamente aplicados no Banco de Dados, costumam ser
infinitamente menores do que aqueles a serem aplicados na empresa, visando sua perfeita adequação ao novo SGBD.
Esta decisão, sempre que possível, deve ser tomada por especialistas em Banco de Dados, com profundos
conhecimentos de Análise de Sistemas, de Banco de Dados e de Software de Gerenciamento de Bases de Dados, de
forma a evitar que a empresa escolha um Banco de Dados inadequado aos seus propósitos, e que pouco tempo depois,
seja obrigada a perder todos investimento realizado em Software e Hardware.
Página.: 4
Solutech Informática.
Modelagem de Dados:
1 – Tabelas (Entidade) – Identifica o objeto de interesse do sistema e tem “vida própria”, ou seja, é a representação
abstrata de um objeto do mundo real sobre o qual desejamos guardar informações.
Ex: Clientes, Fornecedores, Alunos, Funcionários, Departamentos, etc.
2 – Campo(Atributo) – Informações que desejamos guardar sobre a instância da Entidade.
Ex: Matrícula do Aluno, Nome do Aluno, Endereço do Cliente, Sexo do Funcionário, etc.
3 – Registro – É um conjunto de Campos, ou seja, os elementos da entidade.
Ex: Cliente 10, Funcionário João, Aluno Pedro, etc.
4 – Chave ou identificador
É o atributo contido no Registro que o personaliza e individualiza.
4.1 – Chave Primária
É o atributo cujo valor identifica unicamente um Registro. Deve ter conteúdo reduzido e valor constante no
tempo.
Em uma entidade, devemos identificar entre seus atributos componentes, qual é aquele que o personaliza e
individualiza, apresentando um valor que não se altera com o decorrer do tempo. A este atributo, denominamos
Atributo Chave ou simplesmente Chave Primária.
O aspecto destacado e também básico para a definição da chave é o valor permanente que ela deve ter, pois
caso contrário causaria uma série de anomalias resultantes dessa sua inconstância, já que, além da sua manutenção,
propagaria alterações em todos os locais onde estivessem residentes.
4.2 – Chave Estrangeira
É quando um atributo de uma entidade é a chave primária de outra entidade.
Quando duas entidades se relacionam, normalmente a entidade dependente herda a chave da entidade origem,
residindo como um de seus atributos.
4.3 – Chave Composta ou Concatenada
É formada pelo grupamento de mais de um atributo.
Em alguns casos um único atributo não consegue personalizar a entidade em que está contido, tornando-se
impossível fixar a interdependência com os demais atributos. Quando isto acontece, é conveniente verificar se há outros
atributos que associados ao anterior, consigam fixar o conceito de dependência efetiva, nesse caso obtemos uma chave
composta, o que denominamos chave concatenada.
4.4 – Chave Secundária
É o atributo que não possui a propriedade de identificação única.
São aqueles que permitem a ordenação dos Registros dentro de uma tabela, facilitando as pesquisas à mesma.
5 – Relacionamento
É a associação, com um significado, entre duas ou mais Tabelas.
Página.: 5
Solutech Informática.
Processo de Normalização:
Modelagem de Dados é o processo utilizado para definir a estrutura do banco de dados através da distribuição dos
dados nas Tabelas. Existem maneiras diferentes de se definir o mesmo conjunto de dados, e uma boa modelagem de
dados pode facilitar bastante o desenvolvimento das aplicações. Vamos ressaltar aqui, dois pontos que devem ser
observados na construção do MODELO: o processo de Normalização e a propagação de chaves primárias.
NORMALIZAÇÃO
Técnica de Análise e Organização de dados que visa determinar a melhor composição para uma estrutura de dados
(Tabela). Os principais objetivos são: Eliminar anomalias que dificultam as operações com os dados, ou seja, facilitar a
manipulação do Banco de Dados. Minimizar as redundâncias e os conseqüentes riscos de inconsistências. Reduzir e
facilitar as manutenções.
É um processo passo a passo que consiste na simplificação dos atributos dentro de uma Classe(Tabela), aumentando o
entendimento do Modelo e contribuindo de forma considerável para a estabilidade da Base de Dados.
Sobre um modelo de dados normalizado podemos dizer que:
Possuem as mesmas informações que um não normalizado, só que estruturado de outra maneira.
É muito mais fácil compreender um modelo normalizado do que um não normalizado.
Não possui redundância de dados.
Suportam melhor modificações como inclusão de novos atributos e novas Classes (Tabelas).
NORMALIZAÇÃO DE DADOS
Consiste em definir o formato lógico adequado para as estruturas de dados identificados no projeto lógico do sistema,
com o objetivo de minimizar o espaço utilizado pelos dados e garantir a integridade e confiabilidade das informações.
A normalização é feita, através da análise dos dados que compõem as estruturas utilizando o conceito chamado
"Formas Normais (FN)". As FN são conjuntos de restrições nos quais os dados devem satisfazê-las. Exemplo, pode-se
dizer que a estrutura está na primeira forma normal (1FN), se os dados que a compõem satisfizerem as restrições
definidas para esta etapa.
A normalização completa dos dados é feita, seguindo as restrições das três formas normais existentes, sendo que a
passagem de uma FN para outra é feita tendo como base o resultado obtido na etapa anterior, ou seja, na FN anterior.
Para realizar a normalização dos dados, é primordial que seja definido um campo chave para a estrutura, campo este
que permitirá identificar os demais campos da estrutura.
Página.: 6
Solutech Informática.
Primeira Forma Normal (1FN)
Consiste em retirar da estrutura os elementos repetitivos, ou seja, aqueles dados que podem compor uma estrutura de
vetor. Podemos afirma que uma estrutura está normalizada na 1FN, se não possuir elementos repetitivos. Exemplo:
Estrutura original:
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Cod. do Cliente, Nome do cliente, Endereço do cliente, CGC
do cliente, Relação das mercadorias vendidas (onde para cada mercadoria temos: Código da Mercadoria, Descrição da
Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria) e Total Geral da Nota)
Analisando a estrutura acima, observamos que existem várias mercadorias em uma única Nota Fiscal, sendo portanto
elementos repetitivos que deverão ser retirados.
Estrutura na primeira forma normal (1FN):
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome Cliente, Endereço do cliente, CGC
do cliente e Total Geral da Nota)
Arquivo de Vendas (Num. NF, Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda
e Total da venda desta mercadoria)
Obs. Os campos sublinhados identificam as chaves das estruturas.
Como resultado desta etapa ocorre um desdobramento dos dados em duas estruturas, a saber:
- Primeira estrutura (Arquivo de Notas Fiscais): Dados que compõem a estrutura original, excluindo os elementos
repetitivos.
- Segundo estrutura (Arquivo de Vendas): Dados que compõem os elementos repetitivos da estrutura original, tendo
como chave o campo chave da estrutura original (Num. NF) e o campo chave da estrutura de repetição (Código da
Mercadoria).
Segunda Forma Normal (2FN)
Consiste em retirar das estruturas que possuem chaves compostas (campo chave sendo formado por mais de um
campo), os elementos que são funcionalmente dependente de parte da chave. Podemos afirmar que uma estrutura está
na 2FN, se ela estiver na 1FN e não possuir campos que são funcionalmente dependente de parte da chave. Exemplo:
Estrutura na primeira forma normal (1FN):
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente,
CGC do cliente e Total Geral da Nota)
Arquivo de Vendas (Num. NF, Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda
e Total da venda desta mercadoria)
Estrutura na segunda forma normal (2FN):
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente,
CGC do cliente e Total Geral da Nota)
Arquivo de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria)
Arquivo de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda)
Como resultado desta etapa, houve um desdobramento do arquivo de Vendas (o arquivo de Notas Fiscais, não foi
alterado, por não possuir chave composta) em duas estruturas a saber:
- Primeira estrutura (Arquivo de Vendas): Contém os elementos originais, sendo excluídos os dados que são
dependentes apenas do campo Código da Mercadoria.
- Segundo estrutura (Arquivo de Mercadorias): Contém os elementos que são identificados apenas pelo Código da
Mercadoria, ou seja, independentemente da Nota Fiscal, a descrição e o preço de venda serão constantes.
Página.: 7
Solutech Informática.
Terceira Forma Normal (3FN)
Consiste em retirar das estruturas os campos que são funcionalmente dependentes de outros campos que não são
chaves. Podemos afirmar que uma estrutura está na 3FN, se ela estiver na 2FN e não possuir campos dependentes de
outros campos não chaves. Exemplo:
Estrutura na segunda forma normal (2FN):
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente,
CGC do cliente e Total Geral da Nota)
Arquivo de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria)
Arquivo de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda)
Estrutura na terceira forma normal (3FN):
Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente e Total Geral da Nota)
Arquivo de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria)
Arquivo de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda)
Arquivo de Clientes (Código do Cliente, Nome do cliente, Endereço do cliente e CGC do cliente)
Como resultado desta etapa, houve um desdobramento do arquivo de Notas Fiscais, por ser o único que possuía campos
que não eram dependentes da chave principal (Num. NF), uma vez que independente da Nota Fiscal, o Nome, Endereço
e CGC do cliente são inalterados. Este procedimento permite evitar inconsistência nos dados dos arquivos e
economizar espaço por eliminar o armazenamento freqüente e repetidas vezes destes dados. A cada nota fiscal
comprada pelo cliente, haverá o armazenamento destes dados e poderá ocorrer divergência entre eles.
As estruturas alteradas foram pelos motivos, a saber:
- Primeira estrutura (Arquivo de Notas Fiscais): Contém os elementos originais, sendo excluído os dados que são
dependentes apenas do campo Código do Cliente (informações referentes ao cliente).
- Segundo estrutura (Arquivo de Clientes): Contém os elementos que são identificados apenas pelo Código do Cliente,
ou seja, independente da Nota Fiscal, o Nome, Endereço e CGC dos clientes serão constantes.
Após a normalização, as estruturas dos dados estão projetadas para eliminar as inconsistências e redundâncias dos
dados, eliminando desta forma qualquer problema de atualização e operacionalização do sistema. A versão final dos
dados poderá sofrer alguma alteração, para atender as necessidades específicas do sistema, a critério do analista de
desenvolvimento durante o projeto físico do sistema.
Página.: 8
Solutech Informática.
Exemplo:
Entidade (Tabela) Não Normalizada
Pedido
Num_Pedido
Data_Pedido
Valor_Pedido
Cod_Produto
Nome_Produto
Preco_Produto
Qtd_Item
Valor_Item
Cod_Cliente
Nome_Cliente
CPF_Cliente
Grupo Repetitivo
1ª FN
ITEM_PEDIDO
PEDIDO
Num_Pedido
Data_Pedido
Valor_Pedido
Cod_Cliente
Nome_Cliente
CPF_Cliente
Num_Pedido
Cod_Produto
Nome_Produto
Preco_Produto
Qtd_Item
Valor_Item
2ª FN
PEDIDO
ITEM_PEDIDO
Num_Pedido
Num_Pedido
Cod_Produto
Data_Pedido
Valor_Pedido
Cod_Cliente
Nome_Cliente
CPF_Cliente
Qtd_Item
Valor_Item
PRODUTO
Cod_Produto
Nome_Produto
Preco_Produto
3ª FN
PEDIDO
Num_Pedido
Data_Pedido
CodCliente
Valor_Pedido
ITEM_PEDIDO
PRODUTO
Num_Pedido
Cod_Produto
Cod_Produto
Nome_Produto
Qtd_Item
Valor_Item
Preco_Produto
Página.: 9
CLIENTE
Cod_Cliente
Nome_Cliente
CPF_Cliente
Solutech Informática.
Exercício.
Passando pela 1ªFN, 2ªFN e 3ªFN , normalize os formulários abaixo.
A)
Pedido de Compra
ABC Sistemas S/A
Pedido N.º 12345
Prazo de Entrega 10/04/2002
Cliente: 0427 - O picareta do Software e do Hardware S/A
Endereço: Rua dos aflitos S/N
Bairro: Centro
Município: Volta Redonda
UF: RJ
CGC: 29-928-269/0001 - 43
Inscrição Estadual: 80-652-444
Código Produto
2131
12,0
4505
Total:
Unidade
Embalagem
Cx.
Cx.
Quantidade
3
5
UX
10
Descrição
10cm. 1ª via
Disq. 1.4 MB
Preço
Unitário
1500
16,00
Preço
Total
45,00
80,00
Rolo de fio
3,00
30,00
155,00
B)
Ficha de Cadastro de Funcionário
Matrícula:
Nome:
Data de Admissão:
/
Cargo - Código:
Departamento – Código:
/
.
Nome:
Nome:
Dados dos Dependentes
Nome: ______________
Nome: ______________
Nome: ______________
Data Nascimento:
/
/ . Idade: ______
Data Nascimento:
/
/ . Idade: ______
Data Nascimento: ____/____/___ Idade: ______
Total de Dependentes:_____________
Página.: 10
Solutech Informática.
C)
Requisição de Material
Departamento – Código:
Nome:
Código Material
Nome
Quantidade
0093
Fita para Impressora 5
0038
Resma papel
2
Totais
7
Funcionário requisitante – Matrícula 1136 Assinatura: ACL
Gerente - Matrícula 0841 Assinatura: EDN
N.º: 0716
Data: 15/06/95
Preço
4,00
15,00
50,00
d)
Controle de dependentes:
Uma empresa deseja fazer o controle informatizado de seus funcionários e respectivos dependentes. O sistema a ser
definido deverá emitir os seguintes relatórios/consultas.
Funcionários
Dependentes por Funcionários
Dependentes por sexo
Dependentes ordenado por idade
Obs: Criar as entidades, Atributos, Chaves, Relacionamentos.
e)
Empresa de Informática:
Em uma empresa prestadora de serviços de informática necessita-se de um sistema para controlar a atuação dos seus
funcionários nos diversos projetos. O Sistema a ser criado deverá permitir as seguintes Consultas/Relatórios:
Projetos
Analistas
Programadores
Analistas por projetos
Programador por Projeto
Projeto em andamento
Projeto por linguagem
Definir: (Entidade, Atributos, Chaves, relacionamentos)
Obs: Cada Analista pode atuar em vários projetos.
Cada Programador só atua em 1 projeto.
Página.: 11
Solutech Informática.
f)
Clínica:
Em uma clínica precisa-se criar um sistema de controlar consultas, devido a grande demanda. Deseja-se que o sistema a
ser elaborado forneça os seguintes relatórios e/ou consultas:
Médicos;
Pacientes;
Médico por especialidade;
Pacientes por médico;
Consultas por data/horário;
Pacientes por especialidade;
Consultas efetivadas ou não.
g)
Vinícola:
Uma distribuidora de vinhos, que compra das vinícolas e revende vinhos para seus clientes, em função de aumento do
suas vendas, viu-se na necessidade de informatizar o seu controle de estoque de vinhos. Para isto, deverá ser
desenvolvido um sistema que possibilite as seguintes consultas/relatórios.
Vinhos
Vinícolas
Vinhos por tipo
Vinhos por vinícola
Vinhos por safra
Quantidade de estoque de vinhos
Obs. Cada vinho é fornecido por uma vinícola.
Página.: 12
Solutech Informática.
Linguagem SQL:
Página.: 13
Solutech Informática.
Structure Query Language (SQL)
1.Para acesso a um banco de dados relacional, é necessário uma linguagem. A SQL é uma linguagem
usada pela maioria dos bancos de dados relacionais.
2.É uma linguagem baseada no inglês, fácil de escrever, ler e entender.
3.SQL tem como características, a economia de tempo, flexibilidade
bancos de dados.
e segurança na manutenção de
4.Existem pequenas diferenças da linguagem em alguns bancos. No VisualFox por exemplo, quando o
comando ocupa mais de uma linha, devemos colocar ponto e vírgula no final de cada linha, e no final do
comando somente um enter.
No oracle, ao contrário, devemos colocar um ponto e vírgula somente no final do comando, mesmo que
este ocupe mais de uma linha.
5.Os comandos existentes na linguagem SQL esta dividida em 3 grupos:
1 – Comandos DML(Linguagem de Manipulação de Dados) – Conjunto de comandos responsáveis
pela consulta, e atualizações dos dados armazenados no Banco de Dados.
2 – Comandos DDL(Linguagem de Definição de Dados) – Conjunto de comandos responsáveis
pela criação, alteração e deleção das estruturas da tabelas e índices de um sistema.
3 – Comandos DCL(Linguagem de Controle de Dados)
Página.: 14
Solutech Informática.
1 - Comandos DML – Linguagem de Manipulação de Dados.
1.1 – SELECT:
Objetivo: Selecionar um conjunto de registros em uma ou mais tabelas que atenda a uma determinada condição
definida pelo comando.
Sintaxe:
SELECT ALL / * FROM <nome-tabela> [, <nome-tabela>]
DISTINCT
WHERE <condição>
GROUP BY <nome-coluna>
HAVING <condição>
ORDER BY <nome-campo> ASC/DESC
onde:
a) nome-tabela - Representa o nome da(s) tabela(s) que contem as colunas que serão selecionadas ou que serão
utilizadas para a execução da consulta.
b) condição - Representa a condição para a seleção dos registros. Esta seleção poderá resultar em um ou vários
registros.
c) nome-coluna - Representa a(s) coluna(s) cujos resultados são agrupados para atender à consulta.
d) ALL / * - Opção default. Seleciona todos os campos da Tabela(s) em questão.
e) DISTINCT - Opção que mostra os valores obtidos na seleção eliminando as duplicidades.
f) WHERE - Especifica o critério de seleção dos registros nas tabelas especificadas.
g) GROUP BY - Especifica o(s) campo(s) que serão agrupados para atender a consulta.
h) HAVING - Especifica uma condição para seleção de um grupo de dados. Esta opção só é utilizada combinada com a
opção GROUP BY.
i) ORDER BY - Esta opção quando utilizada apresenta o resultado da consulta ordenado de forma crescente ou
decrescente pelos campos definidos.
Algumas funções utilizadas no comando Select.
a) COUNT(*)
Objetivo: Retorna a quantidade de registros existentes no campo especificado. Quando a opção * é utilizada o resultado
é a quantidade de registros existentes. Quando é referenciado o nome de um campo retorna a quantidade de valores
existentes na coluna.
b) SUM (<nome-campo>)
Objetivo: Retorna a soma dos valores existentes no campo especificado. Quando a opção DISTINCT é utilizada são
consideradas apenas os diferentes valores existentes no campo.
c) AVG (<nome-campo>)
Objetivo: Retorna a média dos valores existentes no campo especificado. Quando a opção DISTINCT é utilizada são
consideradas apenas os diferentes valores existentes no campo.
d) MAX (<nome-campo>)
Objetivo: Retorna o maior valor existente no campo especificado.
e) MIN (<nome-campo>)
Objetivo: Retorna o menor valor existente no campo especificado.
f) UPPER (<nome-campo>)
Objetivo: A função Upper converte caracteres minúsculos em maiúsculos. Contudo, não funciona para determinados
conjuntos de caracteres, como é o caso dos símbolos da língua portuguesa.
Página.: 15
Solutech Informática.
Veja a Tabela CLIENTE Abaixo:
COD
001
002
003
004
005
006
NOME
FABIANA
SUELI
ALESSANDRA
WAGNER
RIVA
REGINA
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
TELEFONE
222 5534
339 1100
465 2211
211 1213
550 1133
600 2299
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SÃO PAULO
FORTALEZA
PORTO ALEGRE
TELEFONE
222 5534
339 1100
465 2211
211 1213
550 1133
600 2299
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SÃO PAULO
FORTALEZA
PORTO ALEGRE
TELEFONE
222 5534
339 1100
465 2211
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
Usando o comando Select:
O comando Select, seleciona os dados especificados da tabela.
Quando você usa *, selecionará todos os campos da tabela.
Você pode selecionar campos determinados também.
Select * from Cliente;
Resultado:
COD NOME
001 FABIANA
002 SUELI
003 ALESSANDRA
004 WAGNER
005 RIVA
006 REGINA
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAOCOLOMBO, 4000
Selecionando alguns itens:
Select nome, endereço
from Cliente;
Resultado:
NOME
FABIANA
SUELI
ALESSANDRA
WAGNER
RIVA
REGINA
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
Usando o comando Where:
O comando Where, coloca condições na sua Query.
Select * from Cliente
where cidade = “BELO HORIZONTE”;
Resultado:
COD NOME
001 FABIANA
002 SUELI
003 ALESSANDRA
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
Página.: 16
Solutech Informática.
Usando o comando Distinct:
O comando Distinct, elimina as linhas duplicadas da sua query:
Select distinct(cidade)
from Cliente;
Resultado:
CIDADE
---------------------------------------BELO HORIZONTE
SÃO PAULO
FORTALEZA
PORTO ALEGRE
Observe que, embora nós temos 3 pessoas de Belo Horizonte, a query mostrou somente uma vez o nome
da cidade.
Usando o comando Order by:
O comando Order by, ordena a sua tabela:
Select * from Cliente
Order by nome;
Resultado:
COD NOME
003 ALESSANDRA
001 FABIANA
006 REGINA
005 RIVA
002 SUELI
004 WAGNER
ENDERECO
AV. AFONSO PENA, 600
RUA SERGIPE, 233
AV. CRISTOVAO COLOMBO, 4000
RUA MARIANA, 428
RUA DA BAHIA, 1234
AV. PAULISTA, 200
TELEFONE
465 2211
222 5534
600 2299
550 1133
339 1100
211 1213
CIDADE
BELO HORIZONTE
BELO HORIZONTE
PORTO ALEGRE
FORTALEZA
BELO HORIZONTE
SAO PAULO
TELEFONE
465 2211
222 5534
339 1100
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
Nós podemos incluir uma condição em nosso select:
Select * from Cliente
where cidade = "BELO HORIZONTE"
order by nome;
Resultado:
COD NOME
003 ALESSANDRA
001 FABIANA
002 SUELI
ENDERECO
AV. AFONSO PENA, 600
RUA SERGIPE, 233
RUA DA BAHIA, 1234
Viu? A query selecionou em ordem alfabética, somente os registros com cidade = “BELO HORIZONTE”.
Você pode também fazer a query em ordem descendente:
Select * from Cliente
where cidade = "BELO HORIZONTE"
order by nome desc;
Resultado:
COD NOME
002 SUELI
001 FABIANA
003 ALESSANDRA
ENDERECO
RUA DA BAHIA, 1234
RUA SERGIPE, 233
AV. AFONSO PENA, 600
Página.: 17
TELEFONE
339 1100
222 5534
465 2211
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
Solutech Informática.
Usando o comando Group by:
O comando Group by, agrupa os seus dados:
Select CIDADE, COUNT(*)
from Cliente
GROUP by CIDADE;
Resultado:
CIDADE
BELO HORIZONTE
FORTALEZA
PORTO ALEGRE
SAO PAULO
COUNT(*)
3
1
1
1
A query informou o número de pessoas por cidade e em ordem alfabética.
Veja a Tabela Saldo do Cliente (SaldoCliente) abaixo:
CODIGO
001
002
003
004
005
006
VALOR
10
20
15
10
25
10
Usando a função Count():
A função Count(), conta todos os registros de uma tabela de acordo com a condição:
Select Count(*)
from SaldoCliente;
Resultado:
Count(*)
---------------------------6
A query informou a quantidade de registros existentes na tabela de SaldoCliente.
Usando a função Sum():
A função Sum(), soma uma coluna da sua tabela:
Select SUM(VALOR) from SaldoCliente;
Resultado:
sum(valor)
---------------------------90
A query informou a soma da coluna valor.
Página.: 18
Solutech Informática.
Usando a função Max():
A função Max(), seleciona o maior valor de uma coluna:
Select MAX(VALOR)
from SaldoCliente;
Resultado:
max(valor)
---------------------------25
A query informou o valor máximo da coluna valor.
Usando a função Min():
A função Min(), seleciona o menor valor de uma coluna:
Select MIN(VALOR)
from SaldoCliente;
Resultado:
min(valor)
---------------------------10
A query informou o valor mínimo da coluna valor.
Usando a função Avg():
A função Avg, seleciona a média de uma coluna:
Select AVG(VALOR)
from SaldoCliente;
Resultado:
avg(valor)
---------------------------15
A query informou a média da coluna valor.
Página.: 19
Solutech Informática.
Veja as Tabelas abaixo:
CLIENTE :
CODIGO
001
002
003
004
005
006
NOME
FABIANA
SUELI
ALESSANDRA
WAGNER
RIVA
REGINA
END_CLI:
CODIGO
001
002
003
004
005
006
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
TELEFONE
222 5534
339 1100
465 2211
211 1213
550 1133
600 2299
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SAO PAULO
FORTALEZA
PORTO ALEGRE
SALDOCLIENTE:
CODIGO
VALOR
001
10
002
20
003
15
004
10
005
25
006
10
Usando Join:
Um join é usado quando uma query necessita de dados de mais de uma tabela.
O resultado é um subconjunto cartesiano das tabelas. As tabelas acima, estão relacionadas pelo código.
a) Vamos listar o Nome de cada Cliente com seu respectivo Saldo:
Select cliente.nome, saldocliente.valor
from cliente, saldocliente
where cliente.codigo = saldocliente.codigo;
Resultado:
NOME
VALOR
FABIANA
10
SUELI
20
ALESSANDRA
15
WAGNER
10
RIVA
25
REGINA
10
Lembre-se que você deve usar sempre a cláusula where em um join.
Na query anterior, você poderia colocar apelidos nas tabelas:
Select c.nome, s.valor
from cliente c, saldocliente s
where c.codigo = s.codigo;
Página.: 20
Solutech Informática.
O resultado é o mesmo.
b) Vamos selecionar o nome, endereco e saldo das pessoas:
Select cliente.nome, saldocliente.valor, end_cli.endereco, end_cli.cidade
from cliente, saldocliente, end_cli
where cliente.codigo = saldocliente.codigo and
cliente.codigo = end_cli.codigo;
Resultado:
NOME
VALOR
FABIANA
10
SUELI
20
ALESSANDRA
15
WAGNER
10
RIVA
25
REGINA
10
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
Usando o comando Union
Union é a combinação de mais de um select para obter um resultado desejado.
A quantidade de colunas dever ser a mesma em todos os select's.
Vamos fazer uma correção nos saldos, de acordo com a cidade:
Select c.nome, (s.saldo*1.10), e.endereco, e.cidade
from cliente c, saldocliente s, end_cli e
where c.codido = s.codigo
and c.codigo = e.codigo;
and e.cidade = 'BELO HORIZONTE'
union
select c.nome, (s.saldo*1.05), e.endereco, e.cidade
from cliente c, saldocliente s, end_cli e
where c.codido = s.codigo
and c.codigo = e.codigo;
and e.cidade = 'SAO PAULO';
E o resultado será:
NOME
SALDO
FABIANA
11
SUELI
22
ALESSANDRA 16.5
WAGNER
10.5
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
Veja a Tabela CONTA_CORRENTE abaixo:
CODIGO
10
20
30
40
50
60
NOME
VANESSA
NILSON
RACHEL
CALVIN
RAINER
CHRISTIAN
SALDO
100,00
100,00
150,00
200,00
200,00
150,00
Página.: 21
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SAO PAULO
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SAO PAULO
FORTALEZA
PORTO ALEGRE
Solutech Informática.
Usando Aliases (Apelidos)
Um alias e criado quando usamos um calculo em uma query ou selecionamos um valor mínimo ou máximo
de uma coluna, ou mesmo concatenamos colunas.
Vamos calcular 1/4 do saldo da tabela acima:
Select nome, saldo/4 "CORRECAO"
from conta_corrente;
E o resultado sera:
NOME
VANESSA
NILSON
RACHEL
CALVIN
RAINER
CHRISTIAN
CORRECAO
25,00
25,00
37,50
50,00
50,00
37,50
O nome da coluna "CORRECAO" foi criado com um alias, caso nos não tivéssemos colocado este alias, a
coluna sairia com o nome "SALDO/4":
Select nome,saldo/4
from conta_corrente;
E o resultado será:
NOME
VANESSA
NILSON
RACHEL
CALVIN
RAINER
CHRISTIAN
SALDO/4
25,00
25,00
37,50
50,00
50,00
37,50
Usando Operadores de Concatenação
Usamos operadores de concatenação, quando queremos criar uma coluna a partir de 2 ou mais colunas de
uma query.
Vamos apresentar um resultado de uma query:
Select codigo|| ' - ' ||nome, saldo
from conta_corrente;
E o resultado será:
CODIGO||' - '||NOME
10 – VANESSA
20 – NISON
30 – RACHEL
40 – CALVIN
50 – RAINER
60 – CHRISTIAN
SALDO
100,00
100,00
150,00
200,00
200,00
150,00
Podemos também criar um alias para a coluna de concatenação:
Página.: 22
Solutech Informática.
Select codigo||' - '||nome "CORRENTISTA", saldo
from conta_corrente;
E o resultado será:
CORRENTISTA
10 – VENESSA
20 – NILSON
30 – RACHEL
40 – CALVIN
50 – RAINER
60 – CHRSITIAN
SALDO
100,00
100,00
150,00
200,00
200,00
150,00
Veja a Tabela CONTA_CORRENTE abaixo:
CODIGO
10
20
30
40
50
60
NOME
VANESSA
NILSON
RACHEL
CALVIN
RAINER
CHRISTIAN
SALDO
100,00
100,00
150,00
200,00
Tratamento de Valores Nulos:
Se determinada coluna não tem um valor, este valor e denominado nulo. Quando uma operação aritmética
e feita com um valor nulo, o resultado e sempre nulo.
Select * from conta_corrente
Where Saldo is Null;
E o resultado será:
CODIGO
40
60
NOME
CALVIN
CHRISTIAN
SALDO
Select * from conta_corrente
Where Saldo is not Null;
E o resultado será:
CODIGO
10
20
30
50
NOME
VANESSA
NILSON
RACHEL
RAINER
SALDO
100,00
100,00
150,00
200,00
Página.: 23
Solutech Informática.
Veja a Tabela CONTA_CORRENTE abaixo:
CODIGO
10
20
30
40
50
60
NOME
VANESSA
NILSON
RACHEL
CALVIN
RAINER
CHRISTIAN
SALDO
100,00
100,00
150,00
200,00
200,00
120,00
Operador Between:
O Operador between, seleciona dados que estão entre uma determinada condição.
Vejamos a seleção abaixo:
Select codigo, nome, saldo
from conta_corrente
where saldo between 50 and 150;
E o resultado será:
CODIGO
10
20
30
60
NOME
VANESSA
NILSON
RACHEL
CHRISTIAN
SALDO
100,00
100,00
150,00
120,00
Na utilização do between o menor valor da comparação deve vir antes.
Veja a Tabela CADASTRO abaixo:
CODIGO
10
20
30
40
50
60
NOME
VANESSA
NILSON
RACHEL
CALVIN
RAINER
CHRISTIAN
ESTADO
MG
MG
MG
RS
SP
SP
CIDADE
BELO HORIZONTE
OURO PRETO
BELO HORIZONTE
PORTO ALEGRE
SAO PAULO
SAO PAULO
Operador IN:
O Operador IN pode ser um resultado de uma subquery ou resultado de valores determinados:
Usando uma subquery:
Select codigo, nome, estado, cidade
from cadastro
where cidade in (select cidade from cadastro where estado = 'MG');
E o resultado será:
CODIGO
NOME
10
VANESSA
20
NILSON
30
RACHEL
ESTADO
MG
MG
MG
CIDADE
BELO HORIZONTE
OURO PRETO
BELO HORIZONTE
Página.: 24
Solutech Informática.
Definindo valores:
Select codigo, nome, estado, cidade
from cadastro
where estado in ('MG','RS');
E o resultado será:
CODIGO
NOME
10
VANESSA
20
NILSON
30
RACHEL
40
CALVIN
ESTADO
MG
MG
MG
RS
CIDADE
BELO HORIZONTE
OURO PRETO
BELO HORIZONTE
PORTO ALEGRE
1.2 - INSERT
Objetivo: Incluir um novo registro em uma tabela do Banco de Dados.
Sintaxe:
INSERT INTO <nome-tabela> [(<nome-coluna>, [<nome-coluna>], [...])]
VALUES (<relação dos valores a serem incluídos>)
onde:
a) nome-tabela - Representa o nome da tabela onde será incluída o registro.
b) nome-coluna - Representa o nome da(s) coluna(s) que terão conteúdo no momento da operação de inclusão.
Obs.: Este comando pode ser executado de duas maneiras:
1) Quando todos os campos da tabela terão conteúdo - Neste caso não é necessário especificar as colunas, entretanto a
relação dos valores a serem incluídos deverão obedecer a mesma seqüência da definição da tabela.
2) Quando apenas parte dos campos da tabela terão conteúdo - Neste caso devem ser especificadas todas as colunas que
terão conteúdo e os valores relacionados deverão obedecer esta seqüência. Para os campos que não tem conteúdo
especificado será preenchido o valor NULL.
Insert into Cliente
values (007, “CARLOS”, ”RUA ICARAI, 890”, ” 339 1212”, ”BELO HORIZONTE”);
Você verá o resultado, fazendo um select:
Select * from Cliente;
COD
001
002
003
004
005
006
007
NOME
FABIANA
SUELI
ALESSANDRA
WAGNER
RIVA
REGINA
CARLOS
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
AV. ICARAI, 890
Página.: 25
TELEFONE
222 5534
339 1100
465 2211
211 1213
550 1133
600 2299
339 1212
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SAO PAULO
FORTALEZA
PORTO ALEGRE
BELO HORIZONTE
Solutech Informática.
1.3 - UPDATE
Objetivo: Atualiza os dados de um ou um grupo de registros em uma tabela do Banco de Dados.
Sintaxe:
UPDATE <nome-tabela>
SET <nome-coluna> = <novo conteúdo para o campo>
[<nome-coluna> = <novo conteúdo para o campo>]
WHERE <condição>
onde:
a) nome-tabela - Representa o nome da tabela cujo conteúdo será alterado.
b) nome-coluna - Representa o nome da(s) coluna(s) terão seus conteúdos alterados com o novo valor especificado.
c) condição - Representa a condição para a seleção dos registros que serão atualizados. Este seleção poderá resultar em
um ou vários registros. Neste caso a alteração irá ocorrer em todos os registros selecionados.
Update Cliente
set nome = “JOSE”;
Faça um select, e você obterá o seguinte resultado:
COD
001
002
003
004
005
006
007
NOME
JOSE
JOSE
JOSE
JOSE
JOSE
JOSE
JOSE
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
AV. ICARAI, 890
TELEFONE
222 5534
339 1100
465 2211
211 1213
550 1133
600 2299
339 1212
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SAO PAULO
FORTALEZA
PORTO ALEGRE
BELO HORIZONTE
Observe que se você não define o registro que deseja alterar, a query mudará todos os nomes para JOSE.
Para você alterar somente um registro, você deverá incluir uma condição:
Update Cliente
set nome = "JOSE" where nome = "RIVA";
Faça um select, e você obterá o seguinte resultado:
COD
001
002
003
004
005
006
007
NOME
FABIANA
SUELI
ALESSANDRA
WAGNER
JOSE
REGINA
CARLOS
ENDERECO
RUA SERGIPE, 233
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
AV. ICARAI, 890
Página.: 26
TELEFONE
222 5534
339 1100
465 2211
211 1213
550 1133
600 2299
339 1212
CIDADE
BELO HORIZONTE
BELO HORIZONTE
BELO HORIZONTE
SAO PAULO
FORTALEZA
PORTO ALEGRE
BELO HORIZONTE
Solutech Informática.
1.4 – DELETE:
Objetivo: Deletar um ou um grupo de registros em uma tabela do Banco de Dados.
Sintaxe:
DELETE FROM <nome-tabela>
WHERE <condição>
onde:
a) nome-tabela - Representa o nome da tabela cujos registros serão deletados.
b) condição - Representa a condição para a deleção dos registros. Este seleção poderá resultar em um ou vários
registros. Neste caso a operação irá ocorrer em todos os registros selecionados.
Delete from Cliente;
Se você fizer um select, verá que a sua tabela está vazia.
Caso você queira excluir um registro específico, da mesma forma que o comando update, você deverá
incluir uma condição:
Delete from Cliente
where nome = ‘FABIANA’;
Faca um select, e você obterá o seguinte resultado:
COD
002
003
004
005
006
007
NOME
SUELI
ALESSANDRA
WAGNER
JOSE
REGINA
CARLOS
ENDERECO
RUA DA BAHIA, 1234
AV. AFONSO PENA, 600
AV. PAULISTA, 200
RUA MARIANA, 428
AV. CRISTOVAO COLOMBO, 4000
AV. ICARAI, 890
Página.: 27
TELEFONE
339 1100
465 2211
211 1213
550 1133
600 2299
339 1212
CIDADE
BELO HORIZONTE
BELO HORIZONTE
SAO PAULO
FORTALEZA
PORTO ALEGRE
BELO HORIZONTE
Solutech Informática.
2 - Comandos DDL – Linguagem de Definição de Dados.
2.1 – CREATE TABLE:
Objetivo: Criar a estrutura de uma tabela(arquivo) definido as colunas (campos) e as chaves primárias e estrangeiras
existentes.
Sintaxe:
CREATE TABLE <nome-tabela>
(<nome-coluna> , <tipo-do-dado> [NOT NULL]
PRIMARY KEY (nome-coluna-chave)
FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai)
ON DELETE [RESTRICT]
[CASCADE]
onde:
a) nome-tabela - Representa o nome da tabela que será criada.
b) nome-coluna - Representa o nome da coluna que será criada. A definição das colunas de uma tabela é feita
relacionando-as uma após a outra.
c) tipo-do-dado - Cláusula que define o tipo e tamanho dos campos definidos para a tabela. Os tipos de dados mais
comuns serão definidos mais à frente.
d) NOT NULL - Exige o preenchimento do campo, ou seja, no momento da inclusão é obrigatório que possua um
conteúdo.
e) PRIMARY KEY (nome-coluna-chave) - Definir para o banco de dados a coluna que será a chave primária da tabela.
Caso ela tenha mais de um coluna como chave, elas deverão ser relacionadas entre os parênteses.
f) FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai) - Definir para o banco de dados
as colunas que são chaves estrangeiras, ou seja, os campos que são chaves primárias de outras tabelas. Na opção
REFERENCES deve ser especificado a tabela na qual a coluna é a chave primária.
g) ON DELETE - Esta opção especifica os procedimentos que devem ser feitos pelo SGBD quando houver uma
exclusão de um registro na tabela pai quando existe um registro correspondente nas tabelas filhas. As opções
disponíveis são:
g.1) RESTRICT - Opção default. Esta opção não permite a exclusão na tabela pai de um registro cuja chave primária
exista em alguma tabela filha.
g.2) CASCADE - Esta opção realiza a exclusão em todas as tabelas filhas que possua o valor da chave que será
excluída na tabela pai.
Tipos de dados mais comuns:
1) Numéricos:
- Smallint - Armazena valores numéricos, em dois bytes binários, compreendidos entre o intervalo -32768 a +32767.
- Integer - Armazena valores numéricos, em quatro bytes binários, compreendidos entre o intervalo -2147483648 a
+2147483647
- Decimal(n,m) - Armazena valores numéricos com no máximo 15 dígitos. Nesta opção deve ser definida a quantidade
de dígitos inteiros (n) e casas decimais (m) existentes no campo.
- Double Precision – Utilizado para representar valores de ponto flutuante com precisão de 15 digitos. Tem tamabho de
64 bits e consegue armazenar valores no seguinte intervalo:
2.225 x 10^-308 a 1.797 x 10^308 ( ^ : Significa “Elevado a”)
- Float - Armazena valores de ponto flutuante com precisão de 7 dígitos. Ocupa 32 bits e armazena valores no
intervalo:
1.175 x 10 ^-38 a 3.402 x 10^38
2) Alfanuméricos:
- Varchar (n) / Char(n) - Utilizado para armazenar caracteres de 1 a 32767 bytes.
3) Data e Hora:
- Date - Definir um campo que irá armazenar datas.
- Time - Definir um campo que irá armazenar de horas.
Página.: 28
Solutech Informática.
2.2 – ALTER TABLE:
Objetivo: Alterar a estrutura de uma tabela(arquivo) acrescentando, retirando e alterando nomes, formatos das colunas
e a integridade referencial definidas em uma determinada tabela.
Sintaxe:
ALTER TABLE <nome-tabela>
DROP <nome-coluna>
ADD <nome-coluna> <tipo-do-dado> [NOT NULL]
RENAME <nome-coluna> <novo-nome-coluna>
RENAME TABLE <novo-nome-tabela>
MODIFY <nome-coluna> <tipo-do-dado> [NOT NULL]
ADD PRIMARY KEY <nome-coluna>
DROP PRIMARY KEY <nome-coluna>
ADD FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai)
ON DELETE [RESTRICT]
[CASCADE]
DROP FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai)
onde:
a) nome-tabela - Representa o nome da tabela que será atualizada.
b) nome-coluna - Representa o nome da coluna que será criada.
c) tipo-do-dado - Cláusula que define o tipo e tamanho dos campos definidos para a tabela.
d) DROP <nome-coluna> - Realiza a retirada da coluna especificada na estrutura da tabela.
e) ADD <nome-coluna> <tipo-do-dado> - Realiza a inclusão da coluna especificada na estrutura da tabela. Na coluna
correspondente a este campo nos registros já existentes será preenchido o valor NULL (Nulo). A definição NOT NULL
é semelhantes à do comando CREATE TABLE.
f) RENAME <nome-coluna> <novo-nome-coluna> - Realiza a troca do nome da coluna especificada.
g) RENAME TABLE <novo-nome-tabela> - Realiza a troca do nome da tabela especificada.
h) MODIFY <nome-coluna> <tipo-do-dado> - Permite a alteração na característica da coluna especificada.
Opções:
Além das existentes na opção ADD (NOT NULL e NOT NULL WITH DEFAULT), temos a opção NULL que altera a
característica do campo passando a permitir o preenchimento com o valor Nulo.
i) ADD PRIMARY KEY <nome-coluna> - Esta opção é utilizada quando é acrescido um novo campo como chave
primária da tabela.
j) DROP PRIMARY KEY <nome-coluna> - Esta opção é utilizada quando é retirado um campo como chave primária
da tabela.
l) ADD FOREIGN KEY <nome-coluna> - Esta opção é utilizada quando é acrescido um novo campo sendo ele uma
chave estrangeira.
l) DROP FOREIGN KEY <nome-coluna> - Esta opção é utilizada quando é retirado uma chave estrangeira da estrutura
da tabela.
2.3 – DROP TABLE:
Objetivo: Deletar a estrutura e os dados existentes em uma tabela. Após a execução deste comando estarão deletados
todos dados, estrutura e índices de acessos que estejam a ela associados.
Sintaxe:
DROP TABLE <nome-tabela>
onde:
a) nome-tabela - Representa o nome da tabela que será deletada.
Página.: 29
Solutech Informática.
Banco de Dados InterBase v.6.0:
Página.: 30
Solutech Informática.
INTRODUÇÃO:
O Interbase é um sistema gerenciador de bancos de dados (SGBD). Mais especificamente, é um sistema
gerenciador de bancos de dados relacionais (SGBDR). Essa afirmação nos diz que ele incorpora conceitos subjacentes
ao modelo de dados relacional. Os sistemas de gerenciamento de bancos de dados foram concebidos para gerenciar
grandes quantidades de informação e consistem de uma coleção de dados inter-relacionados e de um conjunto de
programas adaptados para manipular esses dados.
Naturalmente, o armazenamento e recuperação de dados antecedem à existência dos sistemas gerenciadores de
bancos de dados. Entretanto, os sistemas convencionais de armazenamento e recuperação de dados, que podemos
definir como "sistemas de processamento de arquivos" apresentam um conjunto de vantagens que vão, desde
redundância e inconsistência de dados a problemas de segurança. Os sistemas gerenciadores de bancos de dados têm a
capacidade de fornecer aos usuários uma visão abstrata dos dados: ou seja, são capazes de esconder como os dados são
armazenados ou mantidos. Além dessa capacidade de abstração, os sistemas gerenciadores de banco de dados permitem
que os dados sejam recuperados de forma rápida e eficiente.
Modelo de Dados:
Para descrever a estrutura de um banco de dados, surgiram os modelos de dados, ferramentas conceituais
destinadas a descrever os dados, as suas restrições e os relacionamentos existentes entre os dados. Diversos modelos de
dados surgiram ao longo do tempo. Entre os modelos baseados em objetos, o Modelo Entidade-Relacionamento (MER)
é, sem dúvida, o mais importante e o mais utilizado. Essencialmente, o Modelo Entidade-Relacionamento enxerga o
mundo real como uma coleção de objetos básicos (entidades) e dos relacionamentos (relações) existentes entre esses
objetivos. Mais adiante, teremos a oportunidade de lidar com um Modelo Entidade-Relacionamento no qual
basearemos os nossos exercícios práticos.
Entendendo o Termo Relacional:
Todos os dados de um banco relacional são armazenados e exibidos em forma de tabelas, que são estruturas
definidas por linhas (entidades) e colunas (atributos). Há uma correspondência direta entre o conceito de tabela e o
conceito matemático de relação.
Uma linha deve distinguir-se das outras através de uma característica que a identifique de forma unívoca. Às
vezes, torna-se necessário utilizar mais de uma característica parra individualizar uma linha. A característica (coluna)
que identifica a linha recebe o nome de atributo identificador ou chave primária. Assim, uma chave primária pode
referir-se a uma coluna ou a um grupo de colunas.
Os sistemas relacionais têm a capacidade de selecionar dados de determinadas colunas, de algumas linhas e de
diversas tabelas ao mesmo tempo. Além disso, os dados obtidos de uma tabela formam uma nova tabela, de tal sorte
que essa nova tabela pode ser manipulada de forma idêntica à tabela original.
Embora as tabelas sejam os objetos essenciais dos bancos de dados, existem outros objetos igualmente
importantes como: índices, visões, sinônimos, usuários, procedimentos, funções etc.
Open Source:
O Interbase 6 é agora um produto de código-fonte aberto e pode ser utilizado gratuitamente, de acordo com as
regras estabelecidas na INTERBASE PUBLIC LICENSE. Você pode obter o Interbase 6 no site da Interbase Software
Corporation (ISC).
www.interbase.com
Página.: 31
Solutech Informática.
Plataformas:
O Interbase pode rolar em diferente plataformas, incluindo Windows 95/98/NT.
Requerimento Para Windows:
Para atuar convenientemente no ambiente Microsoft, o Interbase estabelece os seguintes requerimentos:
- Sistemas Operacionais: Windows NT 4.0 com Service Pack 5, Windows 95 com Service Pack 1 ou Windows 98;
- Memória: Mínimo de 16 megabytes, recomendando-se 64 para servidores;
- Processadores: 486 DX2 com 66 MHz no mínimo; Pentium 100 MHz, ou superior, para servidores multiclientes;
- Compiladores: Microsoft Visual C++ 4.2 ou Borland C++ Builder 3.0.
Sobre os Recursos:
Suporte SQL:
O InterBase enquadra-se nos requerimentos do padrão SQL-92, suportando integridade referencial declarativa
com operações em cascata, atualização de visões e junções externas. Servidores InterBase disponibilizam bibliotecas
que suportam o desenvolvimento de aplicações com instruções SQL embutidas e aplicações com instruções SQL
dinâmicas (DSQL).
Acesso Multiusuário:
O InterBase permite que várias aplicações-clientes tenham acesso simultâneo a um mesmo banco de dados. As
aplicações também podem ter acesso a vários bancos de dados ao mesmo tempo. Gatilhos podem ser disparados para
notificar as aplicações-cliente sobre eventos ocorridos no banco de dados como inclusão e exclusão de dados.
Gerenciamento de Transações:
O servidor InterBase está estruturado em um modelo de transação. As transações permitem que instruções
enviadas ao banco de dados ocorram em blocos com a característica especial de "tudo ou nada". Significa dizer que um
conjunto de instruções pode ser tratado como uma única instrução, com possibilidade de ser executada completamente
(sucesso) ou de não ser executada (insucesso).
O gerenciamento de transações do InterBase habilita aplicações-clientes a iniciarem múltiplas transações
simultâneas. Há um completo e explícito controle sobre as transações apresentadas ao servidor. As transações podem
ser isoladas de modo a não serem afetadas por alterações realizadas por transações concorrentes.
Arquitetura MultiGeracional:
O InterBase oferece uma arquitetura multigeracional, ou seja, o servidor armazena múltiplas versões de cada
registro, quando necessário, de forma que as transações sempre tenham uma visão consistente dos dados.
Criando novas versões de um registro, o InterBase permite que todos os clientes (usuários) possam ler aquele
registro, mesmo que um outro usuário o esteja atualizando naquele exato momento.
Página.: 32
Solutech Informática.
Nível de Bloqueio:
Sistemas multiusuários estão sujeitos ao que chamamos de concorrência. Eventualmente, vários usuários
tentarão atualizar as mesmas informações ao mesmo tempo. Comumente, duas estratégias são utilizadas para lidar com
o acesso concorrente aos mesmos dados. Uma delas, denominada de bloqueio pessimista é utilizada por bancos locais,
como o Paradox, por exemplo; a outra, implementada pela maioria dos servidores SQL, é o que chamamos de bloqueio
otimista.
Dialetos:
Se você conhece versões anteriores do InterBase, é importante anotar que o InterBase 6 introduz o conceito de
dialetos. Esse dialetos permitem que você utilize as novas características do banco ou permaneça com as características
antigas, por questões de compatibilidade.
O Dialeto (Dialect 1) garante compatibilidade com bases de dados criadas com versões anteriores. O Dialeto
(Dialect 2) é apenas um modo de diagnóstico e provavelmente você não vai precisar utilizá-lo. Por fim, O dialeto 3
(Dialect 3) permite acesso total às novas características do banco.
O InterBase Server:
Como o nome sugere, o InterBase Server é o servidor InterBase.
O InterBase Guardian:
Como usuário, dificilmente você terá que interagir diretamente com o InterBase Guardian. Você pode
enxergá-lo como um "processo invisível", cuja finalidade é tentar manter ativo o InterBase Server quando este é
submetido a interrupções anormais em seu funcionamento.
No Windows NT, algumas características estão disponíveis para o InterBase Guardian:
Pode ser iniciado automaticamente, como um serviço (padrão);
Pode ser iniciado manualmente, como um serviço;
Pode ser desabilitado e, nesse caso, o servidor pode rodar como um serviço (ou aplicação), iniciando automática ou
manualmente.
No Windows 95/98, as características disponíveis são semelhantes:
Pode ser iniciado automaticamente, como uma aplicação (padrão);
Pode ser iniciado manualmente, como uma aplicação;
Pode ser desabilitado e, nesse caso, o servidor pode rodar de forma independente como uma aplicação, iniciada
automática ou manualmente.
Página.: 33
Solutech Informática.
A Ferramenta IBConsole:
A IBConsole, prioritariamente, nos habilita a:
Administrar a segurança do servidor;
Fazer backup de bancos de dados e restaurar backups;
Analisar estatísticas sobre servidores e bancos de dados;
Verificar a integridade dos bancos de dados.
Há cinco elementos na composição da janela da IBConsole: uma barra de menus e uma barra de ferramentas
(na parte superior), uma janela de visualização (em árvore) dos servidores, bancos de dados (à esquerda), uma janela
de trabalho (à direita) e uma barra de estado (na parte inferior).
A interface da IBConsole não oferece dificuldades de compreensão. Vamos fazer uma síntese das opções existentes na
barra de menus.
Menu Console
Permite sair da ferramenta.
Menu View
Permite configurar a forma de visualização dos dados.
Menu Server
Permite registrar (desabilitar) servidores, estabelecer conexões com servidores, diagnosticar conexões, gerenciar
usuários, adicionar e remover certificados e visualizar arquivos de log e as propriedades dos servidores.
Menu Database
Permite registrar (desabilitar) bancos de dados, estabelecer conexões com bancos de dados, criar e destruir bancos de
dados, realizar tarefas de manutenção(cópias de segurança, restauração etc.), visualizar e recuperar metadados,
visualizar usuários conectados e as propriedades dos bancos de dados.
Menu Tools
Permite configurar ferramentas de trabalho e executar a ferramenta Interactive SQL.
Menu Windows
Permite visualizar as janelas abertas pela IBConsole e a alternância entre elas.
Menu Help
Permite acesso a arquivos de ajuda da IBConsole e do servidor InterBase.
Ao comentarmos as opções do menu Tools, citamos a ferramenta Interactive SQL. Essa ferramenta terá uma
importância fundamental no decorrer desta apostila, posto que será utilizada exaustivamente para digitarmos os
comandos Sql para criação e manutenção das tabelas.
Você tem uma visão da interface Interactive SQL. Há cinco áreas vistas de cima para baixo: 1- uma barra de menus, 2uma barra de ferramentas, 3- área de comandos, 4- uma área de resultados e 5- uma barra de estado.
A área de comandos torna-se a mais importante, uma vez que nela podemos escrever instruções SQL, digitando
diretamente, ou submeter roteiros (scripts) com instruções SQL.
Página.: 34
Solutech Informática.
O Administrador do InterBase:
Como toda grande estrutura, o InterBase possui um administrador central: um usuário com poderes ilimitados,
capaz de realizar todas as tarefas disponíveis no banco. A identificação e a senha desse ser supremo é:
SYSDBA (identificação)
masterkey (senha, com letras minúsculas)
Somente o administrador do sistema - ou um usuário a quem foram delegados os mesmos poderes do
administrador - pode realizar todas as operações possíveis no InterBase. Para os propósitos atuais, vamos utilizar a
senha padrão "masterkey", que é de domínio público. Se você utilizar o InterBase em aplicações profissionais,
naturalmente utilizará uma senha mais apropriada.
O Banco de Dados EMPLOYEE.GDB:
Registrar servidores de bancos de dados é primeira atitude a tomar se deseja utilizar a ferramenta Ibconsole.
Como o banco de dados de exemplo EMPLOYEE.GDB será utilizado em nossos exemplos, vamos registrá-lo no
servidor local.
Se você der dois cliques no ícone "Local Server", na área à esquerda, ou na ação "Login", na área à direita,
será convidado a se identificar para o servidor.
Após fornecer a senha do administrador ("masterkey"), acione a opção de menu DataBase Register. Você
deverá fornecer as informações necessárias: o caminho completo do banco e o apelido do banco (EMPLOYEE.GDB).
Quando terminar o registro do banco, você o terá disponível para conexão. A conexão pode ser feita tanto no
lado esquerdo quanto no direito (ação "Connect").
Finalmente, se você fizer a conexão correta com o banco, você pode visualizar todos os seus objetos, e realizar
diversas ações sobre eles. Estamos prontos agora para levar adiante a tarefa de compreender melhor o servidor
InterBase.
No lado direito da IBConsole, você pode localizar a ação View Metadata (Visualizar metadados). Sugerimos
que você execute essa ação e guarde o resultado em um arquivo chamado, por exemplo, employee.sql. Se quiser,
imprima o arquivo. No decorrer dos próximos capítulos, sempre vamos nos referir a informações constantes no
arquivo. Ter o arquivo impresso vai auxiliá-lo a identificar de onde as informações foram extraídas. Entretanto, saiba
que a listagem do arquivo é razoavelmente longa.
CRIANDO BANCOS DE DADOS
Introdução:
Um banco de dados InterBase é uma coleção de objetos que armazenam e manipulam dados. Diferentemente
de bancos convencionais, como o Paradox, por exemplo, um banco de dados InterBase apresenta-se como um único
arquivo. Os objetos neles contidos como: tabelas, índices, visões, domínios etc., não são "visíveis a olho nu". Para
enxergá-los, é necessário utilizar elementos de recuperação e visualização adequados. A ferramenta IBConsole, por
exemplo, permite que tenhamos uma visão geral dos servidores e dos objetos dos bancos de dados InterBase.
Servidor é o local onde os dados são armazenados e disponíveis. Há servidores locais e servidores remotos:
estes últimos são os mais utilizados atualmente, embora servidores locais tenham o seu lugar de destaque na maioria
das corporações. Na verdade, servidores locais e servidores remotos têm uma convivência pacífica, realizando missões
específicas nas empresas.
Página.: 35
Solutech Informática.
Criar um banco de dados não é uma tarefa meramente física. Há toda uma estrutura lógica envolvida no
processo. Um banco de dados deve ser desenhado para guardar de forma coerente e precisa as informações necessárias
aos negócios dos usuários. Os detalhes do negócio precisam estar sintonizados com as definições contidas nos objetivos
do banco. Esses objetos "modelam" a realidade do usuário.
Nomeando Arquivos e Objetos:
Os nomes de bancos de dados no InterBase assumem a extensão gdb. Isso não é uma exigência e você pode utilizar-se
de extensões que lhe pareçam mais oportunas.
Como o servidor InterBase roda em diversas plataformas, uma boa prática seria nomear os bancos de dados
com o modelo padrão "8 ponto 3" (oito caracteres para o nome do arquivo e três caracteres para a extensão), como
propõe o exemplo:
employee.gdb
As regras para nomear os objetos do Interbase são:
Podem ser usados os caracteres A...Z, a...z, 0...9, cifrão ($) e sublinhado (_);
Os nomes devem começar com um caractere alfabético: A ...Z ou a ...z;
Os nomes em geral limitam-se a 31 caracteres. Nomes de restrições limitam-se a 27 caracteres. Nomes de eventos
devem ter no máximo 15 caracteres.
Entendendoa Criação do Banco de Dados EMPLOYEE.GDB
A instrução SQL CREATE DATABASE nos possibilita criar bancos de dados. Com relação ao banco de
dados EMPLOYEE.GDB.
Alterações relativas a banco de dados são realizadas com a instrução ALTER DATABASE. Eliminar banco de
dados, exige a instrução DROP DATABASE.
Tipo de Dados:
Antes que você possa criar um domínio, deve conhecer os tipos de dados que um banco de dados oferece. O
InterBase suporta os tipos de dados que vamos descrever a seguir:
BLOB (BINARY LARGE OBJECT)
De tamanho variável, permite armazenar diversos tipos de dados como: gráficos, textos e vozes digitalizadas.
Uma variável desse tipo de dado é armazenada e recuperada em segmentos limitados a 64K. Quando se define uma
coluna baseada nesse tipo de dado, deve-se indicar o subtipo desejado. Há sete subtipos (de 0 a 6), como mostramos a
seguir. Os subtipos 0 e 1 são os mais utilizados:
Subtipos:
0 - Dados binários ou de tipo indeterminado
1 - Texto
2 - Representação Binária de Linguagem
3 - Lista de Controle de Acesso
4 - Reservado para uso no futuro
5 - Descrição de metadados da tabela corrente
6 - Descrição de transações que terminam de forma irregular
Página.: 36
Solutech Informática.
CHAR(N), CHARACTER(N)
Utilizado para armazenar caracteres de 1 a 32767 bytes. Colunas definidas para esse tipo de dado têm tamanho
fixo definido por n.
DATE
Com tamanho de 64 bits, esse tipo de dado consegue armazenar datas no intervalo:
01/01/100 A . D. a 29/02/32768 A.D.
DECIMAL(PRECISÃO, ESCALA)
Tem tamanho variável (16, 32 ou 64 bits) e armazena números decimais. A precisão vai de 1 a 18 (pelo
menos) e a escala vai de 0 a 18. Uma coluna definida como DECIMAL(10,3), por exemplo, teria o seguinte formato:
PPPPPPP.EEE
DOUBLE PRECISION
Utilizado para representar valores de ponto flutuante com precisão de 15 dígitos. Tem tamanho de 64 bits e
consegue armazenar valores no seguinte intervalo:
2.2225 x 10^-308 a 1.797 x 10^308 (^significa "elevado a")
FLOAT
Representa valores de ponto flutuante com precisão de 7 dígitos. Ocupa 32 bits e armazena valores no
intervalo:
1.175 x 10^-38 a 3.402 x 10^38 (^significa "elevado a")
INTEGER
Implementando com tamanho de 32 bits, representa valores inteiros na faixa:
-2,147,483,648 a 2,147,483,647
NUMERIC(PRECISÃO, ESCALA)
Pode Ter tamanho variável ou16, 32 e 64 bits. Armazena números decimais com precisão entre 1 e 18
(exatamente) e a escala entre 0 e 18. Compare esse tipo de dado com DECIMAL e veja que existe diferença no
conceito de precisão. Uma coluna definida como NUMERIC(10,3), por exemplo, teria seguinte formato:
PPPPPPP.EEE
SMALLINT
Implementando com tamanho de 16 bits, armazena inteiros no intervalo:
-32,768 a 32,767
TIME
Esse tipo de dado tem tamanho de 64 bits, armazena valores de tempo na faixa:
0:00 AM a 23:59:9999 PM
Página.: 37
Solutech Informática.
TIMESTAMP
Inclui informações de data (date) e tempo (time). Com tamanho de 64 bits, guarda valores no intervalo:
01/01/100 A . D. a 29/02/32768 A . D.
VARCHAR(N), CHAR VARYNG(N), CHARACTER VARYNG(N)
Utilizado para armazenar caracteres de 1 a 32767 bytes. Colunas definidas para esse tipo de dado têm tamanho
variável definido por n.
Observações Sobre DATE, TIME e TIMESTANP:
Nas versões anteriores do InterBase, o tipo de dado DATE continha informações sobre data e tempo. Esse tipo
de dado foi substituídos pelos tipos DATE, TIME e TIMESTAMP ou Dialeto 3.
No Dialeto 1, apenas TIMESTAMP está disponível, o que significa dizer que esse tipo eqüivale ao tipo DATE
das versões anteriores. Quando restaura backups de bancos de dados, construídos com versões antigas, para bancos de
dados implementados com a versão 6, todas as colunas e domínios com o tipo DATE são automaticamente traduzidos
para TIMESTAMP.
Portanto, nos Dialetos 1 e 3, os tipos TIMESTAMP são equivalentes. No Dialeto 3, porém, você pode contar
com os novos tipos DATE e TIME.
Os operadores funcionais CURRENT_DATE, CURRENT_TIME e CURRENT_TIMESTAMP retornam
valores de data e tempo coerentes com as configurações atuais do sistema operacional, sem que seja necessário fazer
conversões do tipo (CAST) sobre os operadores TODAY e NOW.
Criando Tabelas:
Introdução:
Neste capítulo, vamos investigar como as entidades e os relacionamentos são criados fisicamente no InterBase.
Basicamente, estudaremos detalhadamente as instruções SQL utilizadas para criar as tabelas.
As tabelas são os objetos básicos (as estrelas) de um banco de dados e servem ao propósito de guardar os
dados relevantes para o negócio. As instruções SQL utilizadas na definição de tabelas são CREATE TABLE (para
criar), ALTER TABLE (para alterar) e DROP TABLE (para eliminar). Vamos ver como foram criadas ou alteradas as
tabelas do banco EMPLOYEE.GDB.
AS TABELAS DO BANCO EMPLOYEE.GDB
A TABELA COUNTRY (PAÍS)
/* Table: COUNTRY, Owner BUILDER */
CREATE TABLE COUNTRY (
COUNTRY
VARCHAR (15) NOT NULL,
CURRENC
VARCHAR (10) NOT NULL,
PRIMARY KEY (COUNTRY)
);
Página.: 38
Solutech Informática.
A criação da tabela COUNTRY é bastante simples. Apenas dois atributos, COUNTRY (País) e CURRENCY
(Moeda), são definidos para a tabela. A chave primária (PRIMARY KEY) está baseada na coluna COUNTRY.
Observe que os dois atributos da tabela estão definidos como "NOT NULL". Significa dizer que esses
atributos sempre deverão apresentar um valor qualquer em determinado instante. Em linguagem mais simples, as
colunas nunca poderão estar "vazias".
O InterBase sempre cria um índice para a coluna ou colunas definidas como chave primária. Sempre que uma
coluna fizer parte da chave primária, ela deve ser definida como NOT NULL ou o InterBase rejeitará a instrução com
uma mensagem de erro.
Embora o InterBase aceite que você defina um índice secundário em uma coluna definida como NULL, evite
utilizar essa prática. Qualquer coluna que faça parte de um índice, seja ele primário ou secundário, deve ser definida
como NOT NULL. O InterBase não reconhece a condição NULL para uma coluna. Assim, para definir uma coluna
como NULL, basta não declarar nada. Imagine que você quisesse definir a coluna CURRENCY como NULL. A
instrução correta seria:
CREATE TABLE COUNTRY(
COUNTRY
CURRENCY
PRIMARY KEY (COUNTRY)
);
VARCHAR(15) NOT NULL,
VARCHAR(10),
A TABELA CUSTOMER (CLIENTE)
/* Table:CUSTOMER, Owner BUILDER */
CREATE TABLE CUSTOMER (
CUST_NO
INTEGER NOT NULL,
CUSTOMER
VARCHAR(25) NOT NULL,
CONTACT_FIRST
VARCHAR(15),
CONTACT_LAST
VARCHAR(20),
PHONE_NO
VARCHAR(20),
ADDRESS_LINE1
VARCHAR(15),
ADDRESS_LINE2
VARCHAR(15),
CITY
VARCHAR(25),
STATE_PROVINCE
VARCHAR(15),
COUNTRY
VARCHAR(15),
POSTAL_CODE
VARCHAR(12),
ON_HOLD
CHAR(1) DEFAULT NULL,
PRIMARY KEY (CUST_NO)
);
ALTER TABLE CUSTOMER ADD FOREIGN KEY (COUNTRY) PREFERENCES COUNTRY
(COUNTRY);
Observe que a definição da coluna ON_HOLD apresenta a cláusula DEFAULT. Esta cláusula é utilizada
quando desejamos que o banco de dados crie um valor padrão quando um valor não for explicitamente definido para
uma coluna. No caso específico, a coluna ON_HOLD receberá o valor NULL se nenhum valor a ela for atribuído.
Claro que você poderia definir um valor diferente de NULL, como "S" ou "N", por exemplo.
Veja que há uma instrução de alteração de tabela (ALTER TABLE). Essa instrução cria uma integridade
referencial para a coluna COUNTRY. De acordo com a instrução, a coluna COUNTRY da tabela CUSTOMER é uma
chave estrangeira (FOREIGN KEY), ou seja, um ponteiro para a coluna COUNTRY da tabela COUNTRY. Assim,
qualquer valor atribuído para a coluna COUNTRY, em CUSTOMER, deverá ser um valor existente na coluna
COUNTRY da tabela COUNTRY.
Página.: 39
Solutech Informática.
TABELA EMPLOYEE (EMPREGADO)
/* Table: EMPLOYEE, Owner BUILDER */
CREATE TABLE EMPLOYEE (
EMP_NO
SMALLINT NOT NULL,
FIRST_NAME
VARCHAR(15)
LAST_NAME
VARCHAR(20)
PHONE_EXT
VARCHAR (4),
HIRE_DATE
TIMESTAMP DEFAULT 'NOW' NOT NULL,
DEPT_NO
CHAR(3) NOT NULL,
JOB_CODE
VARCHAR(05) NOT NULL,
JOB_GRADE
SMALLINT NOT NULL,
JOB_COUNTRY
VARCHAR(15),
SALARY
NUMERIC(15,2) NOT NULL,
FULL_NAME
COMPUTED BY (last_name | | ', ' | | fist_name),
PRIMARY KEY (EMP_NO),
FOREIGN KEY (DEPT_NO) REFERENCES DEPARTMENT(DEPT_NO);
);
Duas coisas interessantes na criação da tabela EMPLOYEE. Veja que a coluna HIRE_DATE foi definida com
o valor padrão "NOW". Assim, quando uma data não for atribuída à coluna, ela receberá a data corrente (obtida no
sistema operacional). Por sua vez, a coluna FULL_NAME é definida com um valor calculado (COMPUTED BY). De
acordo com a definição da coluna, ela sempre receberá uma combinação de valores atribuídos às colunas
LAST_NAME e FIRST_NAME. O símbolo | | indica concatenação.
Você pode enxergar
FULL_NAME COMPUTED BY (last_name || ‘,’ || first_name)
como
FULL_NAME := last_name + ‘,’ + first_name
Se os valores das colunas FIRST_NAME e LAST_NAME fossem, respectivamente “Ivan” e “Mecenas”, o valor
atribuído à FULL_NAME seria: “Mecenas, Ivan”
A TABELA EMPLOYEE_PROJECT (EMPREGADO-PROJETO)
/* Table: EMPLOYEE_PROJECT, Owner BUILDER */
CREATE TABLE EMPLOYEE_PROJECT (
EMP_NO
SMALLINT NOT NULL,
PROJ_ID
CHAR(5) NOT NULL,
PRIMARY KEY (EMP_NO, PROJ_ID)
);
ALTER TABLE EMPLOYEE_PROJECT ADD FOREIGN KEY (EMP_NO)
REFERENCES EMPLOYEE (EMP_NO);
ALTER TABLE EMPLOYEE_PROJECT ADD FOREIGN KEY (PROJ_ID)
REFERENCES PROJECT (PROJ_ID);
A tabela EMPLOYEE_PROJECT existe para resolver o relacionamento muitos para muitos (N:N) existente
entre as tabelas EMPLOYEE e PROJECT. Perceba que os dois atributos da tabela são ponteiros (chaves estrangeiras)
para as tabelas primitivas. A tabela EMPLOYEE_PROJECT representa um tipo de entidade conhecida como "entidade
associativa".
Página.: 40
Solutech Informática.
TABELA PROJECT (PROJETO)
/* Table: PROJECT, Owner BUILDER */
CREATE TABLE PROJECT (
PROJ_ID
CHAR(5) NOT NULL,
PROJ_NAME
VARCHAR(20) NOT NULL,
PROJ_DESC
BLOB SUB_TYPE 1 SEGMENT SIZE 800,
TEAM_LEADER
SMALLINT NOT NULL,
PRODUCT
VARCHAR(12),
UNIQUE(PROJ_NAME),
PRIMARY KEY (PROJ_ID)
);
ALTER TABLE PROJECT ADD FOREIGN KEY (TEAM_LEADER) REFERENCES EMPLOYEE
(EMP_NO);
Abordando Índices:
Índices são mecanismos utilizados para recuperar registros de forma mais rápida, em resposta a certas
condições de pesquisa.
Em linhas mais amplas, índices são tabelas especiais que guardam informações que funcionam como ponteiros
para localização das linhas de uma tabela.
Índices não são objetos relevantes para a definição de bancos de dados. Contudo, não podemos evitar que
sejam utilizados. Mesmo que você não defina índices explicitamente, o banco de dados criará os índices de que
necessita
Podemos criar um índice para uma coluna apenas (índice simples) ou para um grupo de colunas (índice
composto). Índices criados com a condição UNIQUE garante que na coluna (ou colunas) indexada não haverá linhas
duplicadas.
Índices são úteis para recuperação rápida de dados, mas não devem ser criados de forma abusiva, sem uma
análise criteriosa. Além de consumirem espaço em disco, torna as operações de inclusão, alteração ou exclusão mais
lentas; em muitos casos, muito mais lentas. A razão disso é que, cada vez que os dados referentes a colunas indexadas
são alterados, os índices são também atualizados.
Os índices podem ser criados diretamente, através do comando CREATE INDEX, ou criados automaticamente
pelo sistema como parte da instrução CREATE TABLE. O InterBase cria índices automaticamente em colunas
definidas com as restrições PRIMARY KEY (Chave primária), FOREIGN KEY (Chave estrangeira) e UNIQUE
(Único). Os índices criados sobre as restrições PRIMARY KEY e FOREIGN KEY preservam a integridade referencial
dos bancos de dados.
O InterBase permite que sejam criados até 64 índices por tabela. A sintaxe da instrução CREATE INDEX é
dada abaixo:
create [unique] [ascending] [descending]
index on <tabela> (<coluna1>, ..., <coluna n>)
As palavras ascending e descending podem ser abreviadas para asc e desc.
Índices podem ser alterados pela instrução ALTER INDEX e destruídos pela instrução DROP INDEX.
Página.: 41
Solutech Informática.
Operações de Manutenção:
Introdução:
Neste capítulo vamos abordar aspectos fundamentais ligados a manutenção de bancos de dados: cópias de
segurança (backup) e restauração de dados (restore). Há inúmeras tarefas de manutenção realizáveis em bancos de
dados que não vamos tratar aqui. Essas tarefas incluem, por exemplo, manutenção de tabelas, manutenção de índices,
manutenção de procedimentos, manutenção de gatilhos etc. Essas operações dizem respeito mais ao dia-a-dia de
Administradores de Bancos de Dados (DBA) e não de desenvolvedores.
Cópias de segurança e restauração, entretanto, têm lugar destacado entre as tarefas de manutenção de bancos
de dados e interessam de perto a todos os profissionais que lidam com eles.
Profissionais de informática, ou usuários comuns, estão acostumados a fazer cópias de segurança dos seus
arquivos. O nome é incisivo: "segurança". Quando fazemos backup estamos contando com a possibilidade de que os
dados originais sofram panes muitas das vezes irreparáveis.
Um backup, como você sabe, nada mais é do que a cópia de um arquivo guardada como segurança em disco
rígido ou outro meio de armazenamento. Normalmente não é uma boa medida fazer cópias de segurança no mesmo
disco em que se encontram os arquivos originais.
Os sistemas operacionais oferecem facilidades para a realização de backups. Na verdade, você poderia
simplesmente fazer uma cópia do seu banco de dados no seu diretório A para o diretório B. O InterBase, entretanto,
oferece algumas vantagens quando você se utiliza de suas próprias ferramentas de cópia e restauração de dados.
Mostrar esses processos e as vantagens associadas é o objetivo dos tópicos que veremos adiante.
Backup e Restore no InterBase:
Quando você realiza backup e restore com as ferramentas supridas pelo InterBase, algumas vantagens estão
incluídas. Entre outras você pode:
- Melhorar o desempenho do banco de dados, excluindo versões antigas de registros e balancear (equilibrar) arquivos
de índice;
- Reduzir o tamanho do banco de dados, ao recuperar espaços perdidos por registros excluídos e compactar os dados
remanescentes;
- Realizar mudanças na estrutura do banco de dados, como aumentar ou diminuir o tamanho das páginas de dados;
- Criar cópias independentes de plataforma.
REALIZANDO BACKUP:
A operação de backup pode ser realizada enquanto outros usuários estão tendo acesso ao banco de dados.
Entretanto, esteja ciente que quaisquer alterações realizadas pelos usuários após o início do backup não serão
registradas, isto é, não serão salvas. Portanto, não poderão ser recuperadas.
Via de regra, operações de backup devem ser feitas sem haver a concorrência de usuários. Contudo, nem
sempre essa decisão pode ser tomada facilmente, e muitas cópias de segurança são realizadas sem a completeza dos
dados. Isso não é nada de desastroso. Afinal, imediatamente após a realização de um backup, novas alterações são
introduzidas pelos usuários. Dificilmente teremos cópias que sejam imagens perfeitas da situação atual do banco de
dados.
A frequência com que operações de backup se efetivem depende muito das regras de negócio e do
comportamento do banco de dados. Como regra básica, siga a seguinte: se o banco de dados é alterado freqüentemente,
faça cópias de segurança freqüentemente.
Página.: 42
Solutech Informática.
Uma das coisa que você vai notar com relação aos arquivos de backup realizados pelo InterBase, é que eles
ocupam muito menos espaço que os arquivos originais. Arquivos de backup, por exemplo, não incluem arquivos de
índice, apenas suas definições. Os arquivos de índice são recriados quando você realiza a operação inversa: restauração
dos dados (restore).
Vamos utilizar a ferramenta IBConsole para realizar uma cópia de segurança do banco de dados de exemplo
EMPLOYEE.GDB.
Na operação de backup, algumas informações devem ser fornecidas e um conjunto de opções é oferecido.
Quanto às informações, o nosso teste de backup utilizará as seguintes:
Database
Server = Local Server
Alias = employee.gdb
Backup File(s)
Server = Local Server
Alias = employee_2000_08_28
Filename(s)
C:\temp\employee.gbk
Size (bytes) = 2048
A informação Database indica o servidor e o banco de dados que sofrerão a ação. A informação Backup File(s)
fornece o nome do servidor e o apelido do arquivo de backup. Se o apelido não existir ele será criado pelo processo.
Demos o apelido employee_2000_08_28 ao arquivo de backup para indicar que se trata de uma cópia do dia
28/08/2000.
A informação Filename(s) indica o nome do arquivo de backup e o tamanho da página de dados. O arquivo
employee.gbk, portanto, será criado no diretório c:\temp e, posteriormente, poderá ser referenciado pelo apelido
(employee_2000_08_28). Imaginamos que você tem um diretório c:\temp em sua máquina. Utilizamos a extensão
padrão (gbk) para arquivos de backup do InterBase; isso não é obrigatório.
Para criar o backup clique na opção do menu “DataBase\Maintenance\Backup/Restore\Backup”
Observe a caixa de diálogo Database Backup. No lado esquerdo da caixa, estão as informações a que nos
referimos anteriormente. No lado direito as opções que vamos comentar em seguida.
Há sete opções disponíveis na caixa de diálogo Database Backup:
Vamos Comentar as mais importantes:
Format
Transportable ou Non-transportable
Escolhemos a opção transportable. Com isso, poderemos recuperar o backup feito em uma plataforma
Windows, por exemplo, para uma plataforma Unix.
Metadata Only
True ou False
Escolhemos a opção False (falso). A opção True (verdadeiro) faria backup apenas dos metadados do banco.
Com a opção False, todo o conteúdo do banco será salvo. A opção True é muito utilizada quando se quer guardar
apenas uma cópia dos metadados do banco. Esta cópia permite recriar um banco de dados idêntico, porém vazio. Em
muitas situações na vida profissional você precisará fazer isso.
Página.: 43
Solutech Informática.
Garbage Collection
True ou False
Escolhemos a opção True. Assim serão descartadas todas as versões obsoletas de registros, otimizando o
tamanho do banco de dados. Você pode entender Garbage Collection como "sobras de registros". A opção False pode
ser utilizada nos casos em que você precisar de uma cópia idêntica do banco.
Transaction in Limbo
Process ou Ignore
Escolhemos a opção Process. Esta opção manterá as transações pendentes na cópia de segurança. Com a
opção Ignore, todas as transações pendentes seriam descartadas. Transações pendentes derivam de falhas no processo
two-phase commit (commit em duas fases). A opção Ignore, portanto, sempre considera a versão mais recente dos
registros.
Checksums
Process ou Ignore
Escolhemos a opção Process, para que o processo de backup analise, página a página, a integridade dos dados.
Convert to Tables
True ou False
Escolhemos a opção False, isto é não haverá conversão de arquivos externos em tabelas internas. A opção
True faria a conversão.
Verbose Output
None, To Screen ou To File
Escolhemos a opção To Screen, para usar a tela como saída (passo a passo) do andamento do processo. Essa
opção torna a operação mais lenta, mas nos permite ver o que está acontecendo. Com a opção To File, poderíamos
direcionar o resultado do processo para um arquivo qualquer. A opção None inibe o monitoramento da operação.
Quando você seleciona o botão OK da caixa de diálogo Database Backup, com a opção Verbose Output
assinalada para To Screen, você poderá acompanhar todo o processo na tela do seu computador. Ao terminar a
operação, uma mensagem lhe dirá que o backup foi concluído e você terá disponíveis todas as informações do
processo.
Vimos que uma operação de backup necessita de um conjunto de opções. Embora algumas dessas opções
possam parecer supérfluas, esteja certo de que elas poderão ser extremamente necessárias em situações reais
relacionadas com banco de dados. As opções que selecionamos são, possivelmente, as que você mais utilizará no seu
dia-a-dia. Não se esqueça, portanto, de avaliar cada situação de backup para decidir sobre as opções a serem
assinaladas.
REALIZANDO RESTORE:
Cópias de segurança existem para, se for o caso, serem recuperadas. Nem sempre uma cópia de segurança tem
de ser restaurada por problemas existentes nos dados originais. Operações de restauração são de modo freqüente
utilizadas para “enxugar” o banco de dados ou balancear índices.
Vamos realizar uma operação de restauração de dados com base no arquivo enployee.gbk visto no tópico
precedente.
Para executar o restore, clique na opção do menu “DataBase\Maintenance\Backup/Restore\Restore”
Página.: 44
Solutech Informática.
Quando fizemos a operação de backup, criamos o alias employee_2000_08_28 para a cópia do banco de dados
gravada com o nome “c:\temp\employee.gbk”
O alias torna mais rápido o processo de fornecer as informações necessárias à restauração dos dados.
Na opção Alias, selecionamos o Alias employee_2000_08_28 e as informações relativas ao arquivo se
tornarão disponíveis no lado esquerdo da caixa de diálogo DataBase Restore. Vamos então comentar as opções
existentes no lado direito da caixa de diálogo.
Há oito opções disponíveis para a operação de Restore.
Vamos Comentar as mais importantes:
Overwrite
True ou False
Escolhemos True, par que a operação sobrescreva o arquivo de banco de dados existente. Essa opção não deve
ser utilizada quando usuários estiverem usando o banco de dados. Devemos Ter muito cuidado na escolha dessa opção.
Commit After Each Table
True ou False
Escolhemos False. Com essa opção os metadadis são inteiramente recuperados e, em seguida, os dados são
restaurados. A opção True obrigaria o InterBase a recuperar os metadados e os dados de cada tabela e confirmar a
operação (commit) tabela por tabela.
Deactive Indexes
True ou False
Escolhemos False. Desta forma, os arquivos de índices serão recriados ao fim do processo de recuperação dos
dados. A opção True normalmente é utilizada quando há suspeita de que os dados estão inconsistentes (valores
duplicados em colunas índices).
Verbose Output
None, To Screen ou To File
Escolhemos a opção To Screen, para usar a tela como saída (passo a passo) do andamento do processo. Essa
opção torna a operação mais lenta, mas nos permite ver o que está acontecendo. Com a opção To File, poderíamos
direcionar o resultado do processo para um arquivo qualquer. A opção None inibe o monitoramento da operação.
Gerenciando Usuários:
Introdução:
Quando a instalação do Interbase é completa, um bando de dados de segurança, denominado isc4.gdb, é
disponibilizado no diretório padrão “C:\Arquivos de programas\Borland\Interbase”. Para que se possa utilizar um
servidor InterBase, cada indivíduo (usuário) deve apresentar um registro no bando de dados de segurança com seus
dados de cadastrais.
O Nome do usuário (User Name) deve ter um máximo de 31 caracteres. A senha (Password) tem um limite de
32 caracteres. Fique atento ao foto de que a senha é um dado case-sensitive (letras maiúsculas são diferentes de letras
minúsculas), o que não acontece com o nome do usuário.
Embora a senha possa ter até 32 caracteres, apenas os oito primeiros são significativos (considerados pelo
servidor). Nas conexões via Rede, a senha sofre um adequado processo de criptografia no momento da transição.
Página.: 45
Solutech Informática.
Criando Visões:
Introdução:
Uma visão é uma tabela virtual: uma tabela resultante de uma consulta efetuada sobre uma ou mais tabelas.
Uma vez definidas, as visões podem receber o mesmo tratamento dado a tabelas normais. Um ponto inicial a
considerar envolve a compreensão de que uma visão não replica dados, ou seja, não gera uma cópia dos dados
armazenados em outras tabelas. Quando os dados das tabelas primárias são atualizados, as visões automaticamente
refletem as mudanças.
Formas de Criação de Visões:
Uma visão pode ser criada de diversas maneiras como você verá a partir das informações que daremos a
seguir. Você notará que utilizaremos duas importantes cláusulas para criar visões: CREATE VIEW e SELECT.
Considere a Tabela :
CARGO
Cod_Cargo
Nome_Cargo
Minimo_Salario
Maximo_Salario
Lingua_requerida
1 - Você poderia criar a visão baseada num grupo específico de colunas, como mostra a instrução abaixo:
Create View Limite_Salario as
Select Cod_Salario, Minimo_Salario, Maximo_Salario
From CARGO
Como se percebe, a visão Limite_Salario recebeu um numero reduzido de colunas. Três para sermos exatos:
Cod_Cargo
Minimo_Salario
Maximo_Salario
2 – Conjunto específico de linhas de uma tabela:
Essa Forma de criar visões baseia-se em reduzir o número de linhas acessíveis em vez de um número de
colunas.
Create View Baixo_Salario as
Select *
From CARGO
Where Maximo_Salario < 15000
Obs: Não estamos limitados a criar visões que derivem apenas de uma tabela. Duas ou mais tabelas podem ser reunidas
(Join) para definir visões mais complexas.
Eliminando Visões:
Assim como podemos criar visões, também podemos destruí-las. O InterBase utiliza o comando padrão DROP
VIEW para eliminar visões. Se você, por exemplo, quisesse eliminar a visão Baixo_Salario, faria assim:
Drop View Baixo_Salario
Obs: Você não pode alterar uma Visão de forma direta. Para ser alterada, uma visão precisa ser destruída e depois
recriada.
Página.: 46
Download