&XUVRGH$QiOLVHGH6LVWHPDV
%DQFRGH'DGRV,
R6HPHVWUHGH
3URI$QGUp/XtVGRV5*GH&DUYDOKR
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE CAMPINAS
INSTITUTO DE INFORMÁTICA
PLANO DE ENSINO
Avaliação:
• Haverá apenas uma prova, a prova final (P).
• Haverá apenas um trabalho que se desenvolverá em várias fases (Fi).
• A nota de trabalho T será dada pela média aritmética das notas de cada fase (Fi).
• Os trabalhos serão realizados sob supervisão do professor através de reuniões periódicas com o grupo envolvido nos trabalhos. Deverá haver um número mínimo de 6 reuniões no semestre. A cada
reunião o professor atribuirá aos integrantes do grupo uma nota individual que expressará a participação (Ri) de cada membro do grupo no trabalho.
• A nota de acompanhamento A será dada pela média aritmética das notas de cada reunião (Ri).
• A nota corrigida de trabalho TC será dada pela seguinte expressão: T.A/10.
• A média final M será dada pela seguite expressão: 0,4.TC + 0,6.P.
Freqüência:
• Nenhum abono de falta será concedido pelo professor. Qualquer problema neste sentido deverá ser encaminhada ao PA que tomará todas as providências no sentido de encaminhar a solução do mesmo.
Bibliografia Utilizada :
• Introdução a Sistemas de Bancos de Dados
Date, C.J.
• O objetivo desta unidade didática é que o aluno aprenda a identificar • Aulas • Prova escrita
08 • Levantamento de visões (conceito de visão, como identificar visões. expositivas • Trabalho Prático
visões, tipos de visões). • Trabalhos
práticos em
campo
• Estudo dirigido
20 • Modelamento conceitual de visões (modelo entidade- • O objetivo desta unidade didática é que o alunos aprenda a modelar • Aulas • Prova escrita
relacionamento extendido binário: entidades, dados. expositivas • Trabalho Prático
relacionamentos, atributos, tipos de atributos, agregados, • Trabalhos
hierarquias). práticos em
• Integração das visões (construção do modelo conceitual campo
global). • Estudo dirigido
18 • Derivação dos arquivos físicos. • O objetivo desta unidade didática é que o aluno aprenda a derivar • Aulas • Prova escrita
• Particionamento dos arquivos físicos. arquivos físicos a partir de modelos lógicos. expositivas • Trabalho Prático
• Implementação das visões. • Trabalhos
práticos em
campo
• Estudo dirigido
10 • Linguagens de Consulta Teóricas (Álgebra e Cálculo • O objetivo desta unidade didática é que o aluno aprenda a expressar • Aulas • Prova escrita
Relacional). consultas em linguagens de consulta. expositivas • Trabalho prático
• SQL. • Estudo dirigido
ËQGLFH
ËQGLFH
,QIRUPDomR'DGRH(OHPHQWRGH'DGR
$QWHVGD7HFQRORJLDGH%'V
Normalização ................................................................................................................ 7
Desenvolvimento .......................................................................................................... 8
6LVWHPDVGH%DQFRGH'DGRV
(VTXHPDV
0RGHORV)tVLFRV
'HVHQYROYLPHQWRGH6LVWHPDV
$GPLQLVWUDomRGH'DGRV
(QJHQKDULDGH%DQFRVGH'DGRV
A Construção do Modelo Descritivo .......................................................................... 20
O MER ........................................................................................................................ 21
A Construção do Modelo Conceitual.......................................................................... 33
A Construção dos Modelos Conceituais Parciais ................................................. 33
A Construção do Modelo Conceitual Global........................................................ 34
A Construção do Modelo Interno ............................................................................... 35
A Construção do Modelo Interno Preliminar........................................................ 35
A Construção do Modelo Interno Otimizado........................................................ 39
A Implementação dos Programas Aplicativos ............................................................ 39
/LQJXDJHQVGH&RQVXOWD
Linguagens de Consultas Teóricas.............................................................................. 40
Cálculo Relacional ................................................................................................ 41
Álgebra Relacional................................................................................................ 43
SQL (Structured Query Language) ............................................................................. 46
Principais Comandos ............................................................................................ 47
a) Criação de Domínios:..................................................................................... 47
b) Eliminação de Domínios:............................................................................... 48
c) Criação de Tabelas: ........................................................................................ 48
d) Acréscimo de Colunas a uma Tabela ............................................................. 49
e) Eliminação de Colunas a uma Tabela ............................................................ 49
f) Eliminação de Tabelas: .................................................................................. 50
g) Criação de Índices:......................................................................................... 50
h) Eliminação de Índices: ................................................................................... 51
i) Inclusão de Dados: ......................................................................................... 51
j) Exclusão de Dados: ........................................................................................ 51
k) Atualização de Dados: ................................................................................... 52
l) Criação de Asserções: .................................................................................... 52
m)Eliminação de Asserções:................................................................................. 52
n) Consultas:....................................................................................................... 53
o) Junção de Tabelas: ......................................................................................... 63
p) União de Tabelas:........................................................................................... 66
q) Interseção de Tabelas: .................................................................................... 68
r) Diferença de Tabelas:..................................................................................... 68
s) Criação de Visões: ......................................................................................... 70
t) Eliminação de Visões:.................................................................................... 71
u) Definição de Sinônimos:................................................................................ 72
v) Eliminação de Sinônimos: ............................................................................. 72
w) Concessão de Privilégios.................................................................................. 72
x) Revogação de Privilégios............................................................................... 75
y) Processamento de Transações ........................................................................ 75
Catálogos............................................................................................................... 76
Modo Programado ................................................................................................ 77
Comandos Simples de Modo Programado............................................................ 78
a) SELECT com criação de tabela...................................................................... 78
b) Inserção de grandes volumes de dados .......................................................... 79
Comandos de Modo Programado relacionados com Cursores ............................. 79
a) Declaração de Cursores.................................................................................. 79
b) Abertura de Cursores...................................................................................... 80
c) Obtenção de Dados de Cursores .................................................................... 80
d) Atualização de Dados de Cursores................................................................. 81
e) Fechamento de Cursores ................................................................................ 82
Comandos Dinâmicos em Modo Programado ...................................................... 82
a) Preparação de Comandos ............................................................................... 82
b) Execução de Comandos ................................................................................. 82
$SrQGLFH$([HUFtFLRVGH3URMHWRGH%'
$SrQGLFH%7DEHODVGD6HomRGHÈOJHEUD&iOFXOR5HODFLRQDO
$SrQGLFH&7DEHODV8VDGDVQD6HomRVREUH64/
$SrQGLFH'3DODYUDV5HVHUYDGDVGH64/
$SrQGLFH(([HUFtFLRVGH/LQJXDJHQVGH&RQVXOWD
%DQFRVGH'DGRV 3iJLQD
,QIRUPDomR'DGRH(OHPHQWRGH'DGR
Quando nos propomos a falar de sistemas de bancos de dados, sem dúvida não poderemos
deixar de esbarrar no conceito de LQIRUPDomR. Dizemos LQIRUPDomR qualquer FRQKHFLPHQWR
de que não disponhamos mas de que tenhamos necessidade.
Em sendo conhecimento, a informação só existe na mente das pessoas, constituindo uma parte
de um quadro mental de referência. A LQIRUPDomR está sempre associada a um ente específico
concreto ou abstrato, que poderíamos chamar de HQWHGHUHIHUrQFLD.
Hoje em dia, mais do que nunca, LQIRUPDomR constitui um recurso básico e imprescindível
para toda e qualquer atividade humana. Informações completas e oportunas acabam por
diferenciar uma companhia de seus concorrentes, vindo até mesmo a ter implicações não
desprezíveis no sucesso ou insucesso de uma empresa.
DOUJF
%DQFRVGH'DGRV 3iJLQD
deixadas de lado a fim de conseguir maior semelhança com o ente de referência e em última
instância a construção de uma representação padrão.
Desta maneira, GDGRV não são mais que uma imagem pálida do que é a informação viva do
mundo real. Assim, quando obtemos de um sistema de informação dados a respeito de algum
ente do mundo real, deve-se realizar sobre eles um processo inverso de enriquecimento
semântico, de maneira que se consiga associar os dados obtidos a partir de um banco de dados
às entidades do mundo real que lhes deram origem.
Não sendo mais que uma representação das entidades do mundo real, podemos dizer que
podem existir inúmeras representações possíveis, sendo cada uma mais ou menos adequada a
cada situação.
$QWHVGD7HFQRORJLDGH%'V
1RUPDOL]DomR
O processo de normalização consiste de um algoritmo que descreve uma série de
transformações que devem ser realizadas sobre arquivos de dados a fim de torná-los estáveis e
econômicos. O objetivo é colocar todos os arquivos em consideração na 3ª forma normal.
• 'HSHQGrQFLD)XQFLRQDO
• 3ULPHLUD)RUPD1RUPDO)1
Dizemos que uma relação R está na 1FN se e somente se todos os domínios básicos de R
contiverem somente valores atômicos.
DOUJF
%DQFRVGH'DGRV 3iJLQD
• 6HJXQGD)RUPD1RUPDO)1
Dizemos que uma relação R está na 2FN se e somente se ela estiver na 1FN e todos os
atributos não chave forem totalmente dependentes funcionalmente da chave primária.
• 7HUFHLUD)RUPD1RUPDO)1
Dizemos que uma relação R está na 3FN se e somente se ela estiver na 2FN e todos os
atributos chave forem dependentes funcionalmente não transitivos da chave primária.
Prod {3, NomeP, CorP, PesoP, FornP {#F, NomeF, CidF, DistF,QdeF}}
'HVHQYROYLPHQWR
Podemos dizer de maneira simplificada, que o método tradicional de desenvolvimento de
sistemas pode ser resumido em entradas, processamento, e saídas.
Como já fizemos alusão anteriormente, não é possível negar que os dados são um recurso
imprescindível à boa operação de uma empresa, e desta maneira faz-se necessário que os
dados se caracterizem por sua disponibilidade, facilidade de interpretação, atualidade, exatidão
e precisão.
6LVWHPDVGH%DQFRGH'DGRV
O que é afinal um sistema de banco de dados? Poderíamos dizer que um sistema de banco de
dados é um sistema de armazenamento de dados em ambiente computacional, cujo objetivo
global é registrar e manter informações de maneira a eliminar os problemas que podem ser
identificados em sistemas desenvolvidos segundo a abordagem tradicional, e a conferir aos
dados as características apontadas acima como necessárias.
Entendemos por EDQFR GH GDGRV um depósito de dados armazenados em geral de forma
integrada e compartilhada. Podemos imaginar um banco de dados como sendo a unificação de
diversos arquivos que de outra forma seriam distinguíveis, eliminando total ou parcialmente
(mas de qualquer forma mantendo sob controle) qualquer redundância entre aqueles arquivos.
Os dados em um banco de dados podem em geral ser compartilhados entre diversas aplicações
e usuários diferentes. Na verdade, a possibilidade de compartilhamento poderia ser vista como
uma conseqüência da integração do banco de dados. Desta maneira, informações sobre peças
que uma empresa fabrique poderiam ser compartilhadas pelo setor de fabricação, pelo setor de
controle de qualidade e pelo setor de vendas.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Em geral, para controlar o acesso e o uso das informações em um banco de dados, entre o
banco de dados físico e os sistemas aplicativos que os manipulam, encontra-se um software
normalmente chamado de sistema gerenciador de banco de dados ou simplesmente SGBD.
Este sistema manipula todas as solicitações dos usuários para acesso e/ou utilização dos dados
do BD, isolando os sistemas aplicativos dos detalhes de hardware, garantindo a integridade de
atualizações aos dados e promovendo o acesso controlado (proteção) aos dados. Em outras
palavras, o SGBD fornece uma visão do BD a um bom nível de abstração, suporta operações
de usuários, garante a integridade dos dados, bem como a segurança deles.
Definimos dependência de dados como sendo suposições sobre a organização físicas de dados
e o aproveitamento deste conhecimento por parte de programas aplicativos que manipulem
estes dados. Vejamos agora, a título de ilustração, alguns exemplos de dependência de dados.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Suponhamos que exista um arquivo de funcionários com os campos número e nome, e que
seja fornecido a um programa aplicativo o código do funcionário a fim de que este proceda
à busca e forneça o nome do funcionário. Analisemos o seguinte programa:
Programa Ordem;
Leia (NumFunc);
Achou = F;
Fim = F;
Se RegFunc.NumFunc = NumFunc
Achou = V;
Senão
Se RegFunc.NumFunc > NumFunc
Fim = V;
FimSe;
FimSe;
FimSe;
FimEnquanto;
Se Achou
Escreva (RegFunc.NomeFunc);
Senão
Escreva ('Não Encontrado!');
FimSe;
FimPrograma.
2. Certos programas aplicativos podem ainda ser sensíveis ao formato dos dados. Considere o
seguinte trecho de um programa aplicativo:
Programa Formato;
Tipo
TipoRegFunc = Registro
DOUJF
%DQFRVGH'DGRV 3iJLQD
NumFunc : Int;
NomeFunc: Char [30];
SalarFunc: Real;
FimRegistro;
Variável
ArqFunc: Arquivo De TipoRegFunc;
•
•
•
Adicionar ao registro um campo (por exemplo o campo endereço) não utilizado pelo
programa;
No entanto note que o programa aplicativo não deveria ser sensível a este tipo de coisa,
uma vez que não se utiliza dos dados que sofreram alterações.
Entre as possíveis soluções para o uso compartilhado do arquivo por parte dos dois
programas poderíamos destacar:
Manter duas cópias do arquivo (além de também serem caras, podem criar problemas
de consistência interna, isto é, será possível garantir que os dois arquivos contêm as
mesmas informações? Também têm a questão da segurança, isto é, será possível
garantir ambos os arquivos estarão igualmente protegidos?).
DOUJF
%DQFRVGH'DGRV 3iJLQD
estável dos dados, que não é afetada por mudanças na organização. Para tal, o SGBD deve
distinguir entre a organização lógica e a organização física dos dados.
Entendemos por organização lógica dos dados, a maneira pela qual os dados são YLVWRV pelos
programas aplicativos; e por organização física dos dados, o modo como estes se encontram
armazenados em dispositivos físicos.
Enquanto os programas aplicativos GHYHP conhecer a organização lógica dos dados, pPHOKRU
TXHLJQRUHP a organização física dos dados.
Como vantagens do controle centralizado dos dados por parte do SGBD poderíamos citar:
• Reduzir e/ou manter a redundância de informações sob controle (redundâncias por um lado
provocam desperdício de espaço de armazenamento e podem causar inconsistências, mas
por outro podem vir a melhorar a eficiência de um sistema de banco de dados);
• Obter independência dos dados (uma aplicação enxerga os dados do banco de dados da
maneira que lhe for conveniente, sem preocupações com o formato, localização ou método
de acesso aos dados. Aplicações diferentes poderão ter visões diferentes do BD permitindo
DOUJF
%DQFRVGH'DGRV 3iJLQD
(VTXHPDV
A palavra HVTXHPD neste contexto deve ser entendida como GHVFULomR. Desta maneira,
esquema lógico é uma descrição da organização lógica dos dados e um esquema físico é uma
descrição da organização física dos dados.
Em uma arquitetura de dois esquemas, cada esquema lógico é definido em termos de esquema
físicos existentes. Deste modo, poderemos adicionar ou mudar esquemas lógicos facilmente.
Por outro lado, esta arquitetura causa uma grande dependência entre os esquemas lógico e
físico, e mudar um esquema físico pode ser muito complicado e causar grandes mudanças nos
esquemas lógicos existentes.
Em uma arquitetura de três esquemas, para isolar os esquemas lógico e físico, introduzimos
um esquema intermediário. Assim teremos:
• Um esquema externo ou lógico que consiste dos dados tais como estes são vistos pelos
programas aplicativos;
• Um esquema interno ou físico que consiste dos dados tais como estes são armazenados em
dispositivos físicos.
Cada esquema lógico é definido em termos de esquemas conceituais, e estes por sua vez, são
definidos em termos de esquemas físicos. Uma vez que o esquema conceitual é não
redundante, mudanças no esquema físico só afetam uma pequena parte do esquema conceitual,
levando a uma maior simplicidade e facilidade na realização de mudanças no esquema físico
nesta arquitetura do que na de dois esquemas.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Com isso, poderemos distinguir dois tipos de independência de dados: a independência lógica
dos dados (mudanças na visão do BD de um programa aplicativo não afetam as visões que
outros programas aplicativos possam ter do BD) e a independência física dos dados (mudanças
na estrutura física do BD deixam intacto o esquema lógico, isto é, nenhum programa
aplicativo tem sua visão do BD afetada).
0RGHORV)tVLFRV
Entendemos por modelo físico a forma (estrutura) usada internamente para organizar os dados
no BD, isto é, a forma como os dados estão armazenados. Os três modelos mais consagrados
são os modelos de rede, hierárquico e o relacional.
Para efeitos deste estudo, concentraremos nossa atenção no modelo relacional que é de longe o
mais comumente empregado.
Podemos definir o modelo relacional como um modelo em que os conjuntos de dados são
representados por tabelas de valores. Cada tabela é bidimensional e organizada em linhas e
colunas. Cada elemento em um conjunto de dados é representado por uma linha na tabela,
cada atributo dos elementos de um conjunto é representado por uma coluna na tabela e cada
item de dado deste elemento é representado pelo valor da célula que ocupa na tabela.
Ex.: 0DWpULDV
No modelo relacional, cada linha se compõe de apenas um tipo de registro, possui um número
fixo de atributos, é única (não é permitido a existência de linhas iguais) e possui pelo menos
um identificador (chave); os atributos têm valores sempre atômicos (não há grupos que se
repetem) e assumem valores em domínios de valores possíveis; o mesmo domínio pode ser
usado por diversos atributos; as linhas e colunas podem ser consideradas em qualquer
seqüência sem que a mudança de ordem afete as informações em qualquer momento.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Mais adiante voltaremos a falar do modelo relacional, uma vez que estudaremos com detalhes
a implementação relacional. A escolha do modelo relacional como objeto de estudo mais
profundo se deve ao fato de que este modelo é o modelo usado pelos SGBD mais em uso nos
dias de hoje.
'HVHQYROYLPHQWRGH6LVWHPDV
Numa abordagem moderna, a tarefa de desenvolvimento de sistemas pode ser enxergada em
três dimensões: a dimensão funcional, a dimensão de armazenamento e a dimensão de
transição de estados.
Como o objetivo deste curso é o projeto de BD, restringiremos nosso estudo somente à
dimensão de armazenamento. Achamos importante no entanto lembrar que os métodos
modernos de desenvolvimento de sistemas recomendam a seguinte ordem para a definição
destas três dimensões:
A fim de diminuir a dificuldade de absorção das idéias que passaremos a abordar a seguir,
faremos uma analogia entre os termos comumente utilizados na modelagem conceitual,
relacional e tradicional:
Relação
Objeto Linha Registro
Relacionamento Tabelas auxiliares para Arquivos auxiliares para
ligação, ou ligação, ou
chaves estrangeiras chaves estrangeiras
Ligações Linhas das tabelas auxiliares Registros das tabelas auxiliares
para ligação, ou para ligação, ou
valores das chaves valores das chaves estrangeiras
estrangeiras
$GPLQLVWUDomRGH'DGRV
Tradicionalmente, considera-se que uma empresa, para alcançar seus objetivos, deve usar de
maneira eficaz e racional seus recursos. Estes recursos são normalmente separados em
recursos humanos, recursos financeiros, máquinas e equipamentos, e tecnologia. Pode-se
observar no entanto, que a esta lista, cada dia se torna mais importante acrescentar como um
recurso da empresa os seus dados.
Cada órgão encarregado de administrar um destes recursos tem como funções recrutar,
selecionar e captar novos recursos; garantir a plena disponibilidade dos recursos
administrados; evitar o uso indevido dos recursos da empresa; e promover o uso eficaz dos
recursos.
Para executar estas tarefas com relação aos dados, torna-se necessário o surgimento da figura
do Administrador de Dados comas funções de gerenciar os dados enquanto recursos da
empresa, construir e manter o modelo conceitual dos dados da empresa, manter um registro
com a descrição de todos os dados existentes na empresa, divulgar aos usuários e profissionais
de informática as descrições dos dados da empresa, promover a integração entre os diversos
sistemas de aplicação, e facilitar o desenvolvimento de aplicações para as quais já existem
dados.
(QJHQKDULDGH%DQFRVGH'DGRV
Tradicionalmente, existem duas maneiras para se abordar o desenvolvimento de sistemas: a
partir das funções e a partir dos dados. Uma boa razão para a abordagem funcional é o fato de
um sistema ser uma função, sendo análise a atividade de decompor esta função em suas
DOUJF
%DQFRVGH'DGRV 3iJLQD
Estudos a respeito da evolução das empresas no que diz respeito ao uso do processamento de
dados apontam seis estágios pelos quais passam as empresas: iniciação, contágio, controle,
integração, administração de dados e maturidade. Segundo estes estudos, esta evolução é
gradativa, reflete a progressiva maturação dos profissionais de informática e dos usuários, e
não pode ser artificialmente apressada. Nos primeiros estágios a empresa se preocupa com a
automatização das funções mudando o enfoque gradativamente até que entre o terceiro e o
quarto estágio, quando começa a mudar o foco das funções para os dados. Assim, o estágio em
que a empresa se encontra pode sugerir o enfoque adequado a se dar nos desenvolvimentos da
mesma.
Nem todos os sistemas de computação fazem uso de bancos de dados, mas para aqueles que
fazem, o elemento sistêmico BD é na maioria das vezes um elemento de importância vital.
No processo de engenharia de BD, segue-se uma rotina de vários passos que conduzem do
mundo real à criação de um BD.
• mundo real do ponto de vista formal é muito nebuloso. Este mundo é povoado por seres,
fatos, coisas, etc. Faz-se necessária uma organização deste mundo. o que normalmente se
dá através do levantamento de informações a respeito da porção do mundo real que é de
interesse no escopo computacional em questão. Estas informações, organizadas ainda de
uma forma informal, são constituídas por relatórios escritos em uma linguagem natural
(português, inglês, etc.).
Podem conter um simbolismo difícil de ser entendido. Este é um nível dito descritivo, pois
procura-se descrever o mundo real por meio de frases. Não existem regras formais para
desenvolver este modelo, pois tanto o mundo real quanto o modelo descritivo não são
formais.
DOUJF
%DQFRVGH'DGRV 3iJLQD
O modelo aqui desenvolvido deve ser estritamente formal, o mais próximo possível dos
formalismo matemático. Este modelo em geral é feito baseado em símbolos para os quais
deve haver uma conceituação rigorosa.
Sem dúvida podemos dizer que o modelo descritivo também é um modelo conceitual, mas
sempre que nos referirmos ao modelo conceitual da base de dados, estaremos nos referindo
a este modelo conceitual formal.
• Desta fase para a frente, a tarefa modelar um BD se torna bastante mais amena, uma vez
que não mais lidamos com informações informais, mas sim com um modelo conceitual
bem e formalmente definido.
Nosso objetivo nesta fase é a construção do modelo interno do BD, ou seja definir as
representações internas dos dados e dos programas. Este modelo em geral permanece
sempre um mistério para os usuários do BD que desconhecem (uma vez que não lhes
interessa) como seus dados estão descritos internamente, isto é, como as estruturas de
dados fornecidas por eles são gravadas internamente no BD.
Esta fase também é feita em duas etapas: a construção de um modelo interno preliminar e a
otimização deste. Voltaremos a abordar este assunto mais para frente nesta apostila.
• Por fim, vem a fase da implementação dos programas que manipularão os dados a fim de
realizar os objetivos funcionais inicialmente estabelecidos. No caso de realizarmos a
implementação do BD fazendo uso de um SGBD, desconheceremos nós também a
maneira pela qual os dados serão internamente armazenados e interagiremos com o SGBD
para solicitar o acesso ao BD. No caso da implementação ser feita com a utilização de uma
linguagem tradicional de programação, teremos que nos preocupar mais ou menos com
DOUJF
%DQFRVGH'DGRV 3iJLQD
este tipo de coisa, dependendo dos recursos que a linguagem de programação coloque à
disposição.
$&RQVWUXomRGR0RGHOR'HVFULWLYR
Esta fase se caracteriza por ser extremamente subjetiva e de vital importância para o sucesso
do sistema de computação que se tenciona desenvolver. Diversos fatores contribuem
grandemente para a dificuldade da execução desta fase a saber:
• Dificuldades de ordem técnica (estas dificuldades de certa forma são até esperadas, tendo
em vista a inexistência de métodos precisos para a realização das tarefas desta fase);
• Ignorância e mistificação a cerca do que seja e do que seja capaz um computador (ainda
nos dias de hoje, há quem pense que basta por no computador para ter tudo resolvido, há
quem ainda veja o computador como uma caixinha de milagres);
• Tabu (muitos usuários vêm as coisas relacionadas com a área como algo hermético, onde
sua entrada é vedada. Muitos ainda acham tudo relacionado com informática
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Visualização global (muitas vezes, principalmente quando ainda nos falta alguma
experiência, podemos encontrar dificuldade em enxergar o problema a enfrentar como um
todo, nos sentindo perdidos em meio aos inúmeros detalhes envolvidos na situação).
Naturalmente neste processo de aglutinação, acabaremos angariando para o BD dados que são
de interesse de certas aplicações mas não de outras. Uma vez que cada aplicação manipulado
BD a parte que lhe é devida e desconhece todo o resto dos dados que por ventura lá existam
armazenados, podemos dizer que as aplicações não possuem uma visão global do BD, cada
aplicação vê o BD como sendo o subconjunto dos dados do BD que utiliza para a realização
de suas funções. Assim, existirão várias visões do BD, uma para cada aplicação.
Mais formalmente, definiremos visão como sendo um par ordenado (dados, operações) que
descreve os dados do futuro BD do modo que deverão ser vistos por uma aplicação e as
operações que serão feitas com estes dados.
O produto desta fase deverá ser uma especificação de todas as visões que estão envolvidas na
porção do mundo real de interesse.
20(5
Iniciaremos o estudo do MER através de algumas definições. Entenderemos por objeto
qualquer coisa que exista no mundo real da qual se tenha necessidade de ter informações.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Entidades são representadas por um retângulo com uma inscrição interna representando o
nome da entidade. Os nomes são no singular por convenção. Considere os exemplos de
entidades abaixo.
Relacionamentos são representados por um losango com uma inscrição interna representando
o nome do relacionamento. Os nomes são no singular por convenção. Como um
relacionamento é um conjunto de ligações semelhantes, e tendo em vista que cada ligação
vincula sempre dois objetos, temos que sempre existem dois sentidos associados a uma
ligação, e em última instância a um relacionamento. Acrescentamos por esta razão ao losango
duas setas em sentidos opostos representando dos dois sentidos das ligações do
relacionamento. Sobre estas setas, inscreve-se frases especificando cada um dos dois sentidos.
O exemplo abaixo, simboliza um relacionamento que contêm ligações que vinculam objetos
que são empregados no mundo real com objetos que são departamentos da empresa no mundo
real.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Relacionamentos têm sempre duas cardinalidades (uma para cada sentido do relacionamento)
que expressam restrições com respeito àquele relacionamento. Uma cardinalidade é escrita
como um par de valores numéricos separados por uma vírgula. N representa um valor
desconhecido, podendo ser arbitrariamente grande. As cardinalidades de um relacionamento
costumam ser posicionadas em lados opostos do losango, no sentido das setas. O exemplo
abaixo já contém uma carga semântica um pouco mais pesada que os anteriores. O que
queremos dizer com o modelo abaixo é que funcionários se vinculam com dependentes pelo
relacionamento posse. As setas nos dizem que funcionários têm dependentes e que
dependentes são de funcionários. Lemos o modelo abaixo da seguinte maneira: um
funcionário tem de 0 até N dependentes, e um dependente é de 1 e sempre um funcionário.
Como no mundo real cada objeto pode ter diversos relacionamentos diferentes, também no
modelo poderemos expressar este fato. Considere o exemplo abaixo. Nele expressamos que
clientes se relacionam pelo relacionamento compra com produtos e também com duplicatas a
pagar pelo relacionamento posse. Cada cliente compra de 0 até N produtos e cada produto é
comprado por de 0 até N clientes. Cada cliente tem de 0 até N duplicatas a pagar e cada
duplicata a pagar e de 1 e sempre 1 cliente.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Também à semelhança do mundo real, duas entidades podem ter mais de um relacionamento.
Veja o exemplo abaixo. Nele, funcionários se relacionam com projetos pelos relacionamentos
lotação e gerência. Cada funcionário está lotado em 1 e sempre 1 projeto e cada projeto lota de
1 até N funcionários. Além disto, cada funcionário pode gerenciar ou não um projeto e cada
projeto é gerenciado por 1 e sempre 1 funcionário.
Auto relacionamentos são relacionamentos que expressam vínculos entre objetos de uma
mesma entidade. No exemplo abaixo temos dois casos de auto relacionamentos. No primeiro,
peças se relacionam com peças pelo relacionamento composição. Cada peça compõe de 0 até
N outras peças e por outro lado cada peça pode compor de 0 até N outras peças. No segundo,
DOUJF
%DQFRVGH'DGRV 3iJLQD
pessoas se relacionam com pessoas pelo relacionamento casamento. Cada pessoa pode ser
casada ou não com outra pessoa.
Entidades podem ser fracas com relação a outras. Isto significa que não fazem sentido se a
entidade dita forte. Esta relação de fraqueza é expressa no modelo como um relacionamento
com um pequeno círculo de um dos lados. A entidade do lado do círculo é a entidade fraca. No
exemplo abaixo, mostramos que a entidade dependente, como o próprio nome diz, é fraca pelo
relacionamento de posse com a entidade funcionário, isto é, não tem sentido sem a entidade
funcionário.
O MER é um modelo para expressar dados e seus vínculos que se tem interesse de manter. Por
esta razão, não expressamos em um MER nem operações (uma vez que não são dados nem
vínculos entre dados) nem dados sobre os quais não se tenha interesse. Assim, no exemplo
abaixo, mostramos a entidade paciente relacionada com a entidade consulta pelos
relacionamentos agendamento e desagendamento. A menos que se tenha uma boa razão para
se guardar desagendamentos, desagendamento é uma operação que se faz sobre o
relacionamento agendamento. Quando desejamos agendar uma consulta, geramos uma ligação
DOUJF
%DQFRVGH'DGRV 3iJLQD
Como definimos acima, atributos representam as informações que se deseja manter a respeito
de uma entidade ou relacionamento.
Segundo suas funções, os atributos se classificam em chave primária, chave adicional, super
chave, chave secundária e atributo comum. Mais para frente veremos que existe ainda um
outro tipo de atributo, mas deixemos para comentar mais a respeito adiante.
Chave primária é o menor conjunto de atributos que identifica unicamente um único objeto em
uma entidade ou uma única ligação em um relacionamento. Toda entidade e todo
relacionamento possui chave primária, embora nos relacionamentos ela não seja indicada, mas
sim implicitamente conhecida como a concatenação das chaves primárias das entidades
relacionadas.
Às vezes, esta combinação de chaves não é o suficiente para identificar unicamente uma
ligação em um relacionamento (pela possibilidade da existência de mais de uma ligação entre
os mesmos dois objetos das mesmas duas entidades em um relacionamento). Nestes casos,
existem duas opções: colocar uma chave adicional no relacionamento (que em conjunto com
as chaves primárias implícitas identificaria unicamente uma ligação) ou colocar uma super
DOUJF
%DQFRVGH'DGRV 3iJLQD
Chaves secundárias são chaves que não identificam unicamente um único objeto em uma
entidade ou uma única ligação em um relacionamento, mas sim um grupos deles.
Por fim, atributos comuns são atributos sem nenhuma função especial, representam tão
somente informações que se deseje manter sobre objetos de entidades ou ligações de
relacionamentos.
Vale a pena ressaltar o fato de que não se pode expressar com o MER atributos iterativos
(repetitivos), por esta razão não se pode ter atributos com nome no plural.
Qualquer que seja o tipo do atributo, eles sempre são representados por uma haste com um
símbolo em uma das extremidades que indica o tipo do atributo seguido do nome do atributo.
Veja abaixo o símbolo de cada um dos atributos acima mencionados.
O símbolo de chave adicional é um sinal de mais seguido opcionalmente por um número. Este
número serve para os mesmos fins do número que segue opcionalmente o símbolo de chave
primária.
DOUJF
%DQFRVGH'DGRV 3iJLQD
O símbolo de chave secundária é uma letra S seguida opcionalmente por um número. Este
número serve para diferenciar as chaves secundárias em caso de haver mais de uma. Este
número pode ser seguido opcionalmente por outro número separado do primeiro por uma
vírgula. Este segundo número serve para os mesmos fins do número que segue opcionalmente
o símbolo de chave primária.
Às vezes, entidades se classificam em alguns tipos, cada tipo tendo atributos próprios
diferenciados. Surge para isto o conceito de hierarquia. Existem dois tipos de hierarquias
conforme pode-se observar no exemplo abaixo. O primeiro desenho representa uma hierarquia
sem interseção e o segundo uma com interseção.
Qualquer que seja o tipo de uma hierarquia, a entidade superior detém os atributos comuns a
todos os membros da hierarquia e as inferiores os atributos próprios a cada uma delas.
DOUJF
%DQFRVGH'DGRV 3iJLQD
É perfeitamente possível se ter árvores de hierarquia mais profundas, isto é, hierarquias sob
hierarquias. Também é possível se ter mais de uma hierarquia sob uma mesma entidade. Todas
entidades que participam de uma hierarquia são entidades como outra qualquer, portanto
podem ter seus atributos e relacionamentos. Não faz sentido uma hierarquia em que não haja
atributos ou relacionamentos próprios nas entidades inferiores.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Surge com as hierarquias sem interseção aquele último tipo de atributo que havíamos
mencionado acima. Trata-se do atributo classificador, que serve para dizer de que tipo (onde
se encontra nas entidades inferiores) é cada objeto da entidade superior.
Este tipo de atributo é representado por uma haste seguida por uma letra C e pelo nome do
atributo. Note no exemplo abaixo, que além da novidade do atributo classificador, não se usa
colocar chave primária nas entidades inferiores de uma hierarquia uma vez que estas têm
como chave primária a chave primária da entidade superior.
DOUJF
%DQFRVGH'DGRV 3iJLQD
No exemplo abaixo, temos a entidade aluno relacionada não coma entidade professor, não
com a entidade matéria, mas sim com ambas relacionadas pelo relacionamento ministério.
Segue agora um exemplo mais complexo que envolve quase todos conceitos apresentados até
agora.
Nele temos a entidade matéria relacionada com a entidade turma pelo relacionamento posse
(cada matéria tem de 0 até N turmas e cada turma é de 1 até N matérias, sendo a entidade
turma fraca pelo relacionamento posse com a entidade matéria.
A entidade matéria se relaciona pelo relacionamento PreReq consigo própria (cada matéria é
pré-requisito de 0 até N matérias, podendo também ter como pré-requisito de 0 até N
matérias).
DOUJF
%DQFRVGH'DGRV 3iJLQD
A entidade matéria tem chave primária Cod e atributos comuns Nome e Ementa. A entidade
turma tem como chave primária os atributos Letra, Semestre e Ano. A entidade professor tem
como chave primária Matr e como atributos comuns Nome e Ender. A entidade graduação que
representa os professores de graduação, tem como chave primária implícita Matr e como
atributo comum próprio o atributo Local da Graduação. A entidade pós-graduação que
representa os professores de pós-graduação, tem a mesma chave primária implícita
mencionada acima e como atributo comum próprio o atributo Área de Orientação. A entidade
aluno tem como chave primária o atributo RA e como atributos comuns Nome e Ender. O
relacionamento fez tem como atributos comuns Nota e Freq. Todos os relacionamentos têm
como chave primária as chaves das duas entidades que eles relacionam. A chave da entidade
agregada é a chave do relacionamento posse em seu interior.
DOUJF
%DQFRVGH'DGRV 3iJLQD
$&RQVWUXomRGR0RGHOR&RQFHLWXDO
Poderíamos definir esta fase como sendo a construção de uma representação do conhecimento
de uma organização orientada para a representação dos dados envolvidos e das relações dos
dados entre si. Tem-se por objetivo captar o mais fielmente possível a realidade da
organização a fim de prover base para a implantação física de um BD.
$&RQVWUXomRGRV0RGHORV&RQFHLWXDLV3DUFLDLV
Esta parte do modelo conceitual tem duas componentes: uma representação gráfica e uma
linguagem descritiva. Representaremos graficamente os dados e suas relações e nos
utilizaremos da linguagem descritiva a fim de descrever as operações que são realizadas sobre
os dados. Desta maneira, teremos expressos no modelo tanto os aspectos estáticos (dados)
como dinâmicos (operações). Deve-se ainda ter expresso neste modelo restrições semânticas e
de integridade.
Como representação gráfica dos dados, suas relações e algumas restrições semânticas e de
integridade, sugerimos que se use o MER. Como linguagem descritiva das operações que são
realizadas sobre os dados e de algumas restrições semânticas e de integridade que não
puderam ser representadas graficamente através do MER, sugerimos que se use algo como
português estruturado.
É imprescindível advertir que durante a construção dos MER, deve-se evitar ao máximo
pensar em processos, arquivos e fluxos de informação. Vale a pena ressaltar que no modelo de
uma visão, só devem aparecer os dados que são usados naquela visão, e da maneira como são
usados. Assim, é perfeitamente possível haver uma entidade ou um relacionamento em uma
visão com um conjunto de atributos diferentes daquele que possua em uma outra visão. Além
disto, podem existir atributos que em uma visão sejam comuns e em outra sejam chaves
secundárias, e assim por diante. O atributo chave primária deve ser o mesmo sempre em todas
as visões tanto para entidades como para relacionamentos. A cardinalidade de um
DOUJF
%DQFRVGH'DGRV 3iJLQD
relacionamento também é sempre a mesma em todas as visões. É possível que uma entidade
apareça em uma visão como parte de uma hierarquia, com determinados relacionamentos ou
como parte de um agregado, e em outra visão não.
$&RQVWUXomRGR0RGHOR&RQFHLWXDO*OREDO
O modelo conceitual global é construído a partir dos modelos conceituais parciais de uma
maneira incremental. A maneira mais simples que conheço de se entender como se dá a
construção do modelo conceitual global é através de uma alegoria.
Basicamente, tudo que deve ser feito é transportar para o papel em branco onde será
construído o modelo conceitual global, todos os modelos conceituais parciais com o cuidado
de fazer com que elementos do modelo parcial (entidades, relacionamentos atributos,
agregados e hierarquias) que está sendo transportado que já se encontrem presentes no modelo
global se sobreponham de maneira incremental.
Antes de dizermos como proceder essa adequação, convém agora definirmos alguns termos
que empregaremos a seguir. Entenderemos por atributo sem função especial qualquer atributo
que não seja chave primária, chave adicional, super chave, chave secundária, nem
classificador. Entenderemos por atributo com função especial aqueles atributos que possuírem
uma das funções acima mencionadas (chave primária, chave adicional, super chave, chave
secundária ou classificador).
Se no modelo parcial houverem atributos que não se encontrem presentes no modelo global,
tudo que temos que fazer será transportá-los para o modelo global.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Se no modelo parcial houverem atributos sem função especial que já se encontrem presentes
no modelo global sem função especial prevalecerá a função que já se possuem no modelo
global, e tudo ficará como está.
Se der o contrário, no parcial houverem atributos com função especial que já se encontrem
presentes no modelo global sem função especial, prevalecerá a função que possuem no modelo
parcial, e alteraremos o modelo global.
Se no modelo parcial houver um atributo com função especial que já se encontra presente no
modelo global também com função especial, neste caso o atributo passará a acumular funções.
Agregados e hierarquias são simplesmente transportados dos modelos parciais para o global.
$&RQVWUXomRGR0RGHOR,QWHUQR
Como já havíamos comentado anteriormente, esta fase se compõe de duas subfases (a
construção do modelo interno preliminar e a otimização deste) que passaremos a detalhar em
seguida.
$&RQVWUXomRGR0RGHOR,QWHUQR3UHOLPLQDU
O objetivo desta fase é trabalhar o modelo conceitual global a fim de eliminar, ou melhor
transformar em entidade qualquer coisa presente no modelo conceitual global que não seja
entidade. O modelo conceitual global trabalhado para ser constituído somente por entidades
será o modelo interno preliminar.
Como perceberemos a seguir, os casos possíveis que poderemos ter que analisar são
virtualmente infinitos. Desta maneira, nosso objetivo nesta parte do estudo é o de formar uma
linha de pensamento que possa ser utilizada quando em face a uma situação real nova.
Por simplicidade, inicialmente deixaremos de lado qualquer tipo de MER diferente de duas
entidades relacionadas por um relacionamento. Qualquer que seja a cardinalidade do
relacionamento, sempre é possível reduzir o MER a três entidades. Em alguns casos é possível
a redução a duas e até mesmo a uma. Seremos sempre ambiciosos, desejando a máxima
redução possível. Consideraremos a seguir algumas possibilidades para a cardinalidade do
relacionamento.
DOUJF
%DQFRVGH'DGRV 3iJLQD
• &DVR
Nesta situação, cada objeto de A se relaciona com exatamente um objeto de B (um objeto
de A possui exatamente uma ligação no relacionamento R) e vice versa.
Desta maneira é possível a redução do MER a uma só entidade ARB que aglutinaria os
atributos de A, de R e de B, naturalmente eliminando os possíveis atributos comuns.
• &DVR1
Neste caso, cada objeto de A pode estar relacionado com de 1a N objetos de B (um objeto
de A pode possuir de 1 a N ligações no relacionamento R). B por sua vez sempre se
relaciona com exatamente um objeto de A (um objeto de B pode possuir uma e somente
uma ligação no relacionamento R).
Para alcançarmos a solução mais ambiciosa (uma entidade ARB), existe ainda uma
possibilidade. Podemos aglutinar o MER em uma única entidade onde cada objeto
representasse um objeto de A, um relacionamento com um objeto de B, e o próprio objeto
de B relacionado. Neste caso, como os objetos de A podem ter muitos relacionamentos
com objetos de B, teremos muitos objetos na entidade aglutinada associados a um único
objeto de A. Isto naturalmente caracteriza uma redundância, mas se soubermos de antemão
que na prática a probabilidade dos objetos de A terem muitos relacionamentos com objetos
de B é baixa, poderemos optar por esta solução.
Existem ainda duas possibilidades mais modestas (duas entidade): aglutinar A com R em
uma entidade AR deixando B só; e deixar A só aglutinando R com B em uma entidade RB.
A primeira possibilidade não faz muito sentido, pois encerra os mesmos problemas da
aglutinação em uma única entidade. Assim temos como viável somente a segunda
possibilidade.
DOUJF
%DQFRVGH'DGRV 3iJLQD
• &DVR11
Neste caso, cada objeto de A pode estar relacionado com de 1a N objetos de B (podendo
um objeto de A possuir de 1 a N ligações no relacionamento R) e vice versa.
Para aglutinarmos o MER em uma única entidade ARB, teríamos que garantir que a
probabilidade dos objetos de A terem muitos relacionamentos com objetos de B é baixa e
também que a probabilidade dos objetos de B terem muitos relacionamentos como objetos
de A é baixa.
Sempre podemos ficar com três entidades A, R, e B. Vale a pena lembrar, que a maneira
de julgar se uma probabilidade é baixa ou não depende do caso que tratamos (depende
fundamentalmente do número de objetos e ligações que se espera ter nas entidades e
relacionamento respectivamente).
• &DVR
Neste caso, cada objeto de A pode estar relacionado com nenhum ou exatamente um
objeto de B (um objeto de A pode não ter, ou ter exatamente uma ligação no
relacionamento R). B por sua vez, sempre se relaciona com exatamente um objeto de A
(um objeto de B tem exatamente uma ligação no relacionamento R).
DOUJF
%DQFRVGH'DGRV 3iJLQD
O raciocínio para o caso dos auto relacionamentos é idêntico ao que tivemos quando tratamos
dos relacionamentos comuns. No caso de cardinalidade 1,1 - 1,1 teremos uma única entidade
AR que aglutina dois objetos de A e uma ligação de R e nos casos 1,1 - 1,N e 1,N - 1,N
poderemos ter uma única entidade ou duas. Ampliemos agora nosso universo, deixando de
lado somente os agregados e as hierarquias e passando a trabalhar com MER com diversas
entidades e relacionamentos.
O processo é simples. Escolhemos sempre um relacionamento e suas entidades (talvez uma só,
no caso de auto relacionamento)para começar. Procedemos conforme o raciocínio
desenvolvido acima. Se alguma das entidades primitivas possuíam algum relacionamento com
outra entidade não considerada na operação, este relacionamento é transferido para a entidade
que aglutinou a entidade primitiva (no caso de ter havido aglutinação). Repete-se este processo
até que não se tenha mais relacionamentos no MER.
O caso das hierarquias é o mais simples de todos, em geral o processo se resume em eliminar a
hierarquia, deixando apenas entidades soltas. Existem no entanto algumas outras
possibilidades que passaremos a considerar.
No caso das hierarquias sem interseção cuja entidade superior não possua relacionamento,
poderemos fazer uma espécie de implosão, trazendo os objetos apropriados da entidade
superior para cada entidade inferior.
No caso das hierarquias com interseção cuja entidade superior não possua relacionamento,
poderemos fazer a mesma implosão, mas neste caso haverá redundância que teremos que
considerar probabilisticamente a viabilidade de manter.
No caso dos agregados, procedemos com segue. Faremos o processo comum com o
relacionamento e a(s) entidade(s) interna(s) ao agregado. Eliminamos o agregado, deixando
somente as entidades possivelmente aglutinadas em seu interior. Todos os relacionamentos
DOUJF
%DQFRVGH'DGRV 3iJLQD
com o agregado deverão ser transferidos para a entidade que aglutinou o relacionamento que
estava dentro do antigo agregado.
$&RQVWUXomRGR0RGHOR,QWHUQR2WLPL]DGR
Quando falamos em otimização do modelo interno, falamos em particionamentos de arquivos.
Particionamentos podem ser horizontais ou verticais. Entendemos por particionamento
horizontal de um arquivo, a separação de grupos de registros deste arquivo em arquivos
separados; e por particionamento vertical de um arquivo, a separação de campos deste arquivo
em arquivos separados.
Vale a pena ressaltar, que um arquivo pode ser particionado tanto horizontal como
verticalmente em qualquer ordem. Os arquivos resultantes de um particionamento também
podem ser particionados em mais arquivos.
Particionamentos têm por objetivo isolar em arquivos separados e menores, informações que
possuem uma grande taxa de acesso, aumentando assim a eficiência do acesso ao BD.
$,PSOHPHQWDomRGRV3URJUDPDV$SOLFDWLYRV
Agora que temos os arquivos físicos otimizados resultantes do modelagem, podemos retornar
aos modelos conceituais parciais (visões) para a implementação do algoritmo em português
estruturado associado a cada visão, que poderá ser feita sob um SGBD ou em uma linguagem
de programação adequada.
/LQJXDJHQVGH&RQVXOWD
Linguagens de consulta fazem parte de uma classe de linguagens que costumamos chamar de
linguagens de quarta geração.
Antes da analogia propriamente dita, vale a pena equalizar os termos que usaremos.
Entendemos por linguagens de primeira geração a programação direto em linguagem de
máquina (binário), por linguagens de segunda geração os montadores de maneira geral e por
linguagens de terceira geração a grande maioria das linguagens de programação em uso nos
dias de hoje.
Consideremos o que se ganhou com o surgimento de cada nova geração de linguagens. Por um
lado, ganhou-se maior de conforto para o desenvolvedor na tarefa de escrever programas,
maiores facilidades de manutenção, maior vida útil dos sistemas e maior portabilidade.
Naturalmente, existe outro lado a se considerar ganhamos linguagens cada vez mais
específicas para determinados tipos de aplicação e programas bastante maiores e mais lentos.
Não é sem motivo que introduzimos este tópico no estudo deste curso, como já dissemos, as
linguagens que estudaremos a seguir fazem parte da quarta geração de linguagens e mais
especificamente à família das linguagens de consulta.
Linguagens de consulta, como diz o próprio nome, são linguagens dedicadas à consulta a
bancos de dados. Existem inúmeras linguagens de consulta implementadas e em uso nos mais
diversos ambientes computacionais.
/LQJXDJHQVGH&RQVXOWDV7HyULFDV
Por um lado, seria de fato impraticável estudar exaustivamente todas as linguagens de
consulta, por outro, seria restringente o estudo de apenas uma ou outra delas.
Felizmente, todas elas possuem uma de duas raízes teóricas, e são a estas linguagens teóricas,
que serviram de base para as linguagens reais que temos nos dias de hoje, que nos
dedicaremos a seguir.
DOUJF
%DQFRVGH'DGRV 3iJLQD
&iOFXOR5HODFLRQDO
Para podermos compreender cálculo relacional e conseguir expressar consultas a BD através
desta linguagem, primeiramente faz-se necessário que mudemos um pouco a visão que temos
de um BD.
Normalmente quando pensamos em BD, talvez por influência do modelo relacional, pensamos
em uma porção de tuplas organizadas em tabelas.
Desta maneira, quando desejamos obter informações a partir do BD, tudo que tem que ser
feito é construir a resposta através de particionamentos e junções, tanto verticais como
horizontais.
Introduziremos a seguir a forma que a linguagem cálculo relacional supõe estar o BD, não
significando isto, que o BD efetivamente esteja neste formato, o que vai depender da
implementação da linguagem baseada em cálculo relacional.
Para o cálculo relacional, o BD se compõe por uma grande quantidade de tuplas, todas
misturadas (não organizadas em tabelas). No entanto lá, não existem somente as tuplas que
poderíamos chamar de "originais", existem também todas a tuplas resultantes de todas as
possíveis partições das tuplas originais, e existem ainda, todas as tuplas resultantes de todas as
possíveis junções das tuplas originais entre si, das partições das tuplas originais entre si, e das
tuplas originais com as partições das tuplas originais.
Se pararmos para pensar por um momento, considerando que neste universo de tuplas existem
todas as tuplas originais, todas as partições das tuplas originais, todas as junções das tuplas
originais entre si, das partições das tuplas originais entre si, e das tuplas originais com as
partições das tuplas originais, chegaremos à conclusão de que neste universo de tuplas existem
respostas para todas as possíveis consultas que se queira farão BD, e tudo que temos que fazer
com o cálculo relacional é especificar, compor, selecionar deste universo a resposta que
desejamos.
Para especificar uma resposta em cálculo relacional, temos que antes estudar sua sintaxe e
semântica. Para tal, apresentaremos a seguir, uma seqüência de definições que nos dirão a
respeito desta sintaxe e semântica.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Assumiremos que se conheça o que é uma constante, uma variável, uma função, e argumentos
de uma função. Desta maneira, definimos:
Um término pode ser uma constante, uma variável ou um símbolo de função de grau N
seguida por N términos (seus N argumentos);
Uma fórmula atômica é um símbolo de predicado de grau N seguido por N términos (seus N
argumentos);
• Se F é uma formula bem formada, então F (F negado) também é uma fórmula bem
formada;
Sendo t uma variável e Φ(t) uma fórmula bem formada em função de t, toda consulta em
cálculo relacional tem a forma: {t / Φ(t)}.
Consideraremos como predicados pré definidos todos os nomes de tabelas do BD. Estes
predicados recebem como argumento uma tupla (são predicados de grau 1) e têm o seguinte
comportamento: produzem resultado verdadeiro sempre que a tupla passada como argumento
for um membro daquela tabela, e resultado falso no caso contrário.
Consideraremos ainda como funções pré definidas as funções tuple (atr1,..., atrn) (que produz
como resultado uma tupla formada pela concatenação dos n atributos fornecidos como
argumento) e concat (tpl1,..., tpln) (que produz como resultado a concatenação das n tuplas
fornecidas como argumento).
DOUJF
%DQFRVGH'DGRV 3iJLQD
Conhecidos os fundamentos do cálculo relacional, nada melhor para fixar os conceitos do que
concretizar tudo em um exemplo. Para isto, consideremos o BD que nos serviu de modelo para
os exemplos de álgebra relacional. Para maior comodidade, reproduziremos o modelo
mencionado abaixo:
Consideremos agora que desejamos nos utilizar deste BD e, com cálculo relacional, responder
às consultas abaixo:
ÈOJHEUD5HODFLRQDO
Para iniciarmos o estudo de álgebra relacional, faremos uma analogia desta com a álgebra
tradicional da matemática. Naturalmente, não é nossa intenção um estudo profundo nem
rigoroso da álgebra matemática, mas apenas tomar emprestado algumas idéias que poderão
nos ser úteis no estudo que faremos a seguir.
Poderíamos dizer que o universo da álgebra matemática é povoado por expressões algébricas
cujos componentes chamamos de operandos e operadores, sendo que os operandos pertencem
a algum conjunto de números, e o resultado das expressões também. Poderíamos pensar que
este universo é povoado por "contas".
o que temos são contas diferentes, uma vez que os operandos da álgebra relacional são tabelas
de um BD e o resultado das expressões também.
Agora que já conhecemos os conceitos que estão por trás desta linguagem de consulta,
passemos a averiguar quais são os operadores desta linguagem.
2V2SHUDGRUHVGDÈOJHEUD5HODFLRQDO
6HOHomR
Seu efeito é criar uma tabela com as tuplas da tabela WDE que satisfazem a condição FRQG e
devolvê-la como resultado.
3URMHomR
Seu efeito é criar uma tabela com todas as tuplas da tabela WDE,porem somente com os
atributos especificados entre colchetes, e devolvê-la como resultado.
3URGXWR&DUWHVLDQR
Seu efeito é promover todas as combinações possíveis entre tuplas de WDE e WDE
concatenando-as em uma única tupla, e com estas tuplas resultantes desta concatenação,
criar uma tabela que é devolvida como resultado.
-XQomR
Seu efeito é promover todas as combinações possíveis entre tuplas de WDE e WDE
concatenando-as em uma única tupla, e destas tuplas resultantes da concatenação, tomar
apenas aquelas que satisfizerem FRQG e criar uma tabela que é devolvida como resultado.
8QLmR
Este operador possui a restrição de somente poder operar em tabelas que possuem a
mesma estrutura.
Seu efeito é tomar deWDE e de WDE todas as suas tuplas, criando uma tabela com todas
elas juntas e devolvê-la como resultado.
,QWHUVHomR
Este operador possui a restrição de somente poder operar em tabelas que possuem a
mesma estrutura.
Seu efeito é tomar de WDE aquelas tuplas que também estão em WDE, criar com elas uma
tabela e devolvê-la como resultado.
'LIHUHQoD
Este operador possui a restrição de somente poder operar em tabelas que possuem a
mesma estrutura.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Seu efeito é tomar de WDE aquelas tuplas que não estão também em WDE, criar com elas
uma tabela e devolvê-la como resultado.
Conhecidos os operadores da álgebra relacional, nada melhor para fixar os conceitos do que
concretizar tudo em um exemplo. Para isto, consideremos o seguinte BD:
Consideremos agora, que desejamos nos utilizar deste BD e, com álgebra relacional, responder
às consultas abaixo:
64/6WUXFWXUHG4XHU\/DQJXDJH
SQL é uma linguagem unificada de dados para:
DOUJF
%DQFRVGH'DGRV 3iJLQD
2. Como sub linguagem de programação, interna à uma outra linguagem como COBOL,
Dbase, que se encarregue das estruturas básicas de programação, da formatação de
telas, impressão de relatórios, etc.
Toda estrutura SQL deriva da álgebra e do cálculo relacional. O usuário especifica o resultado
desejado e não o método de obter o resultado.
O formato dos comando SQL é livre, podendo usar uma ou mais linhas. O comando deve ser
terminado por um “;”.
3ULQFLSDLV&RPDQGRV
D &ULDomRGH'RPtQLRV
• Sintaxe:
• Tipos Válidos:
180(5,&7' Número real de ponto fixo com tamanho T (que inclui
eventual sinal e o ponto decimal) e D dígitos à direita do
ponto decimal.
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Exemplo:
E (OLPLQDomRGH'RPtQLRV
• Sintaxe:
• Exemplo:
F &ULDomRGH7DEHODV
• Sintaxe:
[,...]
[,<coluna>]) REFERENCES <tabela>
[ON DELETE CASCADE] [ON UPDATE CASCADE]]
[...]
[FOREIGN KEY (<coluna>
[,<coluna>]
[,...]
[,<coluna>]) REFERENCES <tabela>
[ON DELETE CASCADE] [ON UPDATE CASCADE]]
[CHECK <condicao>]);
• Exemplo:
G $FUpVFLPRGH&ROXQDVDXPD7DEHOD
• Sintaxe:
• Exemplo:
H (OLPLQDomRGH&ROXQDVDXPD7DEHOD
• Sintaxe:
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Exemplo:
I (OLPLQDomRGH7DEHODV
• Sintaxe:
• Exemplo:
J &ULDomRGHËQGLFHV
• Sintaxe:
• Exemplo:
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Restrições:
K (OLPLQDomRGHËQGLFHV
• Sintaxe:
• Exemplo:
L ,QFOXVmRGH'DGRV
• Sintaxe:
• Exemplo:
M ([FOXVmRGH'DGRV
• Sintaxe:
[WHERE <condicao>];
• Exemplo:
N $WXDOL]DomRGH'DGRV
• Sintaxe:
UPDATE <tabela>
SET <coluna> = <valor>
[, <coluna> = <valor>]
[,...]
[, <coluna> = <valor>]
[WHERE <condicao>];
• Exemplo:
UPDATE notas
SET nota = nota + 3.0
WHERE cod_mat = “01”;
O &ULDomRGH$VVHUo}HV
• Sintaxe Geral:
P(OLPLQDomRGH$VVHUo}HV
• Sintaxe Geral:
DOUJF
%DQFRVGH'DGRV 3iJLQD
Q &RQVXOWDV
O comando SELECT é uma query, isto é, faz pesquisas em tabelas.
• Sintaxe Geral:
• Seleção Simples:
ä Exemplo:
SELECT *
FROM notas
WHERE cod_mat = “01”;
Resultado:
5$ &2'B0$7 127$
90218 01 9.5
90230 01 5.0
90003 01 0.5
90199 01 8.0
90109 01 8.0
• Projeção Simples:
ä Exemplo:
DOUJF
%DQFRVGH'DGRV 3iJLQD
SELECT nome
FROM professores;
Resultado:
1RPH
André
Chico
Lucius
Celso
Rogério
Vagner
Renato
ä Exemplo:
SELECT *
FROM notas
ORDER BY cod_mat, nota;
Resultado:
5$ &2'B0$7 127$
90003 01 0.5
90230 01 5.0
90199 01 8.0
90109 01 8.0
90218 01 9.5
. . .
. . .
. . .
90090 08 0.0
90113 08 1.0
90033 08 10.0
• Operadores Aritméticos:
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Operadores Lógicos:
SÍMBOLO DESCRIÇÃO
= igual a
!= diferente de
> maior que
>= maior ou igual a
< menor que
<= menor ou igual a
AND e
OR ou
NOT não
• Between...And:
ä Exemplo:
Resultado:
5$ 127$
90218 9.5
90230 5.0
90033 10.0
90199 8.0
90109 8.0
• In (Lista):
Opera sobre uma lista de valores e testa se o valor da coluna especificada pertence a
esta lista.
ä Exemplo:
SELECT *
FROM professores
DOUJF
%DQFRVGH'DGRV 3iJLQD
Resultado:
&2'B352) 120(
01 André
04 Celso
• Like:
Quando não se sabe o valo exato que está sendo procurado, usa-se o operador LIKE
que reconhece dois caracteres especiais: (1) corresponde a uma seqüência qualquer
de 0 ou mais caracteres; e (2) B corresponde a qualquer caracter.
ä Exemplo:
SELECT alunos3oPD
WHERE nome LIKE “R%”;
Resultado:
5$ 120( $3(/,'2
90223 Rachel de Carvalho Pascolino
90228 Raquel Moricone Pacheco Pézinho
90229 Raquel Pinhantelli da Silva Vamp
90230 Regiane Feltrin de Melo
90238 Ricardo Cesar Sebastião Tião
90242 Ricardo Santos Lisboa Pipoca
90249 Rodrigo Spadaccia Zolhu’s
• Is [Not] Null:
ä Exemplo:
Resultado:
DOUJF
%DQFRVGH'DGRV 3iJLQD
5$ &2'B0$7
90090 09
90090 08
90090 03
• Group By:
ä Funções de Grupo:
ä Primeiro Exemplo:
DOUJF
%DQFRVGH'DGRV 3iJLQD
Resultado:
&2'B0$7 0HGLD
01 6.2
08 5.5
ä Segundo Exemplo:
Resultado:
4WRV
9
ä Observações:
• Sub Queries:
Como um comando SELECT pode retornar uma lista de valores, é necessário que o
operador seja adequado ao resultado produzido pelo comando. A alternativa é que, no
caso de listas, o outro operando também seja uma lista.
ä Exemplo:
Resultado:
5$ 127$
90218 9.5
90230 5.0
90003 0.5
90199 8.0
90109 8.0
ä Observações:
• Distinct:
Como default de SELECT é ALL, sempre que a instrução SELECT é executada ela
selecionará todas as linhas que atenderem a condição especificada, mesmo que haja
duplicidade na tabela de resultado.
ä Exemplo:
Resultado:
5$ 127$
90090 0.0
DOUJF
%DQFRVGH'DGRV 3iJLQD
ä Exemplo:
Resultado:
5$ &2'B0$7 127$
90113 08 1.0
90218 01 9.5
90287 03 3.5
90090 09 0.0
90089 05 0.5
90230 01 5.0
90118 06 1.0
90259 07 4.0
90214 04 1.5
90090 08 0.0
90090 03 0.0
90242 02 2.5
90238 04 2.5
90003 01 0.5
90074 07 3.0
90198 05 4.0
90199 01 8.0
90109 01 8.0
ä Exemplo:
Resultado:
5$ 127$ &2'B0$7
90090 0.0 09
90090 0.0 08
90090 0.0 03
• O Predicado EXISTS:
O predicado EXISTS é o único que permite o uso do asterisco (*) na subquery. Outra
observação é que a subquery envolver informações da query principal.
ä Exemplo:
SELECT ra
FROM alunos3oPD as A
WHERE EXISTS (SELECT *
FROM Notas as N
Where N.RA = A.RA and Nota = 0);
Resultado:
5$
90090
90090
90090
• O Predicado UNIQUE:
DOUJF
%DQFRVGH'DGRV 3iJLQD
ä Exemplo:
SELECT ra
FROM alunos3oPD as A
WHERE UNIQUE (SELECT *
FROM Notas as N
Where N.RA = A.RA and Nota = 0);
Resultado:
5$
• Queries Correlacionadas:
ä Exemplo:
Mostra os alunos cuja nota é maior que a média das notas de todos os outros
alunos. É listado em ordem do código da matéria.
Resultado:
5$ 127$ &2'B0$7
90218 9.5 01
90199 8.0 01
90109 8.0 01
90242 2.5 02
90287 3.5 03
90238 2.5 04
DOUJF
%DQFRVGH'DGRV 3iJLQD
90198 4.0 05
90118 1.0 06
90259 4.0 07
90033 10.0 08
90090 0.0 09
R -XQomRGH7DEHODV
As junções de tabelas possibilitam a criação de tabelas de resultado contendo
informações extraídas de duas tabelas de dados. Os atributos da tabela resultado de
uma junção de duas tabelas serão os atributos da primeira tabela, seguidos pelos
atributos da segunda tabela. As linhas da tabela resultado de uma junção serão obtidas
pela concatenação de linhas da primeira tabela com linhas da segunda tabela.
Existem vários tipos de junção, a saber: produto cartesiano, junção interna, junção
externa esquerda, junção externa direita e junção externa completa.
nulos). As linhas da segunda tabela cujos valores desses atributos comuns não
coincidirem com os valores destes mesmos atributos de nenhuma linha da primeira
tabela NÃO serão combinadas neste tipo de junção.
Os atributos comuns que serão levados em conta para combinar linhas da primeira
tabela com linhas da segunda tabela podem ser indicados explicitamente ou não.
No caso de uma junção NATURAL eles não são indicados explicitamente; TODOS os
atributos comuns serão levados em conta e eles aparecerão UMA ÚNICA VEZ na
tabela resultante da junção.
DOUJF
%DQFRVGH'DGRV 3iJLQD
No caso de junções não naturais, o critério de junção precisará ser explicitado com ON
ou com USING. No primeiro caso (ON), os atributos comuns às duas tabelas
aparecerão DUPLICADOS na tabela resultante da junção. No segundo caso (USING),
os atributos comuns às duas tabelas aparecerão UMA ÚNICA VEZ na tabela resultante
da junção.
ä Sintaxe:
<tabela>
[NATURAL]
{INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER}
JOIN
<tabela>
[ON <condicao>]
[USING (<coluna>
[, <coluna>]
[,...]
[, <coluna>]]
[AS <tabela> (<coluna>
[, <coluna>]
[,...]
[, <coluna>])];
Resultado:
5$ 127$ 120(B'$7
90218 9.5 LPC
90033 10.0 LMON
90199 8.0 LPC
90109 8.0 LPC
USING (cod_prof)
AS temp (cod_prof, nome_prof, cod_mat, nome_mat))
ORDER BY nome_prof;
Mostra os professores e as matérias que lecionam, mesmo que alguém não lecione
matéria alguma.
Resultado:
SQRPH PQRPH
André LPC
André APSI
André IA
Celso CAI
Chico CG
Lucius ISSO
Lucius REDES
Lucius LMON
Renato
Rogério FPD
Vagner
ä Observações:
AUTO JUNÇÕES (Self Joins) são o tipo de junção em que uma tabela é juntada
consigo própria.
S 8QLmRGH7DEHODV
A união de tabelas permite agrupar, em uma única tabela de resultado, as linhas de
duas outras tabelas. É imprescindível que as tabelas envolvidas tenham a mesma
estrutura, i.e., a mesma quantidade de colunas, com os mesmos nomes e tipos. Este
tipo de operação só poderá ser realizada se as tabelas envolvidas residirem no mesmo
BD.
ä Sintaxe:
<tabela>
UNION
<tabela>;
DOUJF
%DQFRVGH'DGRV 3iJLQD
ä Exemplo:
Resultado:
5$ $3(/,'2
89131
89147 Maçãzinha
89276
90002 Béri
90003 Kety
90030 Gaf’s
90033
90036 Boca
90062 Cleq
90074 Chuchu
90089 Queixada
90090 Philco
90095 Nelinho
90109 Tocha
90113 Marciano
90118 Aparecida
90123 Labareda
90152
90185 Herman
90198 Magé
90199
90214 Muambeira
90218
90223
90228 Bastiana
90229 Vamp
90230
90238 Tião
90242 Pipoca
90249 Zolhu’s
90259 Chibata
90268
90269
90287 Vaca Loka
90501 Ploff
90144 Cogumelo
DOUJF
%DQFRVGH'DGRV 3iJLQD
90166 Nariguda
90262 Nadadeira
T ,QWHUVHomRGH7DEHODV
A interseção de tabelas permite obter uma tabela de resultado com as linhas comuns a
duas outras tabelas. É imprescindível que as tabelas envolvidas tenham a mesma
estrutura, i.e., a mesma quantidade de colunas, com os mesmos nomes e tipos. Este
tipo de operação só poderá ser realizada se as tabelas envolvidas residirem no mesmo
BD.
ä Sintaxe:
<tabela>
INTERSECT
<tabela>;
ä Exemplo:
Resultado:
5$ $3(/,'2
U 'LIHUHQoDGH7DEHODV
A diferença de tabelas permite obter uma tabela de resultado com todas as linhas da
primeira tabela, exceto aquelas que também se encontram na segunda tabela. É
imprescindível que as tabelas envolvidas tenham a mesma estrutura, i.e., a mesma
quantidade de colunas, com os mesmos nomes e tipos. Este tipo de operação só poderá
ser realizada se as tabelas envolvidas residirem no mesmo BD.
DOUJF
%DQFRVGH'DGRV 3iJLQD
ä Sintaxe:
<tabela>
EXCEPT
<tabela>;
ä Exemplo:
Resultado:
5$ $3(/,'2
89131
89147 Maçãzinha
89276
90002 Béri
90003 Kety
90030 Gaf’s
90033
90036 Boca
90062 Cleq
90074 Chuchu
90089 Queixada
90090 Philco
90095 Nelinho
90109 Tocha
90113 Marciano
90118 Aparecida
90123 Labareda
90152
90185 Herman
90198 Magé
90199
90214 Muambeira
90218 P. P.
90223
90228 Bastiana
90229 Vamp
90230
90238 Tião
90242 Pipoca
90249 Zolhu’s
DOUJF
%DQFRVGH'DGRV 3iJLQD
90159 Chibata
90268
90269
90287 Vaca Loka
90501 Ploff
V &ULDomRGH9LV}HV
Visão é uma tabela virtual, ou seja, uma tabela que não existe fisicamente em disco,
mas que funciona praticamente como se existisse.
Cada visão pode basear se em diversas outras tabelas e visões, assim como conter
colunas resultantes de expressões.
A visão será atualizada toda vez que as tabelas ou visões em que se baseiam forem
atualizadas.
• Sintaxe:
[WITH CHECK OPTION] é uma cláusula opcional que, quando usada impede a
inclusão de linhas que não atendem aos critérios da instrução de definição da visão.
• Exemplo:
Resultado:
DOUJF
%DQFRVGH'DGRV 3iJLQD
PHOKRUBDOXQR
5$ 127$ &2'B0$7
90218 9.5 01
90287 3.5 03
90090 0.0 09
90118 1.0 06
90259 4.0 07
90033 10.0 08
90242 2.5 02
90238 2.5 04
90198 4.0 05
90199 8.0 01
90109 8.0 01
ä Observações:
Qualquer query válido pode ser usado na cláusula AS, desde que não contenha
uma cláusula ORDER BY.
Para que uma visão seja atualizável a query que a definiu deve obedecer certas
restrições: (1) deve-se referir a uma única tabela; (2) não pode conter cláusulas
GROUP BY e DISTINCT e nem funções de grupo.
W (OLPLQDomRGH9LV}HV
• Sintaxe:
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Exemplo:
X 'HILQLomRGH6LQ{QLPRV
Os sinônimos são como abreviaturas do nome das tabelas ou visões, existindo apenas
de forma lógica com a única finalidade de diminuir o tempo de digitação.
• Sintaxe:
• Exemplos:
Y (OLPLQDomRGH6LQ{QLPRV
Quando uma tabela é eliminada eventuais sinônimos que ela tenha são também
eliminados automaticamente.
• Sintaxe:
• Exemplo:
Z &RQFHVVmRGH3ULYLOpJLRV
Os Sistemas Gerenciadores de Banco de Dados, por definição, armazenam grandes
volumes de informações.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Podemos dizer, sem risco de erros, que uma das medidas mais fiéis da qualidade de um
Sistema de Gerenciamento de Banco de Dados é a proteção que ele oferece contra o acesso
e o uso dessas informações não se perderão ou serão indevidamente modificadas em
conseqüência do uso do sistema.
Privilégio é o nome que se dá, em SQL, à autorização fornecida a um usuário para que
realize determinadas operações, tais como:
• Sintaxe:
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Primeiro Exemplo:
Dá aos usuários Cleuza e Wainer os privilégios de apagar, inserir e listar linhas das
tabelas alunos3oPD e alunos2oTA.
• Segundo Exemplo:
• Terceiro Exemplo:
GRANT ALL
ON TABLE notas
TO Sílvia
WITH GRANT OPTION;
DOUJF
%DQFRVGH'DGRV 3iJLQD
O usuário Sílvia recebe todos os privilégios sobre a tabela notas podendo conceder esse
privilégios a outros usuários.
[ 5HYRJDomRGH3ULYLOpJLRV
Da mesma forma que são concedidos,os privilégios podem ser revogados.
• Sintaxe:
• Exemplo:
REVOKE UPDATE
ON notas
FROM Sílvia;
\ 3URFHVVDPHQWRGH7UDQVDo}HV
Transação é uma série de operações consideradas em conjunto. Assim, um transação só
será concluída se todas as operações que a compõem forem completadas com sucesso.
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Sintaxe:
BEGIN TRANSACTION
<comando SQL>
...
<comando SQL>
END TRANSACTION
• Exemplo:
BEGIN TRANSACTION
UPDATE notas
SET nota = 0
WHERE NOTA >= 5.0;
END TRANSACTION
&DWiORJRV
É um grupo de tabelas e visões que contém informações sobre o Banco de Dados. Elas são
criadas quando o Banco de Dados é criado.
O catálogo de dados descreve tabelas, colunas, índices, usuários, privilégios de acesso e outros
objetos.
DOUJF
%DQFRVGH'DGRV 3iJLQD
0RGR3URJUDPDGR
Dentre as vantagens de utilizar SQL em modo programado, podemos citar: (1) SQL torna os
programas muito mais legíveis e portanto bem mais fáceis de depurar e manter; (2) SQL
produz um código significativamente mais compacto que qualquer linguagem procedural; e
(3) Toda boa implementação de SQL tem performance superior à das linguagens procedurais
na execução das tarefas de processamento às quais SQL se destina (definição, manipulação e
controle de dados).
Ao usar SQL junto com uma outra linguagem, devemos utilizar desta outra linguagem o que
ela tem de melhor e que não existe em SQL, ou seja, construções de programação estruturada
como comandos condicionais, comandos iterativos, funções de manipulação de strings e datas,
comandos de vídeo, comandos de rede, comandos de configuração de ambiente, comandos de
formatação de relatório, etc.
Há uma diferença importante entre as duas linguagens, com reflexo direto na construção de
programas. SQL se baseia em conjuntos para acessar os dados, e faz esse acesso de modo não
procedimental, ou seja, determina os dados necessários e deixa a cargo dos recursos internos
da linguagem a localização desses dados.
Linguagens convencionais, por sua vez, obrigam o programador a dizer quais as áreas de
trabalho utilizadas, quais os arquivos abertos e quais os registros desejados, por meio de
instruções procedimental que a cada passo determina o que deve ser feito.
Além disso, linguagens convencionais não manipulam sobre conjunto de dados, uma vez que
trabalha registro a registro (o que é caracterizado pelo uso de um ponteiro de arquivo para
indicar sempre o registro afetado pela operação em curso).
Na prática, isso significa que existe um ponto de incompatibilidade entre as duas linguagens, e
no entanto, não tem maiores conseqüências. Basta que o programador não misture no mesmo
programa comandos de criação e acesso aos arquivos de ambas as linguagens, e não inclua em
programas que contenham instruções SQL e comandos e funções de linguagens convencionais
(voltadas para o posicionamento de ponteiros do arquivo), uma vez que o conceito de
ponteiros não tem aplicação dentro de SQL.
DOUJF
%DQFRVGH'DGRV 3iJLQD
Quase tudo que é realizado interativamente no SQL pode ser incluído dentro de programas.
No entanto, em modo programado, dispõe-se também de alguns comandos novos.
Os comandos de SQL são, em geral, usados nas linguagens hospedeiras entre os delimitadores
EXEC SQL e END EXEC. Uma exceção desta regra é o ambiente de programação do
DBaseIV.
&RPDQGRV6LPSOHVGH0RGR3URJUDPDGR
D 6(/(&7FRPFULDomRGHWDEHOD
• Sintaxe:
• Exemplo:
DOUJF
%DQFRVGH'DGRV 3iJLQD
E ,QVHUomRGHJUDQGHVYROXPHVGHGDGRV
Este comendo impõe a restrição de que a tabela de resultado deve ter a mesma estrutura da
tabela destino. Para realizar a inserção de dados de uma tabela para outra, a inclusão dos
dados poderia ser programada como se segue.
• Sintaxe:
&RPDQGRVGH0RGR3URJUDPDGRUHODFLRQDGRVFRP&XUVRUHV
D 'HFODUDomRGH&XUVRUHV
Cursores são um recurso que permite processar tabelas de resultado com várias linhas.
• Sintaxe:
[FOR UPDATE OF] é uma cláusula opcional que permite a atualização da tabela
vinculada ao cursor.
• Exemplo:
Declara o cursor posição contendo as linhas dos professores e as matérias que ele
leciona.
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Restrições:
b) a tabela de resultado não poderá ser atualizada se a cláusula SELECT: (1) contiver
funções agregadas; (2) contiver as cláusulas UNION, DISTINCT, GROUP BY, ou
HAVING; (3) contiver, na lista de colunas, colunas de mais de uma tabela ou visão;
(4) contiver, na lista de colunas, uma ou mais colunas de uma visão que não possa
ser atualizada.
E $EHUWXUDGH&XUVRUHV
• Sintaxe:
OPEN <cursor>;
• Exemplo:
OPEN posição;
F 2EWHQomRGH'DGRVGH&XUVRUHV
A manipulação de um cursor depende de outros elementos SQL:
• Ainda assim faltaria um recurso que permitisse acessar uma linha do cursor de cada
vez e armazenar o seu conteúdo numa variável de memória;
ä Sintaxe:
FETCH <cursor>
INTO:<var>
[,:<var>]
[,...]
[,:<var>];
DOUJF
%DQFRVGH'DGRV 3iJLQD
Todas as <var> são variáveis de memória na qual os valores de cada linha do cursor
serão transferidos.
• Antes do comando FETCH o ponteiro do cursor (um indicador da linha que será
processada) está posicionado antes da primeira linha da tabela de resultado.
Quando o FETCH é executado pela primeira vez dentro de um laço iterativo, o ponteiro
vai para a primeira linha da tabela e prossegue linha a linha a cada execução do
FETCH.
Nesse laço iterativo deve-se testar se o comando FETCH está devolvendo linha, ou
seja, se SQLCNT é diferente de 0. Caso contrário, já foram utilizadas todas as linhas da
tabela.
G $WXDOL]DomRGH'DGRVGH&XUVRUHV
Os cursores também podem ser usados para atualização de tabelas desde que respeitadas as
restrições mencionadas anteriormente (por exemplo, eles só poderão ser construídos a
partir de uma única tabela). Para isso será preciso recorrer à cláusula FOR UPDATE OF.
• Sintaxe:
UPDATE <tabela>
SET <coluna> = <valor>
[, <coluna> = <valor>]
[,...]
[, <coluna> = <valor>]
WHERE CURRENT OF <cursor>;
• Exemplo:
PICTURE “99”
read
UPDATE professores
SET cod_prof = codigo_aux
WHERE CURRENT OF posição;
FETCH posição
INTO cod_prof, nome_prof;
ENDDO
CLOSE posição;
H )HFKDPHQWRGH&XUVRUHV
Cada cursor aberto eqüivale a uma área de trabalho ocupada, por isso, o controle do
número de áreas abertas se torna crítico para o bom funcionamento dos programas. Por
isso, existe um comando que permite fechar os cursores que se tornarem desnecessários.
• Sintaxe:
CLOSE <cursor>;
• Exemplo:
CLOSE posição;
&RPDQGRV'LQkPLFRVHP0RGR3URJUDPDGR
Comandos dinâmicos permitem que se construa e submeta comandos SQL em tempo de
execução sob a forma de cadeias de caracteres.
D 3UHSDUDomRGH&RPDQGRV
Preparar um comando SQL significa compilá-lo e deixá-lo pronto para uso subseqüente.
• Sintaxe:
E ([HFXomRGH&RPDQGRV
Comandos não precisam, necessariamente, serem preparados antes de serem executados.
• Sintaxe:
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Exemplo:
void main ()
{
char* Scomando = “Update notas \
set nota = nota * 1.25 \
where cod_mat =?”;
char Materia [3];
EXEC SQL
prepare Comando from:Scomando;
execute Comando using:Materia;
END EXEC
}
DOUJF
%DQFRVGH'DGRV 3iJLQD
$SrQGLFH$
([HUFtFLRVGH3URMHWRGH%'
1. Uma companhia de comércio de livros trabalha recebendo pedidos de livros dos clientes,
encomendando-os para editoras e remetendo-os aos clientes assim que disponíveis.
Os pedidos de compra a editoras são feitos em lotes para que a companhia possa desfrutar
de descontos por fazer encomendas maiores.
As remessas aos clientes são feitas assim que o pedido estiver completamente atendido.
Quando da entrega, o cliente recebe também um aviso de cobrança para que possa efetuar
o pagamento (o cliente paga somente após ter recebido os livros encomendados).
As editoras, por sua vez, de posse dos pedidos, enviam à companhia juntamente com os
livros, uma guia de remessa (para possibilitar a companhia conferir os produtos enviados
com os realmente recebidos) e uma fatura que deverá ser liquidada pela companhia.
Para se adquirir um telefone da própria TELEFONICA, deve-se dirigir a uma de suas lojas
e preencher um formulário de inscrição com os dados pessoais do pretendente. Verifica-se
então, com base no endereço do pretendente, mais especificamente com base no bairro em
que resido o mesmo, os prefixos das linhas que poderiam atender a sua residência. No caso
DOUJF
%DQFRVGH'DGRV 3iJLQD
de haver alguma linha da TELEFONICA com o prefixo apropriado e livre, esta é vendida
ao interessado; caso contrário, a TELEFONICA lhe vende um plano de expansão. Em
qualquer caso, o pagamento poderá ser feito de diversas maneiras, de acordo com os
planos de pagamento vigentes (estes planos são mutáveis com o tempo, naturalmente
somente para compradores novos).
As listas de preços são base para o Sistema de Faturamento, que, a partir da identidade do
cliente e do produto, aplica o preço correspondente e o desconto instituído para obter o
preço de venda.
O desconto na AUTOPARTS é algo bastante flexível: ele pode ser dado para um produto,
para uma categoria de produtos, para um cliente, para uma classe de clientes ou para
qualquer combinação destas coisas. No entanto, o faturamento só considerará o desconto
se ele tiver sido cadastrado previamente.
DOUJF
%DQFRVGH'DGRV 3iJLQD
• Reajuste nos formadores de preços dos produtos (matéria prima, salários, custos operacionais, etc);
• Índices de reajustes autorizados pelo governo;
• Preços praticados pela concorrência.
Assim, a política de preços da AUTOPARTS varia entre "estabelecer o melhor preço para
a AUTOPARTS" e "praticar aquilo que o governo e a concorrência permitem",
dependendo do momento.
Para operar essa "política de preços", a coordenação precisa de apoio informatizado para:
Estabelecer índices de reajustes variados, de acordo com as várias situações (por produtos,
por classes de produto, por cliente, por classes de cliente, etc);
Simular o impacto desses descontos no faturamento, de acordo com uma determinada lista
de preços e uma determinada projeção de vendas;
Os órgãos operacionais distribuídos pelas FILIAIS tem por objetivo controlar a aplicação
da política de preços da AUTOPARTS.
DOUJF
%DQFRVGH'DGRV 3iJLQD
$SrQGLFH%
7DEHODVGD6HomRGH
ÈOJHEUD&iOFXOR5HODFLRQDO
$OXBRB$QR
RAAlu NomeAlu CodCur
92023 Álvaro PD
92078 Ana EL
92128 Débora EL
92159 Fábio PD
92193 Gabriela EL
92210 Ana PD
92309 Victor PD
$OXBRB$QR
RAAlu NomeAlu CodCur
91019 Gilmar PD
91056 Antônio EL
91152 Durval EL
91187 Fabrício PD
91190 Gilmar EL
91231 João PD
91359 Valter PD
$OXBRB$QR
RAAlu NomeAlu CodCur
90001 Alex PD
90036 André EL
90147 David EL
90179 Felipe PD
90182 Gilmar EL
92236 José PD
92393 Sérgio PD
&XUVRV
CodCur NomeCur
DOUJF
%DQFRVGH'DGRV 3iJLQD
PD Processamento de Dados
EL Eletro Eletrônica
0DW2EU&XU$QR
CodCur Ano NomeMat
PD 1 Matemática
PD 1 Português
PD 2 Banco de Dados
PD 3 Inteligência Artificial
PD 3 Redes
EL 1 Eletrônica Básica
EL 2 Circuitos Lógicos
EL 2 Automação
EL 3 Projeto Elétrico
DOUJF
%DQFRVGH'DGRV 3iJLQD
$SrQGLFH&
7DEHODV8VDGDVQD6HomRVREUH64/
DOXQRVR3'
5$ 120( $3(/,'2
89131 Heloisa Girardi Malavasi
89147 Jorge Hissasi Hori Maçãzinha
89276 Silas Davi Santos
90002 Adriana Davólio Béri
90003 Adriana Ketaiama Kojima Kety
90030 Alvaro de Matos Miranda Filho Gaf’s
90033 Ana Carolina Teles de Souza
90036 André Luís Arendt Boca
90062 Clenilce Valença Reis Cleq
90074 David A. C. Romanetto Chuchu
90089 Eduardo Seiti de oliveira Queixada
90090 Eduardo Tsuyoshi Tanabe Philco
90095 Eric Fernando do Amaral Neves Nelinho
90109 Fernando Tessari Rodrigues Tocha
90113 Fernando Luís do Nascimento Marciano
90118 Gabriela de Fátima Batista Aparecida
90123 Gisele Leite Bizarri Labareda
90152 Juliana Cristina Biason
90185 Marcelo Eduardo dos Anjos Herman
90198 Maria Eugênia Verdaguer Magé
90199 Mariana Rodrigues
90214 Mônica de Grazia Henrique Muambeira
90218 Nívea Oliveira Camargo P. P.
90223 Rachel de Carvalho Paschoalino
90228 Raquel Moriconi Pacheco Bastiana
90229 Raquel Pinhatelli da Silva Vamp
90230 Regiane Feltrin de Melo
90238 Ricardo César Sebastião Tião
90242 Ricardo Santos Lisboa Pipoca
90249 Rodrigo Spadaccia Zolhu’s
90159 Sandra Regina Rigamonti Chibata
90268 Simone Rejane Mafra
90269 Tábata Emke
90287 Wesley Pires Bonifácio Vaca Loka
90501 Flávia Zaroni Camargo Ploff
DOUJF
%DQFRVGH'DGRV 3iJLQD
DOXQRVR7$
5$ 120( $3(/,'2
90144 Joana Cogumelo
89166 Kelly Nariguda
89262 Sharon Nadadeira
QRWDV
5$ &2'B0$7 127$
90113 08 1.0
90218 01 9.5
90287 03 3.5
90090 09 0.0
90089 05 0.5
90230 01 5.0
90118 06 1.0
90259 07 4.0
90033 08 10.0
90214 04 1.5
90090 08 0.0
90090 03 0.0
90242 02 2.5
90238 04 2.5
90003 01 0.5
90074 07 3.0
90198 05 4.0
90199 01 8.0
90109 01 8.0
PDWHULDV
&2'B0$7 120( &2'B352)
01 LPC 01
02 CG 02
03 ISSO 03
04 APSI 01
05 IA 01
06 CAI 04
07 REDES 03
08 LMON 03
09 FPD 05
DOUJF
%DQFRVGH'DGRV 3iJLQD
SURIHVVRUHV
&2'B352) 120(
01 André
02 Chico
03 Lucius
04 Celso
05 Rogério
06 Vagner
07 Renato
DOUJF
%DQFRVGH'DGRV 3iJLQD
$SrQGLFH'
3DODYUDV5HVHUYDGDVGH64/
DOUJF
%DQFRVGH'DGRV 3iJLQD
$SrQGLFH(
([HUFtFLRVGH/LQJXDJHQVGH&RQVXOWD
Qual o nome dos laboratórios que não trabalham com nenhum hospital?
Qual o nome e o telefone dos laboratórios que trabalham apenas com hospitais que são
só geriátricos?
Qual o número dos laboratórios que trabalham apenas com hospitais que são
geriátricos e psiquiátricos?
DOUJF