Escolar Documentos
Profissional Documentos
Cultura Documentos
Banco de Dados
Fortaleza
2014
Qumica
Cincias
Biologia
Biolgicas
Banco de dados_NL2014.indd 1
Artes
Artes
Plsticas
Computao
Informtica
Fsica
Matemtica
Pedagogia
23/02/15 13:08
Presidente da Repblica
Dilma Vana Rousseff
Ministro da Educao
Aloizio Mercadante
Presidente da CAPES
Jorge Almeida Guimares
Coordenadora Editorial
Rocylnia Isidio
Projeto Grfico e Capa
Roberto Santos
Diagramador
Francisco Oliveira
Banco de dados_NL2014.indd 2
23/02/15 13:08
Sumrio
Apresentao..................................................................................................................................5
Captulo 1 - Viso geral sobre Banco de Dados.................................................................7
1. Banco de Dados e Sistema Gerenciador de Banco de Dados................................... 10
2. Modelos de Bancos de Dados........................................................................................11
3. Arquiteturas de Banco de dados.................................................................................... 13
3.1. Arquitetura Centralizada........................................................................................... 13
3.2. Arquitetura Cliente-Servidor de Duas Camadas.................................................... 14
3.3. Arquitetura Cliente-Servidor de Trs Camadas...................................................... 15
3.4. Arquitetura Distribuda.............................................................................................. 16
3.4.1. Vantagens............................................................................................................ 17
3.4.2. Desvantagens..................................................................................................... 18
3.4.3. Fragmentao de Dados.................................................................................... 18
3.4.4. Replicao de Dados......................................................................................... 19
Captulo 2 - Modelagem de Dados e Normalizao........................................................ 21
1. Sinopse do Projeto.......................................................................................................... 23
2. Modelo Conceitual.......................................................................................................... 24
2.1. Identificando os Tipos Entidades............................................................................. 24
2.2. Identificando os Tipos Relacionamento.................................................................. 25
2.2.1. Identificando os Atributos................................................................................... 26
2.3. Normalizao............................................................................................................ 27
2.3.1. Forma Normal..................................................................................................... 28
2.3.2. Desnormalizao................................................................................................ 35
2.4. Modelo Lgico........................................................................................................... 36
2.4.1. Chave Estrangeira.............................................................................................. 36
2.4.2. Criao do Modelo Lgico................................................................................. 38
Captulo 3 - PostgreSQL e Modelagem Fsica................................................................. 39
1. PostgreSQL..................................................................................................................... 41
1.1. Instalando o PostgreSQL......................................................................................... 41
2. Modelo Fsico.................................................................................................................. 48
2.1. pgAdmin.................................................................................................................... 48
2.1.1. Criando a Tabela ESTOQUE............................................................................. 50
2.1.2. Criando a Tabela PDV........................................................................................ 53
Captulo 4 - Introduo a SQL........................................................................................... 57
1. Histria............................................................................................................................. 59
2. Grupos.............................................................................................................................. 61
2.1. Outros Grupos.......................................................................................................... 61
3. SQL Editor........................................................................................................................ 61
4. DDL Parte 1.................................................................................................................. 62
4.1. Comando CREATE TABLE..................................................................................... 62
4.2. Comando ALTER TABLE......................................................................................... 65
4.2.1. Adicionar Atributo a Tabela................................................................................. 65
4.2.2. Modificar Tipo de Dados do Atributo.................................................................. 65
4.2.3. Excluir Atributo da Tabela................................................................................... 66
4.2.4. Adicionar Chave Primria a Tabela................................................................... 66
4.2.5. Adicionar Chave Estrangeira a Tabela.............................................................. 67
Banco de dados_NL2014.indd 3
23/02/15 13:08
Banco de dados_NL2014.indd 4
23/02/15 13:08
Banco de Dados
Apresentao
Banco de dados_NL2014.indd 5
23/02/15 13:08
Banco de dados_NL2014.indd 6
23/02/15 13:08
Captulo
Viso geral sobre
Banco de Dados
Banco de dados_NL2014.indd 7
23/02/15 13:08
Banco de dados_NL2014.indd 8
23/02/15 13:08
Banco de Dados
Objetivos
Todas as informaes encontradas no mundo computacional ficam armazenadas de maneira digital em banco de dados. Paralela a evoluo da
computao, os banco de dados tambm evoluram para atender as novas
necessidade e exigncias do mundo digital. Os modelos e arquiteturas de
banco de dados mais comuns devem ser conhecidos, uma vez que eles
apresentam vrias opes para resolver as questes de armazenamento
de dados conhecidas. O objetivo do captulo o conhecimento destes modelos.
Introduo
At pouco tempo a maior parte das empresas mantinham as informaes de
cliente, fornecedores, produtos, entre outros, em arquivos de ao (figura 1.1)
guardados em local seguro e com acesso fsico controlado. Os dados do cliente, por exemplo, eram colocados em fichas de papel, e arquivados em ordem
alfabtica. Essas fichas continham informaes de interesse da empresa, tais
como nome, endereo, etc. Todos os clientes tinham uma ficha nica que era
armazenada de maneira apropriada em um arquivo fsico. O armazenamento
inadequado causava transtornos tanto para o cliente como para a empresa.
Banco de dados_NL2014.indd 9
23/02/15 13:08
Tabela 1.1
Mundo Fsico
Conjunto de Arquivos de ao
Arquivo de ao
Fichas de papel
Informaes da ficha de papel
Mundo Digital
Banco de dados
Tabela
Registro
Campo
Um banco de dados pode ser visto como uma coleo de dados relacionados, que devem estar organizados para facilitar a busca e atualizao
desses dados. Os dados devem ter significado implcito e se referirem a fatos.
Banco de dados_NL2014.indd 10
23/02/15 13:08
Banco de Dados
11
Banco de dados_NL2014.indd 11
23/02/15 13:08
Banco de Dados Orientado a Objetos: Esse modelo foi criado pensando na necessidade do armazenamento e consulta de dados
complexos, incorporando paradigmas j conhecidos da programao orientada a objetos (POO), tais como a abstrao de dados,
encapsulamento, herana e identificao de objetos (figura 1.6).
Banco de dados_NL2014.indd 12
23/02/15 13:08
Banco de Dados
13
Banco de dados_NL2014.indd 13
23/02/15 13:08
Na arquitetura cliente-servidor o programa cliente estabelece uma conexo com o programa servidor para comunicar-se com o SGBD. Aps estarem conectados, os sistemas cliente enviam solicitaes de manipulao e
consulta dos dados, as mesmas so processadas pelo servidor e enviadas
de volta para o programa cliente, que processa e apresenta o resultado de
acordo com a necessidade.
Banco de dados_NL2014.indd 14
23/02/15 13:08
Banco de Dados
15
Banco de dados_NL2014.indd 15
23/02/15 13:08
Banco de dados_NL2014.indd 16
23/02/15 13:08
Banco de Dados
17
Banco de dados_NL2014.indd 17
23/02/15 13:08
3.4.2. Desvantagens
O uso do banco de dados distribudo no s tem vantagens, mas traz consigo algumas desvantagens como (i) complexidade exigida para garantir a
distribuio de forma transparente para o usurio; (ii) custo maior de implementao devido ao trabalho extra exigido; (iii) planejamento mais difcil devido a fragmentao, alocao e, algumas vezes, a replicao dos dados;
(iv) integridade do banco exige alto recurso de rede; (v) exigncia de maior
segurana tanto nos servidores quanto na infra-estrutura; (vi) inexistncia de
um padro que auxilie a converso dos bancos de dados centralizados para
os banco de dados distribudos; (vii) poucos casos prticos disponveis para
serem analisados.
Para [ELMASRI e NAVATHE, 2005] a obteno das vantagens do banco de dados distribudo leva ao projeto e a implementao de um sistema
gerenciador mais complexo, onde o SGBDD deve prover, alm das funcionalidades do SGBD centralizado, (i) rastreamento de dados; (ii) processamento
de consultas distribudas; (iii) gerenciamento de transaes distribudas; (iv)
gerenciamento dos dados replicados; (v) recuperao de banco de dados distribudo; (vi) segurana; (vii) gerenciamento do diretrio distribudo.
3.4.3. Fragmentao de Dados
O tipo mais simples de fragmentao de banco de dados a fragmentao
de uma relao inteira, ou seja, os dados de uma tabela inteira so colocados
num nico servidor do BDD. Dessa maneira sempre que se precisar de alguma informao da tabela, o SGBDD ir busca essa informao no servidor
que a mantm. Para exemplificar suponha que um BDD de um supermercado
tenha cinco servidores de dados e que as tabelas do BDD esto espalhadas
como mostrado na tabela 1.2.
Tabela 1.2
Servidor
S01
S02
S03
S04
S05
Tabela
Cliente
Fornecedor
Compra
Compra_Item
Estoque
# Registros
10000
1000
1000000
4000000
10000
No servidor S01 ficam armazenados todos os dados de todos os clientes, neste caso os dados de dez mil clientes. J o servidor S02 responsvel
por manter os dados dos fornecedores. O servidor S03 armazena os dados
Banco de dados_NL2014.indd 18
23/02/15 13:08
Banco de Dados
19
da compra, tais como data da compra, cliente que efetuou a compra, valor da
compra, forma de pagamento, etc.
O servidor S04 registras os itens que o cliente adquiriu em cada compra
(arroz, feijo, macarro, etc.), a quantidade de cada item e o valor de pago pelo
item. Os itens em estoque e seus dados (descrio do item, quantidade em estoque, valor de compra, valor de venda, etc.) ficam armazenados no servidor S05.
Neste exemplo o servidor S02 vai precisar de um poder computacional
bem menor que o servidor S04 para atender as solicitaes feitas, uma vez
que o nmero de registros do servidor S02 bem menor que do servidor S04,
causando um desbalanceamento de carga entre os servidores.
Na fragmentao horizontal, as tuplas (registros) so divididas horizontalmente entre os vrios servidores. Esse tipo de fragmentao diminui o problema do desbalanceamento de carga entre os servidores como pode ser
visto na tabela 1.3. Com a fragmentao horizontal cada registro da tabela fica
em um servidor, junto com todos os seus atributos (colunas).
Tabela 1.3
ID_Cliente
1
2
3
4
5
6
7
8
9
Tabela: Cliente
Nome_Cliente
Roberto
Helena
Francisco
Lucas
Ylane
Eduardo
Carlos
Vitor
Maria
Cidade_Cliente
Juazeiro do Norte
Fortaleza
Crato
Barbalha
Juazeiro do Norte
Barbalha
Fortaleza
Fortaleza
Crato
Banco de dados_NL2014.indd 19
23/02/15 13:08
Tabela 1.4
ID_Cliente
1
2
3
4
5
6
7
8
9
Nome_Cliente
Roberto
Helena
Francisco
Lucas
Ylane
Eduardo
Carlos
Vitor
Maria
Tabela: Cliente
Servidor
S04
S05
S06
S05
S04
S06
S06
S04
S05
ID_Cliente
1
2
3
4
5
6
7
8
9
Cidade_Cliente
Juazeiro do Norte
Fortaleza
Crato
Barbalha
Juazeiro do Norte
Barbalha
Fortaleza
Fortaleza
Crato
Na replicao completa os dados armazenados so replicados de maneira inteira em todos os sites do sistema distribudo. O outro caso extremo
da replicao completa envolve possuir nenhuma replicao [...] Entre esse
dois extremos, temos um amplo espectro de replicao parcial dos dados
[ELMASRI e NAVATHE, 2005].
Embora a replicao de dados melhore a disponibilidade e o desempenho do banco de dados, a mesma reduz a velocidade das operaes de
atualizao, uma vez que cada atualizao dever ser replicada em todas as
cpias existentes para manter a consistncia dos dados redundantes.
Banco de dados_NL2014.indd 20
23/02/15 13:08
Captulo
Modelagem de Dados
e Normalizao
Banco de dados_NL2014.indd 21
23/02/15 13:08
Banco de dados_NL2014.indd 22
23/02/15 13:08
Banco de Dados
Objetivos
Saber transformar a necessidade do armazenamento de dados num projeto eficaz e eficiente de banco de dados passa por algumas etapas. Este
captulo tem o foco em trs etapas importantes do projeto de um banco de
dados, iniciando com a modelagem conceitual atravs de uma abordagem
prtica, passado pela normalizao de dados e finalizando com a modelagem lgica do banco de dados.
23
Requisitos de um
sistema so descries
dos servios fornecidos
pelo sistema e as suas
restries operacionais
[SOMMERVILLE, 2007].
Introduo
Neste captulo ser apresentando o projeto de um aplicativo que utiliza um
banco de dados relacional. No decorre do captulo sero proporcionadas tcnicas para transformar o levantamento de requisitos, feitos pela engenharia de
software, num projeto de banco de dados relacional bem sucedido.
1. Sinopse do Projeto
Um mercantil deseja informatiza alguns processos internos. O controle do estoque de suma importncia, pois a gerncia precisa constantemente fazer
levantamento de inventrio de mercadoria.
Os pontos de venda (PDVs) tambm devem ser automatizados, inclusive passando a ser obrigatrio o uso do Emissor de Cupom Fiscal (ECF).
Com o uso do PDV vinculado a ECF passa a ser obrigatrio explicitar os
itens que cada cliente levou na compra e a forma de pagamento usado pelo
mesmo.
Engenharia de software
uma disciplina de
engenharia relacionada
a todos os aspectos da
produo de software,
desde os estagios
iniciais de especificao
do sistema at sua
manuteno, depois que
este entrar em operao
[SOMMERVILLE, 2007].
Banco de dados_NL2014.indd 23
23/02/15 13:08
2. Modelo Conceitual
O primeiro elemento que deve ser criado para um projeto de banco de dados
o modelo conceitual, este modelo deve ser de fcil entendimento para o
usurio final, logo ele precisa ser um modelo de alto nvel (mais prximo da
realidade do usurio).
Nesse momento se procura uma descrio precisa dos dados, sendo
necessrio especificar quais objetos esto presente no projeto e como eles se
relacionam. Detalhes sobre como sero implementados os dados ou relacionamentos devem ser omitidos.
O modelo conceitual deve servir como meio de comunicao no ambguo entre os usurios do sistema e os desenvolvedores do banco de dados.
Obrigando, desta forma, o entendimento e atendimento dos requisitos por estes dois grupos, sendo muito mais valioso para os desenvolvedores reconhecer e validar as reais necessidades do usurio.
No modelo conceitual devem est presente as entidades e seus relacionamentos alm dos atributos das entidades, e em alguns casos dos relacionamentos. Uma entidade a representao, no ambiente de banco de dados,
de um objeto do mundo real (professor, aluno, etc.) ou conceitual (disciplina,
nota, etc.). Toda entidade tem propriedades (tamanho, cor, nome, etc.), essas
propriedades so chamadas de atributos. Existem entidades que se conectam com outros, mostrando uma associao entre as mesmas, essas associaes so identificadas como relacionamentos.
No decorre desta seo ser mostrado como criar o modelo conceitual
do projeto proposto neste captulo.
Banco de dados_NL2014.indd 24
23/02/15 13:08
Banco de Dados
25
Para identificar os tipos entidade presentes num texto, o primeiro procedimento localizar os substantivos que indiquem um objeto como nico no
mundo real ou conceitual. No texto apresentado na seo 2.1 foram identificados com tipos entidades os substantivos estoque, PDV, item da venda, forma
de pagamento e cliente (figura 2.1).
Banco de dados_NL2014.indd 25
23/02/15 13:08
Banco de dados_NL2014.indd 26
23/02/15 13:08
Banco de Dados
27
Tabela 2.1
Exemplo
Descrio
Atributo multivalorado
Atributo monovalorado
Atributo composto
2.3. Normalizao
Com o modelo conceitual pronto, o passo seguinte transform-lo no modelo lgico, mas antes devemos ter o conhecimento da formas normais. Esse
conhecimento necessrio, pois o modelo conceitual no se preocupar com
a implementao, enquanto o modelo lgico apresenta uma viso abstrata
apropriada a equipe de desenvolvimento.
A normalizao procura simplificar a maneira como os dados sero armazenados no banco de dados para conseguir mais eficincia. Neste contexto a palavra eficincia no se refere melhorar o desempenho do banco de
dados ou facilitar o processo de consulta. A eficincia procurada aqui se refere
a diminuio da complexidade da estrutura lgica do banco de dados.
Banco de dados_NL2014.indd 27
23/02/15 13:08
A normalizao o processo de anlise efetuado sobre esquemas relacionais para conseguir caractersticas desejveis, tais como a minimizao
de redundncia e, consequentemente, a reduo de anomalias de insero,
atualizao e excluso.
A redundncia de dados acontece quando uma determinada informao est representada no sistema em computador vrias vezes [HEUSER,
2001]. Um exemplo de normalizao apresentado por [ELMASRI e NAVATHE,
2005] o de um banco de dados de uma universidade, onde dois grupos de
usurios (secretaria e contabilidade) mantm arquivos independentes com os
dados dos alunos. A contabilidade tambm guarda os dados de matrcula e
as informaes relacionadas a pagamentos, enquanto a secretaria mantm o
controle dos cursos e notas dos alunos [ELMASRI e NAVATHE, 2005].
2.3.1. Forma Normal
Uma forma normal uma regra que deve ser seguida para que uma tabela
seja bem avaliada. A forma normal sujeita o esquema de relao a uma cadeia
de avaliao para garantir que ele satisfaz a forma normal. Esse processo de
avaliao segue o estilo top-down, onde cada relao avaliada sob os critrios das formas normais.
2.3.1.1. Primeira Forma Normal (1FN)
Uma tabela est na 1FN se no possuir atributo multivalorado ou atributo composto, esse procedimento elimina tabelas aninhadas. A figura 2.4 mostra uma
tabela que no atende a 1FN, pois temos um atributo multivalorado (Telefone)
e um atributo composto (Endereco).
Banco de dados_NL2014.indd 28
23/02/15 13:08
Banco de Dados
29
Banco de dados_NL2014.indd 29
23/02/15 13:08
Banco de dados_NL2014.indd 30
23/02/15 13:08
Banco de Dados
31
Banco de dados_NL2014.indd 31
23/02/15 13:08
Os atributos multivalorados Ator e Produtor tm dependncia funcional multivalorada com o atributo chave ID. Neste caso, cada atributo multivalorado se transformar numa tabela independente da tabela original (figura 2.15).
Banco de dados_NL2014.indd 32
23/02/15 13:08
Banco de Dados
33
Banco de dados_NL2014.indd 33
23/02/15 13:08
Banco de dados_NL2014.indd 34
23/02/15 13:08
Banco de Dados
35
2.3.2. Desnormalizao
A desnormalizao um assunto pouco mencionado na literatura por ser controverso e no ser uma tcnica unnime. Mas em certos casos podem requerer a redundncia de parte dos dados, ou que atributos no relacionados
sejam combinados em tipos entidade simples.
Um caso em particular que requer a desnormalizao a necessidade
de manter um histrico sobre os dados armazenados. Um exemplo dessa
necessidade a obrigatoriedade de manter os dados dos documentos fiscais
emitidos sem alterao, aps terem sido consolidados. Para ficar mais claro
ser apresentado um cenrio que reflete melhor esse exemplo:
1. A distribuidora ABCD emite uma nota fiscal eletrnica (NF-e) para
o cliente XYZ, no ato da emisso da NF-e o cliente XYZ morava na
RUA J50, tendo efetuado a compra de 100 refrigerantes no valor
unitrio de R$ 2,95.
Banco de dados_NL2014.indd 35
23/02/15 13:08
4. A distribuidora ABCD no conseguir atender a solicitao da Secretaria da Fazenda, pois para evitar redundncia de dados, o banco de
dados foi totalmente normalizado.
Outro caso, ainda mais controverso, a desnormalizao para evitar
consultas complexas que so requeridas constantemente. Entenda-se com
consultas complexas aquelas que fazem uso de junes entre duas ou mais
tabelas para chegar ao resultado desejado.
Mas desnormalizar para ganhar desempenho talvez seja o mais controverso argumento para desnomalizar um banco de dados, pois muito difcil
comprovar que o ganho de desempenho com a desnormalizao significativo.
Banco de dados_NL2014.indd 36
23/02/15 13:08
Banco de Dados
37
Banco de dados_NL2014.indd 37
23/02/15 13:08
Tendo como base o modelo conceitual mostrado na figura 2.24 possvel criar o modelo lgico (figura 2.25), transformando os relacionamentos em
chaves estrangeiras, de acordo com as regras apresentadas anteriormente.
Banco de dados_NL2014.indd 38
23/02/15 13:08
Captulo
PostgreSQL
e Modelagem Fsica
Banco de dados_NL2014.indd 39
23/02/15 13:08
Banco de dados_NL2014.indd 40
23/02/15 13:08
Banco de Dados
41
Objetivos
Um projeto de um banco de dados finalizado com a escolha do banco de
dados que ser usado e com a criao do modelo fsico. O modelo fsico
est diretamente relacionado ao banco de dados escolhido, uma vez que
o mesmo representa a forma como os dados sero armazenados fisicamente. O captulo abordar o banco de dados PostgreSQL e como criar o
modelo fsico baseado no mesmo.
Introduo
O captulo anterior apresentou o projeto de um aplicativo que utiliza um banco de dados relacional. Foram utilizadas tcnicas para a criao do modelo
conceitual e do modelo lgico do projeto baseados nos requisitos levantados.
Neste captulo iremos explicar como criar o modelo fsico baseado no
modelo lgico apresentado no captulo 2. O modelo fsico criado via SQL
(Structured Query Language Linguagem Estruturada de Consulta) e executado diretamente no SGBD, devido a isto, o captulo inicia mostrando como
instalar o SGBD PostgreSQL no sistema operacional Linux sobre a distribuio Ubuntu.
1. PostgreSQL
O PostgreSQL um SGBD proveniente do POSTGRES que foi escrito na Universidade da Califrnia em Berkely. A primeira verso de demonstrao do POSTGRES tornou-se operacional em 1987, em 1994 passou a se chamar Postgres95
e em 1996 recebeu o nome PostgreSQL, sendo o nome usado at hoje.
O PostgreSQL um projeto open source coordenado pelo PostgreSQL
Global Developent Group, tendo seu desenvolvimento sido feito por um grupo
de desenvolvedores distribudos pelo mundo, em sua maioria, voluntrios.
considerado atualmente o mais avanado banco de dados de cdigo aberto
disponvel em qualquer lugar. [POSTGRESQL, 2011].
Banco de dados_NL2014.indd 41
23/02/15 13:08
Acesse http://www.cassic.
com.br/carregar/tutoriais/
SERVL_TIPACESS para
maiores informaes sobre
o comando chmod.
2. Na janela seguinte (figura 3.2) solicitado o diretrio onde o PostgreSQL ser instalado.
Banco de dados_NL2014.indd 42
23/02/15 13:08
Banco de Dados
43
Banco de dados_NL2014.indd 43
23/02/15 13:08
Para o PostgreSQL um
cluster de banco de dados
um conjunto de bancos
de dados gerenciada por
uma nica instncia de
um servidor de banco de
dados.
6. Em opes avanadas solicitado o local que ser usado num provvel cluster de banco de dados. Tambm solicitado a confirmao
da instalao da pl/pgsql no template1 do banco de dados. Deixe as
opes como mostradas na figura 3.6.
Banco de dados_NL2014.indd 44
23/02/15 13:08
Banco de Dados
45
7. Na figura 3.7 o instalador informa que est pronto para iniciar instalao do PostgreSQL. Clicar no boto Next.
Banco de dados_NL2014.indd 45
23/02/15 13:08
9. Na janela de boas-vindas do Stack Builder informe a opo PostgreSQL 8.4 on port 5432 (figura 3.9).
Banco de dados_NL2014.indd 46
23/02/15 13:08
Banco de Dados
47
Banco de dados_NL2014.indd 47
23/02/15 13:08
Um front-end uma
interface responsvel
por coletar os dados de
entrada inseridos pelo
usurio, efetuar um prprocessamento e envi-los
ao seu destino final (backend), captura a resposta
e apresenta ao usurio de
forma inteligvel.
2. Modelo Fsico
O prximo captulo
dedicado exclusivamente
a SQL, onde ser possvel
conhecer vrios comandos
da SQL.
Aps instalar o PostgreSQL, deve-se utilizar a SQL para criar o modelo fsico
do banco de dados. Nesta seo ser usado o font-end pgAdmin para automatizar o uso da SQL.
2.1. pgAdmin
O pgAdmin o font-end usado pelo PostgreSQL. Com ele possvel manipular
o banco de dados de vrias maneiras. Mas como afirmado anteriormente, neste
momento o pgAdmin ser usado para automatizar a criao do modelo fsico.
Para iniciar o pgAdmin deve-se selecionar o menu Aplicativos do Linux
Ubuntu e na seqncia escolher a opo PostgreSQL 8.4 e em seguida pgAdmin III. Esse procedimento ir abrir o pgAdmin (figura 3.14).
O pgAdmin permite ao usurio criar vrias conexes com um ou mais
servidores. Para criar uma conexo com o servidor local deve-se clicar no
e preencher como mostrado na figura 3.15 e clique no boto OK.
boto
Banco de dados_NL2014.indd 48
23/02/15 13:08
Banco de Dados
49
Banco de dados_NL2014.indd 49
23/02/15 13:08
Banco de dados_NL2014.indd 50
23/02/15 13:08
Banco de Dados
51
Tendo como referncia o modelo lgico do captulo anterior execute os passos apresentados na sequncia para criar a tabela ESTOQUE. Estes mesmos
passos devem ser seguidos para criar as tabelas FORMA_PGTO e CLIENTE.
1. Clicar com o boto inverso do mouse e escolher a opo Nova Tabela...
2. No campo Nome da guia Propriedades digitar ESTOQUE.
3. Na guia Colunas clicar no boto Adicionar.
4. Na janela Nova Coluna preencher como mostrado na figura 3.18 e
clicar no boto OK.
Banco de dados_NL2014.indd 51
23/02/15 13:08
Banco de dados_NL2014.indd 52
23/02/15 13:08
Banco de Dados
53
Banco de dados_NL2014.indd 53
23/02/15 13:08
da chave primria, aps criar a chave primria devem-se criar as chaves estrangeiras da tabela.
Trs informaes so essenciais para a criao de uma chave estrangeira, (i) o campo da tabela local que ser a chave estrangeira, (ii) a tabela
estrangeira e (iii) o campo da tabela estrangeira que ser referenciado. Essas
informaes podem ser passadas de maneira visual no pgAdmin.
Aps criar todos os campos apresentados no modelo lgico e a chave
primria, execute os passos apresentados na seqncia. Estes mesmos passos devem ser executados para as tabelas ITEM_PDV e TELEFONES.
Na guia Restries com a opo Chave Estrangeira selecionada clicar
no boto Adicionar (figura 3.22).
Escolher a opo FORMA_PGTO (tabela estrangeira) no campo Referncias da guia Propriedades da janela Nova Chave Estrangeira...
Banco de dados_NL2014.indd 54
23/02/15 13:08
Banco de Dados
55
3. Na guia Colunas, nos campos Coluna local e Referenciando informar respectivamente ID_Forma_Pgto (campo da tabela local que
ser a chave estrangeira) e ID (campo da tabela estrangeira que
ser referenciado), clicar no boto adicionar (figura 3.23).
4. Na guia Ao, marcar as opes de acordo com a figura 3.24 e clicar no boto OK.
Banco de dados_NL2014.indd 55
23/02/15 13:08
Banco de dados_NL2014.indd 56
23/02/15 13:08
Captulo
Introduo a SQL
Banco de dados_NL2014.indd 57
23/02/15 13:08
Banco de dados_NL2014.indd 58
23/02/15 13:08
Banco de Dados
59
Objetivos
Com a evoluo dos bancos de dados, surgiu uma linguagem descritiva
que com o tempo foi se tornando um padro para os bancos de dados relacionais. A SQL uma linguagem declarativa criada para trabalhar exclusivamente com banco de dados, o seu conhecimento se torna indispensvel
para a atual conjuntura dos bancos de dados. Este captulo dedicado a
histria da SQL e aos comandos do grupo DDL e DML, alm do comando
SELECT e sua clusula WHERE.
Introduo
Este o primeiro de dois captulos dedicados a SQL (Structured Query Language Linguagem Estruturada de Consulta), uma linguagem declarativa desenvolvida para os bancos de dados relacionais, que devido sua simplicidade
e facilidade de uso tornou-se um padro para banco de dados relacionais.
O grande diferencial da SQL em relao a outras linguagens de consulta est no seu paradigma, pois a SQL uma linguagem declarativa e no uma
linguagem procedural. Para os novos usurios ela parece ser um pouco complicada, mas isso ocorre devido ao desconhecimento do paradigma declarativo, assim, o aluno aps absorver os princpios desse paradigma, observar
que o ciclo de aprendizagem da SQL bastante reduzido.
Uma boa justificativa para se ter dois captulos dedicados a SQL dado
por [DEITEL, 2010] quando afirma que os sistemas de banco de dados atuais
mais populares so os banco de dados relacionais e ele conclu informando
que a SQL a linguagem padro internacional utilizada quase universalmente
com banco de dados relacionais para realizar consultas e manipular dados.
Neste captulo as sintaxes dos comandos e sub-comandos da SQL sero apresentados baseados no padro EBNF (Extended Backus-Naur Form
Forma Backus-Naur Estendida).
1. Histria
A SQL permitiu padronizar a construo e acesso a SGBDR (Sistema de Gerenciamento de Bancos de Dados Relacional) de diferentes tipos e em diferentes plataformas de software e hardware.
Essa padronizao impulsionou no apenas a disseminao dos SGBDR, mas tambm a prpria SQL. Para entender a importncia da SQL so
mostrados nesta subseo todos os pontos que levaram os DBAs (Database
Banco de dados_NL2014.indd 59
23/02/15 13:08
A SQL-99 ou SQL3 foi aprovada pela ISO no final do ano de 1999. Nela
foram definidos os usos de triggers, stored procedures, consultas recursivas,
entre outros. Esse padro tambm definiu regras para os SGBDOR (Sistema de
Gerenciamento de Bancos de Dados Objeto-Relacional) (Ler 1.2. Modelos de
Bancos de Dados), implementando assim o suporte ao tratamento de objetos.
No ano de 2003 foi lanado o SQL-2003, introduzindo caractersticas
relacionadas ao XML (eXtensible Markup Language Linguagem de Marcao Extensiva), sequncias padronizadas e colunas com valores de auto-generalizao.
A verso SQL-2008 trouxe nas especificaes formas para a SQL poder ser usada em conjunto com XML, incluindo importao, armazenamento,
manipulao e publicao de dados XML no SGBDR.
A SQL uma linguagem padronizada, mas cada SGBDR apresenta
dialeto prprio, com extenses diferentes entre cada fabricante de SGBD.
Banco de dados_NL2014.indd 60
23/02/15 13:08
Banco de Dados
61
2. Grupos
Os comandos da SQL so tradicionalmente separados em dois grupos:
DDL (Data Definition Language Linguagem de Definio de Dados):
Subconjunto utilizado para criar, alterar e excluir tabelas e elementos
associados; esse o grupo que mais muda de um fabricante para outro.
DML (Data Manipulation Language Linguagem de Manipulao de Dados): Subconjunto dos comandos usado para inserir, atualizar e apagar dados.
Para recuperar (consultar) os dados utiliza-se o comando select. Alguns
autores incluem esse comando dentro do grupo DML, uma vez que para recuperar os dados necessrio manipul-los, sem necessariamente ter que
alterar seu estado. Outros j preferem definir um grupo especifico para ele
chamado DQL (Data Query Language Linguagem de Consulta de Dados).
3. SQL Editor
Para executar os exemplos apresentados neste captulo ser usado o SQL
Editor do pgAdmin. Com o banco de dados desejado selecionado no navepara abrir o SQL Editor (figura
gador de objetos, deve-se clicar no boto
4.1). Aps escrever os exemplos apresentados neste captulo, deve-se clicar
para executar o comando digitado.
no boto
Banco de dados_NL2014.indd 61
23/02/15 13:08
A SQL CASE
INSENSITIVE (no
diferencia letras maisculas
de minsculas). Mas vale
ressaltar que os dados
armazenados podem
ser CASE SENSITIVE
(diferencia letras
maisculas de minsculas),
este fato depende do
SGBDR.
Na EBNF os COLCHETES
denotam uma parte
opcional e as CHAVES
indicam que partes
podem ser repetidas
indefinidamente ou omitidas
completamente.
4. DDL Parte 1
A DDL o grupo que mais muda de um dialeto para o outro, mas vale ressaltar
que a sintaxe apresentada aqui muito semelhante a maioria dos SGBDRs
(Sistemas Gerenciadores de Bancos de Dados Relacionais).
Banco de dados_NL2014.indd 62
23/02/15 13:08
Banco de Dados
63
Descrio
Nome da tabela
Nome do atributo
Tipo de dados do atributo
Restrio de dados para o atributo
Number(n, p)
Nmeros de ponto flutuante com total de dgitos n e total de dgitos direita do ponto decimal p
Integer
Nmeros inteiros Alguns SGBDR utilizam Number(n) para identificar um nmero inteiro
Date
Exemplo1:
create table Setor (
ID integer not null primary key,
Setor varchar(20)
);
Neste exemplo foi criada a tabela Setor, esta tabela tem os atributos (i) ID do tipo
inteiro e (ii) Setor que pode armazenar at 20
caracteres. Um detalhe interessante neste
exemplo o atributo Setor que homnimo
da tabela, isso possvel porque a sintaxe da
SQL bem elaborada, deixando claro quem
a tabela e quem atributo.
A restrio NOT NULL colocada no
atributo ID informa ao SGBDR que s pode
aceitar um registro nesta tabela quando esse
atributo for informado, ou seja, o atributo ID
no pode ser nulo. Tambm foi informado ao
SGBDR que o atributo ID uma chave primria atravs do sub-comando PRIMARY KEY. Figura 4.2 Comando CREATE aps executado no Editor de SQL.
A figura 4.2 mostra como o Editor de
Banco de dados_NL2014.indd 63
23/02/15 13:08
Banco de dados_NL2014.indd 64
23/02/15 13:08
Banco de Dados
65
Banco de dados_NL2014.indd 65
23/02/15 13:08
A mudana do tipo de dados do atributo Dt_Nasc de date para varchar(10) s foi possvel devido eles serem compatveis. Se fosse tentando
modificar o tipo date para varchar(5) seria gerado um erro, pois o tipo date
no pode ser convertido no tipo varchar(5) sem que haja a perda de dados
armazenados.
4.2.3. Excluir Atributo da Tabela
Para excluir um ou mais atributos numa tabela j existente, deve-se usar o
comando ALTER TABLE em conjunto com o sub-comando DROP.
Sintaxe:
alter table Tabela
drop Atributo
[ {, drop Atributo } ];
Exemplo:
alter table Funcion
drop Dt_Nasc;
Os sub-comando DROP est informando ao SGBD que o atributo Dt_
Nasc da tabela Funcion deve ser excludo.
4.2.4. Adicionar Chave Primria a Tabela
Para incluir uma chave primria numa tabela j existente, deve-se usar o comando ALTER TABLE em conjunto com o sub-comando PRIMARY KEY.
Sintaxe:
alter table Tabela add primary key( Atributo [, Atributo] ) ;
Exemplo:
alter table Funcion add primary key(ID);
Neste exemplo adicionada a chave primria na tabela Funcion. Mas o
exemplo s ser executado com xito se a tabela mencionada ainda no tiver
chave primria declarada.
Banco de dados_NL2014.indd 66
23/02/15 13:08
Banco de Dados
67
4.5. DML
As incluses, alteraes e excluses de dados numa tabela so feitas pelos
comandos do grupo DML. As sintaxes apresentadas nesta seo pertencem
ao SQL padro, mas assim como os comandos DDL, alguns SGBDRs podem
apresentar dialetos diferentes.
Banco de dados_NL2014.indd 67
23/02/15 13:08
Banco de dados_NL2014.indd 68
23/02/15 13:08
Banco de Dados
69
Descrio
Nome da tabela
Nome do atributo
Valor que ser inserido no atributo
As tabelas criadas usando o modelo fsico da figura 4.4, sero povoadas com os comandos INSERTs dos exemplos mostrados na continuao, e
ficaro como mostradas na figura 4.5.
Banco de dados_NL2014.indd 69
23/02/15 13:08
Banco de dados_NL2014.indd 70
23/02/15 13:08
Banco de Dados
71
Banco de dados_NL2014.indd 71
23/02/15 13:08
Banco de dados_NL2014.indd 72
23/02/15 13:08
Banco de Dados
73
ra que faz referncia a tabela Cliente, logo s possvel informar para este
atributo valores devidamente referenciados na tabela Cliente.
Banco de dados_NL2014.indd 73
23/02/15 13:08
Banco de dados_NL2014.indd 74
23/02/15 13:08
Banco de Dados
75
Tadeu
Ylane
Julian
Ewerton
Joo
Celestino
Maria
Banco de dados_NL2014.indd 75
23/02/15 13:08
A figura 4.11 mostra como o Editor de SQL fica aps o comando anterior
ser executado com xito.
Exemplo2:
select * from Funcion;
O resultado deste exemplo trar todos os atributos de todos os registros
da tabela Funcion.
Resultado2:
ID Nome Salario ID_Setor
1 Tadeu 1500,00 1
2 Ylane 1200,00 2
3 Julian 1000,00 1
Banco de dados_NL2014.indd 76
Ewerton
1000,00
Joo
800,00
Celestino
1500,00
Maria
500,00
null
23/02/15 13:08
Banco de Dados
77
Tadeu
Banco de dados_NL2014.indd 77
23/02/15 13:08
Exemplo3:
select ID, Nome from Funcion
where Nome = tadeu;
Exemplo4:
select ID, Nome from Funcion
where Nome = TADEU;
4.6.2.2. Operador Comparativo <> (Diferente)
Retorna apenas os registros que tenham o valor do atributo citado na clusula
WHERE diferente do valor informado aps o operador <>.
Exemplo:
select ID, Nome from Funcion
where Nome <> Tadeu;
O resultado deste exemplo trar todos os registros da tabela Funcion
onde o atributo Nome seja diferente de Tadeu.
Resultado:
ID Nome
2
Ylane
Julian
Ewerton
Joo
Celestino
Maria
Banco de dados_NL2014.indd 78
23/02/15 13:08
Banco de Dados
79
Ylane
Tadeu
Ylane
Banco de dados_NL2014.indd 79
23/02/15 13:08
Resultado:
ID Nome
3
Julian
Ewerton
Joo
Celestino
Maria
Tadeu
Julian
Ewerton
Joo
Celestino
Maria
4.6.2.7. Operador Comparativo BETWEEN ... AND ... (entre dois valores)
Retorna apenas os registros que tenham o valor do atributo citado na clusula WHERE (i) maior ou igual ao primeiro valor informado aps o operador
BETWEEN e (ii) menor ou igual ao segundo valor informado aps o operador
BETWEEN.
Exemplo:
select ID, Nome from Funcion
where Nome between Joo and Tadeu;
Banco de dados_NL2014.indd 80
23/02/15 13:08
Banco de Dados
81
Tadeu
Julian
Joo
Maria
4.6.2.8. Operador Comparativo NOT BETWEEN ... AND ... (no est entre dois valores)
Retorna apenas os registros que tenham o valor do atributo citado na clusula WHERE (i) menor ou igual ao primeiro valor informado aps o operador
NOT BETWEEN e (ii) maior ou igual ao segundo valor informado aps o operador NOT BETWEEN.
Exemplo:
select ID, Nome from Funcion
where Nome not between Joo and Tadeu;
O resultado deste exemplo trar todos os registros da tabela Funcion
onde o atributo Nome seja menor que Joo e maior que Tadeu.
Resultado:
ID Nome
2
Ylane
Ewerton
Celestino
Banco de dados_NL2014.indd 81
23/02/15 13:08
Tadeu
Joo
Ylane
Julian
Ewerton
Celestino
Maria
Banco de dados_NL2014.indd 82
23/02/15 13:08
Banco de Dados
83
Julian
Joo
Exemplo2:
select ID, Nome from Funcion
where Nome like%n;
O resultado deste exemplo trar todos os registros da tabela Funcion
onde o atributo Nome termina com o caractere n, independente do que venha antes deste caractere.
Resultado2:
ID Nome
3
Julian
Ewerton
Exemplo3:
select ID, Nome from Funcion
where Nome like%e%;
O resultado deste exemplo trar todos os registros da tabela Funcion
onde o atributo Nome tenha o caractere e, independente do que venha antes
ou aps este caractere.
Resultado3:
ID Nome
1
Tadeu
Ylane
Ewerton
Celestino
Banco de dados_NL2014.indd 83
23/02/15 13:08
Exemplo4:
select ID, Nome from Funcion
where Nome like%ria%;
O resultado deste exemplo trar todos os registros da tabela Funcion
onde o atributo Nome tenha a cadeia de caracteres ria, independente do que
venha antes ou aps esta cadeia de caracteres.
Resultado4:
ID Nome
7
Maria
Retorna apenas os registros que tenham o valor do atributo citado na clusula WHERE com cadeias de caracteres diferentes do valor informado aps o
operador NOT LIKE.
Exemplo:
select ID, Nome from Funcion
where Nome not likeJ%;
O resultado deste exemplo trar todos os registros da tabela Funcion
onde o atributo Nome no comea com o caractere J, independente do que
venha aps este caractere.
Resultado:
ID Nome
Banco de dados_NL2014.indd 84
Tadeu
Ylane
Ewerton
Celestino
Maria
23/02/15 13:08
Banco de Dados
85
Maria
Tadeu
Ylane
Julian
Ewerton
Joo
Celestino
Banco de dados_NL2014.indd 85
23/02/15 13:08
Os exemplos sobre operadores comparativos apresentados neste captulo podem ser usados por atributos de qualquer tipo (CHAR, VARCHAR, INTEGER, NUMBER, DATE, etc.), a exceo vai para o operador comparativo
LIKE e seu complemento NOT LIKE que s podem ser usados por atributos
do tipo CHAR, VARCHAR e equivalentes de cada SGBDR.
At aqui foram vistos os comandos DML, alm da primeira parte dos
comandos DDL e do comando SELECT. Com esses comandos j fica visvel
o poder da SQL e o porqu dela ter se tornado uma linguagem padro os bancos de dados relacionais. No prximo captulo ser apresentada a segunda
parte do comando SELECT, e conceitos mais complexos disponveis na DDL.
Banco de dados_NL2014.indd 86
23/02/15 13:08
Captulo
SQL Avanada
Banco de dados_NL2014.indd 87
23/02/15 13:08
Banco de dados_NL2014.indd 88
23/02/15 13:08
Banco de Dados
89
Objetivos
O comando SELECT vai alm do uso da clusula WHERE, vrios sub-comandos e funes podem ser usadas em conjunto com o comando SELECT,
transformando-o num comando com uma ortogonalidade elevada. Este captulo proporciona uma viso mais aprofundada no comando SELECT, sendo finalizado com conceitos e comandos da DDL mais avanados.
Introduo
Neste captulo sero apresentadas caractersticas mais complexas do comando SELECT. Tambm sero vislumbrados conceitos disponveis na DDL
que no foram oferecidos no captulo anterior.
Banco de dados_NL2014.indd 89
23/02/15 13:08
Exemplo:
select ID, Nome from Funcion
where ID_Setor is not null and ID = 1;
O resultado deste exemplo trar todos os registros da tabela Funcion
onde o atributo ID_Setor seja igual a nulo e o atributo ID seja igual a 1.
Resultado:
ID Nome
1
Tadeu
2 Condio
Falso
Verdadeiro
Falso
Resultado
Falso
Falso
Falso
Verdadeiro
Verdadeiro
Verdadeiro
Banco de dados_NL2014.indd 90
Tadeu
Celestino
23/02/15 13:08
Banco de Dados
91
2 Condio
Falso
Verdadeiro
Falso
Verdadeiro
Resultado
Falso
Verdadeiro
Verdadeiro
Verdadeiro
Ordem de precedncia.
Ordem
1
2
Regra
Expresses entre parnteses (...)
Todos os operadores de comparao =,<>,>,>=,<,<=,IN...
3
4
Banco de dados_NL2014.indd 91
23/02/15 13:08
Exemplo1:
select ID, Nome from Funcion
order by Nome asc;
O resultado deste exemplo trar todos os registros da tabela Funcion
ordenados pelo atributo Nome de forma ascendente.
Resultado1:
ID Nome
6
Celestino
Ewerton
Joo
Julian
Maria
Tadeu
Ylane
Exemplo2:
select ID, Nome from Funcion
order by Nome;
O resultado deste exemplo igual ao anterior, uma vez que a ordenao ascendente padro, logo a palavra reservada ASC pode ser suprimida.
Exemplo3:
select ID, Nome from Funcion
order by 2;
Neste exemplo, o nome do atributo Nome da tabela Funcion foi trocado
pela posio que o mesmo atributo aparecer na lista do comando SELECT.
As boas prticas recomendam o no uso desta abordagem, pois no caso de
mudana nos atributos do comando SELECT, a clusula ORDER BY deve ser
revisada. Outra desvantagem a impossibilidade de poder ordenar os registros por um atributo que no estejam na lista do comando SELECT.
Banco de dados_NL2014.indd 92
23/02/15 13:08
Banco de Dados
93
Ylane
Tadeu
Maria
Julian
Joo
Ewerton
Celestino
Banco de dados_NL2014.indd 93
23/02/15 13:08
Nome
Setor
1 Tadeu Desenvolvimento
2 Ylane Manuteno
3 Julian Desenvolvimento
4
Ewerton
Desenvolvimento
5 Joo Manuteno
6
Celestino
Financeiro
Este modo de juno padro, logo a clusula INNER pode ser suprimida, como mostrado no prximo exemplo. O resultado do exemplo2 igual
ao resultado do exemplo1.
Exemplo2:
select Funcion.ID, Funcion.Nome, Setor.Setor from Funcion
join Setor on (Setor.ID = Funcion.ID_Setor);
Banco de dados_NL2014.indd 94
23/02/15 13:08
Banco de Dados
95
Banco de dados_NL2014.indd 95
23/02/15 13:08
Resultado:
ID
Nome
Setor
1 Tadeu Desenvolvimento
2 Ylane Manuteno
3 Julian Desenvolvimento
4
Ewerton
Desenvolvimento
5 Joo Manuteno
6
Celestino
Financeiro
7 Maria null
1.3.2.2. Palavra Reservada RIGHT
A palavra reservada RIGHT antes da clusula OUTER indica que todos os
registros da tabela a direita do JOIN (segunda tabela da juno) sero mostrados, independente dela ter ou no referncia na tabela da esquerda do JOIN
(primeira tabela da juno).
Exemplo:
select a.ID, a.Nome, b.Setor from Funcion a
right outer join Setor b on (b.ID = a.ID_Setor);
O resultado deste exemplo trar os atributos ID e Nome de todos os registros da tabela Funcion e o atributo Setor de todos os registros da tabela Setor onde
o atributo ID da tabela Setor seja igual ao atributo ID_Setor da tabela Funcion.
No resultado, o registro com o atributo ID igual a 4 da tabela Setor aparecer, pois mesmo sem o seu atributo ID ter uma referncia na tabela Funcion, a palavra reservada RIGHT permite sua apario.
Mas no aparecer no resultado o registro com o atributo ID igual a 7 da
tabela Funcion, pois o atributo ID_Setor igual a nulo, consequentemente no
tem referncia na tabela Setor.
Resultado:
ID
Nome
Setor
1 Tadeu Desenvolvimento
2 Ylane Manuteno
3 Julian Desenvolvimento
4
Ewerton
Desenvolvimento
5 Joo Manuteno
Banco de dados_NL2014.indd 96
Celestino
Financeiro
null
null
Vendas
23/02/15 13:08
Banco de Dados
97
Nome
Setor
1 Tadeu Desenvolvimento
2 Ylane Manuteno
3 Julian Desenvolvimento
4
Ewerton
Desenvolvimento
5 Joo Manuteno
6
Celestino
Financeiro
7 Maria null
null null
Vendas
Banco de dados_NL2014.indd 97
23/02/15 13:08
Banco de dados_NL2014.indd 98
23/02/15 13:08
Banco de Dados
99
Joo
Julian
Maria
Tadeu
Ylane
1.4.1. Clusula ALL
Por padro os registros duplicados so eliminados do resultado, para mostrar
todos os registros, idnticos ou no, deve-se utilizar a clusula ALL.
Exemplo:
select Nome from Funcion
union all
select Nome from Cliente;
O resultado deste exemplo trar o atributo Nome de todos os registros
da tabela Funcion unido com os atributos Nome de todos os registros da tabela Cliente. O nome Joo e Maria existem nas duas tabelas, e neste exemplo aparecem duas vezes no resultado.
Resultado:
Nome
Tadeu
Ylane
Julian
Ewerton
Joo
Celestino
Maria
Francisco
Jos
Maria
Adriana
Joo
Eduardo
Banco de dados_NL2014.indd 99
23/02/15 13:08
23/02/15 13:08
Banco de Dados
101
23/02/15 13:08
Resultado:
Soma_Salario
7500.00
1.5.5. Funo COUNT
A funo COUNT retorna a quantidade de registros no nulos do atributo passado como parmetro.
Exemplo1:
select count(Salario) as Quant_Salario from Funcion;
O resultado deste exemplo trar a quantidade de registro que tm um
valor informado no atributo Salario da tabela Funcion.
Resultado1:
Quant_Salario
7
Exemplo2:
select count(ID_Setor) as Quant_Setor from Funcion;
O resultado deste exemplo trar a quantidade de registro que tm um
valor informado no atributo ID_Setor da tabela Funcion.
Resultado2:
Quant_Setor
6
1.6. Clusula GROUP BY
Para recuperar o resultado de uma ou mais funes agrupadas por um ou
mais atributos deve-se usar a clusula GROUP BY.
Sintaxe:
select Funo(Parmetro) [{, Funo(Parmetro)}] [{, Atributo}] from Tabela
23/02/15 13:08
Banco de Dados
103
null
1500.00
2000.00
3500.00
23/02/15 13:08
Exemplo:
select sum(salario) as Soma_Salario, ID_Setor from Funcion
group by ID_Setor
having sum(salario) > 1500
O resultado deste exemplo trar a soma dos valores inseridos no atributo Salario da tabela Funcion agrupados pelo atributo ID_Setor, onde a soma
dos valores inseridos no atributo Salario seja maior que R$ 1.500,00.
Resultado:
Soma_Salario ID_Setor
2000.00
3500.00
23/02/15 13:08
Banco de Dados
105
23/02/15 13:08
Exemplo:
select Nome, (Salario + 200) as Salario_Atual from Funcion;
O resultado deste exemplo trar os atributos Nome e Salario da tabela
Funcion, mas o atributo Salario ter o seu valor adicionado em R$ 200,00.
Resultado:
Nome
Salario_Atual
Tadeu
1700,00
Ylane
1400,00
Julian
1200,00
Ewerton
1200,00
Joo
1000,00
Celestino
1700,00
Maria
700,00
Nome
Salario_Atual
Tadeu
1300,00
Ylane
1000,00
Julian
800,00
Ewerton
800,00
Joo
600,00
Celestino
1300,00
Maria
300,00
23/02/15 13:08
Banco de Dados
107
Salario_Atual
Tadeu
2250.00
Ylane
1800.00
Julian
1500.00
Ewerton
1500.00
Joo
1200.00
Celestino
2250.00
Maria
750.00
23/02/15 13:08
Resultado:
Nome
Salario_Quinzena
Tadeu
750.00
Ylane
600.00
Julian
500.00
Ewerton
500.00
Joo
400.00
Celestino
750.00
Maria
250.00
Adriana
Joo
23/02/15 13:08
Banco de Dados
109
Exemplo2:
select ID, Nome from Funcion
where ID_Setor = ( select max(ID) - 1 from Setor );
O resultado deste exemplo trar os atributos ID e Nome da tabela Funcion onde o atributo ID seja igual ao maior valor do atributo ID da tabela Setor
menos 1.
Resultado2:
ID Nome
6
Celestino
2. DDL Parte 2
Na seo 4.4 vimos os comando bsicos da DDL, nesta seo iremos um
pouco mais alm, abordando views, stored procedures, triggers e domains.
A sintaxe usada nesta seo direcionada para o PostgreSQL, podendo no
funcionar em outros SGBDR, uma vez que esta a parte da SQL que mais
muda de um SGBDR para outro.
2.1. VIEW
Uma VIEW funciona como um comando SELECT salvo dentro do banco de dados, assim como acontece com as tabelas e os dados armazenados nas tabelas.
Sintaxe:
create view Viso [ ( Atributo [ {,Atributo} ] ) ]
as Comando_Select;
Exemplo de Criao:
create view Cliente_Pedido (ID, NomeCompleto, SomaPedido)
as
select a.ID, (a.Nome || || a.Sobrenome), sum(b.Valor) from Cliente a
join Pedido b on (b.ID_Cliente = a.ID)
group by a.ID, a.Nome, a.Sobrenome;
Este exemplo cria uma VIEW com o nome de Cliente_Pedido. A lista
de atributos que esta VIEW retornar ser ID, NomeCompleto, SomaPedido.
23/02/15 13:08
23/02/15 13:08
Banco de Dados
111
Caso a linguagem
procedural padro
PLPGSQL no seja
reconhecido, deve-se
cria-la atravs do comando
CREATE LANGUAGE
PLPGSQL;
23/02/15 13:08
Tadeu
1500,00
Ylane
1200,00
Julian
1000,00
Ewerton
1000,00
Joo
800,00
Celestino
1500,00
Maria
500,00
23/02/15 13:08
Banco de Dados
113
2.3. TRIGGER
Um TRIGGER um gatilho disparado automaticamente pelo SGBDR quando
um comando INSERT, UPDATE ou DELETE executado numa tabela do
banco de dados. No PostgreSQL uma STORE PROCEDURE deve ser criada
exclusivamente para se utilizar o TRIGGER.
Sintaxe:
create trigger Gatilho { {before | after} Evento [ {or Evento} ] } on Tabela
[ for [each] {row | statement} ] execute procedure Store_Procedure;
As palavras reservadas BEFORE e AFTER indicam se o TRIGGER vai
ser disparado antes ou depois do evento, respectivamente. J o evento pode
ser um comando INSERT, UPDATE ou DELETE.
Se na criao do TRIGGER for informado o FOR EACH ROW, o gatilho ser disparado uma vez para cada linha modificada. Informando o FOR
EACH STATEMENT, o gatilho s ser disparado uma vez, independente da
quantidade de linhas modificadas.
Exemplo de Criao da STORE PROCEDURE usada pelo TRIGGER:
create or replace function MaxIDFuncion() returns trigger as
$$
declare
max_ID integer;
begin
select max(id) from Funcion into max_ID;
new.id := max_ID + 1;
return new;
end;
$$
language plpgsql;
Neste exemplo foi criado a STORE PROCEDURE que ser usada pelo
TRIGGER. O exemplo executa a funo MAX sobre o atributo ID da tabela
Funcion e atribui o resultado a varivel max_ID. A varivel max_ID acrescido
de um atribudo ao novo ID (new.id) do evento. As variveis NEW e OLD so
criadas automaticamente.
23/02/15 13:08
A varivel NEW mantm os novos valores de todos os atributos do registro que est sendo enviada ao banco de dados, s pode ser usada em
conjunto com os comandos INSERT e UPDATE.
A varivel OLD o oposto, mantm os antigos valores de todos os atributos do registro que est sendo enviada ao banco de dados, s pode ser
usada em conjunto com os comandos UPDATE e DELETE.
Exemplo de Criao do TRIGGER:
create trigger Trg_Funcion before insert on Funcion
for each row execute procedure MaxIDFuncion();
Neste exemplo foi criado um TRIGGER com o nome de Trg_Funcion
para a tabela Funcion. Ele ser disparado antes do comando INSERT e executar a STORE PROCEDURE MaxIDFuncion para cada linha modificada.
Exemplo de Uso:
insert into Funcion (Nome, Salario, ID_Setor) values (Jesus, 2000, 4);
select * from Funcion;
O primeiro comando insere um novo registro na tabela Funcion, mas
o mesmo no informa o atributo ID desse novo registro. A insero dispara o
TRIGGER Trg_Funcion que executa a STORE PROCEDURE MaxIDFuncion.
A STORE PROCEDURE MaxIDFuncion captura o maior valor do atributo ID da tabela Funcion, adiciona em 1 e o atribui a varivel NEW.ID, o novo
registro ter o valor do seu atributo ID igual a varivel NEW.ID.
O segundo comando trar todos os atributos de todos os registros da
tabela Funcion j com o novo registro devidamente cadastrado.
Resultado:
ID Nome Salario ID_Setor
1 Tadeu 1500,00 1
2 Ylane 1200,00 2
3 Julian 1000,00 1
4
Ewerton
1000,00
Joo
800,00
Celestino
1500,00
Maria
500,00
null
8 Jesus 2000.00 4
23/02/15 13:08
Banco de Dados
115
2.4. DOMAIN
Um DOMAIN ou domnio um tipo de dado definidos pelo usurio com a finalidade de reaproveitamento. O DOMAIN padroniza e centraliza os tipos de
dados utilizados pelas tabelas do banco de dados.
Sintaxe:
create domain Nome_Domain [as] Tipo_Dado
[default Valor_Padro] [Restrio] [check(Restrio)];
Exemplo:
create domain DM_VALOR as numeric(15,2)
default 0 not null check (value >= 0);
Neste exemplo foi criado um DOMAIN com o nome de DM_VALOR do
tipo Numeric(15,2), onde seu valor padro ser zero, ele no pode ser nulo e
nunca aceitar que seja inserido nele um valor inferior a zero.
Exemplo de Uso:
create table Conta (
ID integer not null primary key,
Agencia varchar(5),
Saldo numeric(15,2) default 0 not null,
LimiteConta DM_VALOR,
LimiteEmprestimo DM_VALOR
);
Neste exemplo foi criada a tabela Conta. O atributo ID do tipo Integer
no pode ser nulo e uma chave primria, enquanto o atributo Agencia do
tipo Varchar(5). O atributo Saldo do tipo Numeric(15,2), seu valor padro
zero e no pode ser nulo.
Os atributos LimiteConta e LimiteEmprestimo so do tipo DM_VALOR.
Isto est dizendo implicitamente ao SGBDR que os atributos so do tipo Numeric(15,2), seu valor padro zero, no podem ser nulo e nunca dever ser
includo neles valores negativos.
23/02/15 13:08
Referncias
[DEITEL, 2010] DEITEL, Paul; DEITEL, Harvey. Java: Como Programar. 8.
ed. So Paulo, Pearson Prentice Hall, 2010.
[ELMASRI e NAVATHE, 2005] ELMASRI, Ramez; NAVATHE, Shamkant B.
Sistemas de Banco de Dados. 4. ed. So Paulo, Pearson Addison Wesley,
2005.
[HEUSER, 2001] HEUSER, Carlos Alberto. Projeto de Banco de Dados. 4.
ed. Porto Alegre, Sagra Luzzatto, 2001.
[POSTGRESQL, 2011] POSTGRESQL. Documentao do PostgreSQL
8.2.0. http://pgdocptbr.sourceforge.net/pg82/history.html. Setembro de 2011.
[RAMAKRISHNAN e GEHRKE, 2008] RAMAKRISHNAN, Raghu; GEHRKE,
Johannes. Sistemas de Banco de Dados. 2. ed. So Paulo: McGraw-Hill,
2008. 884 p
[ROB e CORONEL, 2011] ROB, Peter; CORONEL, Carlos. Sistema de Banco de Dados. So Paulo, Cengage Learning, 2011.
[SOMMERVILLE, 2007] SOMMERVILLE, Ian. Engenharia de Software. 8.
ed. So Paulo, Pearson Addison Wesley, 2007.
23/02/15 13:08
Banco de Dados
117
Sobre os autores
Cicero Tadeu Pereira Lima Frana - mestre em Computao Aplicada pela
UECE, especialista em Engenharia de Software com nfase em Padres de
Software e especialista em Gesto de Projetos de TI, graduado como tecnlogo em Automtica pelo IFCE. Tem experincia na rea de Cincia da Computao, atuando principalmente no desenvolvimento de softwares. Professor
da Faculdade Leo Sampaio.
Joaquim Celestino Jnior - Possui graduao em Engenharia Eletrnica
pela Pontifcia Universidade Catlica do Rio de Janeiro (1985), mestrado
em Cincia da Computao pela Universidade Federal da Paraba/Campina
Grande(1989), doutorado em Redes de Computadores - Universite de Paris
VI (Pierre et Marie Curie) (1994) e ps-doutorado em Redes Veiculares pela
Columbia University in New York City (2010). professor adjunto da Universidade Estadual do Cear (UECE). Tem experincia na rea de Cincia da
Computao, com nfase em Teleinformtica, atuando principalmente nos seguintes temas: redes de computadores, gerenciamento de redes e segurana.
23/02/15 13:08