Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
de Banco
de Dados
Paulo Henrique Cayres
responsvel
pelo
Ministrio da
Cultura
Ministrio da
Sade
Ministrio da
Educao
Ministrio da
Cincia, Tecnologia
e Inovao
Modelagem
de Banco
de Dados
Modelagem
de Banco
de Dados
Rio de Janeiro
Escola Superior de Redes
2015
Diretor Geral
Nelson Simes
Diretor de Servios e Solues
Jos Luiz Ribeiro Filho
ISBN 978-85-63630-50-6
1. Modelagem de dados. 2. Banco de dados. 3. Sistema de gerenciamento de banco de
dados (SGBD). 4. PostgreSQL. I. Titulo.
CDD 005.743
Sumrio
Escola Superior de Redes
A metodologia da ESRix
Sobre o curso x
A quem se destinax
Convenes utilizadas neste livroxi
Permisses de usoxi
Sobre o autorxii
iii
Modelos de Sistema9
Funcional9
De dados10
Comportamental 10
Projeto de banco de dados10
Etapas da modelagem do banco de dados11
Primeira Etapa Anlise de Requisitos12
Exemplo de Minimundo: EMPRESA13
Segunda Etapa Anlise e projeto 13
Atividade de Fixao 13
3. O Modelo Lgico
Decises sobre o modelo41
Somente entidade tem atributos?41
Atributo multivalorado?42
Quando transformar um atributo em entidade?42
Relacionamentos 43
Coleo de Relaes44
Restries de Integridade45
Modelo Conceitual (DER) x Modelo Lgico46
Entidades e atributos47
iv
Relacionamentos binrios47
Relacionamento n-rio, onde n > 249
Relacionamento unrio (ou recursivo)49
Generalizao ou especializao50
Atributo multivalorado51
Quadro resumo51
Exerccios de Fixao Comandos DDL para criao do Banco de Dados53
4. Modelo Fsico
O modelo fsico55
Structured Query Language (SQL)57
PostgreSQL58
Caractersticas do PostgreSQL59
Criao do banco de dados59
Alterao do banco de dados64
Excluso do banco de dados65
Esquema de banco de dados65
Criando tabelas no banco de dados67
Alterao de tabelas no banco de dados72
Excluso de tabelas no banco de dados73
Domnios74
Sequncia74
Script SQL/DDL do banco de dados77
Exerccios de Fixao Comandos DDL para criao do banco de dados78
DELETE84
TRUNCATE85
SELECT85
Operadores86
Operadores negativos87
Comandos especiais87
ORDER BY88
LIMIT89
Juno de tabelas89
Juno Interna90
Juno Cruzada91
Juno natural92
Autojunes92
Junes equivalentes x no equivalentes93
Juno externa95
Operaes sobre conjuntos95
vi
Clusulas ANY/SOME117
Clusula ALL118
Consultas aninhadas correlacionadas118
Subconsulta TABELA119
Inserir dados recuperados de uma tabela em outra (uso do SELECT)120
ndices121
Criando, renomeando e removendo ndices124
Vises125
Criao de viso126
Executando uma viso127
Alterando e removendo uma viso128
9. Stored Procedures
Exerccio de nivelamento 147
Tratamento de erros147
Clusula UNIQUE_VIOLATION149
Clusula FOUND150
Comando RAISE (levantar)150
Cursor151
Trigger155
Exerccio de Fixao 158
vii
10. Transaes
Exerccio de nivelamento 159
Concorrncia159
Bloqueios161
Granularidade dos Bloqueios161
MVCC162
Bloqueios e impasses162
Transaes163
Bloqueios no PostgreSQL165
Log e Savepoints167
Exerccio de Fixao Transaes168
viii
A metodologia da ESR
A filosofia pedaggica e a metodologia que orientam os cursos da ESR so baseadas na
aprendizagem como construo do conhecimento por meio da resoluo de problemas tpicos da realidade do profissional em formao. Os resultados obtidos nos cursos de natureza
terico-prtica so otimizados, pois o instrutor, auxiliado pelo material didtico, atua no
apenas como expositor de conceitos e informaes, mas principalmente como orientador do
aluno na execuo de atividades contextualizadas nas situaes do cotidiano profissional.
A aprendizagem entendida como a resposta do aluno ao desafio de situaes-problema
semelhantes s encontradas na prtica profissional, que so superadas por meio de anlise,
sntese, julgamento, pensamento crtico e construo de hipteses para a resoluo do problema, em abordagem orientada ao desenvolvimento de competncias.
Dessa forma, o instrutor tem participao ativa e dialgica como orientador do aluno para as
atividades em laboratrio. At mesmo a apresentao da teoria no incio da sesso de aprendizagem no considerada uma simples exposio de conceitos e informaes. O instrutor
busca incentivar a participao dos alunos continuamente.
ix
Sobre o curso
Apresenta de forma clara e objetiva o processo de modelagem, criao e manuteno de
banco de dados relacionais. Apresenta uma viso geral sobre bancos de dados, bem como
conceitos e metodologias para modelagem conceitual, lgica e fsica de banco de dados relacionais. Aborda as principais caractersticas e funcionalidades de um sistema gerenciador de
bancos de dados usando como base o PostgreSQL.
Estas prticas e regras, para a correta implementao de projetos de banco de dados relacionais, so ferramentas utilizadas no curso e que se aplicam a qualquer sistema baseado na
linguagem SQL.
Cada sesso apresenta um conjunto de exemplos e atividades prticas que permitem a prtica das habilidades apresentadas.
A quem se destina
Pessoas interessadas em trabalhar com bancos de dados, se familiarizando com tcnicas de
modelagem, projeto e manipulao de banco de dados relacionais. uma porta de entrada
para quem quer se aprofundar no assunto e considera trabalhar como analista de dados,
administrador de bancos de dados ou tambm para programadores interessados em conhecer o processo de modelagem de dados e a linguagem SQL.
Largura constante
Indica comandos e suas opes, variveis e atributos, contedo de arquivos e resultado da sada
de comandos. Comandos que sero digitados pelo usurio so grifados em negrito e possuem
o prefixo do ambiente em uso (no Linux normalmente # ou $, enquanto no Windows C:\).
Contedo de slide q
Indica o contedo dos slides referentes ao curso apresentados em sala de aula.
Smbolo w
Indica referncia complementar disponvel em site ou pgina na internet.
Smbolo d
Indica um documento como referncia complementar.
Smbolo v
Indica um vdeo como referncia complementar.
Smbolo s
Indica um arquivo de adio como referncia complementar.
Smbolo !
Indica um aviso ou precauo a ser considerada.
Smbolo p
Indica questionamentos que estimulam a reflexo ou apresenta contedo de apoio ao
entendimento do tema em questo.
Smbolo l
Indica notas e informaes complementares como dicas, sugestes de leitura adicional ou
mesmo uma observao.
Smbolo
Indica atividade a ser executada no Ambiente Virtual de Aprendizagem AVA.
Permisses de uso
Todos os direitos reservados RNP.
Agradecemos sempre citar esta fonte quando incluir parte deste livro em outra obra.
Exemplo de citao: TORRES, Pedro et al. Administrao de Sistemas Linux: Redes e Segurana.
Rio de Janeiro: Escola Superior de Redes, RNP, 2013.
xi
Comentrios e perguntas
Para enviar comentrios e perguntas sobre esta publicao:
Escola Superior de Redes RNP
Endereo: Av. Lauro Mller 116 sala 1103 Botafogo
Rio de Janeiro RJ 22290-906
E-mail: info@esr.rnp.br
Sobre o autor
Paulo Henrique Cayres possui graduao no curso Superior de Tecnologia em Processamento de Dados pela Universidade para o Desenvolvimento do Estado e da Regio do
Pantanal (UNIDERP), especializao em Anlise de Sistemas pela Universidade Federal de
Mato Grosso do Sul (UFMS) e mestrado em Cincias da Computao pela Universidade
Federal do Rio Grande do Sul (UFRGS). Atuou como coordenador curso de Bel. em Sistemas de Informao e Superior de Tecnologia em Redes de Computadores na Faculdade da
Indstria do Sistema FIEP, onde tambm coordenou as atividades do SGI - Setor de Gesto
de Informaes. Atualmente coordenador do Ncleo de Educao a Distncia - NEaD da
Faculdade da Indstria do Sistema FIEP. Scio-diretor da CPP Consultoria e Assessoria em
informtica Ltda. Tem experincia na rea de Cincia da Computao, com nfase em Engenharia de Software, atuando principalmente nos seguintes temas: linguagens de programao, engenharia de software, modelagem de sistemas, desenvolvimento de aplicaes para
web e gerncia de projetos. Professor titular em cursos de graduao e ps-graduao
ministrando disciplinas de desenvolvimento de sistemas desde 1995. Instrutor de treinamento na linguagem Java de programao junto ao CITS em Curitiba e na ESR-RNP.
John Lemos Forman Mestre em Informtica (nfase em Engenharia de Software) e
Engenheiro de Computao pela PUC-Rio, com ps-graduao em Gesto de Empresas
pela COPPEAD/UFRJ. vice-presidente do Sindicato das Empresas de Informtica do Rio de
Janeiro TIRIO, membro do Conselho Consultivo e de normas ticas da Assespro-RJ e Diretor da Riosoft. scio e Diretor da J.Forman Consultoria e coordenador acadmico da rea
de desenvolvimento de sistemas da Escola Superior de Redes da RNP. Acumula mais de
29 anos de experincia na gesto de empresas e projetos inovadores de base tecnolgica,
com destaque para o uso das TIC na Educao, mdias digitais e Sade.
xii
1
Aprender sobre bancos de dados e sistemas gerenciadores de bancos de dados;
Entender o conceito de sistema de informao e modelos de sistemas, e etapas
da modelagem do banco de dados.
conceitos
Exerccio de nivelamento e
Modelagem de dados
O que voc entende por modelagem de dados?
objetivos
Dados podem ser vistos como uma representao de fatos, conceitos ou instrues de
uma maneira normalizada, podendo ser adaptados comunicao, interpretao e processamento. J a informao pode ser vista como todo o conjunto de dados devidamente
ordenados e organizados de forma significativa. Os bancos de dados, por sua vez, foram
concebidos com o objetivo de possibilitar o armazenamento de informaes em sistemas
de arquivos permanentes, com o intuito de possibilitar posteriores acesso e manipulao de
informaes, de forma organizada e estruturada.
Os principais desafios a serem alcanados atravs de um Sistema de banco de dados eram:
11 Gerenciamento de grande quantidade de informao: um Sistema de banco de
dados teria de possibilitar o armazenamento de informaes tanto de sistemas simples,
como uma agenda telefnica, quanto de sistemas mais complexos, como um sistema de
reserva de passagens areas. Em ambos os casos o Sistema de banco de dados teria de
ser capaz de prover segurana e confiabilidade, independente da quantidade de informaes que iria armazenar;
11 Evitar redundncia e inconsistncia de dados: um Sistema de banco de dados teria de
ter a capacidade de reduzir ao mximo, ou mesmo eliminar, a redundncia da informao
em lugares diferentes, muito comum nos Sistemas de Arquivos existentes at ento. Um
dos problemas da redundncia que podemos atualizar um determinado dado de um
arquivo e essa atualizao no ser feita em todo o sistema esse problema chamado
de inconsistncia;
11 Facilidade de acesso: um Sistema de banco de dados deveria facilitar ao mximo o
acesso aos dados, se preocupando com um possvel acesso concorrente, onde podemos
ter a mesma informao sendo compartilhada por diversos usurios;
11 Segurana de Dados: o Sistema de banco de dados deveria garantir a segurana de
acesso aos dados por meio da implementao de usurios e senhas de acessos;
11 Garantia de Integridade: fazer com que os valores dos dados atribudos e armazenados em um banco de dados devam satisfazer certas restries para manuteno de
consistncia e coerncia;
11 Facilidade de Migrao: um Sistema de banco de dados deveria garantir a possvel
transferncia de dados entre Banco de dados. Ao ato de transferir as informaes de um
banco de dados para outro banco de dados deu-se o nome de Migrao.
Histrico.
11 Incio da computao:
22 Dados guardados em arquivos de texto.
22 Problemas nesse modelo:
Arquitetura de um SGBD
De forma simplificada, um SGBD faz a interface entre a camada fsica de armazenamento dos
dados (discos, storage, mtodos de acesso, clustering de dados etc.) e a sua organizao lgica
(instncias) atravs de um determinado modelo de organizao (esquema ou subesquema).
Linguagens de programao e ferramentas front-end visuais grficas so algumas solues de
software que auxiliam usurios na construo, manuteno e manipulados dos dados armazenados em bancos de dados nos SGBDs. Internamente, um SGBD apresenta linguagens especficas para trabalhar com seus de dados, cuidando da sua definio (Data Definition Language
Linguagem de
Ferramenta frontend
Programao
(manipulao grca
dos dados)
Usurios/Programadores
Sistema de banco
de dados
Sistema de banco
Software SGBD
de dados
Denio
dos dados
arm
d os
Banco de
azena
(me
tadados)
dados
arm
azenados
Esquema do BD
Instncias
Organizao de SGBDs
Os principais modelos de organizao de SGBDs atualmente existentes so:
Figura 1.1
Arquitetura
de um SGBD
e ferramentas
complementares.
11 Modelo Hierrquico.
11 Modelo de Rede.
11 Modelo Relacional.
11 Modelo Orientado a Objetos.
11 Modelo Objeto-Relacional.
11 Modelo NoSQL (Not only SQL).
Modelo hierrquico
O modelo hierrquico foi o primeiro a ser reconhecido como um modelo de dados. Seu
desenvolvimento somente foi possvel devido consolidao dos discos de armazenamento
endereveis, pois esses discos possibilitaram a explorao de sua estrutura de endereamento fsico para viabilizar a representao hierrquica das informaes. Nesse modelo
de dados, os dados so estruturados em hierarquias ou rvores. Os ns das hierarquias
Saiba mais
O sistema comercial
mais divulgado no
modelo hierrquico
foi o Information
Management System
da IBM Corp (IMS).
contm ocorrncias de registros, onde cada registro uma coleo de campos (atributos),
cada um contendo apenas uma informao. O registro da hierarquia que precede a outros
o registro-pai, os outros so chamados de registros-filhos.
Grande parte das restries e consistncias de dados estava contida dentro dos programas
escritos para as aplicaes. Era necessrio escrever programas na ordem para acessar o
banco de dados.
Modelo em rede
O modelo em redes surgiu como uma extenso ao modelo hierrquico, eliminando o conceito
de hierarquia e permitindo que um mesmo registro estivesse envolvido em vrias associaes.
No modelo em rede, os registros so organizados em grafos, onde aparece um nico tipo de
associao (set) que define uma relao 1:N entre 2 tipos de registros: proprietrio e membro.
O gerenciador Data Base Task Group (DBTG), da Committee on Data Systems and Languages
(CODASYL) estabeleceu uma norma para esse modelo de banco de dados, com linguagem
prpria para definio e manipulao de dados.
Os dados tinham uma forma limitada de independncia fsica. A nica garantia era a de
que o sistema deveria recuperar os dados para as aplicaes como se eles estivessem
No Modelo em Rede,
o sistema comercial
mais divulgado o
CA-IDMS da Computer
Associates.
tambm definiram sintaxes para dois aspectos chaves dos sistemas gerenciadores de dados:
concorrncia e segurana. O mecanismo de segurana fornecia uma facilidade na qual parte
do banco de dados (ou rea) pudesse ser bloqueada para prevenir acessos simultneos,
quando necessrio. A sintaxe da segurana permitia que uma senha fosse associada a cada
objeto descrito no esquema.
Ao contrrio do Modelo Hierrquico, em que qualquer acesso aos dados passa pela raiz, o
modelo em rede possibilita acesso a qualquer n da rede sem passar pela raiz.
Modelo relacional
O modelo relacional apareceu devido s seguintes necessidades:
11 Aumentar a independncia de dados nos sistemas gerenciadores de banco de dados;
11 Prover um conjunto de funes apoiadas em lgebra relacional para armazenamento e
recuperao de dados;
11 Permitir processamento dedicado e exclusivo.
O modelo relacional, tendo por base a teoria dos conjuntos e lgebra relacional, foi resultado de um estudo terico realizado por um pesquisador da IBM chamado Ted Codd, que
escreveu um artigo na dcada de 70 propondo um novo modelo para armazenamento e
recuperao de dados.
O modelo relacional revelou-se ser o mais flexvel e adequado ao solucionar os vrios
problemas que se colocam no nvel da concepo e implementao das bases de dados.
A estrutura fundamental do modelo relacional a relao (tabela). Uma relao constituda por um ou mais atributos (campos) que traduzem o tipo de dados a armazenar.
Cada instncia do esquema (linha) chamada de tupla (registro).
O modelo relacional no tem caminhos predefinidos para se fazer acesso aos dados como
nos modelos que o precederam. O modelo relacional implementa estruturas de dados
Saiba mais
organizadas em relaes. Porm, para trabalhar com essas tabelas, algumas restries
5
precisaram ser impostas para evitar aspectos indesejveis, como: repetio de informao,
incapacidade de representar parte da informao e perda de informao. Essas restries
so: integridade referencial, chaves e integridade de junes de relaes.
Banco de dados relacional:
Modelo Objeto-Relacional
Alguns bancos de dados relacionais adicionaram a seus produtos a capacidade de incorporar objetos mais complexos, como imagem, som e vdeo, bem como alguns recursos de
orientao a objetos.
No entanto, isso no os torna sistemas puramente orientados a objetos, apesar da deno Modelagem de Bancos de Dados
Modelo NoSQL
Um dos grandes desafios atualmente na rea de computao a manipulao e processamento de grande quantidade de dados no contexto de Big Data.
NoSQL (Not only SQL: No s SQL) um termo utilizado para definir um tipo de banco de
dados que no segue normas de tabelas (schemas) presente no banco de dados relacional.
Saiba mais
O termo Modelo Orientado a Objetos usado
para documentar o
padro que contm
a descrio geral das
facilidades de um
conjunto de linguagens de programao
orientadas a objetos e
a biblioteca de classes
que pode formar a
base para o sistema de
banco de dados.
Sistema de Informao
Um Sistema de Informao (SI) um conjunto de elementos ou componentes inter-relacionados que coleta (entrada), manipula (processo), armazena e dissemina dados (sada)
e informaes, alm de fornecer um mecanismo de realimentao (ao corretiva) para
garantir a realizao de um determinado objetivo.
Informaes so resultados obtidos pela seleo, sumarizao e apresentao de dados de uma
forma que seja til aos interessados. Geralmente obtida quando alguma atividade mental
humana (observao e anlise) realizada com sucesso sobre dados para revelar seu significado
ou sentido. Assim, vale novamente tecer algumas consideraes sobre Dados x Informao.
Dados x Informao:
11 Dados: fatos que podem ser armazenados. Exemplo: cor dos olhos, idade, sexo etc.
11 Informao: realidade observada sobre os dados. Exemplo: quantidade de pessoas
com cor dos olhos castanho, a mdia de idade das pessoas do sexo masculino.
22 Importncia da Informao: necessidade de qualidade, eficcia, informaes
mais confiveis e rpidas para a tomada de deciso.
22 Uso de recursos da TI: envolve hardware, software, pessoas, banco de dados,
redes, procedimentos
Desenvolvimento de SI
O desenvolvimento de sistemas envolve criar ou modificar os sistemas de negcio existentes. As principais etapas desse processo e seus objetos incluem investigao de sistemas
(ter entendimento claro de qual o problema), anlise de sistemas (definir o que o sistema
deve fazer para resolver o problema), projeto de sistema (determinar exatamente como o
sistema vai funcionar para atender as necessidades do negcio), implantao do sistema
(criar ou adquirir os vrios componentes do sistema definidos nas etapas de projeto) e
manuteno e reviso do sistema (manter e depois modificar o sistema para que ele continue a atender as necessidades evolutivas do negcio).
Para que essas etapas possam ser alcanadas, podemos partir de um plano de que prope
um ciclo de vida com vistas organizao para o processo de desenvolvimento de um SI,
quais sejam:
Desenvolvimento de um SI: informalmente, iniciado como resultado de um entendi-
Ainda que faa parte do escopo desse curso descrever em detalhes diferentes metodologias
de desenvolvimento de software, importante relembrar essas etapas, com destaque para
a primeira etapa.
As especificaes de requisitosso objetivos ou restries estabelecidas por clientes e
usurios do sistema que definem suas diversas propriedades. Os requisitosde software so,
obviamente, aqueles entre os requisitos de sistema que dizem respeito a propriedades do
software. Dessa forma a especificao de requisitos envolve as atividades de determinar os
objetivos de um software e as restries associadas a ele. Ela deve tambm estabelecer o
relacionamento entre esses objetivos e restries e a especificao precisa do software.
Tradicionalmente, os requisitos de software so separados em requisitos funcionais, com a
descrio das diversas funes que clientes e usurios querem ou precisam que o software
oferea, e no funcionais, com as qualidades globais de um software, como manutenibilidade,
usabilidade, desempenho, custos e vrias outras.
Entrevista, observao in-loco e encontros so vistos como algumas das tcnicas que podem
ser utilizadas na fase de especificao de requisitos.
As demais fases de anlise e projeto, implementao, teste e manuteno, que complementam um ciclo tradicional de desenvolvimento de software, buscam traduzir o conjunto
de requisitos levantados em uma implementao que permita atingir os objetivos propostos
(na etapa de manuteno o ciclo se repete de modo a permitir que seja incorporadas ao
sistema possveis melhorias que se fizerem necessrias).
Nosso interesse est com foco na etapa inicial, j que a modelagem do banco de dados depender diretamente do levantamento dos requisitos que o futuro sistema ter de atender.
Modelos de Sistema
Tipos de Modelos:
11 Funcional (processos).
11 De Dados.
Antes de construir um SI, deve-se elaborar um modelo (planta) que seja capaz de expressar, com
a mxima fidelidade e simplicidade possveis, o ambiente no qual ele se insere visando satisfazer
todos os requisitos identificados. Isso nos possibilita ter um maior domnio sobre o problema,
uma vez que o modelo facilita e diminui os custos de possveis adequaes do projeto.
Cada um dos modelos recm citados busca retratar diferentes aspectos ou dimenses do
sistema a ser desenvolvido, sendo vistos como um mecanismo eficaz de comunicao entre
tcnicos e usurios. Esses modelos lidam tambm com a questo da complexidade atravs
de nveis de abstrao, tornando mais fceis (e tambm mais baratas) as discusses em
torno da adequao do sistema que ser construdo. A seguir detalhamos um pouco mais
cada um desses modelos.
Funcional
Pode ser visto como sendo formado por uma representao grfica, acompanhada de uma
descrio de cada funo e das suas interfaces. Costuma ser expressa por meio de Diagrama
de Fluxo de Dados (DFD).
11 Comportamental (tempo-dependente).
De dados
Mtodo da anlise de sistemas que busca especificar, a partir de fatos relevantes que
estejam associados ao domnio de conhecimento analisado, a perspectiva dos dados, permitindo organiz-los em estruturas bem definidas, estabelecendo as regras de dependncia
entre eles, produzindo um modelo expresso por uma representao, ao mesmo tempo
descritiva e diagramtica.
Comportamental
Descreve de que maneira o sistema, enquanto um conjunto de elementos inter-relacionados,
reage, internamente, com um todo organizado, aos estmulos externos. Preocupa-se em
mostrar as aes que o sistema deve executar para responder adequadamente aos eventos
previstos no modelo ambiental.
cdigo
descrio
cdigo
quantidade
preo
Produto
10
(1, n)
nome
tem
(1, 1)
Categoria
11 Modelo Lgico (Esquema do BD): tem como objetivo transformar o modelo conceitual
em um modelo que define como o banco de dados ser implementado em um SGBD
especfico. Deve representar relaes e restries do modelo de dados que representa a
estrutura de um BD e o Esquema do Banco de Dados;
Figura 1.2
Exemplo de um
Modelo Conceitual.
Produto
Categoria
cdigo: inteiro
cdigo: inteiro
(1,n)
preo: real
Figura 1.3
Exemplo de um
Modelo Lgico.
cdigoCat: inteiro
11 Modelo Fsico (Script do BD em SQL): nessa fase, o modelo do banco de dados enriquecido com detalhes que influenciam no desempenho do banco de dados, mas no
interferem na sua funcionalidade. Script do banco de dados em SQL representa os detalhes dos dados internamente ao BD (campo, tipo/domnio, restries).
);
ALTER TABLE PRODUTO ADD FOREIGN KEY(codcatprod) REFERENCES
CATEGORIA (codcat);
nomecat VARCHAR(30)
11
Mini-Mundo
Projeto conceitual
Esquema conceitual
(em um modelo de dados de alto-nvel)
Projeto fsico
Figura 1.4
Esquema geral
de modelagem
de dados com o
uso de ER.
Esquema interno
(para o mesmo SGBD)
12
11 Preparar um cronograma.
indispensvel que o profissional ou equipe envolvidos com o projeto do banco de dados
tenha um bom domnio do negcio da sua organizao ou empresa. Para tanto, pode e deve
fazer uso de diferentes ferramentas para a coleta de dados, tais como entrevistas, anlise de
procedimentos e documentos, questionrio etc. O objetivo identificar requisitos de dados
(fatos do mundo real) que devero ser observados ou atendidos.
Essa uma etapa pr-modelagem, onde o mais comum elaborar a especificao formal
dos dados no formato de um texto descritivo, tambm chamado de minimundo ou Universo
de Discurso, que pode ser validado pelos futuros usurios do sistema em desenvolvimento.
A seguir, apresentamos um exemplo de minimundo.
Atividade de Fixao e
Descreva com suas palavras. Qual o principal objetivo de se utilizar o processo de modelagem de dados no processo de desenvolvimento de sistemas?
13
14
2
Conhecer os conceitos de Diagrama Entidade Relacionamento (DER) e o processo de
construo de um DER, fazendo uso de ferramenta CASE e tcnicas de normalizao.
conceitos
objetivos
15
Pnome
Mnome
Snome
Nome
Endereo
Nss
Sexo
Nmero
Nome
N
Salrio
EMPREGADO
DataNasc
TRABALHA PARA
supervisor
SUPERVISIONA
GERENCIA
supervisiona
DEPARTAMENTO
NmeroDeEmpregados
DataInicio
Localizao
CONTROLA
Horas
TRABALHA EM
PROJETO
Nome
DEPENDENTE DE
Localizao
Nmero
DEPENDENTE
Nome
Sexo
DataNasc
Figura 2.1
DER estudo de caso
empresa.
Relao
Componentes do DER
Um DER composto pelos seguintes elementos:
Entidades
Modelagem de Bancos de Dados
Em um DER, uma entidade representada por meio de um retngulo que contm o nome da
Figura 2.2
Representao
grfica de entidade
no DER.
EMPREGADO
Uma Entidade pode ser um objeto (livro), uma pessoa (empregado), abstrato (curso), acontecimento (inscrio). O nome depende do contexto (pessoa: Aluno, Professor, Segurado,
Contribuinte, Empregado).
Atributos
O atributo corresponde a uma dado que associado a cada ocorrncia de uma entidade ou
relacionamento. Atributos so representados graficamente conforme ilustrado na figura 2.3.
Pnome
Nss
Snome
Nome
Endereo
Sexo
Salrio
EMPREGADO
DataNasc
Na prtica, muitas vezes os atributos no so representados graficamente para no sobrecarregar os diagramas, j que entidades podem possuir um grande nmero de atributos. Nesses
casos prefervel o uso de representao textual.
importante ressaltar que toda entidade deve ter pelo menos um atributo, sendo que
Figura 2.3
Representao
de atributos
da entidade
Empregado.
Mnome
17
TRIGGER
Elipses
com linha
tracejada
FOREIGN
KEY
S aparece
na entidade
de origem
UNIQUE
NOT NULL
Caracterstica
Alternativa
identicador
DEPARTAMENTO: SiglaDepto
(Reconhece uma nica instncia na entidade)
no-identicador
DEPARTAMENTO: NomeDepto
(qualquer outro atributo)
simples
EMPREGADO: Cidade
composto
EMPREGADO: Endereo
(formado de rua, nmero, bairro, cep, etc.)
Elipses
a partir
de elipse
monovalorado
ALUNO: Matrcula
multivalorado
ALUNO: Telefone
(pode ser que tenha mais de um: res, com, cel)
Elipse
com linha
dupla
derivado
NOTA FISCAL: ValorTotal
(obtido a partir de outros atributos)
no-derivado
NOTA FISCAL: Quantidade
(qualquer outro atributo)
relacionante
DEPARTAMENTO E EMPREGADO: SiglaDepto
(elo de relacionamento entre 2 entidades)
descritivo
DEPARTAMENTO: NomeDepto
(qualquer outro atributo)
nico
EMPREGADO: NmeroMatrcula
no-nico
EMPREGADO: Endereo
(empregados que moram na mesma residncia)
obrigatrio
EMPREGADO: Nome
opcional
EMPREGADO: NomeCnjuge
(empregado que no casado)
Atributos Identificadores
Figura 2.4
Tipos de atributos.
Conforme j mencionado, toda entidade tem sempre pelo menos um atributo. Quando o
atributo permite distinguir uma ocorrncia das demais ocorrncias de uma mesma entidade, ele considerado um especial conhecido como atributo identificador de entidade.
Note, contudo, que um atributo identificador corresponde a um conjunto de um ou mais
atributos ou relacionamentos. A figura 2.5 apresenta um atributo concatenado, que um
atributo identificador composto por mais do que um atributo, nesse caso composto pelos
atributos Nome e Nmero.
PROJETO
Nome
Localizao
Nmero
18
Outro aspecto a ser observado a caracterstica do atributo identificador, que pode ser
inerente entidade ou dependente de uma entidade ou relacionamento externo. No primeiro caso, a entidade que possui um atributo identificador prprio chamada de entidade
primria ou entidade forte. J quando a entidade no pode ser identificada somente atravs
de seus prprios atributos, muitas vezes dependendo de um relacionamento para poder ser
identificada, ela chamada de entidade fraca, sendo representada por um retngulo com
linha dupla conforme demonstrado na figura 2.6. A seguir apresentamos alguns exemplos
para ajudar a compreender esses conceitos.
Figura 2.5
Atributo
identificador
concatenado.
Nome
Sexo
DataNasc
Relao
Relacionamentos
Um Relacionamento a representao de um conjunto de associaes entre as ocorrncias
de entidades. Dessa forma, podemos representar as interaes existentes no mundo real,
que foram identificadas no processo de anlise, entre as entidades. Em um DER, um relacionamento representado por uma linha reta ligando as entidades relacionadas e, em geral,
tem como nome um verbo que represente o contexto da relao em questo. A figura 2.7
apresenta alguns exemplos de relacionamentos utilizando a notao original, onde o nome do
relacionamento aparece dentro de um losango na interligao de suas respectivas entidades.
DEPARTAMENTO
1
orquestra
(0,1)
trabalhaEm
(1.n)
MUSICO
Figura 2.7
Exemplos de
relacionamentos
(notao original).
CONTROLA
PROJETO
Vamos imaginar uma situao onde, aps identificar requisitos de dados (fatos do mundo
real) tenhamos a seguinte situao:
19
Pessoas
Moram
Aptos
Formam
Condomnios
Figura 2.8
Processo de
identificao de
Relacionamentos
entre entidades.
Localizam-se
Cidade
Esto
Ruas
Restries em relacionamento
No processo de modelagem importante identificar no apenas as entidades e seus relacionamentos, mas tambm estabelecer a quantidade de ocorrncias de cada um desses
relacionamentos. A essa propriedade damos o nome de cardinalidade, que se desdobra em
cardinalidade mxima e a cardinalidade mnima.
Em qualquer relacionamento, deve-se questionar se existem restries estruturais, que
so aquelas que limitam a sua cardinalidade. Tomando como exemplo o relacionamento
entre Mulher e Filho, h que se perguntar se toda mulher ter necessariamente um filho ou
se, tendo filhos, existe um limite superior de filhos que podem ser associados a uma nica
Mulher. Assim, a cardinalidade poder revelar diferentes caractersticas:
representada, na notao original, atravs dos smbolos 1 ou N de cada lado dos losangos
do relacionamento.
20
DEPARTAMENTO
COMPOSITOR
COMPE
COMPOSIO
CONTROLA
EMPREGADO
1
N
PROJETO
DEPARTAMENTO
DataInicio
GERENCIA
Figura 2.9
Exemplos de
restries de
relacionamento.
Diagrama de ocorrncias
O diagrama de ocorrncias uma ferramenta utilizada na identificao de quantidades em
possveis relaes entre entidades durante o processo de anlise.
No relacionamento de grau 1:1 (Um-para-Um), cada elemento de uma entidade relaciona-se com um e somente um elemento de outra entidade. J no relacionamento de grau 1:N
(Um-para-Muitos), cada elemento da entidade 1 relaciona-se com muitos elementos da
entidade 2. Esse grau de relacionamento o mais comum no mundo real, sendo visto como o
relacionamento bsico entre entidades. Por fim, temos o relacionamento de grau M:N (Muitospara-Muitos), onde cada elemento da entidade 1 relaciona-se com muitos elementos da entidade 2 e cada elemento da entidade 2 relaciona-se com muitos elementos da entidade 1.
Isso ocorre uma vez que em ambos os sentidos de leitura do relacionamento encontra-se um
grau Um-para-Muitos, o que caracteriza um contexto geral de Muitos-para-Muitos.
Na figura 2.10 a seguir, podemos ver exemplos do diagrama de ocorrncias em relacionamentos de diferentes cardinalidades
HOMEM
MULHER
CASADO
A
B
C
D
A1
A2
A3
A4
X
Y
Z
W
B1
B2
B3
B4
B5
CURSA
1
2
ESTUDANTE
E1
E2
E3
E4
E5
3
4
5
DISCIPLINA
D1
D2
D3
D4
6
7
8
Figura 2.10
Diagramas de
ocorrncias..
q
Captulo 2 - Modelo conceitual: DER
entidades.
21
TRABALHA PARA
obrigatrio
obrigatrio
EMPREGADO
NmeroDeEmpregados
DataInicio
opcional
GERENCIA
DEPARTAMENTO
Figura 2.11
Exemplos de
participao/
dependncia em
relacionamentos.
obrigatrio
CrowsFoot
Nos exemplos apresentados at o momento, temos privilegiado o uso da notao original
empregada quando o DER comeou a ser difundido. Com o passar do tempo, outras notaes foram sendo sugeridas, sempre buscando aprimorar o processo de anlise/confeco
dos Diagramas. Uma notao bastante utilizada e que representa a cardinalidade de relacionamentos de forma diferente a notao CrowsFoot. Na figura a seguir, apresentamos uma
tabela com essa notao.
Extremidade
A
CNJUGE
Mn.
Mx.
Descrio
EMPREGADO
DEPARTAMENTO
A notao CrowsFoot foi proposta por James Martin sob a tica de engenharia de informao, sendo tambm conhecida como p-de-galinha, onde os relacionamentos so
representados apenas por uma linha.
Nesta notao, podemos representar apenas relacionamentos binrios e a representao
Modelagem de Bancos de Dados
22
Grau do Relacionamento
11 Unrio (grau 1): relacionamento com a prpria entidade, tambm chamado de relacionamento recursivo ou autorrelacionamento.
11 Binrio (grau 2): mais comum.
11 Ternrio (grau 3): maior complexidade.
11 Ou mais...
Figura 2.12
Exemplo de
modelagem com a
notao CrowsFoot.
Figura 2.13
Exemplo de
relacionamento
recursivo ou
autorrelacionamento.
supervisiona
SUPERVISIONA
Um relacionamento binrio aquele cujas ocorrncias contm duas ocorrncias de entidade, como todos os vistos at aqui. Assim, podemos classificar os relacionamentos binrios
de acordo com a sua cardinalidade: N:N, 1:N e 1:1.
A abordagem ER permite que sejam definidos relacionamentos de grau maior do que dois
(ternrio, quaternrio, e assim sucessivamente). No caso do relacionamento ternrio, a
cardinalidade refere-se a pares de entidades. Em um relacionamento R entre trs entidades
CIDADE, PRODUTO e DISTRIBUIDOR, a cardinalidade mxima de CIDADE e PRODUTO dentro
de R indica quantas ocorrncias de DISTRIBUIDOR podem estar associadas a um de ocorrncias de CIDADE e PRODUTO. Exemplo na figura 2.5.
DISTRIBUIDOR
CIDADE
N
DISTRIBUIO
N
PRODUTO
Figura 2.14
Exemplo de
relacionamento
ternrio.
23
Ferramentas CASE
Ferramentas CASE (Computer-Aided Software Engineering) so ferramentas computadorizadas que contribuem/auxiliam no processo de engenharia de um software. Em outras
palavras, so softwares cuja finalidade ajudar no desenvolvimento de outros softwares.
Em nosso caso, estamos interessados em ferramentas CASE especficas para o processo
de modelagem de sistemas de informao. grande a quantidade de ferramentas desse
tipo disponveis no mercado, mas preciso escolher aquela que ser mais apropriada ao
processo de modelagem sendo utilizado.
Observa-se que muitas dessas ferramentas no possibilitam a construo de modelos
conceituais, partindo diretamente para o modelo lgico (e at fsico) do banco de dados.
Consideramos que isso no desejvel, pois descarta um passo importantssimo, que o
foco desta sesso: a conceitualizao do problema.
Descartar o Modelo Conceitual pode at ser admitido em sistemas pequenos, construdos por profissional com grande experincia em modelagem de dados, mas
24
Notaes
J foi mencionado que diversas notaes diferentes foram propostas em cima da notao
originalmente idealizada por Peter Chein na dcada de 70. Uma representao de um
modelo chamada esquema do banco de dados. A figura 2.16 apresenta os principais
smbolos utilizados na representao grfica de um esquema ER, tanto na notao original
como na notao IDEFIX proposta por Bachman.
A notao IDEFIX a mais comumente implementada em ferramentas de modelagem, mas
a verdade que cada ferramenta pode trazer caractersticas especficas e pequenas (ou
significativas) variaes em relao a notao original.
Neste curso, ser utilizada a ferramenta brModelo, que ser apresentada com mais detalhes
Figura 2.15
Notaes DER.
a seguir.
Construes do modelo ER
usando a notao de Chen
Construes do modelo ER
usando IDEFIX [Bruc92]
Entidade
Atributo
(sem operao)
Funcionrio
id-func
Entidade
Chave-primria
Atributo de chave
no-primria
nome-func
FUNCIONRIO
id-func
nome-func
classe-cargo
classe-cargo
(a) Entidade com atributos
Departamento
gerenciado-por
Funcionrio
Departamento
-gerenciado-por
Funcionrio
(b) Um-pra-um
Diviso
tem
Departamento
Diviso
tem
Departamento
-ocupado-por
Funcionrio
Escritrio
-ocupado-por
Funcionrio
P
trabalha-em
Projeto
Funcionrio
trabalha-em
(e) Muitos-para-muitos
-lider-grupo-de
Funcionrio
1
Funcionrio
N
-lider-grupo-de
Projeto
Funcionrio
25
A ferramenta brModelo
A brModelo uma ferramenta freeware voltada para o ensino de modelagem em banco
de dados relacional aplicando anotao original proposta por Chen com algumas adaptaes. Assim, pode-se considerar a brModelo como uma ferramenta mais completa, j que a
maioria das ferramentas disponveis no mercado utilizam notaes voltadas basicamente
para a implementao do esquema gerado no SGBD, sem muita preocupao com o modelo
lgico. Algumas dessas ferramentas sequer implementam o modelo conceitual.
Saiba mais
Essa ferramenta foi
desenvolvida por
Carlos Henrique
Cndido sob orientao
do Prof. Dr. Ronaldo
dos Santos Mello
(UFSC), como trabalho
de concluso do curso
de ps-graduao em
banco de dados na
UNVAG: MT e UFSC.
Figura 2.16
Interface grfica do
brModelo.
A figura 2.18 apresenta o DER do Mini-Mundo Empresa que foi apresentado anteriormente.
Pode-se ver a qualidade dos grficos gerados e como os conceitos at aqui apresentados
so nela representados.
pNome
mNome
uNome
SSN
endereo
sexo
salrio
nome
(1,n)
supervisor (0,1)
supervisiona
EMPREGADO
supervisionado (1,n)
26
(1,1) (1,n)
Figura 2.17
DER: Estudo de
caso Empresa.
trabalhaPara
(1,1)
DEPENDENTE
(1,1)
gerencia
(0,1)
dataIni
dependeDe
trabalhaEm
nmero
nome
numEmpregados
localizao (1,n)
(1,1)
controla
numHoras
(0,n)
nome
parentesco
sexo
dataNasc
DEPENDENTE
(0,n)
(1,n)
PROJETO
nmero
nome
localizao
de dados.
Para isso, so trabalhados os seguintes conceitos:
11 Herana;
11 Multiplicidade: uso da cardinalidade: [mn, mx], CrowsFoot;
11 Generalizao-especializao (genespec)
Generalizao/especializao
Associado ao conceito de generalizao/especializao, est a ideia de herana de propriedades. Herdar propriedades significa que cada ocorrncia da entidade especializada possui,
alm de suas prprias propriedades, as propriedades da ocorrncia da entidade genrica
correspondente. Assim, segundo o DER da figura 2.19 a seguir, a entidade PESSOA FSICA
possui, alm de seus atributos CPF e sexo, os atributos herdados da entidade CLIENTE (que
so os atributos cdigo e nome), bem como o relacionamento com a entidade FILIAL.
A especializao possibilita a atribuio de propriedades particulares a um subconjunto de
ocorrncias, ditas especializadas, de uma entidade genrica.
FILIAL
(1,1)
(0,n)
CLIENTE
codigo
nome
cpf
sexo
PESSOA
FSICA
PESSOA
JURIDICA
CNPJ
tipoOrganizacao
Figura 2.18
Exemplo de
especializao.
27
a)
Preco
NrdePassageiros
Preco
CARRO
VelocidadeMaxima
IDVeiculo
CAMINHAO
NrLicencaPlaca
b)
NrdeEixos
IDVeiculo
NrLicencaPlaca
Preco
Capacidade
IDVeiculo
NrLicencaPlaca
VEICULO
NrdeEixos
NrdePassageiros
d
CAMINHAO
CARRO
VelocidadeMaxima
Capacidade
Figura 2.19
Exemplo de
generalizao.
generalizao/especializao a ser modelada, deve ter uma nica entidade raiz, sendo que
esta dever conter o identificador desse tipo de relacionamento. Na figura 2.21, apresentamos um exemplo ilustrando isso.
VECULO
VECULO TERRESTRE
AUTOMVEL
Identicador
de veculo
denido aqui
VECULO AQUTICO
ANFBIO
BARCO
Herana mtipla
28
Alm disso, o identificador deve ser uma chave exclusiva que indica a relao existente entre
a entidade especializada e a entidade genrica. Chamamos a ateno para a impossibilidade
de modelagem de herana com mltiplos identificadores, conforme podemos observar na
figura 2.22.
Figura 2.20
Exemplo de
identificador nico
no processo de
modelagem de
herana.
VECULO TERRESTRE
AUTOMVEL
Figura 2.21
Hierarquia proibida:
herana de vrios
identificadores.
VECULO AQUTICO
ANFBIO
BARCO
TECNICO
ENGENHEIRO
GERENTE
EMPREGADO ASSALARIADO
Figura 2.22
Estrutura
Hierrquica de
uma generalizao
(recurso).
EMPREGADO HORISTA
GERENTE_ENGENHARIA
Tipos de generalizao/especializao
A generalizao/especializao pode ser classificada como:
11 Total ou parcial: define a obrigatoriedade ou no de ocorrncias da entidade genrica
corresponder a uma ocorrncia da entidade especializada.
11 Exclusiva ou compartilhada: define se uma ocorrncia da entidade genrica pode ser
especializada uma ou mais vezes.
A seguir, analisamos cada um desses tipos separadamente.
SECRETARIA
29
Pode no aparecer o t.
Em outra notao: (d)-disjunto
codigo
CLIENTE
nome
indica que todo CLIENTE
ou PESSOA FSICA
ou PESSOA JURDICA
CPF
sexo
PESSOA
FSICA
PESSOA
JURIDICA
CNPJ
tipoOrganizacao
Figura 2.23
Exemplo de
generalizao/
especializao total.
FUNCIONRIO
P
necessrio em
especializao
parcial
MOTORISTA
SECRETRIA
30
Figura 2.24
Exemplo de
generalizao/
especializao
parcial.
Pode no aparecer o c.
Em outra notao:
(o)-override, sobreposio
PESSOA
Figura 2.25
Exemplo de
generalizao/
especializao
compartilhada.
PROFESSOR
FUNCIONRIO
ALUNO
Figura 2.26
Tipos de
generalizao/
especializao.
Total (t)
Parcial (p)
Exclusiva (x)
xt
xp
Compartilhada (c)
ct
cp
Entidade associativa
A entidade associativa nada mais do que a redefinio de um relacionamento que passa a
ser tratado como se fosse uma entidade.
Vale lembrar que na definio do modelo ER no foi prevista a possibilidade de se estabelecer relacionamentos entre relacionamentos, mas apenas entre entidades. Por outro lado,
existem situaes onde parece ser necessrio associar uma entidade com a ocorrncia de
um relacionamento. Nesses casos, deve-se tratar esse relacionamento como se ele fosse
uma entidade (entidade associativa). A notao utilizada para tanto colocar um retngulo
em torno do relacionamento (losango), conforme pode ser visto na figura 2.28.
CONSULTA
(0,n)
Poderia ser um atributo
multivalorado no
relacionamento. Porm, se
necessrio ter o registro
correto do medicamento,
representar em outra entidade
(1,n)
PACIENTE
entidade
associativa
(1,1)
relPacCons
prescrio
(0,n)
MEDICAMENTO
entidade associativa
Figura 2.27
Exemplo de
entidade
associativa.
(0,n)
MDICO
CRM
nome
CONSULTA
data
hora
(0,n)
PACIENTE
cdigo
nome
(1,n)
MDICO
31
MDICO
PACIENTE
(1,1)
(1,1)
(1,n)
relMedCons
(1,n)
CONSULTA
relPacCons
(0,n)
prescrio
(0,n)
Figura 2.28
Exemplo de
substituio de
relacionamento por
entidade.
MEDICAMENTO
Outro exemplo: adicionar a informao de que itens (quantidade, valor pago,...) de produto
foram vendidos em uma venda. Entidade fraca N:N
ItemNota
CLIENTE
(1,1)
DeUm
bairro
logradouro
nmero
endereo
nome
cdigo
CLIENTE
codigo
nome
endereco
telefone
(0,n)
faz
NOTA
data
nmero
PEDIDO
numero
nmero
dataPed
total
(0,n)
(1,n)
CONTM
quantidadeVendida
preo
quantidadeEstoque
descrio
cdigo
PEDIDO_has_PRODUTO
contm
quantItem
vlrItem
PRODUTO
Um
Dados Temporais
Um modelo deve se ocupar em refletir o aspecto temporal dos dados e informaes que
nele esto sendo modelados. No existe uma regra geral de como proceder nesse caso, mas
possvel identificar alguns padres que se repetem, indicando uma possvel necessidade
de armazenamento temporal de dados e informaes. De um modo geral, dados temporais
tm as seguintes caractersticas:
11 So dados que mudam ao longo do tempo.
Modelagem de Bancos de Dados
32
PRODUTO
codigo
descricao
quantidade
precoVenda
Figura 2.29
Outro exemplo de
substituio de
relacionamento por
entidade.
EMPREGADO
EMPREGADO
(1,1)
(0,n)
SALRIO
salrio
data
EMPREGADO
EMPREGADO
(0,1)
alocao
data
(0,1)
(0,n)
MESA
Relacionamento
com identicador
(ponto no tempo
ou faixa de tempo)
MESA
(b) BD contm o histrico de alocaes
Normalizao
Em geral, a fonte de informaes para anlise e posterior construo do DER o Minimundo
produzido durante a anlise de requisitos do sistema. Porm, os dados que sero analisados
como ponto de partida para o DER podem estar armazenados em outras fontes de informao, como sistemas legados em bancos no relacionais, ou mesmo em bancos de dados
relacionais, mas sem documentao.
Em uma situao como essa interessante analisar os dados existentes arquivos, tabelas
e/ou formulrios, e tentar construir o modelo conceitual (DER) correspondente. A motivao
para isso no somente gerar um modelo que possa auxiliar a compreender e documentar
o sistema, mas principalmente identificar problemas de desempenho e integridade e, assim,
facilitar a manuteno e evoluo do banco de dados e dos sistemas que dele fazem uso.
A Normalizao a tcnica que foi concebida para ser utilizada justamente em situaes como
essas. Ressaltamos que o processo de normalizao pode ser executado sobre qualquer
tipo de representao de dados: arquivo de computador, leiaute de relatrio/formulrio ou
mesmo de uma tela.
Tomando como base um formulrio qualquer, mas que contenha um grande nmero de
campos, seria at possvel pensar em colocar todos os dados do formulrio em uma nica
grande tabela. Muito provavelmente, contudo, essa abordagem resultar em problemas de
redundncia de dados, que por sua vez implicam na gerao de inconsistncias nos valores
dos dados e tambm no desperdcio de espao para armazenamento dos dados. Isso tudo
acaba aumentando o tempo necessrio para realizar a busca por informaes.
Esses mesmos problemas podem j existir em dados armazenados em sistemas antigos,
produzidos sem mais preocupaes em relao performance ou espao de armazenamento.
Mas o mais comum que a demanda por novas funcionalidades acabe exigindo ajustes na
estrutura do banco de dados que podem resultar em problemas como os recm-relatados.
Assim, preciso buscar desmembrar as informaes e distribu-las em tabelas menores, analisando as interdependncias entre atributos individuais associados a cada uma dessas tabelas.
Figura 2.30
Modelagem de
dados temporais
no DER.
Ponto no tempo
ou faixa (intervalo)
de tempo
(0,n)
alocao
valor
33
Ou seja, o processo de normalizao pode ser entendido como um conjunto de regras que
visa minimizar as anomalias em torno da modificao dos dados de modo que seja mais fcil
manipular esses dados (manuteno do sistema) sem gerar redundncias ou inconsistncias.
Resumidamente:
Etapas normalizao
A figura 2.32 trs um esquema descrevendo as diferentes etapas de um processo de normalizao.
Etapas:
Esquema na 3FN
Passagem a 3FN
Passagem a 4FN
Esquema na 2FN
Esquema relacional
normalizado
Passagem a 2FN
Esquema de arquivo
ou documento
1. tabela no normalizada
Representao
como tabela N
Esquema na 1FN
Passagem a 1FN
Esquema no
normalizado
um processo cclico, que deve ser usado sempre que um sistema precisa passar por um
processo de manuteno.
O Passo 1 se inicia pela representao da descrio de cada arquivo ou documento existente
na forma de um esquema de uma tabela relacional no normalizada (N). O segundo passo
Modelagem de Bancos de Dados
34
Tabela no normalizada
Uma tabela no normalizada (N) um conjunto de dados no seu formato original, que
transposto para uma tabela relacional de uma forma direta, sem ainda nenhuma preocupao com questes de redundncia ou performance. Assim, na figura 2.33 temos um
exemplo que ilustra uma tabela N.
Figura 2.31
Etapas do processo
de normalizao.
NOME
CATEGORIA
FUNCIONAL
SALRIO
DATA DE INCIO
NO PROJETO
TEMPO ALOCADO
AO PROJETO
2146
Joo
A1
1/11/91
24
3145
Slvio
A2
2/10/91
24
6126
Jos
B1
3/10/92
18
1214
Carlos
A2
4/10/92
18
8191
Mrio
A1
1/11/92
12
TIPO: Manuteno
DESCRIO: Sistema de RH
CDIGO DO
EMPREGADO
NOME
CATEGORIA
FUNCIONAL
SALRIO
DATA DE INCIO
NO PROJETO
TEMPO ALOCADO
AO PROJETO
8191
Mrio
A1
1/05/93
12
4112
Joo
A2
4/01/91
24
6126
Jos
B1
1/11/92
12
Cdproj
LSC001
PAG02
Ao fazer a transposio do conjunto de dados para uma tabela relacional, tomando como
base o conjunto da figura 2.33, chegamos ao resultando apresentado na figura 2.34. Notem
que temos a tabela relacional e tambm uma descrio textual dessa mesma tabela.
Tipo
Descr
Novo
Desenvolvimento
Manuteno
Figura 2.33
Tabela PROJETO
representada de
duas maneiras.
Sistema de Estoque
Sistema de RH
Emp
CodEmp
Nome
Cat
Sal
DataIni
TempAl
2146
Joo
A1
01/11/91
24
3145
Slvio
A2
02/10/91
24
6126
Jos
B1
03/10/92
18
1214
Carlos
A2
04/10/92
18
8191
Mrio
A1
01/11/92
12
8191
Mrio
A1
01/05/93
12
4112
joo
A2
04/01/91
24
6126
Jos
B1
01/11/92
12
Figura 2.32
Exemplo de tabela
no normalizada.
35
Vejam que a tabela Projeto, no normalizada (N), possui uma tabela aninhada dentro de si.
Uma tabela aninhada uma tabela que aparece como valor de campo dentro de
outra tabela, condio que precisa ser ajustada.
N:
1FN:
36
Dependncia funcional
Antes de passarmos para as etapas seguintes do processo de normalizao, fundamental
compreender o conceito de dependncia funcional.
Um atributo ou conjunto de atributos A dependente funcional de outro atributo B da
mesma tabela, se a cada valor de B existir, nas linhas da tabela em que aparece, um nico
valor de A. Assim, A depende funcionalmente de B. A figura 2.36 trs um exemplo de uma
dependncia funcional.
Figura 2.34
Forma N
para 1FN.
B Cdigo
...
A Salrio
...
...
E1
...
10
...
...
E3
...
10
...
...
E1
...
10
...
...
E2
...
...
...
E3
...
10
...
...
E2
...
...
...
E1
...
10
...
Figura 2.35
Processo de
identificao de
dependncia
funcional entre
atributos.
...
37
1FN:
ProjEmp
1FN:
Proj (@CodProj, Tipo,Descr)
ProjEmp (@CodProj, @CodEmp, Nome, Cat, Sal, DataIni, TempAl))
2FN:
Proj (@CodProj, Tipo,Descr)
ProjEmp (@CodProj, @CodEmp, DataIni, TempAl)
Emp (@CodEmp, Nome, Cat, Sal)
38
Figura 2.36
Da 1FN para 2FN.
2FN:
2FN:
3FN:
3FN:
Figura 2.37
Da 2FN para 3FN.
(1,1)
PROJ
39
CAT
3FN:
Util (@Codproj, @CodEmp, @CodEquip)
4FN:
ProjEmp (@CodProj, @CodEmp)
ProjEquip (@CodProj, @CodEquip)
O processo de refinamento pode continuar com a 5FN, mas na prtica os ganhos alcanados
desse ponto em diante no justificam o trabalho envolvido. Para quem tiver interesse em
conhecer a 5FN, sugerimos consultar o livro Projeto e modelagem de banco de dados, de Toby
Teorey, Sam Lightstone e Tom Nadeau, da editora Elsevier.
Exerccios de Fixao e
Refinamento do Modelo Conceitual - DER
Descreva com suas palavras. Por que devemos nos preocupar com a Normalizao no pro-
40
Figura 2.38
Da 3FN para 4FN.
3
Conhecer um conjunto de regras que auxiliam no processo de converso do modelo
conceitual em Modelo Lgico.
conceitos
O Modelo Lgico representa o banco de dados como uma coleo de relaes. Informalmente,
cada relao se parece com uma tabela. Dessa forma, podemos utilizar esse modelo para
representar a estrutura de um Banco de Dados Relacional dentro de um SGDB(R).
Deve-se, portanto, construir o modelo lgico tomando como base o modelo conceitual que
idealmente j ter sido validado pelos futuros usurios do sistema e demais atores envolvidos.
Por outro lado, ainda que no seja uma prtica recomendada, sabemos que alguns desenvolvedores preferem pular a etapa de elaborao do modelo conceitual. Nesse caso, no
haver um modelo conceitual para servir de base para a elaborao do modelo lgico. Mais
do que isso, algumas decises de modelagem no tero ainda surgido, e o profissional
pouco experiente poder ser confrontado com situaes que costumam gerar dvidas.
Por conta disso, antes de passarmos a tratar diretamente do modelo lgico, vamos revisitar
questes comuns que se colocam a todos os envolvidos com o processo de modelagem de
um sistema de informaes.
objetivos
O Modelo Lgico
41
entidade associativa
(0,n)
MDICO
CRM
(0,n)
CONSULTA
data
hora
nome
PACIENTE
cdigo
nome
Figura 3.1
Deciso de se
utilizar entidade
associativa.
Atributo multivalorado?
Tambm possvel desenvolver um modelo onde uma ou mais entidades tenham atributos
multivalorados. Mas o mais apropriado, especialmente quando a quantidade de ocorrncias
desse atributo no for muito grande, preferir a criao de uma entidade relacionada para
armazenar tais atributos. Na figura 3.2, temos mais de um exemplo desse tipo.
11 Cliente com vrios Telefones;
11 Departamento em vrias Localizaes.
CLIENTE
cdigo
nome
cdigo
(1,n)
nome
foneres
fonecel
fonecom
CLIENTE
possui
(0,n)
TELEFONE
Figura 3.2
Deciso entre
entidade
ou atributo
multivalorado.
nmero
FILME
cdigo
42
FILME
ttulo
(0,n)
cdigo
ttulo
gnero
identicador
eClassicadoEm
(1,1)
descrio
GNERO
Situaes a considerar
Uso
Entidade
Desempenho de buscas
Atributo
Integridade da informao
Entidade
Custo de armazenamento
Entidade
Figura 3.3
Quando
transformar
um atributo em
entidade?
Relacionamentos
As recomendaes que devem ser observadas na modelagem de relacionamentos so as
seguintes:
relacionamentos binrios entre as entidades do seu modelo. Assim, caso se depare com um
relacionamento ternrio, a recomendao utilizar uma entidade associativa, conforme
podemos observamos na figura 3.4:
CIDADE
DISTRIBUIDOR
DISTRIBUIO
(0,n)
(1,1)
distribuio
Figura 3.4
Converso de
relacionamento
ternrio em
entidade
associativa.
(0,n)
PRODUTO
CPF
PESSOA
(1,1)
possui
(0,1)
(0,1) marido
eCasadaCom
(0,1) esposa
PESSOA
nome
CASAMENTO
cnjugeMarido
cnjugeEsposa
MARIDO
atributoEspeccoMarido
Figura 3.5
Transformando
relacionamento
unrio em binrio.
CPF
nome
ESPOSA
atributoEspeccoEsposa
Uma ltima dica sobre a modelagem de relacionamentos se refere a entidades que possuem
atributos particulares e que devem ser modelados atravs de genespec (EER). Exemplos
dessa situao quando temos de colocar no modelo tanto carros como motos, ambos
veculos automotores mas com caractersticas especficas. Um outro exemplo muito comum
a modelagem de pessoa fsica versus pessoa jurdica. Isso pode ser melhor entendido
atravs da figura 3.6.
PESSOA
43
cdigo
nome
PESSOA
feitaPara
FISICA
casadaCom
nmero
data
valor
VENDA
(1,1)
(1,1)
JURDICA
(1,n)
(0,n)
tem
(1,1)
PROFISSO
(0,1)
CNPJ
CPF
idprof
descrio
Figura 3.6
Exemplo de
modelagem de
atributos opcionais
de entidades com
EER.
Coleo de Relaes
Conforme j foi mencionado no incio desta sesso, o Modelo Lgico representa o banco de
dados como uma coleo de relaes (tabelas), se aproximando da estrutura que o banco de
dados ter em um SGBD(R).
A base matemtica se traduz pelo uso da teoria de conjuntos e da lgica de predicados de primeira ordem. Assim, uma tabela um conjunto de tuplas, sendo cada tupla entendida como
uma instncia de uma entidade. Outro ponto a ser observado que todas as tuplas em uma
relao so distintas (chave primria). A figura 3.7 refora os conceitos acima descritos.
11 Uma tabela um conjunto de tuplas;
Saiba mais
CATEGORIA
PRODUTO
Figura 3.7
Ocorrncia de
tuplas em uma
tabela.
Outra forma de representar as tabelas que aparecem na figura 3.7, e que j foi utilizada
na sesso anterior, a notao descritiva que aparece na figura 3.8. Essa figura ajuda a
Modelagem de Bancos de Dados
Esquema de Relao:
44
Figura 3.8
Esquema de
Relao.
O Esquema de Relao descrito pela notao R(A1, A2,..., An), onde R o nome da relao
(entidade derivada do DER) e Ai cada um de seus atributos. Assim, podemos entender R
como sendo igual a Categoria, composta, respectivamente, pelos atributos A1 = @codCat e
A 2 = descrCat.
O esquema de relao pode ser interpretado como uma declarao ou um tipo de assero.
Por exemplo, o esquema da relao Categoria declara que, em geral, uma entidade categoria
tem um cdigo e sua descrio. Cada tupla na relao pode ser interpretada como um fato
ou uma instncia em particular da assero.
J o Esquema de Banco de Dados representado por um conjunto de esquemas de relao
atravs da notao S = {R1, R2,..., Rm}. No exemplo da figura 3.8, o banco de dados em
questo composto pelas relaes R1 = Categoria e R 2 = Produto.
A figura 3.8 faz meno tambm a um conjunto RI. Vejam que o esquema de banco de dados
utilizado para verificao do estado de um banco de dados relacional de esquema S, se
preocupando em verificar se os estados de uma determinada relao satisfazem s restries de integridade especificadas no conjunto RI. Dessa forma, um estado de um banco de
dados que no obedece a todas as restries de integridade chamado de estado invlido, e
um estado que satisfaz todas as restries em RI conhecido com estado vlido.
Restries de Integridade
O Modelo lgico, em funo de sua base matemtica, deve observar as seguintes restries
de integridade:
11 Restrio de Chave:
nmeros reais, caracteres, booleanos, datas, horas, timestamp e, em alguns casos, os tipos
de dados de moeda.
de cada atributo A deve ser um valor atmico do domnio dom(A). Os tipos de dados associados aos domnios incluem os tipos de dados numricos para representao de inteiros e
45
PRODUTO
(1,n)
(1,1)
possui
CATEGORIA
DER
preo
descrio
cdigo
Lgico
descrio
cdigo
PRODUTO
CATEGORIA
codProd: Inteiro
(1,n)
descrProd: Texto (30)
preo: Real
codCat: Inteiro
codCat: Inteiro
descrProd: Texto (20)
(1,1)
Figura 3.9
Converso para
modelo lgico.
Nesse processo, vamos usar as seguintes regras para converso dos construtores
CLIENTE
46
(1,1)
telefone
endereo
nome
cdigo
faz
(1,n)
PEDIDO
total
data
nmero
(0,n)
contem
vlrItem
quantItem
Figura 3.10
Exemplo do uso
das Regras de
Mapeamento.
(1,n)
PRODUTO
preo
quantidade
descrio
cdigo
Entidades e atributos
Essa regra deve ser aplicada para cada entidade no DER.
A primeira providncia para uma entidade forte E criar um esquema de relao R que
inclua todos os atributos de E. Em seguida, escolha um dos atributos identificadores de E
como chave primria de R. A aplicao dessa regra demonstrada na figura 3.11, inclusive a
preocupao com a eventual decomposio de atributos compostos.
Pnome
Nss
Mnome
Snome
Nome
Endereo
Sexo
Salrio
EMPREGADO
DataNasc
Figura 3.11
Regra Entidades
(Fortes) e Atributos.
Exemplo:
EMPREGADO (@SSN, pNome, inicialM, uNome, sexoEmp, endereo, salrio, dataNascEmp)
J para cada entidade fraca F no DER, a mesma providncia inicial deve ser tomada: crie
um esquema de relao R que inclua todos os atributos F. Em seguida, inclua como chave
estrangeira de R os atributos que formam a chave primria do esquema de relao associada entidade forte E de F. A chave primria de R ser a combinao da chave primria de
E com a chave parcial de F. Isso melhor ilustrado na figura 3.12.
DEPENDENTE
Nome
DataNasc
Relao
Exemplo:
EMPREGADO (@SSN, pNome, inicialM, uNome, sexoEmp, endereo, salrio, dataNascEmp)
DEPENDENTE (@SSN, @Nome, SexoDep, dataNascDep, parentesco)
Relacionamentos binrios
A regra para a converso de Relacionamentos binrios tem variaes para cada uma das
possibilidades: 1:1, 1:N e N:M.
Para os relacionamentos 1:1, preciso inicialmente identificar os esquemas de relao S e T
que dele participam. Esses devem ser combinados em uma s relao, mas no sem antes
verificar se so concebidos separadamente no ambiente de negcio ou se h cardinalidade
mnima zero. Isso evitar desperdcio de espao. Outra alternativa escolher um dos relacionamentos, digamos S, e nele incluir como chave estrangeira a chave primria de T
(se houver atributos simples no relacionamento, inclua-os como atributos de S).
A figura 3.13 ilustra a aplicao dessa regra.
Figura 3.12
Regra Entidades
(Fracas) e Atributos.
Sexo
47
EMPREGADO
NmeroDeEmpregados
DataInicio
1
DEPARTAMENTO
GERENCIA
Exemplo:
EMPREGADO (@SSN, pNome, inicialM, uNome, sexoEmp, endereo, salrio, dataNascEmp)
DEPARTAMENTO (@NmDepto, nomeDepto, numEmp, SSNChefe, dataIncio)
Figura 3.13
Regra
Relacionamentos
binrios (1:1).
Endereo
Sexo
Salrio
Figura 3.14
Regra
Relacionamentos
binrios (1:N).
Nome
N
TRABALHA PARA
NmeroDeEmpregados
EMPREGADO
DEPARTAMENTO
Exemplo:
EMPREGADO (@SSN, pNome, inicialM, uNome, sexoEmp, endereo, salrio, dataNascEmp, NmeroDepto)
DEPARTAMENTO (@NmDepto, nomeDepto, numEmp, SSNChefe, dataIncio)
Por fim, ao lidar com relacionamentos N:N, o passo inicial criar um novo esquema de relao
S para represent-lo. A chave estrangeira de S ser composta pelas chaves primrias dos
esquemas de relaes que representam os tipos de entidade participantes no relacionamento
N:N. Se houver atributos simples no relacionamento, inclua-os como atributos de S. Tenha
em mente que podem no existir relacionamentos N:N no DER se foram utilizadas entidades
associativas. Por isso que se recomenda seu uso, deixando o DER mais prximo do futuro
modelo conceitual. De qualquer modo, a figura 3.15 traz um exemplo da aplicao dessa regra.
EMPREGADO
DataInicio
1
NmeroDeEmpregados
1
GERENCIA
Figura 3.15
Regra
Relacionamentos
binrios (N:N).
DEPARTAMENTO
1
CONTROLA
Horas
48
TRABALHA EM
PROJETO
Exemplo:
EMPREGADO (@SSN, pNome, inicialM, uNome, sexoEmp, endereo, salrio, dataNascEmp, NmeroDepto)
PROJETO (@NumProj, NomeProj, Localizao)
TRABALHA_EM (@SSN, @NumProj, Horas)
CIDADE
N
DISTRIBUIO
N
PRODUTO
Exemplo:
DISTRIBUIO (@codDist, @codCid, @codProd, ... )
Figura 3.16
Regra
Relacionamento
n-rio, onde n > 2.
49
EMPREGADO
supervisor
supervisiona
SUPERVISIONA
Exemplo:
EMPREGADO (@SSN, pNome, inicialM, uNome, sexoEmp, endereo, salrio,
dataNascEmp, NmeroDepto)
SUPERVISO (@SSNsupervisor, @SSNsupervisonado)
Figura 3.17
Converso de
relacionamento
unrio.
Generalizao ou especializao
A primeira providncia verificar se existem relacionamentos com a entidade geral. Em caso
afirmativo, deve-se primeiro criar um esquema de relao L para a entidade geral C (superclasse), com atributos {k, a1, a2,..., an}, sendo k o atributo identificador. Em seguida, crie uma
relao Li para cada entidade especfica Si (subclasses), onde os respectivos atributos sero
k {atributos de Si } (k a chave primria). Finalmente, para facilitar o processo de pesquisa no
banco de dados, recomenda-se a criao de um atributo tipo no esquema de relao L para
identificar a subclasse a que os dados se referem. Essa situao pode ser representada por:
CLIENTE
50
CPF
sexo
PESSOA
FISICA
PESSOA
JURDICA
Exemplo:
CLIENTE (@cdigo, nome, tipo)
PFISICA (@cdigo, CPF, sexo)
PJURDICA (@cdigo, CNPJ, tipoOrganizao)
cdigo
nome
CNPJ
tipoOrganizao
Figura 3.18
Regra
Generalizao ou
especializao.
Atributo multivalorado
Supondo o esquema de relao R{k, a1, a2, A,..., an}, onde A o atributo multivalorado. Se
o nmero de ocorrncias de A fixo, deve-se criar um novo atributo em R para cada uma
dessas ocorrncias de A.
Por outro lado, se a quantidade de ocorrncias de A muito grande, ou varivel, deve-se ento
criar um novo esquema de relao NR, incluindo neste apenas dois atributos: um correspondente ao atributo multivalorado A e o outro correspondente chave primria k de R. A chave
primria de NR ser a combinao de k e A. A seguir, exemplos para ambas as situaes:
Considerando cliente e telefone, onde:
Quadro resumo
Modelo Relacional
Entidade
Relao
Relacionamento 1 : 1 ou 1 : N
Relacionamento M : N
Atributo composto
Conjunto de atributos
Atributo multivalorado
Relacionamento n-rio
Chave
Entidade fraca
A figura 3.19 traz um quadro resumo com as regras de converso do DER para o modelo
lgico. J a figura 3.20 mostra o resultado da converso do caso EMPRESA, que vem sendo
utilizado ao longo deste curso.
Figura 3.19
Quadro Resumo
com as regras de
converso ER >
Modelo Lgico.
Modelo ER
51
Pnome
Nss
Mnome
Snome
Nome
Endereo
Sexo
Nmero
Nome
N
Salrio
EMPREGADO
DataNasc
TRABALHA PARA
supervisor
SUPERVISIONA
CONTROLA
Horas
GERENCIA
supervisiona
DEPARTAMENTO
NmeroDeEmpregados
DataInicio
Localizao
TRABALHA EM
PROJETO
Nome
DEPENDENTE DE
Localizao
Nmero
DEPENDENTE
Nome
Sexo
DataNasc
Relao
Exemplo:
EMPREGADO (@SSN, pNome, inicialM, uNome, sexoEmp, endereo, salrio, dataNascEmp, NmeroDepto)
SUPERVISO (@SSNsupervisor, @SSNsupervisonado)
DEPENDENTE (@SSN, @Nome, SexoDep, dataNascDep, parentesco)
DEPARTAMENTO (@NmeroDepto, nomeDepto, numEmp, SSNChefe, dataIncio)
LOCALIZAO (@nmeroDepto, @localizao)
PROJETO (@NumProj, NomeProj, Localizao)
Modelo Lgico EMPRESA
TRABALHA_EM (@SSN, @NumProj, Horas)
Finalmente, na figura 3.21, apresentamos o modelo lgico do estudo de caso EMPRESA,
conforme este representado na ferramenta brModelo. Repare que as chaves so indicadas
atravs de um smbolo especfico () e que cada atributo tem seu tipo definido (em alto nvel).
52
Figura 3.20
Converso do caso
EMPRESA.
EMPREGADO
SSN: Texto(9)
endereco: Texto(80)
(1,1)
sexo: Texto(1)
salario: Real
mNome: Texto(4)
pNome: Texto(23)
(1,n)
uNome: Texto(23)
possui_SSN: Texto(9)
numeroDepto: Inteiro(3)
(1,1)
(0,n)
DEPENDENTE
nome: Texto(50)
parentesco: Texto(30)
dataNasc: Data
sexo: Texto(1)
SSN: Texto(9)
Figura 3.21
Modelo Lgico
do estudo de
caso Empresa no
brModelo.
(1,1)
DEPARTAMENTO
numeroDepto: Inteiro(3)
(1,1)
nomeDepto: Texto(50)
SSN: Texto(9)
dataIni: Data
(1,n)
localizao
numeroDepto: Inteiro(3)
Localizacao: Texto(30)
(1,1)
trabalhaEm
(1,n)
numHoras: Inteiro(3)
numeroProj: Inteiro(3)
SSN: Texto(9)
(1,n)
(0,n)
PROJETO
(1,1)
localizao: Texto(30)
nomeProj: Texto(50)
numeroProj: Inteiro(3)
numeroDepto: Inteiro(3)
Exerccios de Fixao e
Comandos DDL para criao do Banco de Dados
Para voc, qual a importncia da criao do modelo conceitual e lgico como base para a
criao do modelo fsico e posterior scritp SQL/DDL a ser utilizado na criao do banco de
dados da aplicao em desenvolvimento?
(1,1)
(0,1)
53
54
4
Apresentar a Structured Query Language (SQL) como ferramenta para a criao
e manuteno de modelos fsicos de bancos de dados, bem como o SGBD PostgreSQL.
conceitos
Modelo fsico; SQL; DDL; DML; DCL; DTL; Views; Triggers e Stored Procedures.
O modelo fsico
Podemos fazer as seguintes afirmaes sobre o modelo fsico:
objetivos
Modelo Fsico
O modelo fsico a etapa final antes de se partir para a criao do banco de dados propriamente dito, e pode ser entendido como um refinamento do modelo lgico abordado na
sesso anterior. Um modelo bem estruturado e documentado a base para a definio das
estruturas necessrias para a construo do banco de dados.
importante ressaltar que muitas das ferramentas de modelagem disponveis no mercado
possibilitam a gerao do modelo fsico a partir do modelo lgico desenvolvido. Isso feito
atravs da gerao de scritps em uma linguagem denominada SQL/DDL e que ser estudada
com mais detalhe logo a seguir.
Na verdade, considerando todas as etapas do processo de modelagem, temos:
minimundo DER modelo lgico script SQL/DDL.
A ferramenta brModelo, que temos utilizado ao longo deste curso, tambm capaz de
apoiar o processo de converso do modelo lgico para o modelo fsico. A figura 4.1 mostra o
resultado desse processo para o estudo de caso EMPRESA.
Figura 4.1
Resultado da
converso do
modelo lgico para
fsico no brModelo.
delo, os tipos de dados dos domnios de cada atributo so gerados com informaes de
56
mais alto nvel, j que essa ferramenta no se preocupa com os tipos de dados disponveis
nos diferentes SGBDs disponveis no mercado.
Assim, ser necessrio um passo adicional para usar o resultado gerado pelo brModelo na
criao propriamente dita das estruturas de dados (tabelas, RI etc.). Qual seja: mapear os
tipos de dados definidos no brModelo para cada atributo de cada tabela nos respectivos
tipos de dados disponveis no SGBD a ser utilizado.
Saiba mais
11 SQL-86;
Cabe ressaltar,
contudo, que apesar da
maior parte dos SGBDs
ser compatvel com
uma das verses do
padro, no so raros
os que acabam desenvolvendo extenses ou
variaes em relao
ao padro adotado.
Estrutura da SQL
Na verdade, a SQL composta por um conjunto de linguagens que permitem a definio,
consulta e atualizao de dados, alm de recursos adicionais para a segurana e gesto do BD.
So elas:
11 DDL: Linguagem de Definio de Dados;
tion for Standardization (ISO) publicaram o primeiro padro SQL. De l para c novas
57
COMMIT e ROLLBACK.
A DDL ser abordada com mais detalhes ainda nesta sesso. A DML, por sua vez, ser objeto
das sesses seguintes, enquanto que a DCL no faz parte do escopo desse curso (ela estudada no curso que trata da Administrao de Bancos de Dados).
Outras funcionalidades
Existem algumas funcionalidades gerais, fornecidas pelos principais SGBDs disponveis no
mercado, que servem para facilitar, proteger e automatizar alguns dos processos realizados
dentro do banco de dados.
Entre elas, destacamos:
11 Views;
11 Triggers e Stored Procedures;
22 MySQL-SQL/PSM, Oracle-PL/SQL, PostgreSQL-PL/pgSQL/PSM.
11 Regras para embutir comandos SQL em Linguagens de programao.
Views so utilizadas para facilitar o acesso a um determinado conjunto de dados. Esse
recurso possibilita a criao de selees de dados, provenientes de tabelas, mas disponibilizados por meio de outras tabelas que atuam como filtros. Esses filtros, na verdade, so
uma restrio de dados, baseados em regras estipuladas pelo usurio, para que somente
os resultados desejados sejam disponibilizados, e no todos os campos e registros de uma
determinada tabela do banco de dados.
Os triggers, geralmente escritos em DML, no so disparados pelos usurios, mas sim pela
ativao de algum evento ocorrido no banco de dados.
As Stored Procedures (procedimentos armazenados) so uma coleo de comandos em SQL
pensados e implementados com o objetivo de aperfeioar consulta no banco de dados. Por
exemplo, os procedimentos armazenados podem ser utilizados para reduzir o trfego na
rede, melhorar a performance do banco de dados, bem como criar mecanismos de segurana, entre outras funcionalidades.
Por fim, as empresas que disponibilizam SGBDs no mercado tambm se preocupam em
desenvolver e disponibilizar regras para o uso de seus produtos nas diversas linguagens de
programao em uso, visando manter um padro para facilitar o processo de como seus
comandos podero ser embutidos nas solues de software em desenvolvimento que manipulam banco de dados.
PostgreSQL
11 Origem no projeto Postgres, na Universidade de Berkeley, em 1986.
11 Em 1996, recebeu o nome atual PostgreSQL.
11 Licena de uso BSD, open source.
11 Apresenta principais recursos existentes nos bancos de dados pagos disponveis
no mercado.
58
Saiba mais
A DTL ser discutida na
sesso 10.
Caractersticas do PostgreSQL
Value
Unlimited
32 TB
1.6 TB
1 GB
Unlimited
Unlimited
Figura 4.2
Caractersticas do
PostgreSQL.
Limit
59
Neste curso, vamos utilizar o PostgreSQL como SGBD, sendo necessrio que ele esteja configurado como um servio ativo para possibilitar acesso criao de banco de dados e suas
estruturas de dados.
O prximo passo que devemos ter em mente realizao de uma conexo com o SGBD.
Existem diversas ferramentas disponveis no mercado, sendo o psql e pgAdmin3 duas ferramentas que acompanham a verso do postgreSQL disponibilizada para este curso.
11 Comandos SQL podem ser executados:
60
Figura 4.3
Tela que
disponibiliza
servios do SO.
A criao de uma conexo ainda no d acesso a um banco de dados especfico, e sim nos
disponibiliza uma ponte com informaes necessrias para abrir uma conexo com o banco
de dados que desejamos trabalhar.
Para executar qualquer comando, necessrio conectar ao servidor PostgreSQL
Figura 4.5
pgAdmin3 Passos
para ativar conexo
ao servidor
postgreSQL.
(no pgAdmin3).
61
Banco de dados:
11 Objeto bsico em um SGBD que contm todos os objetos que sero criados para esse
banco de dados.
11 Usurio com direito de acesso CREATEDB.
22 CREATE DATABASE <nomeDB> [argumentos];
11 Argumentos:
22 OWNER usurio (usurio com amplos poderes sobre o DB);
22 TEMPLATE nomet (modelo padro para a DB);
22 ENCODING valor (conjunto de caracteres: LATIN1, UTF8...);
22 TABLESPACE nomets (local de armazenamento do DB);
22 CONNECTION LIMIT (nmero de conexes simultneas).
Tablespaces so definies de locais para armazenamento lgico das informaes do servidor. visto como diretrios existentes em seu SO. Sua funcionalidade a de possibilitar
o armazenamento de informaes do servidor em locais distintos, sendo motivado por
polticas de backup, utilizao de mais de um HD, organizao, entre outros.
11 Tablespaces so definies de locais de armazenamento lgico dos dados (por questo
62
Figura 4.6
pgAdmin3 Uso
do SQL Editor
para criao de
banco de dados no
postgreSQL.
A ferramenta SQL Editor, parte integrante do pgAdmin3, disponibiliza uma interface onde
podemos digitar as instrues SQL a serem utilizadas para a criao do banco de dados.
Outro recurso que podemos usar o assistente para a criao de banco de dados oferecido
pelo pgAdmin3 (figura 4.7).
A conexo com o banco de dados s ser possvel aps a criao e posterior conexo com o
este. Apenas aps a confirmao de conexo estabelecida que poderemos dar incio ao
processo de execuo de consultas no banco de dados.
Outro ponto importante a se ressaltar que o acesso aos objetos de um determinado banco
de dados tambm s estar disponvel para uso aps a confirmao da conexo (figura 4.8).
Para executar comandos sobre um banco de dados especfico, necessrio conectar-se a ele:
clique sobre o nome do BD.
Figura 4.7
pgAdmin3 Uso
de assistente
para criao de
banco de dados no
postgreSQL.
63
Figura 4.8
pgAdmin3 Acesso
estrutura do
banco de dados
aps ativao de
conexo.
64
Figura 4.9
pgAdmin3
Editando
propriedades do
banco de dados.
Figura 4.10
pgAdmin3
Excluindo um
banco de dados.
Esquemas podem ser entendidos como pastas utilizadas de objetos criados em um banco de
dados. Um banco de dados pode ter dezenas de objetos, como tabelas, vises e ndice, entre
outras estruturas. Esquemas possibilitam a organizao, como por exemplo, agrupados de
acordo com seu uso.
Recomendamos o uso de esquemas em um banco de dados quando for necessrio o agrupamento e organizao de objetos que posteriormente tero o acesso disponibilizado para
um determinado usurio ou grupo de usurios.
65
ESQUEMA:
11 Agrupa ou organiza tabelas, restries, vises, domnios e outros objetos (construtores) do BD;
11 Incorporado no SQL2: inicialmente todas as tabelas eram de um mesmo esquema;
11 Na prtica o banco de dados;
11 Esquema padro: 'public'.
Figura 4.11
pgAdmin3
Criando esquema
em um banco de
dados.
A excluso de esquemas de um banco de dados tambm est disponvel para ser realizada
por linha de comando SQL no SQL Editor ou por meio da interface grfica do pgAdmin3
(figura 4.12).
Excluso do Esquema e de todas as estruturas que ele contm.
66
Figura 4.12
pgAdmin3
Excluindo esquema
em um banco de
dados.
Existe uma grande variedade de tipos de dados que podem ser utilizados no processo de
construo de campos que compem uma tabela. Neste curso, vamos listar os mais
comumente utilizadas por proximidade com a realidade das informaes geralmente
manipuladas nos bancos de dados. So eles:
Principais tipos de dados
11 Numrico: bigint (int8), integer (int, int4), smallint (int2), serial, double precision
(float8), real (float4), numeric [(p,s)] (decimal), money;
11 Literal: character [(n)] (char), character varying[(n)] (varchar), text, bit varying[(n)] (varbit);
11 Lgico: boolean(bool);
11 Temporal: date, time, timestamp [with(out) time zone];
11 Outros: bytea, oid, tipos enumerados, tipos geomtricos, tipos endereos de rede...
Figura 4.13
pgAdmin3
Criando tabelas.
67
A figura 4.14 exibe as janelas relacionadas com a criao dos campos de uma tabela usando
o assistente do PgAdmin3.
Tipos de dados, que compem os campos ou colunas de uma tabela no banco de dados,
Figura 4.14
pgAdmin3
Assistente para
criao de colunas
em uma tabela.
podero ter de atender a determinadas restries, que so derivaes de regras do minimundo que o banco de dados representa. Geralmente temos um conjunto considervel
de restries para os valores reais sendo manipulados. Em determinada situao essas
restries podero ser tratadas na camada de viso da aplicao que manipula os dados,
mas, porm, em algumas situaes, esses devero ser tratadas na estrutura das tabelas pertencentes a ao banco de dados em uso.
Restries (constraints):
68
Figura 4.15
pgAdmin3
Assistente para
definio de
restries em
colunas ou campos.
69
Importante:
11 Por padro, se nenhum nome for atribudo restrio UNIQUE, receber o nome
nomeTB_nomeCOL_key;
11 Por padro, se nenhum nome for atribudo restrio PRIMARY KEY, receber o nome
nomeTB_pkey;
Figura 4.16
pgAdmin3
Assistente para
definio de
restries em
atributos.
11 Por padro, se nenhum nome for atribudo restrio FOREIGN KEY, receber o nome
nomeTB_nomeCOL_fkey;
70
Figura 4.17
pgAdmin3
Assistente para
definio de
chave primria
e integridade
referencial.
Figura 4.18
pgAdmin3
Assistente
para criao de
restries.
Restries em Atributo:
11 possvel validar dados inseridos em um campo atravs da clusula
CHECK(<condio>);
11 a especificao de uma condio, cujo resultado da avaliao deve ser verdadeiro
...);
11 Observao: restries CHECK so teis para garantir a integridade dos dados, mas
22 RENAME TO <novoNomeTB>;
72
Figura 4.19
pgAdmin3
Assistente para
alterao de tabela
do BD.
Observaes:
11 A nova coluna inicialmente preenchida com o valor padro (se fornecido) ou NULL;
11 PostgreSQL tentar converter o valor da coluna para o novo tipo, bem como quaisquer restries que envolvem a coluna. Mas essas converses podem falhar;
11 Muitas vezes melhor excluir as restries e depois adicionar novamente no novo
formato.
Figura 4.20
pgAdmin3
Assistente para
excluso de tabela
do BD.
73
Domnios
Domnios so objetos que possibilitam a criao de novos tipos de dados que podero ser usados
no processo de definio de colunas de dados dentro das tabelas sendo criadas no banco.
Domnios tambm so conhecidos como mscaras de dados por sua funcionalidade. Por
exemplo, possvel criar um domnio de dado que valide cdigo postal, outro que validade
nmero telefnico, entre outros.
Domnio:
Exemplos:
Figura 4.21
pgAdmin3
Assistente para
manuteno de
domnios.
74
VALUE ~ '^[A-Za-z][A-Za-z0-9]+$');
Sequncia
11 um objeto do BD que gera nmeros em ordem sequencial.
11 Aplicaes, na maioria das vezes, usam esses nmeros quando eles exigem um valor
nico em uma tabela, tais como valores de chave primria.
<nomeSq>.NEXTVAL
Comando para definir um novo valor da sequncia:
SELECT SETVAL('<nomeSQ>',<novoValor>);
A figura 4.22 mostra como criar uma nova sequncia atravs do assistente do PgAdmin3.
Figura 4.22
pgAdmin3
Assistente
para criao de
sequncias.
PRIMARY KEY(idfunc);
);
INSERT INTO funcionario VALUES (DEFAULT,'Maria');
INSERT INTO funcionario VALUES (nextval('seq_func'),'Ana');
...
75
Ou
2 bytes
1 to 32767
serial
4 bytes
autoincrementing interger
1 to 214783647
bigserial
8 bytes
1 to 9223372036854775807
Figura 4.23
pgAdmin3
Exemplo de
atributo SERIAL
na criao de uma
tabela no BD.
11 Caso haja uma falha no sistema, ser perdida toda a numerao sequencial;
76
11 Caso voc execute o comando DELETE na sua tabela, o nmero da sequncia que voc
deletou ser perdido, permanecendo um buraco na sua coluna;
11 No aproveitado para um novo registro.
Optar por autonumerao quando no houver atributo identificador prprio (nesse
caso, usar a clusula UNIQUE).
Alterao da sequncia:
Figura 4.24
pgAdmin3
Assistente para
manuteno de
sequncias.
Figura 4.25
pgAdmin3 SQL
Editor Assistente
para execuo do
scritp SQL/DDL.
77
Exerccios de Fixao e
Comandos DDL para criao do banco de dados
Para voc, qual a importncia da criao do modelo conceitual e lgico como base para a
criao do modelo fsico e posterior scritp SQL/DDL a ser utilizado na criao do banco de
78
5
Conhecer o processo de escrita de consultas SQL/DML para a manipulao de banco
de dados com operaes CRUD e operaes sobre conjuntos.
conceitos
CRUD; INSERT; SELECT; cursor; UPDATE; DELETE; DISTINCT; JOIN (INNER e OUTER);
Operaes CRUD
A partir desse momento, vamos dar incio ao estudo dos recursos disponibilizados nos
SGBDs para manipulao das estruturas de dados definidas nas tabelas que compem um
banco de dados. O conjunto de comandos est definido dentro do SQL/DML.
DML o grupo de comandos dentro da linguagem SQL utilizado para a recuperao,
incluso, remoo e modificao de informaes em bancos de dados. O acrnimoCRUD
usado frequentemente para definir as quatro operaes bsicas de um banco de dados.
Seu significado :
11 Create (INSERT);
11 Retrieve (SELECT);
11 Update (UPDATE);
11 Delete (DELETE).
Os comandos SQL/DML, para manipular o BD, podem ser informados atravs da janela do
SQL Editor, sendo o resultado exibido no Output Pane, conforme pode ser visto na figura 5.1.
objetivos
79
Figura 5.1
pgAdmin3 SQL
Editor resultado
de uma operao
CRUD no Output
Pane.
Os dados obtidos atravs de um desses comandos, por sua vez, podem ser diretamente
manipulados por meio da janela de Edio de Dados, conforme demonstrado na figura 5.2:
Edio de Dados
Exemplo tabela Empregado
(BD Empresa)
INSERT
80
Figura 5.2
pgAdmin3 SQL
Editor editando
dados de uma
tabela no assistente
Edit Data.
Vejam que a execuo em sequncia desses comandos gera um erro, conforme pode ser
visto na figura 5.3. Esse erro ocorre porque j existe na tabela um registro com o valor 1
(valor da sequncia). Na tentativa seguinte para inserir um registro, este vai conter o valor 2,
pois a sequncia j foi incrementada (executou NEXTVAL).
Nesse outro exemplo, apresentado na figura 5.4, demonstra-se que o problema pode acontecer
em qualquer momento, e no apenas na incluso dos primeiros registros em uma tabela.
Figura 5.4
Mensagem de
erro violao
de restrio de
unidade durante
processo de
incluso de
registro.
81
('abacaxi', 4.58, 6)
^
seguir, temos uma situao onde um erro gerado por conta dessa validao.
82
INSERT INTO produto (codProd, vlrProd, codCat) VALUES (DEFAULT, 2.5, 3);
ERRO: valor nulo na coluna descripod viola a restrio no-nula
DETAIL: Failing row contains (1, null, null, null, null, null, null, 3, 2.5.
********** Error **********
Nesse exemplo, obrigatrio informar o campo descrprod ou passar um valor para ele na
ordem de definio dos campos quando da criao da tabela no banco de dados.
do sistema: current_date;
TRUE FALSE
t
true
false
yes
no
on
off
83
UPDATE
O comandoUPDATEserve para realizar a alterao de algum registro j inserido em alguma
tabela de um banco de dados. Esse comando retorna nmero de registros afetados pela
atualizao na tabela ou, ento, um cdigo de erro. A sintaxe do comando :
UPDATE <nomeTabela>
SET <campo1> = <expresso1> [,...]
[WHERE <expressoCondicional>];
Vejamos alguns exemplos:
DELETE
O comandoDELETEapaga um determinado registro ou um conjunto de registros que satisfaam uma determinada condio. Esse comando retorna o nmero de registros removidos
da tabela ou um cdigo de erro, sendo a sua sintaxe apresentada a seguir.
84
Saiba mais
O problema de violao
de chave estrangeira
tambm pode ocorrer
na execuo de um
comando DELETE, conforme pudemos ver no
exemplo.
TRUNCATE
Esse comandoexclui todas as linhas de uma tabela ou de uma lista de tabelas de forma
mais rpida que ocomandoDELETE, apresentando ganho de performance por no permitir
a incluso de restries com o uso da clusula WHERE. O TRUNCATE remove rapidamente
todas as linhas da tabela e recupera espao em disco imediatamente (muito til em tabelas
grandes). Sua sintaxe :
SELECT
o comando DML utilizado para manipular os dados armazenados nas estruturas das
tabelas de um banco de dados, retornando os campos desejados de todos os registros que
satisfazem a condio estabelecida. O resultado apresentado na forma de um cursor,
que uma tabela temporria que pode ser entendida como uma matriz em que cada linha
contm um registro e cada coluna corresponde a um campo indicado no comando SELECT,
que deu origem ao cursor. A sintaxe desse comando apresentada a seguir.
SELECT <listaCampos>
FROM <listaTabelas>
[WHERE <expressoCondicional>]
[...];
Na figura 5.5, temos um exemplo simples do comando SELECT juntamente com o cursor que
gerado atravs da sua execuo.
Figura 5.5
Tabela temporria
com o resultado
de uma consulta
SELECT.
Outros Exemplos:
Operadores
Resumo dos principais operadores:
86
Operadores negativos
importante destacar o uso dos operadores de negao, que podem ser aplicados juntamente com os operadores anteriormente descritos, estabelecendo restries que trazem
como resultado tudo o que NO satisfaz a condio estabelecida. A seguir apresentamos
exemplos de como usar esse tipo de operador.
11 <>: diferente
Comandos especiais
Apesar de inicialmente parecer ser um comando simples, o SELECT admite uma srie de
possibilidades para permitir que seu uso seja bastante amplo. Assim, junto com o SELECT,
11 Clculo no SELECT
Exemplo: Exibir salrio com aumento de 10%
q
Captulo 5 - Comandos DML CRUD e operaes sobre conjuntos
podem ser aplicados comandos especiais, conforme podemos ver nos exemplos a seguir.
87
ORDER BY
Outro aspecto a ser considerado como ordenar o resultado de um comando SELECT qualquer.
Para isso, temos a clusula ORDER BY, que admite algumas variaes para indicar a ordenao
que deve ser seguida e que apresenta as seguintes caractersticas:
11 Ordena por um ou mais campos especificados (usar como critrio de desempate);
ORDER BY RIGHT(ssn,4);
88
Figura 5.7
Resultado de um
SELECT ordenado
por parte do ssn.
LIMIT
A clusula LIMIT, como o prprio nome indica, impe um limite para a quantidade de
registros retornados por um comando SELECT. Assim, o cursor gerado conter no mximo o
nmero de registros indicados pela clusula, sendo por isso mesmo comumente utilizada
Figura 5.8
Tabela temporria
com o resultado
de uma consulta
SELECT com LIMIT.
Atividade de fixao
Juno de tabelas
A operao de juno usa a combinao de tuplas, que indicam um relacionamento entre
tabelas em um banco de dados, para possibilitar a execuo de consultas SQL que necessitam produzir resultados com dados de oriundos de duas ou mais tabelas.
A ligao ou vnculo entre duas ou mais tabelas feita atravs da chave primria de uma
tabela e das chaves estrangeiras das demais. preciso, contudo, especificar a condio de
juno e o uso de apelidos para as tabelas envolvidas pode ajudar a deixar o comando SELECT
mais fcil de ser entendido. Na figura 5.9, temos um exemplo onde se deseja listar o departamento e os empregados que nele esto lotados, ordenando o resultado por departamento.
89
Juno Interna
A Juno Interna (INNER JOIN) utilizada para especificar forma de juno com uso de chave
estrangeira e da subclusula ON. Se no h dado de relao, ento a tupla no aparece no resultado (se necessrio mostrar, usar juno externa). A sintaxe do SELECT com esse tipo de juno :
SELECT <listaCampos>
FROM <Tabela1>
INNER JOIN <Tabela2> ON t1.<pk> = t2.<fk>
[INNER JOIN <Tabela3> ON t3.<pk> = <t2.fk>...];
Na figura 5.10, so apresentados alguns exemplos do uso da clusula INNER JOIN e o
comando SELECT equivalente utilizando apenas a clusula WHERE.
Juno de Tabelas
Exemplos:
FROM matricula m
90
Se os nomes dos campos forem iguais nas tabelas, pode-se usar a subclusula USING, conforme o seguinte exemplo:
Juno Cruzada
A Juno Cruzada, por sua vez, corresponde ao produto cartesiano das tabelas envolvidas.
Ela a juno realizada quando no se especifica ON no comando. No um tipo de juno
utilizado com frequncia, mas muitas vezes realizada justamente pelo esquecimento do
uso do ON no comando. A figura 5.11 traz um exemplo de juno cruzada.
Figura 5.10
Tabela temporria
com o resultado
de uma juno
cruzada entre duas
tabelas.
91
Juno natural
A Juno Natural tem esse nome por deixar para o SGBD determinar as condies de juno.
A figura 5.12 traz um exemplo de juno natural.
Figura 5.11
Tabela temporria
com o resultado de
uma juno natural
entre duas tabelas.
Autojunes
Esse um recurso utilizado quanto temos um autorrelacionamento no modelo fsico do
banco de dados. Ou seja, quando preciso fazer uma juno com dados de uma mesma
tabela (relacionamento unrio). A figura 5.13 traz um exemplo desse tipo.
ORDER BY s.ssn;
92
Figura 5.12
Tabela temporria
com o resultado de
uma autojuno.
Figura 5.13
Tabela temporria
com o resultado de
uma juno entre
trs tabelas.
Caso voc esteja se perguntando, possvel, sim, informar a mesma tabela mais de uma vez em
uma mesma consulta. O exemplo a seguir demonstra o uso de uma mesma tabela duas vezes.
SELECT <campos>
FROM <tabela_ta> tA
INNER JOIN <tabelaT> t1 ON tA.chave = t1.campoT
SELECT <campos>
FROM <tabela t>
INNER JOIN (subconsulta1) s1 ON t.chave = s1.campo1S1
INNER JOIN (subconsulta2) s2 ON s1.campo2S2 = s2.campo;
Veja que subconsulta1 e subconsulta2 representam instrues SQL que iro retornar seus
respectivos cursores (tabelas temporrias) com informaes necessrias para retornar a
tabela temporria final desejada.
93
Figura 5.14
Tabela temporria
com o resultado
de uma juno no
equivalente.
94
Juno externa
Tipos de OUTER JOIN:
tabela. Notem que dever aparecer null ao lado das placas que no so de caminho. Esse
95
INNER JOIN
(similar ao INTERSECT)
Figura 5.15
Junes sobre
Conjuntos.
EXCEPT
(ou MINUS em outros SGBDs)
Unio
Interseo
Diferena
query1EXCEPT [ALL] query2
Figura 5.16
Teoria de
Conjuntos.
96
UNION
Essa operao une o resultado e remove eventuais duplicatas, com efeito semelhante ao
da clusula DISTINCT. Mas se for aplicado o comando UNION ALL, as duplicatas no so
removidas (sendo mais simples para o servidor). Na figura 7.17 vemos exemplos de uso do
comando UNION.
Figura 5.17
Exemplos
de UNION.
INTERSECT
Retorna os registros presentes tanto na consulta 1 quanto na 2. Se no houver dados em
comum, o conjunto-resultado vazio. As linhas duplicadas so eliminadas, a menos que
INTERSECT ALL seja usado. Exemplos do uso de INTERSECT so apresentados na figura 7.19.
INTERSECT
SELECT nome FROM fornecedor;
EXCEPT
A operao EXCEPT retorna todos os registros presentes no resultado da consulta 1, mas
no no resultado da 2 (chamado s vezes de diferena entre duas consultas). Mais uma vez,
as duplicatas so eliminadas, a menos que seja utilizado a clusula EXCEPT ALL. A figura 5.20
traz exemplos utilizando essa operao.
97
Exemplo 1: construa uma lista de todos os locais onde existe um departamento, mas nenhum projeto.
Figura 5.19
Exemplos de
EXCEPT.
98
6
Aprender sobre o processo de escrita de consultas SQL/DML com o uso de recursos
que possibilitam a manipulao de dados de forma a organiz-los e format-los de
acordo com a necessidade do projeto.
conceitos
Exerccio de nivelamento e
Voc j manipulou tabelas em banco de dados com funes agregadas ou nativas? Em caso de
resposta afirmativa, voc o fez como DBA ou como programador? Cite o banco de dados e/ou
a linguagem de programao caso tenha utilizado, bem como algumas das funes utilizadas.
Funes agregadas
Alguns exemplos desse tipo de funo so:
objetivos
99
Nos exemplos recm-citados, expresso indica qual campo ser utilizado para o agrupamento que se deseja como resultado dessa consulta. As instrues ALL e DISTINCT podero
ser utilizadas para indicar se todos os registros afetados sero utilizados no agrupamento
solicitado ou se sero descartadas possveis duplicidades, respectivamente.
Outro ponto importante a se considerar quanto ao contedo armazenado no atributo da
expresso. O registro que tiver o contedo NULL no atributo da expresso no ser contabilizado no agrupamento.
sempre til consolidar novos conhecimentos atravs de exemplos. Assim, para ilustrar o
uso de funes agregadas, vamos tomar como base o conjunto de tabelas apresentado na
figura 6.1.
ALUNO
codigo
nome
PROFESSOR
(0,n)
codigo
nome
(1,1)
nota
matriculadoEm
codigo
(1,n)
nome
DISCIPLINA
(1,n)
leciona
faltas
Figura 6.1
Modelo de dados
'Escola' utilizado
para ilustrar o
uso de funes
agregadas.
100
Figura 6.2
Exemplos do uso de
funes agregadas.
Agrupamento
Agrupamento um recurso que podemos utilizar no processamento de consultas SQL/DML
quando h a necessidade de trabalharmos com funes agregadas em conjuntos especficos
101
Empregado
Dependente
Localizao
Trabalha
Departamento
Projeto
Figura 6.3
DB Empresa base
para diversos
exemplos nesta
sesso.
102
Figura 6.4
Exemplos do uso
de agrupamento.
Algumas vezes necessrio recuperar os valores dessas funes agregadas somente para
grupos que satisfaam certas condies. Isso pode ser conseguido atravs do argumento
HAVING, similar ao parmetro WHERE. Sua funo a de filtrar registros dentro de uma
consulta SQL/DML em execuo. A diferena que o HAVING aplicado sobre os registros
agrupados pelo argumento GROUP BY.
A clusula GROUP BY deve ser colocada antes da HAVING, pois os grupos so formados e as
funes agregadas so calculadas antes de se resolver a clusula HAVING. Ilustramos o uso
dessas clusulas nos exemplos da figura 6.5.
Exemplo 3: igual ao Exemplo 2,
exceto por considerar apenas
projetos com mais de dois
empregados.
Figura 6.5
Exemplos do uso da
clusula HAVING.
103
Funes Nativas
Sistemas Gerenciados de Banco de Dados geralmente fornecem um conjunto de funes
que auxiliam na manipulao dos tipos de dados primitivos por eles disponibilizados.
A grande maioria dessas funcionalidades dependente de um determinado SGDB, no
sendo especificadas pelo padro SQL. Operadores para cadeia de caracteres, funes para
formatao dos tipos data e hora, funes e operaes geomtricas, entre outros, so
recursos que os SGBDs podem oferecer para seus usurios com o intuito de facilitar a realizao de determinadas operaes sobre os dados neles armazenados.
Figura 6.6
Funes Nativas
Informaes de
SGBD e sesso.
Manipulao de data/hora
Obter data e hora atuais e obter partes do timestamp (Padro SQL-2003).
milliseconds
day
minute
decade
Month
quarter
as Sunday(0/1) to Saturday(6/7)
104
second
timezone
epoch
timezone_hour
hour
timezone_minute
microseconds
week
millennium
year / isoyear
Figura 6.7
Funes que
manipulam data,
hora e timestamp.
Um exemplo interessante, e muitas vezes til, o de como fazer para calcular idades.
Na figura a seguir, so exibidos dois mtodos diferentes.
Mtodo 1: uso de operador para calcular
a diferena de anos.
SELECT pnome,
EXTRACT(YEAR FROM NOW())
EXTRACT(YEAR FROM datanasc)
AS idade
FROM empregado;
Figura 6.8
Mtodos para
clculo de idade.
Outra funo nativa para manipular datas a DATE_PART, semelhante funo EXTRACT
vista acima e que inclusive utiliza os mesmos identificadores apresentados na figura 6.7
como parmetros. Sua sintaxe a seguinte:
DATE_PART(text, timestamp)
No exemplo a seguir as so utilizadas as funes EXTRACT e DATE_PART para extrair partes
da data atual, NOW(), com o resultado obtido sendo apresentado logo a seguir.
mesatual;
105
Na figura 6.9, temos uma srie de exemplos ara ilustrar o uso de operadores com datas.
calcular nova data a partir de um intervalo especfico:
TO_CHAR(timestamp, text)
Figura 6.9
Funes Nativas
exemplo de uso de
operador com data
e hora.
Vejam que text um conjunto de caracteres que pode funcionar como uma mscara para
um formato final desejado. o caso da mscara 'DD/MM/YYYY', onde DD ser substitudo
por dia do ms. Qualquer parte do texto que no seja reconhecido como um modelo ou
mscara padro simplesmente copiado sem alterao.
Existe uma grande quantidade de modelos ou mscaras padro para a formatao de
data e hora.
importante lembrar que a funo TO_CHAR pode converter outros tipos de dados em
um conjunto de caracteres, bastando passar como parmetro um nmero (int ou double)
no lugar do timestamp. Nesse caso, haver modelos ou mscaras padro para nmeros,
tambm disponveis nesse link.
106
SELECT TO_CHAR(current_timestamp,
'HH24:MI:SS');
Figura 6.10
Funes Nativas
exemplo de
formatao
de data.
Manipulao de String
A manipulao de strings pode ser feita atravs de operadores e funes nativas. O operador de concatenao || vai juntando conjuntos de caracteres em sequncia e as funes
existentes permitem extrair ou substituir trechos de strings, contar o nmero de caracteres,
alterar a caixa, entre outras funes. Na figura a seguir apresentamos alguns exemplos.
Concatenao: operador ||.
SELECT CHAR_LENGTH('banco');
Figura 6.11
Funes Nativas
exemplo de
formatao de
string.
107
J o exemplo da figura 6.12 aplica um conjunto de funes para o nome dos dependentes na
tabela dependente da figura 6.3. As funes utilizadas so:
11 POSITION: obter a localizao de uma substring;
11 SUBSTRING: obter a substring a partir de uma posio, x caracteres;
11 OVERLAY: substituir uma substring a partir de uma posio, x caracteres.
SELECT nomedep,
POSITION('ana' IN nomedep),
SUBSTRING(nomedep FROM 3 FOR 4),
SUBSTRING(nomedep,3,4),
OVERLAY(nomedep PLACING 'pos' FROM 2 FOR 4)
FROM dependente;
Figura 6.12
Funes Nativas
exemplo de
manipulao de
strings.
Manipulao de nmeros
O PostgreSQL apresenta uma quantidade considervel de operadores matemticos que
podem ser utilizados em expresses numricas com os tipos de dados suportados. Os operadores bit a bittrabalham somente em tipos de dado inteiros, enquanto os demais esto
108
A figura 6.13 traz uma tabela com os operadores matemticos disponveis e exemplos de uso
para cada um deles. A figura traz ainda alguns exemplos adicionais.
Operador
Descrio
Exemplo
Resultado
adio
2+3
subtrao
23
multiplicao
2*3
04/fev
mdulo (resto)
5%4
exponenciao
2.0 ^ 3.0
|/
raiz quadrada
|/ 27.0
|//
raiz cbica
|// 27.0
fatorial
5!
120
!!
!! 5
120
Valor absoluto
@ - 5.0
&
91 & 15
11
OR bit a bit
32 | 3
35
17 # 5
20
~1
-2
<<
1 << 4
16
>>
8 >> 4
Exemplos:
Resultados:
5! AS fat,
2^3 AS pot,
5%3 AS resto,
|/9 AS raiz2,
@ -5.2 AS abs;
Figura 6.13
Funes Nativas
operadores
matemticos.
109
Descrio
Exemplo
Resultado
abs()
valor absoluto
abs(-17.4)
17.4
cbrt()
raiz cbica
cbrt(27.0)
ceil()
ceil(-42.8)
-42
exp()
exponenciao
exp(1.0)
2.71828182845905
floor()
floor(-42.8)
-43
log()
logaritmo na base 10
log(100.0)
mod(x,y)
resto dey/x
mod(9,4)
pi()
constante
pi()
3.14159265358979
power(a,b)
aelevado ab
power(9.0, 3.0)
729
random()
random()
round()
round(42.4)
42
round(v,s)
round(42.4382, 2)
42.44
setseed()
setseed(0.54823)
1177314959
sqrt()
raiz quadrada
sqrt(2.0)
1.4142135623731
trunc()
trunc(42.8)
42
trunc(v,s)
trunc(42.4382, 2)
42.43
Outras funes
A quantidade de funes nativas disponveis no PostgreSQL realmente muito grande e
variada. Para os que tiverem interesse, sugerimos consultar a documentao disponvel na
internet. De qualquer modo, apresentamos mais alguns exemplos de funes.
ASCII(<char>): Retorna cdigo ASCII
SELECT ASCII('A');
110
SELECT CHR(66);
LEFT(<str>,<n>): Retorna os n primeiros caracteres
SELECT LEFT('morango',4);
RIGHT(<str>,<n>): Retorna os n ltimos caracteres
SELECT RIGHT('morango',4);
Figura 6.14
Algumas
das funes
matemticas e
trigonomtricas.
ENCODE(<text>,<formato>)
SELECT DECODE('MTIz','base64');
Nesses exemplos, o parmetro <formato> das funes ENCODE() e DECODE(), respectivamente para codificao e decodificao de caracteres, pode assumir os seguintes valores:
base64, hex ou escape.
Atividade de Fixao e
Liste duas funes agregadas ou nativas que no foram tratadas nessa sesso mas que
estejam listadas no link indicado no AVA.
Figura 6.15
Outros exemplos
de funes nativas.
111
112
7
Entender o processo de escrita e utilizao de subconsultas, ndices e vises, em
conformidade com o padro SQL implementado no PostgreSQL.
conceitos
Exerccio de nivelamento e
Descreva com suas palavras o que voc entende por subconsultas, ndices e vises dentro
de um banco de dados.
Subconsultas
11 Existem trs tipos de subconsultas:
objetivos
113
Nesta sesso sero apresentados diversos exemplos para ajudar na compreenso dos
conceitos aqui apresentados. Em todos esses exemplos, sero utilizadas tabelas e dados
conforme exibidos no modelo que aparece na figura 7.1.
Empregado
Dependente
Localizao
Trabalha
Departamento
Projeto
Subconsulta Escalar
uma consulta interna que retorna exatamente um nico valor, ou seja, uma nica linha
com uma nica coluna. Esse valor ser utilizado para que a consulta mais externa produza o
resultado esperado.
Subconsultas escalares so aceitveis (e muitas vezes muito teis) em praticamente qualquer situao onde voc poderia usar um valor literal, uma constante ou uma expresso
114
Figura 7.1
Modelo de dados
de uma Empresa
utilizado como
referencia nos
exemplos.
A figura 7.2 trs um primeiro exemplo com o uso de operadores. Nele so listados os empregados que trabalham no departamento de Pesquisa.
FROM departamento
Figura 7.2
Subconsulta
escalar uso de
operadores.
J o exemplo apresentado na figura 7.3 faz uso de funo agregada. Nele so listados os
empregados cujos salrios so maiores do que o salrio mdio, mostrando o quanto so
maiores (a diferena).
FROM empregado
WHERE salario > (SELECT AVG(salario)
FROM empregado);
Figura 7.3
Subconsulta escalar
uso de funo
agregada.
Por fim, temos um exemplo onde se faz uso de funo agregada. Na figura 7.4 apresentada a consulta e seu resultado, listando o nome do empregado e do departamento onde o
Figura 7.4
Subconsulta escalar
uso de funo
agregada.
FROM empregado e
115
SIGNIFICADO
IN
NOT IN
ANY/SOME
ALL
Clusulas IN
Figura 7.5
Subconsulta nica
Linha clusula IN.
Saiba mais
So usadas em subconsultas que produzem resultado tendo como base os valores retornados na subconsulta mais interna.
A traduo de IN EM,
ou seja, que faz parte.
No exemplo da figura 7.6, temos uma consulta que lista os dependentes dos funcionrios
que trabalham no departamento de Pesquisa.
FROM empregado
116
FROM departamento
Figura 7.6
Subconsulta nica
Linha clusula IN.
Clusulas NOT IN
So usadas em subconsultas que produzem resultado tendo como base os valores que so
diferentes dos retornados na subconsulta mais interna. A traduo de NOT IN NO EM, ou
seja, que no faz parte (ou no est contido em).
O exemplo de consulta que utiliza a clusula NOT IN pode ser visto na figura 7.7 e mostrar o
nome do empregado que no possui dependente.
FROM
dependente);
Empregados
Empregados
e seus dependentes
sem dependentes
Figura 7.7
Subconsulta nica
Linha clusula
NOT IN.
Vejam que o resultado no exemplo ao lado composto, unicamente, pelas colunas selecionadas no SELECT mais externo.
Um segundo exemplo do uso de NOT IN apresentado a seguir. Nele listado o nome das
pessoas da instituio que sejam apenas professores, demonstrando como trabalhar com
generalizao ou especializao no exclusiva (ou compartilhada). Nesse caso, imagine a
existncia da entidade pessoa (generalizada) e suas especializaes professor e aluno.
SELECT nome
FROM professor NOT IN (SELECT nome FROM aluno);
Clusulas ANY/SOME
So usadas com subconsultas (consulta mais interna) que produzem um conjunto de valores
numricos (NICA LINHA, semelhante ao IN). O resultado final, consulta mais externa,
obtido com base em um dos valores retornados pela consulta mais interna. A traduo de
ANY/SOME ALGUM.
para o seguinte:
11 = some: idntico ao IN
11 > some: maior que algum (outros >=, <=, <,<>)
11 <> some: no o mesmo que NOT IN
Na figura 7.8 aparece um exemplo de uso da clusula SOME onde so listados os empregados cujos salrios so maiores do que o salrio de pelo menos um (algum) funcionrio do
departamento 5-Pesquisa.
O uso de operadores com a clusula SOME pode gerar algumas confuses. Estejam atentos
117
FROM empregado
Figura 7.8
Subconsulta nica
Linha clusula
ANY/SOME.
Clusula ALL
Utilizada com subconsultas (consulta mais interna) que produzem um conjunto de valores
numricos. O resultado final, consulta mais externa, obtido com base todos dos valores
retornados pela consulta mais interna. A traduo de ALL TODOS, ou seja, a comparao
feita em relao a todos os elementos contidos no resultado da subconsulta.
Assim, vejamos algumas equivalncias no uso de operadores com o ALL:
11 > ALL: maior que todos (outros >=, <=, <,<>)
11 <> ALL: o mesmo que NOT IN
No exemplo, na figura 7.9, temos o uso do > ALL, que traz como resultado a lista dos empregados cujos salrios so maiores do que o salrio de cada funcionrio do departamento
5-Pesquisa.
118
Figura 7.9
Subconsulta
nica Linha
clusula ALL.
Essa situao pode ser melhor entendida atravs de um exemplo, conforme o apresentado na figura 7.10, onde deseja-se consultar o nome de empregado(s) que tenha(m)
dependente(s) cujo sexo seja o mesmo do empregado em questo.
FROM dependente d
Figura 7.10
Subconsulta nica
Linha clusula
ALL.
Uma alternativa para essa consulta fazer uso de um INNER JOIN conforme mostrado a
seguir. Destacamos, inclusive, que o INNER JOIN garante um melhor desempenho sempre
que comparado com consultas aninhadas correlacionadas.
Subconsulta TABELA
uma consulta interna que retorna uma ou mais colunas e mltiplas linhas, ou seja, apresenta
como resultado uma tabela temporria. Nesse caso, a subconsulta faz referncia s variveis
da consulta que a envolve, vistas como constantes durante a execuo da subconsulta.
As clusulas EXISTS e NOT EXISTS foram projetadas para uso apenas com subconsultas do
tipo TABELA, indicando se o resultado de uma pesquisa contm ou no tuplas. No exemplo
da figura 7.11, vemos o uso da clusula EXISTS na consulta aos empregados que trabalham
no departamento de Pesquisa. A figura mostra ainda o INNER JOIN equivalente.
Figura 7.11
Subconsulta
TABELA clusula
EXISTS.
Melhor desempenho:
119
J no exemplo da figura 7.12, temos o uso simultneo das clusulas EXISTS e NOT EXISTS,
esta ltima permitindo descobrir quem so os funcionrios que no possuem dependentes.
FROM departamento dp
FROM dependente d
WHERE e.ssn = d.essn);
Figura 7.12
Subconsulta
TABELA clusula
NOT EXISTS.
120
Figura 7.13
Incluso de dados
com uso de SELECT.
possvel tambm fazer a insero de registros durante a criao de uma nova tabela no
banco de dados. Essa funcionalidade geralmente utilizada para realizao de uma cpia
dos dados antes de se realizar algum processamento na tabela de origem. Assim, pode-se
criar uma tabela de testes que poder ser descartada aps o uso, sem a preocupao de
manipulao indevida dos dados da tabela original. Vejamos um exemplo:
UPDATE Produto
SET valor = valor * 1.04
WHERE tipocod IN (SELECT codtipo
FROM Tipo
Atividade de Prtica
ndices
11 Servidor mantm uma lista de registros para cada tabela (no ordenado)
11 Na busca utiliza table scan (varredura na lista)
22 Funciona bem para poucos registros. Se houver poucos milhes de registros, pode
no responder em tempo razovel
11 Pode ser necessrio ajuda de ndices: tabelas especiais mantidas em ordem especfica
22 No contm todos os dados, somente a(s) coluna(s)
22 Informaes (ponteiros) sobre a localizao das linhas fisicamente
121
que devem ser utilizados de acordo com as caractersticas da aplicao que deles far uso.
So eles:
11 B-tree: o tipo padro (assume quando no indicamos). So ndices que podem
tratar consultas de igualdade e de faixa, em dados que podem ser classificados.Indicado para consultas com os operadores: <, <=, =, >=, >. Tambm pode ser utilizado
com LIKE, ILIKE, ~ e ~*;
11 R-tree: tipo mais adequado a dados espaciais. Adequado para consultas com os operadores: <<, &<, &>, >>, @, ~=, &&;
11 HASH: indicados para consultas com comparaes de igualdade simples. Atualmente
recomenda-se o B-tree em seu lugar;
11 GiST: utilizado para retornar resultados com perdas, isto , retorna os dados mais rapidamente comparando por coincidncias de bits, prefira usar b-tree que mais confivel.
Os tipos B-tree e GiST suportam ndices comvrias colunas. ndices com mais de um campo
somente sero utilizados se as clusulas com os campos indexados forem ligadas por AND.
Um ndice com mais de trs campos dificilmente ser utilizado.
Os arquivos que contm as informaes dos registros de uma determinada tabela so gravados nos servidores como uma lista. Inicialmente essa lista pode ser consultada por meio
de uma varredura conhecida como table scan, tendo bom funcionamento com uma quantidade reduzida de registros (a consulta percorre cada um dos registros na tabela).
Com o crescimento do conjunto de informaes gravadas em uma tabela, o recurso de table
scan acaba se tornando ineficiente, ponto a partir do qual devemos comear a pensar no
uso de ndices.
ndices so estruturas que foram desenvolvidas com o objetivo nico de facilitar e agilizar o
processo de manuteno de informaes armazenadas nas tabelas de um banco de dados.
11 Por que ento no indexar todas as tabelas em um SGBD?
122
Chamamos a ateno para o fato de que h um limite para uso de ndices. Um ndice, antes
de mais nada, um tipo especial de tabela que utilizar espao fsico em disco para armazenar suas informaes. Outro ponto importante que os ndices sempre sero consultados
e atualizados durante o processamento das informaes que esto em suas tabelas.
Dessa forma, orientamos para o uso dos campos que representam chaves primrias ou
estrangeiras, ou mesmo algumas colunas que sero frequentemente empregadas em consultas, como possveis candidatos a ndices de tabelas no banco de dados.
Na realidade, o ideal avaliar a necessidade de criao de cada novo ndice. Para tanto,
podemos medir o tempo para realizar algumas consultas sem o uso do ndice e depois comparar se existem ganhos na realizao das mesmas consultas fazendo uso do ndice. Se os
ganhos no forem significativos, considere excluir o ndice criado.
Os SGBDs mais modernos possuem um otimizador de consultas que ajuda a determinar a
maneira mais eficiente de executar operaes. No PostgreSQL podemos utilizar o comando
EXPLAIN, que permite visualizar todas as etapas envolvidas no processamento de uma consulta SQL/DML. Essa viso do funcionamento interno do banco permite fazer melhorias em
consultas que estejam tomando tempo excessivo.
A sintaxe do EXPLAIN :
EXPLAIN
SELECT pnome, unome
FROM empregado e
INNER JOIN dependente d ON e.ssn = d.essn
WHERE e.sexo = d.sexodep;
Figura 7.14
Resultado do
EXPLAIN.
J a figura 7.15 demonstra o uso do EXPLAIN com a clusula ANALYZE, fazendo com que o
resultado obtido traga tambm os tempos envolvidos em cada etapa.
123
EXPLAIN ANALYZE
SELECT pnome, unome
FROM empregado e
WHERE e.ssn IN (SELECT d.essn
FROM dependente d
Figura 7.15
Resultado do
EXPLAIN ANALYZE.
11 nomeCOL: nome da(s) coluna(s) sobre a(s) qual(is) ser o criado ndice (pode ser de
124
A sintaxe dos comandos para renomear (ALTER.. RENAME) e excluir (DROP) um ndice bastante simples, conforme mostramos a seguir:
Vises
Viso (view): mecanismo de consulta de dados
11 Qualquer relao/tabela que no faa parte do modelo conceitual mas seja visvel a
um usurio como uma relao/tabela virtual
11 Armazena a estrutura do script SELECT da SQL
22 um componente do BD (tabela virtual) como sequncia, ndice, etc.
11 uma tabela lgica, composta de linhas de uma ou mais tabelas (agrupadas ou no)
e no ocupa espao no BD
11 Produz uma tabela temporria (resultSet) ou cursor, a partir das tuplas das tabelas
bsicas (que existem de forma fsica no BD)
Em SQL, uma viso (view) uma tabela nica derivada de outra(s) tabela(s), no existindo
fisicamente e por isso mesmo sendo considerada uma tabela virtual.
Figura 7.16
Criao de ndice
pelo assistente.
125
Vises so comumente utilizadas na criao de tabelas temporrias que precisam ser consultadas frequentemente, sem que haja a necessidade de ter uma representao fsica.
Aplicaes bem projetadas expem uma interface pblica que mantm privados os detalhes de sua
implementao. Dessa forma, mudanas futuras no projeto no impactam o usurio final. Portanto,
uma viso tambm pode ser vista como um mecanismo de consulta de dados, tendo como resultado uma tabela virtual com relaes ou tabelas que no fazem parte de modelo conceitual.
As principais aplicaes para vises so:
Criao de viso
Em SQL, o comando para especificar ou criar uma viso o CREATE VIEW. A viso dever
receber um nome, uma lista de atributos e uma instruo SQL, geralmente uma consulta
SELECT, para especificar o contedo dessa viso.
126
No exemplo a seguir, cria-se uma viso com os nomes dos departamentos e seus respectivos empregados.
Figura 7.17
PgAdmin III
Assistente para
criao de vises.
127
Vises
Executando uma viso
SELECT * FROM <nomeVW);
Combinando com qualquer outra clusula e junto com outras vises e tabelas
Figura 7.18
PgAdmin III
Consulta em
uma viso.
A figura 7.19, por sua vez, mostra como consultar as informaes contidas em uma viso
atravs do pgAdmin3.
128
Figura 7.19
Resultado da
execuo da viso
empPorDepto.
8
Obter viso geral da programao usando a linguagem PL/pgSQL e possibilidades
de sua aplicao no desenvolvimento de procedimentos armazenados e na
manipulao de dados.
conceitos
Exerccio de nivelamento e
Voc j trabalhou com alguma linguagem que possibilitou a manipulao de dados via procedimentos armazenados? Qual linguagem utilizou? Em qual SGBD?
PL/pgSQL
A linguagem estrutural PL/pgSQL, desenvolvida como uma extenso da linguagem SQL, tem como
principal objetivo permitir a programao de tarefas no PostgreSQL. A incorporao de caractersticas procedurais SQL agregam benefcios e facilidades de controle de fluxo de execuo de
instrues, tais como loops estruturados (for, while) e controle de deciso (if then else).
Os objetivos de projeto da linguagemPL/pgSQLforam no sentido de criar uma linguagem procedural que pudesse:
11 Ser utilizada para criar procedimentos de funes e de gatilhos;
11 Adicionar estruturas de controle linguagemSQL;
11 Realizar processamentos complexos;
11 Herdar todos os tipos de dados, funes e operadores definidos pelo usurio;
11 Ser definida como confivel pelo servidor;
11 Ser fcil de utilizar.
objetivos
129
Funes
11 Funes so blocos de cdigo SQL armazenados no servidor do banco de dados
Criao funes
A seguir, apresentamos a estrutura sinttica utilizada em PL/pgSQL para a criao de funes.
130
[DECLARE
/* declarao de variveis, constantes, ... */]
BEGIN
/* Seo das instrues SQL */
[RETURN <valor>;]
END [label];
$$
LANGUAGE <linguagem>;
Onde:
11 OR REPLACE: atualiza uma funo se esta j existe;
11 $$ so conhecidos como delimitadores de string que indica o incio e fim da funo SQL;
11 <<label>> e label so delimitadores de blocos de uso no obrigatrio;
11 LANGUAGE: especifica o tipo da linguagem utilizada na escrita da funo.
Blocos so usados para agrupamento lgico de instrues SQL que fazem parte da funo
sendo desenvolvida, no sendo obrigatria o seu uso.
Quantos aos comentrios, podemos inclu-los dentro do processo de escrita das funes,
sendo que estes seguem as mesmas regras da linguagem SQL.
Por padro, todas as palavras-chave utilizadas no processo de estruturao de uma funo
o console padro, onde % funciona como um caractere coringa a ser substitudo por um
LANGUAGE plpgsql;
131
Figura 8.1
RAISE NOTICE:
exemplo de
mensagem via
console.
vNome VARCHAR;
raio NUMERIC := 5;
pi CONSTANT REAL := 3.1415927;
BEGIN
RAISE NOTICE 'A rea do crculo de raio % %', raio, (pi * POW(
raio, 2));
132
Ainda sobre o exemplo anterior, podemos ver o uso de POW(), que uma funo nativa do
PostgreSQL. Ou seja, no h nenhum problema em usar funes no processo de criao de
novas funes. Alm disso, percebam que a clusula INTO utilizada junto com um SELECT,
permitindo que o resultado obtido inicialize a varivel vNome.
Por fim, na ltima linha do exemplo, aparece a clusula VOLATILE.
Na verdade, o PostgreSQL disponibiliza trs possveis categorias para as funes, indi-
SELECT <nome_da_funao>();
Basta utilizar o comando SELECT seguido do nome da funo. Se esta fizer uso de parmetros,
esses devero ser referenciados entre parnteses, logo aps o nome da funo.
No custa lembrar, contudo, que tambm podemos criar e executar funes utilizando o
assistente do pgAdminIII. Na figura 8.2, podemos ver a janela exibida quando acionamos o
menu flutuante (com o boto esquerdo do mouse) para criar uma nova funo. Essa janela
trs uma srie de abas onde so informadas as propriedades e caractersticas da funo.
Figura 8.2
pgAdminIII:
assistente para
criar de funes.
133
A figura 8.3, por sua vez, mostra os passos que devem ser observados para executar uma
funo pelo assistente.
Outro aspecto a ser lembrado no processo de declarao de variveis diz respeito possibilidade de especificarmos o tipo de dado de uma varivel tomando como base o tipo de um
campo existente em uma tabela no banco de dados. Ao fazer isso, temos uma preocupao
a menos, j que passa a se responsabilidade do SGBD identificar e utilizar o tipo de dado
correto quando da execuo da funo.
Mostramos a seguir a sintaxe para esse tipo de declarao, seguido de um exemplo de seu uso:
Declarar uma varivel do mesmo tipo de dado de uma coluna da tabela
<nome_variavel> <tabela>.<campo>%TYPE ;
11 exemplo:
DECLARE
vNome PROJETO.pjnome%TYPE;
v REAL := cell(2.15) ;
BEGIN
RAISE NOTICE 'x = %', x ;
SELECT pjnome INTO vNOME FROM projeto
WHERE pnumero '20';
Declarao de parmetros
Ao declarar parmetros considere:
11 Parmetros passados para
134
Figura 8.3
pgAdminIII:
assistente para
execuo de
funes.
Uma funo pode fazer uso de parmetros, responsveis por receber possveis valores durante
a sua chamada, e que sero utilizados para realizao de algum processamento interno.
O exemplo a seguir ilustra a declarao e uso do parmetro taxa:
BEGIN
RAISE NOTICE 'A aplicao de R$100 com taxa de % rendeu R$ %',
taxa, (valor * taxa);
END; $BODY$ LANGUAGE plpgsql;
Observe que o comando:
$BODY$
BEGIN
-- r := x + y ;
r := $1 + $2 ;
RAISE NOTICE 'Resultado %', r;
END;
LANGUAGE plpgsql;
Destacamos, no exemplo anterior, o uso de IN e OUT na declarao dos parmetros.
Essas clusulas indicaro o modo como cada parmetro ser utilizado, admitindo as
seguintes possibilidades:
Modos do parmetro:
11 IN: entrada;
11 OUT: sada;
22 Varivel que comea NULL;
22 Deve ser atribudo um valor durante a execuo da funo;
22 O valor final do parmetro retornado.
11 IN OUT: entrada e sada;
$BODY$
135
22 Array.
22 Devem ser do mesmo tipo de dado.
A figura 8.4 a seguir exibe a aba Parameters da janela onde so declarados os parmetros
de uma funo atravs do assistente
Figura 8.4
pgAdminIII:
assistente para
declarao de
parmetros.
J a figura 8.5 trs janelas com o resultado da execuo da funo teste5soma(), apresentada em um exemplo anterior. Atente para o fato de que no aparece no corpo da funo a
palavra reservada RETURN, j que o valor a ser retornado fica definido pelo uso de OUT na
declarao da varivel r.
136
Figura 8.5
Data Output e
Messages.
<varivel_linha>.campo
Tambm temos a possibilidade de usar a clusula %ROWTYPE para declarar uma varivel do
mesmo tipo de dado de uma coluna da tabela.
<tabela>%ROWTYPE ;
A figura 8.6 trs um exemplo da declarao e uso de variveis tipo-linha.
gerssn;
Figura 8.6
Console com
mensagem
utilizando
%ROWTYPE.
END;
$BODY$
LANGUAGE plpgsql;
FROM departamento
137
estrutura pr-definida
11 Assumem a estrutura da linha definida no SELECT
11 A subestrutura de uma varivelregistro pode mudar cada vez que atribudo
22 Consequncia que qualquer tentativa de acessar um campo no definido no
momento ir apresentar um erro em tempo de execuo<identificador>
Outro tipo disponvel para declarao de variveis dentro de funes em PL/pgSQL o
RECORD. Variveis do tipo registro so semelhantes ao tipo-linha, sem a presena de uma
estrutura pr-definida.
<identificador> RECORD ;
Isso faz com que a varivel assuma a estrutura da linha definida na instruo SQL definida
no corpo da funo, podendo sofrer alterao a cada nova atribuio. Como consequncia,
qualquer tentativa de acessar um campo no definido no momento da atribuio dessa
varivel vai gerar um erro em tempo de execuo.
Um exemplo com a declarao e uso de uma varivel registro pode ser visto na figura 8.7.
END;$BODY$
LANGUAGE plpgsql;
138
Figura 8.7
Console com
mensagem
utilizando RECORD.
Clusula RETURNING
11 Pode ser necessrio recuperar valores em operaes de atualizao
(INSERT/UPDATE/DELETE)
11 Exemplo: recuperar o cdigo do cliente (serial) inserido para que possa ser empregado em outra operao
Existem situaes onde pode ser necessrio recuperar determinados valores durante a
execuo de operaes de atualizao (INSERT/UPDATE/DELETE). Para tanto utilizada a
clusula RETURNING, que no exemplo a seguir permite recuperar o cdigo do cliente inserido para que possa ser empregado em outra operao.
Atividade de Prtica
Estruturas de controle
As estruturas de controle provavelmente so a parte mais til (e mais importante) da
linguagemPL/pgSQL. Essas estruturas possibilitam uma forma mais flexvel e poderosa
para a manipulao de dados noPostgreSQL. Apresentaremos a seguir algumas estruturas
condicionais e de repetio.
ID = 7
139
Condicional IF
Permite executar comandos alternativos baseados em certas condies, de acordo com
a seguinte sintaxe:
IF <expressoCondicional> THEN
<comandosSQL>;
[ELSIF <expressoCondicional2> THEN
<comandosSQL2>;
[ELSIF <expressoCondicional3> THEN
<comandosSQL3>; ...]]
[ELSE <comandosSQLn>; ]
END IF;
Assim, podemos ter a execuo de um conjunto de comandos baseado apenas em uma
nica condio, ou um conjunto aninhado de condies delimitando diversos blocos de
comandos entre os quais sero executados apenas os que correspondem condio
que for avaliada como verdadeira.
END;
140
$BODY$
LANGUAGE plpgsql;
Figura 8.8
Resultado da
execuo da funo
teste9if().
J o exemplo da figura 8.9 usa uma estrutura um pouco mais complexa para informar a
situao de um determinado aluno de acordo com sua mdia.
Figura 8.9
Resultado da
execuo da funo
teste10elsif().
Condicional CASE
A estrutura condicional CASE outra forma para executar blocos de comandos com base
em condies. Essa estrutura deve ser utilizada de acordo com a seguinte sintaxe:
CASE <expresso>
141
Um exemplo para tratar a opo de menu escolhida pode ser visto na figura 8.10.
Figura 8.10
Resultado da
execuo da funo
teste11case().
Um segundo exemplo utilizando CASE, nesse caso para exibir a faixa do valor que passado
como parmetro, pode ser visto na figura 8.11.
142
Figura 8.11
Resultado da
execuo da funo
teste12case().
Repetio
So estruturas que permitem repetir um conjunto de comandos at que se chegue a
LOOP
-- comandos
IF <expressoFIM>
THEN EXIT;
END IF;
END LOOP;
Ou
LOOP
-- comandos
EXIT WHEN <expressoFIM>;
END LOOP;
Na figura 8.12, temos um exemplo onde o bloco de comandos executado por dez vezes.
i := i + 1;
EXIT WHEN i > 10;
END LOOP;
END; $BODY$
LANGUAGE plpgsql;
143
Outra estrutura de controle semelhante o WHILE (enquanto), que tem a seguinte sintaxe:
LANGUAGE plpgsql;
144
Figura 8.12
Resultado da
execuo da funo
teste13loop().
Figura 8.13
Resultado da
execuo da funo
teste14lwhile().
Figura 8.14
Resultado da
execuo da funo
teste15for().
LANGUAGE plpgsql;
145
J o exemplo da figura 8.15 ilustra o uso de algumas clusulas opcionais do FOR, como o
REVERSE (o intervalo definido percorrido em modo decresente) e o BY (que determina o
tamanho do passo a cada interao). Assim, a varivel i receber inicialmente o valor 40 e,
na medida em que a ordenao da repetio est invertida, vai decrescendo de 5 em 5 at
atingir o limite final do intervalo. Perceba que a declarao de i est no formato de comentrio, j que tal declarao no necessria.
Figura 8.15
Resultado da
execuo da funo
teste15reverse().
146
9
Aprender sobre o processo de programao em PL/pgSQL para escrita de procedures,
function e triggers; Entender o processo de tratamento de erros e uso de cursor
no processo de manipulao de dados.
conceitos
Exerccio de nivelamento e
Voc j trabalhou com o tratamento de erros ou excees durante o desenvolvimento de
aplicaes? Esse tratamento foi realizado em qual camada?
Tratamento de erros
Como foi visto no captulo anterior, a linguagem estrutural PL/pgSQL possibilita, entre
outras coisa, a implementao de algumas regras de negcios da aplicao em desenvolvimento diretamente no SGBD.
A simples possibilidade de podermos pensar em implementar processamento sobre os
dados no servidor traz consigo a necessidade de nos preocuparmos com possveis erros que
possam ocorrer durante a execuo de alguma regra de negcio.
Pensando nisso, os projetistas de SGBDs implementaram um conjunto de funcionalidades
prprias para que possamos incorporar testes sobre as instrues que sero executadas
por uma determinada funo e assim evitar interrupes inesperadas, ao mesmo tempo,
controlando o fluxo de execuo da funo de forma a garantir a integridade dos dados.
Por padro, qualquer erro que ocorre em uma funo PL/pgSQL interrompe a execuo da
funo e, de fato, da transao envolvida.
Dessa forma, podemos detectar erros e fazer o tratamento apropriado a partir deles, usando
um bloco BEGIN com uma clusula de exceo EXCEPTION.
objetivos
Stored Procedures
147
Nesse caso, o processamento dos comandos SQL abandonado e o controle passa para a
lista de excees, onde os comandos correspondentes so executados e, em seguida, o controle passa para a prxima instruo aps END; (fim do bloco de EXCEPTION). A estrutura
geral de como isso programado pode ser vista a seguir:
11 Por padro, qualquer erro que ocorre em uma funo PL/pgSQL interrompe a exe-
BEGIN
<comandosSQL>;
EXCEPTION
WHEN <condio> THEN <comandosTratarErro>;
[ WHEN <condio2> THEN <comandosTratarErro2>; ... ]
END;
Se nenhum erro for encontrado na execuo do bloco de comandos SQL, o controle do fluxo
de execuo da funo ignora as instrues previstas em EXCEPTION e passa para a prxima
instruo aps END; (fim do bloco).
O erro se propaga, ou seja, deixar de ser tratado, caso nenhuma correspondncia EXCEPTION seja encontrada.
A figura 9.1 trs um exemplo de funo, onde foi programado o tratamento de erro (no caso,
diviso por zero) atravs do uso de EXCEPTION:
-- finally
END;
END; $BODY$
148
LANGUAGE plpgsql;
Figura 9.1
Resultado da
execuo da funo
teste1exception().
nesse exemplo:
11 Na execuo da funo, a varivel x inicializada com 10;
11 realizada a insero na tabela TRABALHA (horas=20) e um novo bloco de comandos
iniciado;
11 Para esse sub-bloco, feita uma tentativa de atualizao na tabela TRABALHA
(horas=35) e tambm uma tentativa de diviso por 0;
11 Como o segundo comando gera uma exceo, sendo tratada pela clusula EXCEPTION, os dois comandos anteriores so desfeitos (horas continuar com 20 e x continuar com 10) e a execuo desviada para depois do bloco EXCEPTION.
Clusula UNIQUE_VIOLATION
A clusula UNIQUE_VIOLATION muito utilizada para o tratamento de excees em operaes de INSERT ou UPDATE. Ela permite verificar a violao de unicidade durante a incluso
ou atualizao de registros dentro de um banco de dados. Um exemplo de utilizao dessa
clusula pode ser visto a seguir:
149
END;
RETURN iIdCliente;
END; $$ LANGUAGE 'plpgsql' VOLATILE;
Clusula FOUND
Podemos usar a clusula FOUND para verificar se uma instruo SELECT retornou ou no
registros. No exemplo a seguir, podemos tratar essa condio sem precisar usar a clusula
EXCEPTION, at porque isso implica em menor uso de recursos computacionais.
11 Varivel especial para verificar retorno no SELECT: FOUND
11 WARNING;
150
11 EXCEPTION.
Entre esses nveis, apenas EXCEPTION cria uma situao equivalente a um erro (que
normalmente interrompe a transao corrente).
Na figura 9.2 apresentada uma funo onde o comando RAISE usado tanto para gerar
uma exceo (equivale a um erro) como uma mensagem.
-- RAISE registro_nao_encontrado;
Cursor
uma varivel (rea de memria) composta de linhas e colunas que armazena o resul-
Figura 9.2
Exemplo de usos
do comando RAISE.
151
<nomeC_refcursor> REFCURSOR;
Ou
<nomeC> [[NO]SCROLL] CURSOR [(args)] FOR|IS <QUERY> ;
Onde:
11 REFCURSOR: utilizado para identificar uma varivel do tipo cursor;
11 [[NO]SCROLL]: define o tipo de movimentao do cursor;
11 <QUERY>: consulta SQL utilizada para criar a tabela temporria para o cursor.
A seguir, exemplos de declarao de cursores:
DECLARE
curs1 refcursor;
curs2 CURSOR FOR SELECT * FROM empregado;
curs3 CURSOR (np CHAR) IS SELECT * FROM projeto
WHERE pnumero = np;
Aps declarado, o cursor manipulado com os comandos OPEN, que abre o cursor, FETCH,
que percorre os registros do cursor, e CLOSE, que fecha o cursor. A sintaxe de cada um
desses comandos pode ser vista a seguir.
Ou
OPEN <nomeC> [([arg1 :=] argVlr [, ...])];
FETCH [<direo> {FROM|IN}] <nomeCursor> INTO <reg>;
No comando FETCH, se no existir a prxima linha, a varivel <reg> recebe o valor NULL. A
clusula FOUND pode ser utilizada para verificar se uma linha foi retornada ou no. No
preciso especificar <direo>, mas nesse caso o padro considerar que a direo especificada NEXT. Outras possibilidades para <direo> so: pRIOR, FIRST, LAST, ABSOLUTE n,
RELATIVE n, FORWARD ou BACKWARD (cursor aberto ou declarado com SCROLL).
152
Na figura 9.3 apresentado exemplo de uma funo onde um cursor percorrido atravs
do LOOP at que a condio NOT FOUND (fim do cursor) seja verdadeira, causando a sada
do LOOP atravs do EXIT.
BEGIN
OPEN c_empPorDepto;
LOOP
FETCH c_empPorDepto INTO reg;
IF NOT FOUND
THEN EXIT;
END IF;
RAISE NOTICE 'Empregado % %. %', reg.pnome,
reg.inicialm, reg.unome;
END LOOP;
CLOSE c_empPorDepto;
END; $BODY$
LANGUAGE plpgsql;
Figura 9.3
Resultado da
execuo da funo
teste1cursor().
O PostgreSQL disponibiliza uma forma alternativa para a instruo FOR que permite iterao nas linhas retornadas por um cursor. Essa estrutura encapsula as aes de abertura,
movimentao e fechamento do cursor, deixando o cdigo da funo menor e mais legvel. A
sintaxe desse FOR :
<statements>
END LOOP
153
Figura 9.4
Resultado da
execuo da funo
teste2cursor().
Outro exemplo, apresentado na figura 9.5, realiza a classificao de alunos de acordo com a
nota (desempate pela idade). Nota 0 desclassificada.
154
Figura 9.5
Resultado da
execuo da funo
teste3cursor().
Atividade de Prtica
Trigger
11 Composio de um trigger:
rando-a como uma funo sem argumentos e com um tipo de retorno TRIGGER, conforme o exemplo a seguir.
LANGUAGE plpgsql;
155
Figura 9.6
Criao de
Trigger atravs
do assistente
pgAdmin3.
Como exemplo de restrio de integridade a ser verificada, temos um trigger upSalario que
ser aplicado para cada registro (ROW) que vier a ser atualizado na tabela empregado:
156
ON empregado
Exerccio de Fixao e
Quais so trs possveis categorias que podem ser indicadas quando da criao de uma
158
10
Conhecer, entender o contexto e ver exemplos do processo de controle de transaes
concorrentes no Banco de Dados.
conceitos
Exerccio de nivelamento e
Voc j desenvolveu alguma aplicao em que teve de se preocupar com um grande nmero
de usurios executando transaes concorrentes no Banco de Dados? Se sim, cite um processo onde foi necessrio realizar tal controle.
Concorrncia
Qualquer banco de dados geralmente prev uso por um grupo considervel de usurios.
Isso levanta preocupaes com o processo de administrao e controle de concorrncia das
informaes que sero manipuladas, necessrios quando existe a possibilidade de usurios
distintos tentarem acessar a mesma informao ao mesmo tempo. Nesses casos, preciso
garantir a integridade das informaes, por exemplo, cuidando para no permitir duas
vendas de um nico produto em estoque.
Geralmente temos como cenrio um SGBD com grande volume de informaes nele
armazenado e uma quantidade considervel de usurios