Anda di halaman 1dari 228

Sistemas de Informao Desenvolvimento de Sistemas Web

Apostila do Professor
1/2 Bim. Semestre 3 BD

BANCO DE DADOS
Autor: Sandra G. Puga

3 BD 1T 1

Prezado aluno, Este material compreende apenas o contedo da disciplina. Assim, no deve ser a nica fonte de consultas em seus estudos. O contedo deve ser complementado com outras obras, indicadas por seu professor ou encontradas em suas pesquisas.

Revises:

2 Edio 3 Impresso 1 Semestre de 2007 Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

ndice
1. Projetos de Bancos de Dados ................................................................................................. 1 1.1. Modelo Conceitual .............................................................................................................. 2 1.1.1. Objetivos do Modelo Conceitual .............................................................................. 3 1.1.2. Caractersticas do Modelo Conceitual ..................................................................... 3 1.1.3. O Modelo Conceitual propicia .................................................................................. 4 1.1.4. Exemplo de Modelagem Conceitual ........................................................................ 5 1.2. Modelo Lgico .................................................................................................................... 5 1.3. Modelo Fsico ..................................................................................................................... 7 1.3.1. O que acontece na Converso do Modelo Lgico para o Modelo Fsico ................ 8 2. Modelo de Banco de Dados ..................................................................................................... 9 2.1. Modelo Hierrquico de Banco de Dados ............................................................................ 9 2.2. Modelo Banco de Dados em Rede ................................................................................... 10 2.3. Modelo Relacional ............................................................................................................ 12 2.3.1. Vantagens do Modelo Relacional .......................................................................... 14 2.4. Modelo Orientado a Objetos ............................................................................................. 15 3. Modelo Entidade Relacionamento - MER ............................................................................. 17 3.1. Conceitos Bsico .............................................................................................................. 17 3.2. Dados e Informaes ........................................................................................................ 17 3.2.1. Qual a diferena entre Dados e Informao ....................................................... 17 3.3. Entidade ........................................................................................................................... 19 3.4. Atributos ........................................................................................................................... 19 3.5. Chaves .............................................................................................................................. 20 3.6. Relacionamento ................................................................................................................ 21 4. Metodologias para Modelagem de Banco de Dados Relacionais ...................................... 22 4.1. Metodologia de Peter Chen .............................................................................................. 22 4.2. Metodologia de James Martin ........................................................................................... 25 4.2.1. Representao da Entidade .................................................................................. 25 4.2.2. Representao dos Atributos ................................................................................ 26 4.2.3. Representao dos Relacionamentos e Cardinalidade ......................................... 26 4.2.4. Relacionamento Opcional ...................................................................................... 28 4.3. CASE*MethodTM ............................................................................................................... 28 4.3.1. Representao da Entidade .................................................................................. 28 4.3.2. Representao dos Atributos ................................................................................ 29 4.3.3. Representao dos Relacionamentos ................................................................... 29 4.4. ERWin ............................................................................................................................... 30 4.5. Quadro Resumido ............................................................................................................. 36
1
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

5. Entidade ................................................................................................................................. 37 5.1. Como identificar uma entidade ......................................................................................... 37 5.2. Representaes de Entidades ......................................................................................... 39 5.3. Cuidado: Aquilo que entidade numa circustncia, pode no ser em outra! .................. 40 5.4. Tipos de Entidades ........................................................................................................... 41 5.4.1. Entidade meramente Conceitual ........................................................................... 41 5.4.2. Entidade Forte ....................................................................................................... 41 5.4.3. Entidade fraca ........................................................................................................ 41 5.4.4. Entidade Associativa ............................................................................................. 41 5.4.5. Entidade de Dados ................................................................................................ 42 6. Atributos .................................................................................................................................. 43 6.1. Como identificar os atributos? .......................................................................................... 43 6.2. Representaes de Atributos ........................................................................................... 43 6.3. Classificao de Atributos ................................................................................................ 44 6.4. Tipos de Atributos ............................................................................................................. 44 6.4.1. Atributo Simples ..................................................................................................... 45 6.4.2. Atributo Composto ................................................................................................. 45 6.4.3. Atributo Monovalorado ........................................................................................... 46 6.4.4. Atributo Multivalorado ............................................................................................ 46 6.4.5. Atributo Derivado ou Virtual ................................................................................... 46 6.4.6. Atributo Opcional ou Nulo ...................................................................................... 46 6.4.7. Atributo Chave ....................................................................................................... 47 7. Relacionamentos .................................................................................................................... 49 7.1. Introduo ......................................................................................................................... 49 7.2. Por que um Relacionamento fundamental dentro de um Banco de Dados ................... 49 7.3. Como identificar os Relacionamentos? ............................................................................ 50 7.4. Cardinalidade ................................................................................................................... 51 8. Modelo Entidade Relacionamento Estendido ...................................................................... 54 8.1. Natureza do Relacionamento ........................................................................................... 54 8.1.1. Relacionamentos Parciais e Totais ....................................................................... 54 8.1.2. Relacionamentos Recursivos ou Auto-Relacionamento ........................................ 54 8.1.3. Relacionamentos Multiplos / Agregao ............................................................... 55 8.2. Generalizao Especializao ......................................................................................... 57 9. Normalizao .......................................................................................................................... 58 9.1. Primeira Forma Normal (1FN) .......................................................................................... 59 9.2. Segunda Forma Normal (2FN) ......................................................................................... 60 9.3. Terceira Forma Normal (3FN) .......................................................................................... 62 9.7. Resumo dos Passos para Normalizao .......................................................................... 63

2
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

1. Projetos de Bancos de Dados

Bancos de Dados so componentes importantes dos sistemas de informao, portanto, o projeto do banco de dados torna-se uma atividade essencial na fase de desenvolvimento dos sistemas. Muitas vezes a falta de uma abordagem adequada para o projeto de um banco de dados pode incorrer em resultados indesejveis, como queda de performance ao atender a demanda de aplicaes e problemas com a manuteno do banco de dados. Geralmente a causa disso est associada a etapa de entendimento do problema e transcrio da representao para o modelo conceitual. De acordo com Korth1 Um modelo de dados pode ser definido como uma Coleo de ferramentas conceituais para descrio de dados, relacionamento entre os dados, semntica e restries de dados. O Modelo de Dados basicamente um conjunto de conceitos utilizados para descrever um Banco de Dados. No existe uma nica forma de representao deste modelo, porm qualquer forma que emite a correta compreenso das estruturas de dados compreendidas no Banco de Dados, pode ser considerada adequada. Os modelos so a base do design. Os engenheiros criam um modelo de carro para estudar os detalhes antes de coloc-lo em produo. Da mesma forma, projetistas de sistemas desenvolvem modelos para explorar idias e compreender melhor o design de um banco de dados. Os modelos ajudam a comunicar conceitos imaginados pelas pessoas. possvel us-los com os seguintes objetivos:

Comunicar Categorizar Descrever Especificar Investigar Desenvolver Analisar Imitar


O objetivo produzir um modelo que se adapte a vrios usos, possa ser compreendido por um usurio final e contenha detalhes suficientes para que um desenvolvedor crie um sistema de banco de dados. O projeto de um banco de dados pode ser decomposto em trs fases bsicas as quais denominamos modelo:

Modelo Conceitual; Modelo Lgico;

KORTH, H.F., SURDASHAN, S., SILBERSCHATZ, A., Sistema de Banco de Dados, Makron, 1999 1
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Modelo Fsico

Requisito de Dados

Modelo Conceitual

Esquema Conceitual

Modelo Lgico

Esquema Lgico

Modelo Fsico

Esquema Fsico

Figura 1.

1.1. Modelo Conceitual


A construo do Modelo Conceitual iniciada a partir da especificao dos requisitos e resulta no esquema conceitual do banco de dados, onde a semntica da realidade deve estar correta. Um esquema conceitual uma descrio em alto nvel da estrutura do banco de dados, independente do Sistema de Gerenciamento de Banco de Dados (SGBD) adotado para implement-lo. utilizado para descrever os esquemas conceituais. chamado de modelo de alto nvel, pois no est ligado (relacionado) a nenhum Banco de Dados. Sua verdadeira inteno promover o entendimento dos fatos de uma realidade (mundo) para ser representado e tratado em um BD. De acordo com Cougo2 o modelo conceitual pode ser definido como um modelo no qual os objetos, suas caractersticas e relacionamentos tm a representao fiel ao ambiente observado, independente de quaisquer limitaes impostas por tecnologias, tcnicas de implementao ou dispositivos fsicos.

COUGO, P., Modelagem Conceitual e Projeto de Bancos de Dados, Campus, 2000 2


Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Considerando o ciclo de vida de desenvolvimento de um sistema esta etapa pode ser considerada a fase de anlise dos dados (ou requisitos) capturados na etapa anterior (levantamento de dados). So analisados os fatos (entidades ou conjunto de ocorrncias de dados) de interesse e seus relacionamentos, juntamente com seus atributos (propriedades ou caractersticas) e construda uma notao grfica (abstrata, uma representao de alto nvel) para facilitar o entendimento dos dados e suas relaes, tanto para os analistas quanto para os futuros usurios.

1.1.1. Objetivos do Modelo Conceitual

Descrio das Informaes O objetivo do modelo conceitual descrever as informaes


contidas em uma realidade, as quais estaro armazenadas em um banco de dados.

Resultado real O resultado de um Modelo Conceitual um esquema que representa a


realidade das informaes existentes, assim como as estruturas de dados que representam essas informaes.

Independncia de Manipulao e Manuteno dos Dados No construdo com


consideraes procedurais, no existindo preocupao com as operaes de manipulao/manuteno dos dados.

Independncia do SGBD No retrata aspectos ligados abordagem do banco de dados que


ser utilizado e nem com as formas de acesso ou estruturas fsicas implementadas por um SGBD.

1.1.2. Caractersticas do Modelo Conceitual

Representao da Realidade Registra as necessidades de informao de uma realidade. Melhor Conhecimento do Sistema Permite que os analistas possam interagir melhor com os
usurios validando seus objetivos e metas permitindo a construo de um sistema de informaes cada vez mais prximo da realidade do usurio.

Inicia o projeto a primeira etapa do projeto de um sistema de aplicao em banco de


dados. A fase de projeto conceitual tida como uma das mais (seno a mais) delicadas em todo esse processo, pois depende muito da habilidade do projetista do banco de dados e das qualidades do modelo de dados adotado para a elaborao do esquema conceitual. A meta nessa fase obter um esquema conceitual do banco de dados que seja to completo e expressivo quanto possvel. Esse esquema deve procurar expressar o mximo da semntica envolvida na informao. Mecanismos de representao de alto nvel so empregados, tais como representao de hierarquias de subconjunto e de generalizao, representao de restries de cardinalidade e de atributos compostos e multivalorados. O esquema conceitual deve permanecer como uma parte da documentao do processo de projeto, sendo utilizado durante a operao e manuteno do banco de dados, pois facilita o entendimento dos esquemas de dados e das aplicaes que os utilizam. Para auxiliar o projetista a elaborar o projeto conceitual de um banco de dados existem as abstraes de dados, que apresentam as vantagens:

ajudam o projetista a entender, classificar e modelar a realidade,


3
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

melhoram a eficincia de implementaes subseqentes, permitem melhor representar a semntica das novas aplicaes de banco de dados,
provenientes de reas no tradicionais.

1.1.3. O Modelo Conceitual propicia

Melhor compreenso pelo usurio leigo: Um modelo conceitual normalmente uma


representao grfica de fatos e relaes do mundo real. Assim sendo, a compreenso destes conceitos facilitada, se exposta graficamente. O usurio leigo, para o qual o BD ser desenvolvido, tem melhores condies de criticar o projeto feito e interagir no projeto.

Independncia de detalhes de implementao: Um modelo conceitual no vinculado a


nenhum modelo de dados de BD, ou seja, no apresenta detalhes de estruturao de dados que s precisam ser considerados no momento da criao do esquema em um SGBD. Assim, modificaes nesta etapa do projeto so menos comprometedoras do que nas etapas seguintes. Inclusive, recomendado que se critique bastante o modelo conceitual, para evitar mudanas depois.

Traduo para qualquer modelo de dados de BD: Um modelo conceitual pode ser
mapeado para qualquer modelo de BD, desde que se saibam as regras para realizar tal tarefa. Isto facilita o upgrade do BD (por exemplo, migrao de um SGBD relacional para um SGBD orientado a objetos), uma vez que no preciso repensar do zero a nova organizao lgica que os dados tero no novo modelo de dados.

Ferramenta indispensvel para o processo de engenharia reversa de BD: O upgrade (ou


migrao) de um esquema implementado em um certo modelo de dados de BD para outro exige a realizao de um processo chamado engenharia reversa. O objetivo deste processo justamente obter o modelo conceitual a partir de um modelo lgico (projeto de BD ao contrrio), para que possa ento ocorrer o upgrade, como comentado na vantagem anterior.

Maior estabilidade frente a mudanas a nvel de implementao: O modelo conceitual, por


ser um modelo de alto nvel (semntico), tem menor probabilidade de ser afetado quando ocorrem mudanas a nvel de implementao, realizadas no SGBD, como por exemplo, definir ndices para aumentar a performance, tornar o BD distribudo, utilizar estratgias de clusterizao para agilizar consultas, etc. s vezes, mesmo modificaes, por exemplo, em tabelas de um BD relacional, no inviabilizam o modelo conceitual, uma vez que as regras de mapeamento para um modelo lgico admitem algumas variaes, como por exemplo, o fato de um relacionamento 1:1 com parcialidade gerar ou no uma tabela para o relacionamento.

Mais adequado para o exerccio da criatividade: Um modelo conceitual na verdade uma


ferramenta que admite diversas alternativas de soluo para a interpretao de uma realidade, dependendo de quem est modelando. interessante que uma modelagem conceitual seja realizada por diversos analistas e comparada entre eles, para se determinar qual delas a mais clara, ou seja, captura melhor a semntica da realidade.

4
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

1.1.4. Exemplo de Modelagem Conceitual

Filme

nome data copyright duracao custo id: nome data id: copyright
produzido-por 1-1 producao

s1/1 Ator Paticipacao personagem cache atua 1-N

tem-atuacao 1-N

nome_arstistico nac idade sexo tipo_papel [0-3]


id: nome_artistico

tem-direcao-de 1-1 Diretor direcao dirige 0-N

produz 0-N Estudio nome dono fundacao faturamento id: nome Figura 2.

nome nacionalidade premio [1-N] festival ano nome_premio

Obs.: Notao ER da ferramenta DB Main

q Explicao do Exemplo
O modelo retrata o estudo de caso de uma produtora de filmes.

Um filme tem a atuao de vrios atores; Um filme dirigido por um Diretor; Um estdio pode produzir vrios filmes;
Perceba que em nenhum momento este modelo relata tipo de dados ou fica preso a qualquer restrio de sistema. No caso apresentado ele demonstra as relaes existentes entre cada objeto importante dentro da produtora de filmes e caracteriza cada um desses objetos com as informaes existentes na realidade da situao.

1.2. Modelo Lgico


O Modelo Lgico inicia-se a partir do esquema conceitual e resulta no esquema lgico. Um esquema lgico uma descrio da estrutura do banco de dados que pode ser processada por
5
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

um SGBD. Nesta etapa, o desenvolvimento do Banco de Dados comea a se voltar para o ambiente de implementao, uma vez que feita a converso do modelo conceitual para um modelo de dados de um Banco de Dados. Os modelos lgicos podem ser construdos de acordo com a abordagem: relacional, em redes, hierrquico ou Orientada a Objetos. O projeto lgico depende da abordagem do modelo de dados usado pelo SGBD, mas no do SGBD especfico usado. De acordo com Cougo3 o modelo lgico aquele em que os objetos, suas caractersticas e relacionamentos tm a representao de acordo com as regras e limitantes impostos por algum tipo de tecnologia, mas essa representao independente dos dispositivos ou meios de armazenamento fsico e das estrutura de dados por ela definidos. Na abordagem relacional esta etapa se baseia no uso de regras de mapeamento de um modelo ER para o modelo de dados escolhido. O resultado uma estrutura lgica, como um conjunto de tabelas relacionadas. Considerando o ciclo de vida de desenvolvimento de sistemas est associado fase de projeto. Os modelos lgicos podem ser baseados em objetos ou baseados em registros.

Modelos lgicos baseados em objetos: Descrio dos dados nos nveis conceitual e de
vises de usurios. Exemplos: Entidade-relacionamento, orientado a objetos.

Modelos lgicos baseados em registros: Descrio dos dados nos nveis conceitual e de
vises de usurios; o banco de dados estruturado em registros de formatos fixos, de diversos tipos; cada tipo de registro tem sua coleo de atributos; h linguagens para expressar consultas e atualizaes no banco de dados. Exemplos: Relacional, Rede, Hierrquico. No modelo relacional, dados e relacionamentos entre dados so representados por tabelas, cada uma com suas colunas especficas.

Funcionrio Cdigo do Funcionario Dependente Cdigo do Dependente

Nome do Funcionrio Endereo do Funcionrio Telefone do Funcionrio Salrio do Funcionrio Cargo do Funcionrio Data de Admisso do Funcionrio Data de Nascimento do Funcionrio Observaes do Funcionrio

Nome do Dependente Data de Nascimento do Dependente Grau de Parentesco do Dependente Cdigo do Funcionrio (FK)

Figura 3.

COUGO, P., Modelagem Conceitual e Projeto de Bancos de Dados, Campus, 2000 6


Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

1.3. Modelo Fsico


Esta ltima etapa realizada a adequao do modelo lgico ao formato de representao de dados do SGBD escolhido para a implementao. O Modelo Fsico inicia-se a partir do esquema lgico e resulta no esquema fsico. Um esquema fsico uma descrio da implementao do banco de dados; ele descreve as estruturas de armazenamento e mtodos de acesso usado para efetivamente realizar o acesso aos dados. O projeto fsico direcionado para um SGBD especfico. Decises tomadas durante o projeto fsico, para melhorar o desempenho, podem afetar a estrutura do esquema lgico. O esquema fsico do banco de dados influenciado pelas fases por que passou a construo do banco de dados. De acordo com Cougo4 o modelo fsico de dados aquele em que a representao dos objetos feita sob o foco do nvel fsico de implementao das ocorrncia, ou instncias das entidades e seus relacionamentos. Considerando o ciclo de vida de desenvolvimento de um sistema esta etapa est associada a etapa de implementao (codificao ou desenvolvimento). Para a realizao desta etapa, deve-se conhecer a linguagem para descrio e controle 5 do Sistema Gerenciador de banco de dados para realizar a descrio do modelo lgico. O resultado a especificao do esquema da aplicao, juntamente com a implementao de restries de integridade e vises.

Funcionrio

cd_funcionario:NUMBER(10) nm_funcionario:VARCHAR2(40) nm_endereco_funcionario:VARCHAR2(40) nr_telefone_funcionario:VARCHAR2(20) vl_salario_funcionario:NUMBER(13,2) nm_cargo_funcionario:VARCHAR2(40) dt_admissao_funcionario:DATE dt_nascimento_funcionario:DATE ds_funcionario:VARCHAR2(4000)


Dependente

cd_dependente:NUMBER(3) nm_dependente:VARCHAR2(40) dt_nascimento_dependente:DATE nm_parentesco_dependente:VARCHAR2(20) cd_funcionario: NUMBER(10)

Figura 4.

Nesta etapa tambm necessrio conhecimento sobre a Linguagem de Manipulao de Dados (DML), pois por meio dela que ser possvel o acesso e manipulao dos dados organizados pelo modelo de dados apropriado e sobre gerenciamento de transaes. Uma transao uma coleo de operaes que realizam uma nica ao lgica na aplicao do banco de dados. A gerncia de transaes assegura que o banco de dados permanea em um estado consistente (correto) a despeito de falhas no sistema (ex.: quedas de energia, e crashes do sistema operacional) e falhas de transaes.

4 5

COUGO, P., Modelagem Conceitual e Projeto de Bancos de Dados, Campus, 2000 A linguagem de Definio de dados (DDL) uma notao de especificao para definio do esquema do banco de dados. O compilador da DDL gera um conjunto de tabelas armazenadas em um dicionrio de dados. A estrutura de armazenamento e mtodos de acesso usados pelo sistema de banco de dados so especificados. 7
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

A gerncia de controle de concorrncia controla as interaes atravs de transaes concorrentes, para assegurar a consistncia do banco de dados.

1.3.1. O que acontece na Converso do Modelo Lgico para o Modelo Fsico? A especificao de campos, ou seja, o modelo lgico est mais perto do usurio e o modelo fsico vai ficar bem mais prximo da mquina. Os campos so a base do banco de dados. Eles representam caractersticas dos assuntos que so importantes para a organizao. Eles armazenam os dados que so recuperados e depois apresentados como informaes informaes que so vitais para as operaes dirias, para o sucesso e para o futuro crescimento da organizao. Eles so os bem mais ignorados, subutilizados e freqentemente negligenciados da organizao! Freqentemente, pouco ou nenhum tempo gasto para se garantir a integridade estrutural e lgica /dos campos do banco de dados. A especificao de campos muito importante por inmeras razes, dentre elas podemos citar:

A integridade em nvel de campo estabelecida e imposta como resultado da definio de


Especificao de Campo

A definio de especificao de campo para cada campo melhora a integridade dos dados. A definio de Especificaes de Campo o impulsiona a adquirir um entendimento completo da
natureza e propsito dos dados do banco de dados.

q Elementos de Campo Ideal


Ele representa uma caracterstica do assunto da tabela; Ele contm apenas um valor; Ele no pode ser dividido em componentes menores; Ele no contm um valor calculado ou concatenado; Ele nico dentro da estrutura inteira do banco de dados; Ele mantm todas as suas caractersticas, caso aparea em mais de uma tabela.

As especificaes de campo compreendem vrios elementos que so usados para definir cada atributo de um campo. Esses elementos so divididos em trs categorias: Elementos Gerais, Elementos Fsicos e Elementos Lgicos. H uma quarta categoria separada: Informaes de Especificao. Agrupar os elementos dessa maneira torna-os mais fceis de encontrar. Isso tambm permite que voc focalize um aspecto especfico do campo para o qual voc est definindo a Especificao de Campo. Os itens encontrados dentro de cada categoria so:

Elementos Gerais: Nome de campo, tabela de origem, rtulo, compartilhado por, alias (um ou
mais), descrio.

Elementos Fsicos: Tipo de Dados, suporte de caracteres, comprimento, casas decimais,


mscara de entrada, formato de exibio.

8
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Elementos Lgicos: Tipo de Chave, exclusividade, valor obrigatrio, suporte a nulo, regra de
edio, comparaes permitidas, operaes permitidas, valores introduzidos por valor padro, intervalo de valores.

Informaes de Especificao: Tipo de especificao, baseadas em especificao existente,


especificao de origem.

2. Modelos de Banco de Dados

2.1. Modelo Hierrquico de Banco de Dados


O modelo de banco de dados hierrquico funcionou muito bem com os sistemas de armazenamento em fita, usado pelos computadores nos anos 70 e foi muito popular nas companhias que usavam este sistema. Apesar de o modelo hierrquico oferecer acesso rpido e direto aos dados e ter sido um modelo de grande utilidade em numerosas circunstncias, era clara a necessidade de ser ter um novo modelo que resolvesse os problemas de dados redundantes e relacionamentos complexos de dados. A prpria IBM6 nos informa que a linguagem de dados da IBM DL/I-(Data Languagem/I) constitui um relevante exemplo de gerenciamento de banco de dados, cujo mtodo utilizado o modelo hierrquico. Onde esta linguagem faz parte em banco de dados de seu sistema de gerenciamento de informaes (IMS - Information Management System) e sistema de controle de informaes sobre o cliente (CICS - Custemar Information Control System). Descreve uma Hierarquia como um conjunto de registros interligados, isto , em cada um h um tipo de registro PAI, exceto a Raiz. Numa Hierarquia, o acesso aos dados utilizado atravs de segmento Raiz, quando um campo escolhido como campo-chave e os outros so baseados em ndice ou acesso aleatrio.

Nome

Sobrenome

Rua cliente

Conta

Saldo conta

Campo-chave conta

Campo-chave cliente

Figura 5. Diagrama de estrutura de rvore com campo-chave.

No modelo hierrquico o os dados so armazenados em registros organizados hierarquicamente como rvores. Os registros so conjuntos de campos conectados uns aos outros por meio de um link, onde cada link deve relacionar apenas dois registros.

IBM Training Center, Fundamentos de Bancos de Dados, 1989. 9


Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Ins

Coel

Vergueiro

Ana

Knor

Laguna

Vera Henfil

Correio

0933

4000

1024

3280

0020

6000

1963

4000

Figura 6. Exemplo de Modelo Hierrquico.

Na Figura 5. Exemplo de Banco de Dados Hierrquico: h dois tipos de registros, Cliente e Conta. O registro Cliente composto por trs campos: Nome, Sobrenome e Rua. O registro Conta composto por dois campos: Nmero da Conta e Saldo. Podemos ver que o cliente Ins tem a conta 0933, o cliente Ana tem as contas 1024 e 0020 e o cliente Vera tem a conta 1963. O conjunto de todos os registros de clientes e de contas organizado na forma de uma raiz, em que a raiz da rvore um n vazio (dummy). Como podemos ver, um banco de dados hierrquico uma coleo do tipo de rvores com raiz e, por isso, forma uma floresta. Podemos nos referir a cada uma dessas rvores com raiz como sendo uma rvore de banco de dados 7. O modelo hierrquico acessa os dados rapidamente por trabalhar com ponteiros, mas sua estrutura em rvore pode levar a redundncia de dados e isso, eventualmente, pode resultar em dados inconsistentes quando ocorrer uma atualizao, sem contar com o desperdcio inevitvel de espao. O acesso aos dados s pode ser feito atravs de programas desenvolvidos por especialistas. DICA: Para saber mais sobre bancos de dados hierrquicos consulte
http://www.cs.yale.edu/homes/avi/db-book/b.pdf

2.2. Modelo Banco de Dados em Rede


A primeira especificao-padro de banco de dados, chamada de relatrio CODSYL 8 DBTG 1971, foi escrita no final da dcada de 1960 pelo Database Task Group. Vrios sistemas de gerenciamento de banco de dados se baseiam nesse modelo de rede que ficou conhecido apenas como modelo CODASYL. Uma rede , essencialmente, um conjunto ilimitado de ns (tipos de registros neste caso) e de ramais de ligao, ou bordas. Na verdade, uma hierarquia (visto no tpico anterior) apenas um tipo particular de rede. Uma rede no apresenta o conceito de n raiz e os registros podem ter diversos tipos de registros-pais, assim como diversos tipos de registros-filhos.

7 8

Silberschatz, Abraham; Korth, Hary F. e Sudashan, S., Sistema de Banco de Dados, Editora Makron Books, 1999 CODASYL: Conferncia Sobre Linguagem de Sistemas de Dados (Conference on Data Sistems Languages).

10
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Abaixo temos um modelo de um banco de dados em rede mostrando detalhadamente.

Ins Coel

Vergueiro

0933

4000,00

1024 Ana Knor Laguna 0020

3280,00

6000,00

Vera

Henfil

Correio

1963

4000,00

Figura 7. Exemplo de Modelo de Rede.

Na Figura 7. Exemplo de modelo de rede podemos ver que o cliente Ins possui a conta 0933, o cliente Ana possui as contas 1024 e 0020 e o cliente Vera possui a conta 1963. Funcionalmente os modelos de rede e hierquico possuem muitas semelhanas. Tal como no modelo hierrquico os registros so interligados por ponteiros e as linhas entre os registros (tambm conhecidos como ramais) representam relacionamentos um-para-muitos. Outras semelhanas com o modelo hierrquico persistem, por exemplo, ambos precisam usar de artifcios para implementar uma relao muitos-para-muitos; no modelo de rede foi criado um registro especial chamado de ligao para implementar esse relacionamento. No modelo hierrquico esse registro especial chamado de registro virtual. importante lembrar que ambos os sistemas-hierrquicos e de rede so chamados de sistemas de navegao j que, nos dois casos, os programadores precisam atravessar um conjunto de registros pr-articulados (pr-interligados). Sabe-se que esta pr-articulao representa um benefcio em termos de desempenho, embora seja restrita em termos da complexibilidade do processo do projeto e das modificaes posteriores ao projeto. O modelo Banco de Dados em rede foi criado na tentativa de resolver alguns problemas do modelo hierrquico. O modelo em rede tambm pode ser representado como uma rvore invertida. Entretanto, podem existir inmeras rvores invertidas compartilhando galhos, que so parte de uma mesma estrutura de bando de dados. Os relacionamentos num modelo em rede so estabelecidos e representados por uma estrutura de conjunto. Uma estrutura de conjunto uma construo transparente que relaciona duas tabelas ao mesmo tempo, usando uma tabela como proprietria e outra como membro. Estruturas de conjunto suportam relacionamentos um-para-muitos, o que significa que numa estrutura de conjunto, um registro numa tabela proprietria pode ser associado a vrios registros na tabela-membro, mas um nico registro da tabela-membro est relacionado a um s registro na tabela-proprietria. Um registro da tabela-membro tambm no pode existir sem que ele esteja relacionado com um registro existente na tabela-proprietria. Por exemplo, uma conta-corrente deve ser associada a um cliente, apesar de poder existir um cliente sem conta-corrente 9.

Silberschatz, Abraham; Korth, Hary F. e Sudashan, S., Sistema de Banco de Dados, Editora Makron Books, 1999 11
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Cliente

Tabela - Proprietria

Deposita

Estrutura de Conjunto

Conta/Corrente
Figura 8. Exemplo de Estrutura de Conjunto.

Tabela - Membro

Na figura 8. Exemplo de Estrutura de Conjunto um cliente pode depositar em uma ou mais de suas contas correntes. No modelo em rede os dados podem ser acessados rapidamente, o que uma das vantagens deste modelo. O usurio pode elaborar consultas mais complexas no modelo em rede do que no modelo hierrquico. Como no modelo hierrquico o usurio deve estar familiarizado com a estrutura do banco de dados para poder trabalhar atravs das estruturas de conjunto. Na figura 8, por exemplo, obrigatrio que o usurio esteja familiarizado com as estruturas de conjunto para que ele possa descobrir se uma apresentao especfica foi paga. Tambm, no fcil mudar a estrutura do banco de dados sem afetar as aplicaes do programa que interagem com ele. Os relacionamentos so definidos como estruturas de conjunto, uma estrutura de conjunto no pode ser mudada sem afetar as aplicaes do programa, pois so usadas pela aplicao para navegar pelos dados. Se uma estrutura de conjunto mudada, todas as referncias usadas nas aplicaes daquela estrutura devero ser alteradas. DICA: Para saber mais sobre bancos de dados em rede consulte: http://www.cs.yale.edu/homes/avi/db-book/a.pdf

2.3. Modelo Relacional10


Nos anos 60, Dr. E.F. Codd, um pesquisador cientista da IBM, estava procurando novas maneiras de lidar com grandes volumes de dados. Insatisfeito com os modelos e produtos de banco de dados daquele tempo, ele teve a idia de que aplicando disciplinas e estruturas matemticas na administrao de dados, ajudaria a resolver muitos dos problemas encontrados nos outros modelos de banco de dados, tais como: redundncia de dados, grande dependncia fsica na implementao e falha na integridade de dados. Em 1970 o Dr. Codd apresentou o seu trabalho, agora patenteado, Um Modelo Relacional de Dados para Grandes Bancos de Dados Compartilhados. Neste trabalho ele primeiramente apresenta o modelo relacional de banco de dados. Este modelo se baseou em duas vertentes da matemtica teoria dos conjuntos e lgica de predicado de primeira ordem. Na verdade o modelo relacional deriva seu nome do termo relao, que uma parte da teoria dos conjuntos.

10

O modelo de banco de dados relacional ser estudado em detalhes ao longo dos captulos seguintes.

12
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Em um modelo relacional, os dados so armazenados em relaes, que so percebidas pelo usurio como sendo tabelas. Cada relao composta de tuplas ou registros e atributos ou campos. A ordem fsica em que os registros encontram-se numa tabela totalmente arbitrria. Cada registro de uma tabela identificado por um campo que contm valores nicos. Essas duas caractersticas do modelo relacional permitem que os dados existam, independente da forma como eles foram fisicamente armazenados. Ento, o usurio no precisa saber o local fsico de um registro para poder trabalhar com ele. Por este lado, o modelo relacional diferente do modelo hierrquico e do de rede, pois nestes modelos era imprescindvel que o usurio conhecesse o desenho da estrutura para que pudesse usar os seus dados.

Cliente

Conta

Emprstimo

Figura 9. Exemplo de modelo relacional.

Na figura 9. Exemplo de modelo relacional, um cliente pode ter uma ou mais contas correntes. Emprstimos podem ser depositados em sua conta corrente. Esse mesmo cliente pode fazer pagamento do emprstimo atravs de depsito em conta corrente. Uma das principais caractersticas do modelo relacional a possibilidade de relacionar vrias tabelas para evitar a redundncia no armazenamento de dados. Os relacionamentos no modelo relacional podem ser um-para-um, um-para-muitos e muitos-para-muitos. Duas tabelas (A e B) estaro conectadas quando uma delas (A, por exemplo) tiver um campo de compartilhamento que poder ser plenamente usado em outra (B) para diminuir redundncia de dados nas inseres de registros e facilitar futuras buscas e/ou pesquisas. Logo vrias tabelas podem estar compartilhando um mesmo campo de uma determinada tabela. A partir do momento em que o usurio esteja familiarizado com os relacionamentos entre as tabelas do banco de dados, ele pode acessar os dados de inmeras formas diferentes. Ele pode acessar os dados de tabelas que estejam diretamente conectadas, como de tabelas que estejam indiretamente conectadas. No exemplo a seguir, apesar da tabela Cliente estar indiretamente conectada a tabela de Emprstimo, o usurio pode gerar uma listagem de emprstimos por cliente ou por conta. O usurio pode facilmente fazer isso, porque a tabela de Emprstimos est diretamente conectada tabela de Conta.

13
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Cliente
Identificao do Cliente 100 101 102 Prenome do Cliente Ins Ana Vera Sobrenome do Cliente Coel Knor Henfil Data da Contratao 21/10/02 12/01/01 15/02/99

Conta
Identificao da Conta 0933 1024 0020 1963 Identificao do Cliente 100 101 101 102 Saldo 4000,00 3280,00 6000,00 4000,00 B26 Cdigo Emprstimo A15

Tabela 1.

2.3.1. Vantagens do Modelo Relacional

Construo de Nveis Mltiplos de Integridade: A integridade dos dados neste modelo


construda em nvel de campo para assegurar a acuracidade dos dados; em nvel de tabela para assegurar que os registros no esto duplicados e para detectar se esto faltando valores na chave-primria; em nvel de relacionamentos para assegurar que o relacionamento entre duas tabelas vlido, e em nvel do negcio, propriamente dito, para assegurar que os dados esto acurados de acordo com o negcio.

Independncia Fsica e Lgica da Aplicao do Banco de Dados: Nem as mudanas


efetuadas pelo usurio no projeto lgico do banco de dados, tampouco as mudanas fsicas de implementao do banco de dados feitas pelos fabricantes de software iro prejudicar as aplicaes nele construdas.

Garantia da Consistncia e Acuracidade dos Dados: Os dados so acurados e


consistentes graas aos vrios nveis de integridade que voc pode impor ao banco de dados.

Fcil Armazenamento de Dados: Ao comando do usurio, os dados podem ser


armazenados numa tabela ou em vrias tabelas do banco de dados.

14
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

2.4. Modelo Orientado a Objetos11


A tcnica de modelagem orientada a objetos normalmente empregada nos casos onde os dados envolvidos na aplicao apresentam uma estrutura complexa. A principal diferena entre os modelos de dados relacional, hierrquico e em redes e os modelos de dados orientados a objetos est na maneira como os dados so tratados. A meta dos bancos de dados orientados a objetos manter a correspondncia direta entre os objetos do mundo real e os do banco de dados, isso implica que podemos identificar e manipular os objetos como um todo. Representar um objeto complexo no modelo relacional significa que o objeto tem que ser subdividido em um grande nmero de linhas ou tuplas, o que leva necessidade de realizar um considervel nmero de operaes de juno para recuperar o objeto. Nos modelos de dados tradicionais os dados so vistos como uma coleo de tipos de registros ou de relaes, cada qual tendo uma coleo de registros, linhas ou tuplas armazenadas em um banco de dados. Em um modelo de dados orientado a objetos um banco de dados considerado como uma coleo de objetos do mundo real. Os bancos de dados orientados a objetos foram propostos para dar suporte s necessidades de aplicaes mais complexas, como aquelas que exigem transaes mais longas, textos longos e armazenamento de imagens. Muitos dos conceitos das Linguagens de Programao Orientadas a Objetos (LPOO) so utilizados nos Banco de Dados Orientados a Objetos (BDOO) apesar de estes necessitarem de conceitos prprios. Por exemplo, os objetos nas LPOO so transitrios, isto , s existem durante a execuo do programa enquanto que nos BDOO os objetos so persistentes, isto , a existncia de um objeto pode ser estendida de modo que sejam armazenados permanentemente. Vejamos mais alguns dos principais conceitos envolvidos com BDOO:

Mtodos: Os objetos nos SGBDOOs so manipulados atravs de mtodos. Em geral, a


definio de um mtodo consiste de assinatura e corpo. A assinatura especifica o nome do mtodo, os nomes e classes dos argumentos e a classe do resultado, se existir. O corpo representa a implementao do mtodo e consiste de um conjunto de instrues expressas em uma dada linguagem de programao.

Tipos e Classes: Um tipo modela as caractersticas comuns de um conjunto de objetos e


corresponde noo de tipos abstratos de dados. Uma classe um conjunto de objetos que tem exatamente a mesma estrutura interna, i., os mesmos atributos e mesmos mtodos. Os modelos de dados orientados a objetos usam o conceito de classe como uma base para instanciao.

Herana: um mecanismo de reusabilidade muito poderoso. Com herana, uma classe


chamada uma subclasse pode ser definida com base na definio de outra classe chamada a superclasse. A subclasse herda os atributos, mtodos e mensagens de sua superclasse e pode ter atributos especficos, mtodos e mensagens adicionais.

Polimorfismo: Os SGBDOOs oferecem o recurso de polimorfismo de operaes, tambm


conhecido como sobrecarga de operador (overloading). Outros conceitos relacionados com o polimorfismo so os de late binding (ligao tardia) e overriding (redefinio de operao).

11

Modelagem de sistemas complexos ser visto com mais detalhes em captulo especfico ao tema 15
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Valores: A maioria dos SGBDOOs representam as entidades primitivas, tais como inteiros ou
caracteres, por valores (no possuem OIDs), enquanto as entidades no primitivas so representadas como objetos.

Estrutura do objeto: O valor de cada atributo de um objeto pode ser:

atmico: integer, real, character, booleano, etc. 12 complexo: definido atravs de construtores: array, table, UDT .
Encapsulamento: A cada objeto est associado sua estrutura e seu comportamento (os
mtodos ou operaes). O comportamento armazenado no banco de dados junto com a estrutura do objeto.

Objetos e Identidade: Cada entidade do mundo real modelada como um objeto.


A cada objeto associado um estado e um comportamento: o estado representado pelos valores dos atributos do objeto; o comportamento definido pelos mtodos que agem sobre o estado do objeto pela invocao de operaes. A cada objeto armazenado no banco de dados associado um identificador nico ( OID: Object Identifier), que gerado pelo SGBDOO (sistema de gerenciamento de banco de dados orientado a objetos)

OIDs x Chaves Primrias


Nos modelos orientados a objetos no existe o conceito de chave primria como acontece no modelo relacional. Ao invs disso, existem os OIDs dos objetos que, como j dito, so criados e mantidos pelo sistema de gerenciamento de banco de dados e no so de acesso do usurio. As vantagens do uso de OIDs com relao s chaves so:

os programadores de aplicaes no precisam se preocupar com a seleo de chaves para as


vrias classes de objetos;

obtm-se melhor desempenho, pois os OIDs so implementados em baixo nvel pelo sistema; embora as chaves sejam mais significativas ao usurio, muitas vezes o usurio precisa usar
cdigos artificiais, sem significado semntico, para poder identificar as tuplas de uma relao.

12

UDT - User Defined Type. Tipo de dado definido pelo usurio. Caso necessrio possvel criar tipos de dados diferentes do tipos de dados padro do BD. Ex: litro, pneu, galo, permetro.

16
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

3. Modelo Entidade Relacionamento (MER)

3.1. Conceitos Bsicos


Neste captulo sero apresentados de maneira simplificada os conceitos bsicos que sero utilizados e detalhados ao longo do curso.

3.2. Dados e Informaes


Os dados existem fisicamente e precisam de um contexto para adquirir algum significado. So estticos, isto , permanecem no mesmo estado at que sejam modificados por um processo manual ou automtico.

Mellanzone

55

03909-70

22,00

Mesozica

Isoladamente estes dados no tm nenhum sentido. O que Mellanzone? Ser o nome de uma pessoa, de um supermercado ou de uma pizza? E 55? um cdigo? Uma soma? Uma nota? Os dados tornam-se informaes quando so associados a um contexto e transmitem significados lgicos s pessoas.

Nome da Pizza Mellanzone


Tabela 2.

Ingredientes 55

Cdigo Pizza 03909-70

Preo da Pizza 22,00

Apelido da Pizza Mesozica

3.2.1. Qual a diferena entre Dado e Informao? Se lhe dissermos que a temperatura ambiente est em 28C ou que estamos viajando a 140km/hora, voc estar recebendo dados ou informaes? Mas se agora lhe dissermos que a temperatura ambiente de 82F ou que estamos viajando a 87 milhas/hora? Qual a sua resposta? Os dados 28C e 140 km/hora so rapidamente convertidos em sensaes trmicas e de velocidade (informao) porque voc compreende essas unidades de medida. Mas se voc no teve uma formao anglo-saxnica, 82F ou 87 milhas/hora no lhe fornecem a exata sensao de frio ou calor, ou de velocidade baixa ou alta. Vejamos mais um exemplo. Encontramos uma pessoa de 5 ps e 10 polegadas de altura que colocou 16 gales de combustvel no seu carro, pois iria viajar para uma cidade a 100 milhas de distncia, com 100 francos no bolso. Temos certeza de que voc no conseguiu transformar todos os dados embutidos na frase em informaes. Mas se lhe dissssemos que encontramos uma pessoa de 1,78m de altura que colocou 61 litros de combustvel no seu carro, pois iria viajar

17
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

para uma cidade a 161 km de distncia com R$ 100,00 no bolso, voc certamente compreenderia melhor. A informao existe quando o crebro humano recebe um conjunto de dados e os utiliza como entrada para algum tipo de processamento neural. Se no houver esse processamento neural, o dado no se transforma em informao; continua sendo dado. A informao a compreenso do dado, matria-prima para atividade cerebral. Se algum conversa em russo, grego ou chins conosco, recebemos dados, mas se no conhecermos o idioma (protocolo de comunicao) no podemos traduzir os dados em informaes. Ficamos parados sem ao. Sem dados e um mecanismo (processo) de compreenso desses dados, no existe o exerccio cerebral.

Informao versus Dado Informao Idade: 35 anos Quente Longe


Tabela 3.

Dado Data do Nascimento: 16/07/61 Medio x Mtrica de Temperatura = 38 C Medio x Mtrica de Distncia = 10.000

O Dado to importante ao ser humano que permanecemos 24 horas por dia com nossos sensores ligados ou de prontido! Para nossos propsitos de modelagem, estaremos estudando as informaes que queremos ou precisamos para transform-las em dados. Nosso objetivo obteno de um modelo de dados onde no exista informao. Declarao estranha para um observador casual, mas um modelo de dados, conforme o prprio nome sugere, deve conter dados, e no informaes. Suponha que venhamos a armazenar a informao idade de uma pessoa em vez do dado data de nascimento. Daqui a alguns anos, as pessoas cujas informaes (e no dados) esto armazenadas conosco continuaro a apresentar a mesma idade de hoje, pois, evidente, armazenado 35 anos de idade hoje, tal informao ser a mesma com o passar do tempo! Mas armazenando-se a data de nascimento, digamos, 21/12/1960, podemos saber com preciso e em qualquer ponto da rgua do tempo a informao da idade da pessoa. A concluso que armazenando informao perdemos informaes. Na vida real, verifica-se freqentemente o armazenamento de informaes, e no de dados, por motivos de limitaes tcnicas do processamento de dado em larga escala. Caso tpico o dos correntistas de bancos que fazem ao longo de suas vidas, como clientes, uma infinidade de transaes de crdito e dbito em suas contas correntes, sendo estes os dados bsicos resultantes que devem ser armazenados. Todavia, se quisermos obter o saldo atual das contas, teramos de promover as somas e subtraes de todos os movimentos, o que seria impraticvel do ponto de vista de carga de processamento e tempo de resposta. Portanto, a soluo tcnica mais vivel armazenar os saldos dos correntistas (saldo uma informao) em uma dada posio de tempo, no muito distante da atual fazendo-se os clculos aritmticos com os dados mais recentes para se obter a ltima posio de saldo. Essa situao aceitvel, uma vez que no h outra forma mais eficaz de contornar o problema, restando-nos apenas a preocupao de manter a informao armazenada consistente com os movimentos realizados, se ocorrer um lanamento retroativo data do saldo, este ltimo dever ser ajustado automaticamente. Tais
18
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

limitaes tcnicas tm conduzido criao de bases de informaes, como o caso das bases de dados executivas. Vemos a utilizao de bases de informaes apenas como um artifcio tcnico que no deve representar a base de dados principal de uma organizao.

3.3. Entidade
Uma entidade13 ou classe de entidade uma representao abstrata de coisas semelhantes, concretas ou abstratas, que existem no mundo real, sobre a qual um sistema de informao captura, armazena e processa dados para cumprir seus objetivos na empresa, atendendo, assim, s necessidades de seus usurios. Para Korth14 uma entidade uma coisa ou objeto no mundo real que pode ser identificada de forma unvoca em relao a todos os outros objetos. Por exemplo, um aluno uma entidade que tem um conjunto de propriedades (dados), dentre elas o nmero do registro acadmico, que deve ser um valor nico capaz de identificar cada ocorrncia desta entidade. Cada ocorrncia15 de uma entidade um conjunto de propriedades (atributos)16 que identificam, qualificam ou quantificam esta entidade, por exemplo a entidade aluno tem como atributos nome, registro acadmico, data de nascimento, entre outros. Estas ocorrncias devem satisfazer duas regras bsicas:

Todas as coisas do mundo real que compem o conjunto - suas ocorrncias - devem ter as
mesmas caractersticas;

Todas as ocorrncias devem estar sujeitas e em conformidade com as mesmas normas.

3.4. Atributos
Cada entidade tem propriedades particulares, chamadas atributos, estas propriedades podem identificar, qualificar ou quantificar a entidade. Em outras palavras os atributos descrevem as entidades. Por exemplo, uma entidade empregado pode ser descrita pelo seu nome, o trabalho que realiza, data de nascimento, endereo e salrio. Cada ocorrncia de uma entidade ter um valor para cada um de seus atributos. Os valores de atributos que descrevem cada entidade ocupam a maior parte dos dados armazenados na base de dados. A figura 10. ilustra duas entidades com seus atributos.

13 14

As entidades so representadas por tabelas na etapa de implementao do Banco. Silberschatz, A; Korth, H. R. e Sudarshan, S. Sistemas de Bancos de dados. So Paulo: Makroon Books, 1999 15 Uma ocorrncia o mesmo que um registro. 16 Um atributo representado em uma tabela por um campo. O campo a menor estrutura de armazenamento de dados em um banco de dados relacional 19
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Nome = Joo da Silva Nome = Cooper Sugar Endereo = Rua Gois 711, So Paulo, SP - 1301100 Idade = 55
Presidente = Joo da Silva

e1

c1

Sede = Ribeiro Preto

Telefone residencial = 713-749 Figura 10. Exemplo de duas entidades (e1 e c1) com seus atributos.

A entidade EMPREGADO e1 tem quatro atributos: Nome, Endereo, Idade e Telefone residencial. Os seus valores (dados) so: Joo da Silva, Rua Gois 711, So Paulo, SP, 1301100, 55 e 713-749, respectivamente. A entidade companhia c1 tem trs atributos: Nome, Sede e Presidente. Seus valores (dados) so: Cooper Sugar, Ribeiro Preto, Joo da Silva. Ateno:

Os atributos de uma entidade permanecem constantes para todos os seus relacionamentos. Os atributos de uma entidade so independentes de todas as demais entidades

3.5. Chaves
Chave Primria: um campo ou um conjunto de campos que identifica unicamente cada
registro da tabela, sendo assim, um registro no pode conter, neste campo, um dado que j esteja armazenado em outro registro. Exemplo: No contexto de um sistema de controle acadmico o nmero de matricula de uma entidade aluno um atributo identificador j que identifica de forma nica um aluno dentro de uma faculdade.

Chave Estrangeira: um campo ou conjunto de campos usado para estabelecer um


relacionamento entre duas tabelas. Na tabela de origem deve ser chave primria.

Chave Secundria (Terciria, etc): So chaves que possibilitaro pesquisas ou ordenaes


alternativas, ou seja, diferentes da ordem criada a partir da chave primria ou da ordenao natural (fsica) da tabela.

Chave Composta: a chave que contm mais de um atributo (Por exemplo, um cadastro
ordenado alfabeticamente por Estado, Cidade e Nome do Cliente, necessitaria de uma chave composta que contivesse esses trs atributos).

Chave candidata: So atributos que podem vir a ser chave primria.


Exemplo: A entidade FUNCIONARIO tem os atributos: registro funcional, nome, cpf, rg, endereco, dt_nascimento. Os atributos registro funcional, cpf e rg so chaves candidatas, pois podem identificar cada ocorrncia de FUNCIONARIO. Mas para que uma chave candidata possa ser eleita a chave primria dever atender a restrio de unicidade, isto o contedo do campo dever ser nico para cada ocorrncia da entidade.
20
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

3.6. Relacionamentos
Um relacionamento estabelece a conexo entre duas tabelas dentro de um banco de dados por meio das chaves primria e estrangeira ou por meio de tabelas de vnculo. No exemplo da figura 11. podemos ver que um aluno pode se matricular em mais de uma disciplina. Ao dizermos que um aluno est matriculado em muitas disciplinas estamos determinando a cardinalidade de nosso relacionamento. Como veremos mais frente, neste caso a cardinalidade e de 1:N.

a1 a2 a3 Aluno Matrcula

d1 d2 d3 Disciplina

Figura 11. Exemplo de Relacionamento.

21
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

4. Metodologias para Modelagem de Bancos de Dados Relacionais

Segundo o dicionrio Michaelis a Metodologia o estudo cientfico dos mtodos, que por sua vez o conjunto dos meios dispostos convenientemente para alcanar um fim e especialmente para chegar a um conhecimento cientfico ou comunic-lo aos outros. Uma metodologia para modelagem de bancos de dados relacionais um conjunto de regras que so empregadas para demonstrar como ser constitudo o banco de dados, isto , como as tabelas sero relacionadas. uma ferramenta de comunicao de alto nvel. Neste captulo sero apresentadas algumas metodologias e definies propostas por diferentes autores e que so utilizadas para modelagem de bancos de dados relacionais.

4.1. Metodologia de Peter Chen17


Na dcada de 70, Peter Chen props uma tcnica de diagramao que, associada a um conjunto de conceitos, tornou-se o que conhecemos como a abordagem entidade-relacionamento (E-R) para o processo de modelagem de dados. Em sua essncia, o modelo E-R representa coisas do mundo real (Entidades), que possuem caractersticas prprias (Atributos) e que se relacionam entre si (Relacionamentos).

Representao de uma Entidade Identificador da entidade

Exemplo: Funcionrio trabalha em Departamento. Neste exemplo temos duas entidades: Funcionrio e Departamento. Representao dessas duas entidades fica da seguinte forma:

Departamento

Funcionrio

Representao dos Atributos

Identificador do aTributo

17

Chen p., Modelo Entidade-Relacionamento. So Paulo: Makroon Books, 1999

22
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Ateno: Muitas vezes, com o objetivo de manter o modelo simples e claro, os atributos s so representados no dicionrio de dados. Exemplos de atributos da Entidade DEPARTAMENTO:

Cdigo (do Departamento) Nome (do Departamento) Localizao (do Departamento)

DEPARTAMENTO

CDIGO

NOME

LOCALIZAO

Figura 12. Exemplo da entidade departamento.

Podemos usar uma representao alternativa para os atributos. No exemplo abaixo usaremos traos ao invs de elipses:

Funcionrio

Trabalha em

Departamento

NOME

TELEFONE

CDIGO

NOME

ENDEREO Figura 13. Representao alternativa para atributos.

Representao dos relacionamentos: Na notao original de Chen, so representados por losangos.

Identificao

Figura 14.

23
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exemplo: Funcionrio trabalha em DEPARTAMENTO

FUNCIONRIO

trabalha

DEPARTAMENTO

Figura 15. Relacionamento na notao de Chen

Representao da cardinalidade: O grau da cardinalidade expresso acima da linha do relacionamento e pode ser representado por 0, 1 ou N

N FUNCIONRIO trabalha

1 DEPARTAMENTO

Figura 16.

Pode-se tambm expressar o grau mnimo e mximo de relacionamento entre as entidades:

0:N FUNCIONRIO trabalha

1:1 DEPARTAMENTO

Figura 17.

Na notao expandida de Chen a cardinalidade representada da seguinte forma:

Um-para-um Um-para-muitos Muitos Um-e-apenas-um Zero-para-um Zero-ou-muitos Um-ou-muitos Figura 18. Cardinalidade segundo Chen.

24
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

4.2. Metodologia de James Martin18


Na dcada de 80, James Martin apresentou uma nova proposta de modelagem que visava estabelecer a fronteira entre o modelo lgico e fsico, desviando o foco do processo e centrando o foco nos eventos do sistema. Com essa nova proposta ele estabelece o particionamento por eventos, delimitando a rea de atuao do sistema, atravs da utilizao da lista de eventos e incorpora a modelagem de dados na especificao, introduzindo o modelo Entidade Relacionamento e Atributo (ERA).

4.2.1. Representao da Entidade

Identificador da entidade

Figura 19.

Exemplo: Funcionrio trabalha em Departamento. Neste exemplo temos duas entidades: Funcionrio e Departamento. A representao dessas duas entidades fica da seguinte forma:

FUNCIONRIO

DEPARTAMENTO

Figura 20. Exemplo de Entidade.

18

Silberschatz, A; Korth, H. R. e Sudarshan, S. Sistemas de Bancos de dados. So Paulo: Makroon Books, 1999 25
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

4.2.2. Representao dos Atributos

ENTIDADE

Identificador dos atributos

Figura 21.

Exemplos de atributos da Entidade DEPARTAMENTO do exemplo anterior:

Cdigo (do Departamento) Nome (do Departamento) Localizao (do Departamento)

DEPARTAMENTO

cod_dept nome local

Figura 22. Exemplo de atributo representado com a entidade.

4.2.3. Representao dos Relacionamentos e Cardinalidade No mtodo proposto por Martin devemos indicar a cardinalidade do relacionamento. Dessa forma temos:

26
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Cardinalidade - 1:1

Esta linha indica que um departamento est relacionando com apenas um registro de funcionrio

FUNCIONRIO Cdigo Nome Contratao Gerente Salrio Comisso Departamento

DEPARTAMENTO Cdigo Nome Localizao

Esta linha indica que um funcionrio est relacionado com apenas um registro de departamento Figura 23.

Cardinalidade - 1:1

Esta linha indica que um departamento est relacionando com apenas um registro de funcionrio

FUNCIONRIO Cdigo Nome Contratao Gerente Salrio Comisso

DEPARTAMENTO Cdigo Nome Localizao

Esta linha indica que um funcionrio est relacionado com apenas um registro de departamento Figura 24.

Neste caso a leitura da relao das tabelas : Cada funcionrio est em um departamento e um departamento tem vrios funcionrios.

27
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

4.2.4. Relacionamento Opcional

Esta linha indica que um departamento est relacionando com muitos registros de funcionrio. A bola cheia indica participao opcional.

FUNCIONRIO Cdigo Nome Contratao Gerente Salrio Comisso Departamento

DEPARTAMENTO Cdigo Nome Localizao

Esta linha indica que um funcionrio est relacionado com apenas um registro de departamento. A bola vazia indica participao obrigatria. Figura 25.

Neste caso a leitura da relao das tabelas : cada funcionrio deve estar em um departamento e um departamento pode ter vrios funcionrios.

4.3. CASE*MethodTM
A notao CASE*MethodTM, foi criada por Richard Baker, Ian Palmer, Harry Ellis na poca em que eram funcionrios da empresa britnica de consultoria CACI. O CASE*MethodTM usado por grandes companhias, como a Oracle Corporation. uma derivao da metodologia de James Martin e Peter Chen. Seu uso deve-se ao fato de estar mais focado para o desenho de banco de dados do que para a estrutura inerente dos dados da empresa.

4.3.1. Representao da Entidade

Identificador da entidade

Figura 26.

28
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

4.3.2. Representao dos Atributos

ENTIDADE Identificador dos atributos

Figura 27.

Um ou mais atributos descrevem uma entidade, e os valores desses atributos descrevem as ocorrncias da entidade.

Os identificadores dos atributos (nomes) devem estar no singular e em letras minsculas. Os atributos obrigatrios ou que devem ser conhecidos so marcados com *. Os opcionais ou valores que podem ser conhecidos devem ser marcados com .
Identificadores exclusivos (Chaves primrias) devem ser marcados com #. Exemplo:

DEPARTAMENTO #* * cdigo nome localizao

Figura 28.

4.3.3. Representao dos Relacionamentos

Simbologia Linha tracejada Linha slida P de galinha Linha nica


Tabela 4.

Descrio Elemento opcional indicando pode ser Elemento obrigatria indicando deve ser Elemento de grau indicando um ou mais Elemento de grau indicando somente um

Representao

29
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Como o relacionamento indica a relao entre duas entidades para cada direo do relacionamento, so necessrios:

um label, verbo que indica o relacionamento; uma opcionalidade, indicando que algo deve ser ou pode ser; um grau (ou cardinalidade) indicando somente um ou um ou mais.
Exemplo:

FUNCIONRIO

DEPARTAMENTO

#* *

nmero nome cargo

Trabalha em composto de

#* *

cdigo nome localizao

Figura 29.

4.4. ERWin19
O software ERWin foi criado pela Logic Works, sendo uma ferramenta para o projeto de sistemas cliente-servidor de banco de dados. A principal caracterstica do software a existncia de editores que definem os objetos lgicos e fsicos do Banco de Dados, e de suporte linguagem de definio de dados dos diversos servidores de banco de dados, SQL e no SQL. Utilizando-se de uma interface totalmente grfica, padro Windows, esta ferramenta permite uma modelagem completa de entidades e relacionamentos, a partir de ferramentas de desenho, tornando sua utilizao extremamente fcil. Esta ferramenta gera o modelo lgico e fsico para diversos gerenciadores de Banco de Dados, sejam eles SQL ou no SQL, distribudos ou no. O ERWin uma ferramenta de modelagem de dados com capacidade de gerar DDL para os principais RDBMS de mercado podendo incorporar triggers, stored procedures, regras de validao, domnios e templates. Uma de suas caractersticas mais avanadas a capacidade de fazer engenharia reversa atravs de scripts ou direto do dicionrio de dados do banco podendo, atravs da funo COMPLETE COMPARE, oferecer um relatrio detalhado das eventuais discrepncias entre o modelo e a base ou script podendo inclusive promover a sincronizao entre ambos. Ao acessarmos o software encontramos o menu principal:

19

Extraido do manual on-line do ERWin, traducao livre do autor

30
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Gerador de relatrios de modelagem

Viso de nvel de entidade (para trabalhar at a fase 2 de modelagem)

Viso completa (para trabalhar nas fases 3 e 4)

Vises funcionais (subject areas, para dividir o modelo em partes)

Figura 30. Barra de ferramentas do ERWin

Figura 31. Menu principal do ERWin.

O software permite trabalhar com o modelo fsico, com o lgico ou ambos. Para isso basta escolher o modelo na caixa:

31
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Indica modelo fsico/lgico

Indica modelo lgico

Indica modelo fsico

Figura 32. Opo para escolha do modelo.

A figura 33. mostra a diferena ente os dois modelos. O modelo lgico no se preocupa com os futuros campos das tabelas e, sim, com a criao do dicionrio de dados. O modelo fsico preocupa-se com os campos das tabelas, suas chaves e restries. Physical Model
MOVIE

Logical Model
MOVIE

movie_number movie_director movie_description movie_rating movie_name movie_genre movie_rental_rate

movie_number rating rental_rate genre_ movie_clip description movie title_

MOVIE_COPY

MOVIE_COPY

movie_number movie_copy_number movie_format general_condition

movie copy number movie number (FI<) General_condition movie_format

Figura 33. Exemplo do modelo lgico e do modelo fsico

O ERWin distingue as entidades usando retngulos. Esses retngulos podem ter os cantos arredondados (soft-box) ou no. Quando o retngulo no tiver os cantos arredondados dizemos que ir dar origem a uma tabela pai. Quando o retngulo tiver os cantos arredondados (soft-box) indica que ir dar origem a uma tabela filho, ou seja, ir receber uma chave estrangeira da tabela pai. No importa se voc estiver usando o modelo fsico ou lgico, voc pode escolher a notao que deseja trabalhar. O ERWin trabalha com duas notaes:

32
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

IDEF1X (Integration DEFinition for Information Modeling) ou IE (Information Engeneering)


IDEF1X e IE usam smbolos diferentes para representar o relacionamento entre entidades e tabelas. A figura 34. mostra a diferena entre as duas notaes. IDEF1X
STORE store number manager address phone rents / is in

MOVIE movie_number name director description star rating genre rental_rate

IE
STORE store number manager address phone rents / is in

MOVIE movie_number name director description star rating genre rental_rate

Figura 34. Diferena entre a notao IDEF1X e IE.

A notao defaulf usada pelo ERWin IDEF1X mas pode ser alterado a qualquer momento. Basta entrar em Model, Properties, e escolher a notao. Para os modelos fsicos existe a opo de DM (Dimensional Notation) que usado para modelagem de Datawarehouse.

33
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

DM option displays in physical models only


Figura 35. Alterando o modelo.

O toolbox alterado conforme o modelo escolhido. Veja exemplo na figura 36.

IE Notation Logical Physical

IDEF1X Notation Logical Physical

Figura 36. Diferena entre a notao IE e a IDE1X.

Existem trs tipos de relacionamentos no ERWin:

O relacionamento identificado, representado pela linha contnua com uma bola cheia na ponta
(Notao IDEF1X) ou com um p de galinha (Notao IE)

O relacionamento no-identificado, representado pela linha tracejada com uma bola cheia na
ponta (Notao IDEF1X) ou com um p de galinha (Notao IE)

O relacionamento muitos-para-muitos, representado pela linha contnua com uma bola cheia
em cada ponta (Notao IDEF1X) ou com um p de galinha em cada ponta (Notao IE)
34
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

No caso do relacionamento identificado a chave primria da tabela pai faz parte da chave primria da tabela filho. No caso do relacionamento no-identificado a chave primria no faz parte da chave primria da tabela filho. A figura 37. nos ajuda a compreender melhor..
CUSTOMER
customer number credit card customer first_name credit card exp status code customer address customer phone email migrated non-key attribute

Identifying relationship

migrated key attribute

MOVIE RENTAL RECORD


customer number rental record date due date rental status payment transation number overdue charge rental rate rental date

PAYMENT

payment transation number type amount date status

non-identifying relationship

Figura 37. Exemplo de relacionamento identificado e no-identificado.

35
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

4.5. Quadro Resumido


CASE TM *Method

Peter Chen Entidade

James Martin

IDEF1X

IE

ENTIDADE ENTIDADE
atributo chave Atributos

Atributo

Atributos

Relacionamento

Cardinalidade

0:1

0:N

1:1

1:N

N:M
Figura 38.

36
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

5. Entidade
De acordo com o que vimos nos captulos anteriores. uma entidade 20 ou classe de entidade uma representao abstrata de coisas semelhantes, concretas ou abstratas, que existem no mundo real, sobre a qual um sistema de informao captura, armazena e processa dados para cumprir seus objetivos na empresa, atendendo, assim, s necessidades de seus usurios.

5.1. Como identificar uma Entidade


Com o tempo e a experincia em modelagem passamos a identificar as entidades de forma quase intuitiva, mas enquanto ainda no temos essa experincia podemos utilizar vrias tcnicas para isso, por exemplo na fase de levantamento podemos identificar as entidades atravs de substantivos. Uma outra tcnica consiste na proposta apresentada Shlaer & Mellor 21 na qual podemos detectar as entidades atravs da observao de cinco grupos de elementos:

As coisas tangveis As funes exercidas por elementos Eventos ou ocorrncias Interaes Especificaes
Segundo Cougo[2], esta separao das entidades ser tratada como grupos de classificao que sero teis apenas para identificao das entidades. Coisas tangveis Tudo aquilo que pode ser tocado, que tem existncia concreta. Exemplos: caminho, computador, moto, tear. O agrupamento desses objetos em Entidades depender do nvel de abstrao que se deseja atingir na modelagem do ambiente observado.

Por exemplo:

Entidade Produto
Tabela 5.

Objetos Caminho, computador, moto, tear

20 21

As entidades so representadas por tabelas na etapa de implementao do Banco. apud Cougo, Paulo. Modelagem Conceitual e projeto de banco de dados. Rio de Janeiro:Campus, 1997 37
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Atingindo um nvel de abstrao maior podemos ter:

Entidade Veculo Equipamento


Tabela 6.

Objetos Caminho, moto computador, tear

Podemos abstrair um pouco mais e ter:

Entidade Caminho Moto Computador Tear


Tabela 7.

Objetos Todos os caminhes observados Todas as motos observadas Todos os computadores observados Todos os teares observados

Funes Papel, atribuio, classificao ou outra caracterstica que especifique a atuao de um objeto identificado no ambiente observado. Exemplos: Uma analista de suporte, um engenheiro civil, departamento de Recursos Humanos.

Entidade Especialista
Tabela 8.

Objetos Analista, Engenheiro

"Coisa" Tangvel Pessoa

Abstraindo um pouco mais temos:

Entidade Analista Engenheiro


Tabela 9.

Objetos Todas as especialidades de analista Todas as especialidades de engenheiro

"Coisa" Tangvel Pessoa Pessoa

38
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Eventos ou ocorrncias Cougo22 define como objetos que so materializveis quando alguma ao ou fato acontece. Enquanto programado, durante sua execuo ou aps encerrado, esse elemento caracteriza-se como um evento ou ocorrncia ao qual podemos fazer alguma referncia. Exemplos: Uma partida de futebol, um vo de avio, uma viagem de carro. Interaes Resultantes da associao entre objetos em funo de um processo sendo executado. Tambm podem ser modelados como entidades associativas (relacionamentos). Exemplos: A compra de um imvel, a venda de um produto a um cliente. Especificaes Entidades que renem as caractersticas de objetos pertencentes a outros objetos. Podem ser identificados j na modelagem conceitual, ou aparecerem somente no modelo lgico, em funo da aplicao de tcnicas de normalizao. Exemplo: Automvel; Modelo do automvel Automvel uma coisa tangvel que poderamos detalhar com os atributos: cor, modelo, ano de fabricao entre outros. J a entidade Modelo do automvel uma entidade que especfica (detalha) dados sobre o modelo tais como: banco de couro, direo hidramtica, cambio hidrulico, farol de milha, entre outros.

5.2. Representaes de Entidade


O smbolo utilizado para representao de uma entidade depende da metodologia escolhida para a modelagem, conforme vimos nos captulos anteriores. Neste material utilizaremos a metodologia proposta por Peter Chen e em alguns exemplos ilustraremos como a representao utilizada pelo Erwin 23.

Peter Chen

Erwin IDENTIFICADOR DA ENTIDADE

IDENTIFICADOR DA ENTIDADE

Figura 39.

22 23

Cougo, Paulo. Modelagem Conceitual e projeto de banco de dados. Rio de Janeiro:Campus, 1997 Ferramenta de Modelagem relacional comercializada pela empresa Computer Associates. 39
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exemplos: 1. Sistema de Controle de Conta Corrente No ambiente de um sistema de controle de conta corrente, temos pessoas que so clientes de um banco. Pode-se ento definir uma entidade cliente. Neste mesmo sistema, as contas mantidas no banco podero ser definidas como uma entidade conta.

CLIENTE

CONTA

Figura 40.

Exemplo: Sistema de Controle de contas de um Hospital No contexto de um sistema de controle de contas de um hospital, algumas pessoas desempenham a funo de mdicos. Neste mesmo sistema, as pessoas que iro realizar uma consulta desempenham a funo de pacientes. Estas pessoas so ocorrncias de entidades distintas: mdicos e pacientes. Note que um mdico em um determinado momento tambm pode desempenhar a funo de um paciente.

MDICO

PACIENTE

Figura 41.

Ateno: O identificador de uma entidade deve ser um nome relevante ao assunto que representar e recomenda-se que:

No sejam utilizados caracteres especiais tais como acento, cedilha, *, $, entre outros; No seja iniciado por nmeros; Esteja no singular.
Na etapa de implementao do modelo deve-se tambm atentar para as recomendaes e particularidades do SGBDR utilizado.

5.3. Cuidado: Aquilo que entidade numa circunstncia, pode no ser em outra!
Portanto, ao identificar as entidades de um sistema de informao, os desenvolvedores de software devem estar atentos possibilidade de uma coisa do mundo real desempenhar mais de um papel no contexto deste sistema.
40
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

5.4. Tipos de Entidades


5.4.1. Entidade Meramente Conceitual Uma entidade meramente conceitual aquela que representa uma classe de domnio e que no tem outras propriedades que no seu prprio conceito. Exemplos: Data, Hora, Perodo

5.4.2. Entidade Forte Uma entidade forte aquela que no depende de outra entidade para existir. Exemplo: No contexto de uma organizao faz-se necessrio o armazenamento de dados de um funcionrio por diversas demandas, uma delas a folha de pagamento. Cada ocorrncia de funcionrio r identificada de forma nica, por exemplo por uma atributo identificado por registro funcional, sendo assim a entidade funcionrio uma entidade forte.

5.4.3. Entidade Fraca Entidades cuja existncia depende da existncia de outra entidade, dita forte. representada por um retngulo duplo, podendo, opcionalmente, ser indicada uma seta que parte dela e chega a sua entidade forte, para tornar mais clara a dependncia. A cardinalidade de uma ocorrncia de uma entidade fraca com a forte sempre (1,1), indicando que ela sempre depende de uma ocorrncia da entidade forte. Em poucas palavras, entidade fraca aquela que depende de uma outra entidade para existir. entidade da qual depende d-se o nome de entidade pai. Exemplo: Os funcionrios de uma empresa possuem dependentes, por exemplo, seus filhos, cujos dados so utilizados por exemplo para concesso de benefcios ou descontos de IRRF. Os dados de dependentes esto relacionados diretamente existncia de uma ocorrncia de funcionrio.

FUNCIONRIO

1:1

possui

0:N

DEPENDENTE

Figura 42.

5.4.4. Entidade Associativa Uma entidade associativa aquela que no existe por si s e sua existncia est condicionada existncia de duas ou mais entidades, a partir das quais ela concebida.

41
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exemplo: A entidade associativa aluno x disciplina surge quando h a derivao do modelo lgico a partir do modelo conceitual devido ao relacionamento n:n entre a entidade aluno e a entidade disciplina24.

5.4.5. Entidade de Dados Podem ser subdivididas em diversas categorias de elementos (Subtipos), cada uma se caracterizando por atributos especficos.

Pessoa

Fsica

Jurdica

Figura 43.

Supertipo: o conjunto de caractersticas que originou o subtipo. Subtipo: definido como um subconjunto de caractersticas de um tipo. Exemplo: Supertipo pessoa e subtipos Pessoa Fsica e Pessoa Jurdica.

24

Veja tpico sobre Derivao do Modelo Lgico a partir do Modelo Conceitual nos captulos anteriores.

42
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

6. Atributos

Conforme vimos anteriormente, cada entidade tem propriedades particulares, chamadas atributos, estas propriedades podem identificar, qualificar ou quantificar a entidade, em outras palavras os atributos descrevem as entidades. Por exemplo, uma entidade funcionrio pode ser descrita pelo seu nome, o trabalho que realiza, data de nascimento, endereo e salrio. Cada ocorrncia de uma entidade ter um valor para cada um de seus atributos.

6.1. Como Identificar os Atributos


Para identificar um atributo devemos estabelecer quais so suas caractersticas. Remetendo-nos a entidade funcionrio, podemos perguntar Quais so as caractersticas de um funcionrio? O que o identifica?. Responder a essas perguntas traz os atributos da entidade. No nosso exemplo, as respostas poderiam ser: Nome, Endereo, Telefone, Data de Nascimento, Cargo, Salrio, Cdigo do Funcionrio. Percebam que essas caractersticas so os atributos do funcionrio.

6.2. Representaes de Atributos


Assim como para as entidades, a representao de uma atributo depende da metodologia escolhida para a modelagem, conforme vimos nos captulos anteriores. Neste material utilizaremos a metodologia proposta por Peter Chen que utiliza uma elipse para representar os atributos e em alguns exemplos ilustraremos como a representao utilizada pelo Erwin 25.

Peter Chen

Erwin
FUNCIONARIO FUNCIONRIO cod_func nome dt_nasc cargo endereco

cod_func dt_nasc nome cargo

endereo

Figura 44.

25

Ferramenta de Modelagem relacional comercializada pela empresa Computer Associates. 43


Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

6.3. Classificao de Atributos


Cougo26 classifica os atributos em trs grupos:

Atributos Descritivos: Atributos que expressam caractersticas intrnsecas ao objeto, isto ,


que representam qualidades ou descries de um objeto. Por exemplo: data de nascimento, endereo, cor dos cabelos, peso, sexo, modelo de um automvel.

Atributos Nominativos: Atributos que podem identificar um objeto, mesmo que no o faa de
maneira nica. Por exemplo: Nome de um funcionrio, Registro acadmico de um aluno, Cdigo do produto, Placa de um automvel. Ateno: Os atributos nominativos podem ser chaves candidatas e aqueles que atendem aos critrios podem vir a ser chaves primrias.

Atritutos Referenciais: Atributos que no pertencem entidade a qual esto alocados, mas
que fazem algum tipo de citao ou estabelecem uma relao entre esta entidade e a entidade de origem. Normalmente estes atributos so as chaves estrangeiras. No exemplo apresentado a seguir note que a entidade FUNCIONARIO tem o atributo cod_dept (cdigo do departamento), mas este atributo, originalmente um atributo nominativo da tabela DEPARTAMENTO, sendo assim para a entidade FUNCIONARIO este atributo um atributo referencial, pois ser utilizado para estabelecer um relacionamento 27 com a tabela DEPARTAMENTO.

FUNCIONRIO

DEPARTAMENTO

cod_func

cod_dept cod_func nome_dept cod_dept

nome_func

end

Figura 45.

6.4. Tipos de atributos


Independente da sua classificao um atributo pode possuir caractersticas que nos possibilitam defini-los como:

Atributo Simples Atributo Composto Atributo Monovalorado

26 27

Cougo, Paulo. Modelagem Conceitual e projeto de banco de dados. Rio de Janeiro:Campus, 1997 Este assunto foi apresentado anteriormente e ser detalhado no prximo captulo

44
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Atributo Multivalorado Atributo Derivado ou virtual Atributo Opcional Atributo Chave


6.4.1. Atributo Simples Atributos que no so divisveis so chamados simples ou atmicos, por exemplo o atributo cargo para a entidade FUNCIONARIO.

6.4.2. Atributo Composto Alguns atributos podem ser divididos em subpartes com significados independentes. Um atributo que composto de outros atributos mais bsicos chamado composto. Ateno: Atributos compostos podem formar uma hierarquia. No exemplo a seguir o endereo da entidade FUNCIONARIO pode ser dividido em endereo da rua, cidade, estado e cep; o atributo endereo da rua pode ser subdividido em nome da rua, numero do imvel e complemento.

FUNCIONRIO

cod_func nome_func end

cod_dept

cep end_rua cidade

UF

nome_rua nmero

complemento

Figura 46.

Atributos compostos so teis quando os usurios referenciam o atributo composto como uma unidade e, em outros momentos, referenciam especificamente a seus componentes. Se o atributo
45
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

composto for sempre referenciado como um todo, no existe razo para subdividi-lo em componentes elementares.

6.4.3. Atributo Monovalorado Um atributo monovalorado - tambm chamado de univalorado - possui um valor nico, ou seja, s existe uma representao daquele atributo para a mesma tupla. Vejamos, por exemplo, o atributo idade: um funcionrio nunca poder ter mais de uma idade ao mesmo tempo, o que torna esse atributo monovalorado.

6.4.4. Atributo Multivalorado Uma nica entidade que tem ocorrncias com diversos valores para este atributo. Atributos multivalorados podem possuir uma multiplicidade, indicando as quantidades mnima e mxima de valores.

1:1
FUNCIONARIO POSSUI

0:N

DEPENDENTE

cod_func

dt_nasc

endereco

cod_finc

nome

nome

cargo

Figura 47.

6.4.5. Atributo Derivado ou Virtual De acordo com Silberschatz [1] o valor deste tipo de atributo pode ser derivado de outros atributos ou entidades a ele relacionados. Por exemplo a idade de um funcionrio pode ser obtida a partir da subtrao entre o valor do atributo data de nascimento e a data corrente. Em outro caso, alguns valores de atributos podem ser derivados de entidades relacionadas, por exemplo, um atributo nmero de funcionrios de uma entidade DEPARTAMENTO que pode ser calculado contando-se o nmero de funcionrios relacionados com cada departamento.

6.4.6. Atributo Opcional ou Nulo So atributos para os quais no existe a obrigatoriedade de preenchimento de dados, isto , so atributos cujo preenchimento de dados opcional. De acordo com Silberschatz [1] um atributo nulo usado quando uma entidade no possui um valor para um determinado atributo. Por exemplo, o atributo complemento aplica-se somente
46
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

queles funcionrios que residam em algum prdio ou vila, nesse caso nas ocorrncias da entidade FUNCIONARIO para as quais os dados do atributo complemento no forem informados o valor deste atributo ser nuto. Ateno: O nulo pode ser utilizado para denotar que o valor desconhecido ou inexistente.

6.4.7. Atributo Chave Os atributos utilizados para identificar uma entidade, para indexar as ocorrncias da entidade ou os atributos referenciais so chaves. Conforme vimos anteriormente as chaves podem ser:

Chave Primria: um atributo ou um conjunto de atributos que identifica unicamente cada


ocorrncia da entidade, sendo assim, uma ocorrncia no pode conter, neste atributo, um dado (valor) que j esteja armazenado em outra ocorrncia. Exemplo: No contexto de um sistema de controle acadmico o nmero de matricula de uma entidade aluno um atributo identificador j que identifica de forma nica um aluno dentro de uma faculdade.

Chave Estrangeira: um atributo ou conjunto de atributos usado para estabelecer um


relacionamento entre duas entidades. Na entidade de origem deve ser chave primria.

Chave Secundria(Terciria, etc): So chaves que possibilitaro pesquisas ou ordenaes


alternativas, ou seja, diferentes da ordem criada a partir da chave primria ou da ordenao natural (fsica) da tabela.

Chave Composta: a chave que contm mais de um atributo (Por exemplo, um cadastro
ordenado alfabeticamente por Estado, Cidade e Nome do Cliente, necessitaria de uma chave composta que contivesse estes trs atributos).

Chave candidata: So atributos que podem vir a ser chave primria.


Exemplo: A entidade FUNCIONARIO tem os atributos: registro funcional, nome, cpf, rg, endereco, dt_nascimento. Os atributos registro funcional, cpf e rg so chaves candidatas, pois podem identificar cada ocorrncia de FUNCIONARIO. Mas para que uma chave candidata possa ser eleita a chave primria dever atender a restrio de unicidade, isto o contedo do campo dever ser nico para cada ocorrncia da entidade. A seguir apresentamos um exemplo de classificao de atributos para as entidades FUNCIONARIO, DEPARTAMENTO e DEPENDENTES:

FUNCIONRIO ENTIDADE reg_funcional nome_func atributos endereo cpf rg cod_dept


Tabela 10.

Classificao dos Atributos atributo nominativo chave primria atributo nominativo chave candidata atributo descritivo composto atributo nominativo chave candidata atributo nominativo chave candidata atributo referencial chave estrangeira a origem do atributo est na entidade DEPARTAMENTO.

47
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

DEPENDENTE ENTIDADE reg_funcional cod_dependente

Classificao dos Atributos atributo referencial chave estrangeira atributo nominativo junto com o atributo reg_funcional compe a chave primria; esta uma entidade FRACA, pois a existncia de uma ocorrncia desta entidade depende de um relacionamento com a entidade FUNCIONRIO; no possui um atributo que sozinho consiga identificar cada ocorrncia da entidade. atributo descritivo atributo descritivo

atributos

data_nascimento parentesco

nome_dependente atributo nominativo


Tabela 11.

DEPENDENTE ENTIDADE reg_funcional cod_dependente

Classificao dos Atributos atributo referencial _ chave estrangeira atributo nominativo junto com o atributo reg_funcional compe a chave primria; esta uma entidade FRACA, pois a existncia de uma ocorrncia desta entidade depende de um relacionamento com a entidade FUNCIONRIO; no possui um atributo que sozinho consiga identificar cada ocorrncia da entidade. atributo descritivo atributo descritivo

atributos

data_nascimento parentesco

nome_dependente atributo nominativo


Tabela 12.

48
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

7. Relacionamentos

7.1. Introduo
De acordo com Machado [3] os relacionamentos podem ser definidos como o fato ou o acontecimento que liga dois objetos (entidades), duas coisas do mundo real. No ambiente relacional podemos entender o relacionamento como o fato que efetua a juno de duas ou mais tabelas de dados.

F1 F2 F3 Funcionrio Trabalha

P1 P2 Projeto

N
Funcionrio Trabalha

N
Projeto

Figura 48. Relacionamento Binrio.

Um relacionamento estabelece a conexo entre duas tabelas dentro de um banco de dados. Este relacionamento entre tabelas possvel atravs da relao entre as chaves primria e estrangeira ou atravs de uma terceira tabela chamada tabela de vnculo. Esta conexo entre tabelas depende do tipo de relacionamentos existente entre elas.

7.2. Porque um Relacionamento fundamental dentro de um Banco de Dados?


Estabelece uma conexo entre tabelas que esto logicamente relacionadas, entre os dados
contidos nelas.

o mecanismo que permite que dados de vrias tabelas sejam agrupados para extrao
simultnea.

Permite aprimorar as definies das estruturas de tabelas e a reduo de dados redundantes. Estabelece a integridade em nvel de relacionamento quando definido corretamente.
A importncia na definio dos relacionamentos corretamente est relacionada com a qualidade do banco de dados projetado, pois se mal projetados traro prejuzo na manipulao simultnea entre tabelas, para insero, atualizao e excluso de registros em tabelas relacionadas.
49
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

7.3. Como Identificar os Relacionamentos?


De acordo com Cougo28, o que estabelecer relacionamentos vlidos ou no ser o grau de fidelidade e completeza que se consegue atingir durante o processo de modelagem. Segundo ele so possveis os relacionamentos entre instncias de objetos (entidades) de diferentes tipos ou relacionamentos entre instncias de um mesmo tipo de objeto (entidade). Para identificarmos a existncia dos relacionamentos entre as entidades basta observarmos como estes objetos (entidades) se comportam no mundo real, por exemplo se tivermos a seguinte situao: Matheus proprietrio de um imvel na praia de Ubatuba. Cougo29 sugere as seguintes etapas para identificao e mapeamento dos relacionamentos:

Identificar as entidades envolvidas.


Matheus uma ocorrncia30 da entidade que chamaremos de PESSOA; Imvel na praia de Ubatuba uma ocorrncia da entidade que chamaremos de IMOVEL

Identificar os atributos das entidades.


Ateno: Para isso importante valer-se das tcnicas para levantamento de dados e anlise de requisitos. PESSOA pode ser caracterizada pelos atributos: nome, data de nascimento, rg, cpf IMOVEL pode ser caracterizado pelos atributos: endereo, tamanho, tipo

Representao das entidades

PESSOA
Figura 49.

IMVEL

Identificao dos relacionamentos


PESSOA proprietria de um IMVEL.

Caracterizao do relacionamento entre as entidades


Nem toda PESSOA proprietria de um IMOVEL. Um IMOVEL pode (ou no) pertencer a uma ou muitas ocorrncias da entidade PESSOA. Algumas ocorrncias de PESSOA podero possuir mais de um IMOVEL.

28 29 30

Cougo, Paulo. Modelagem Conceitual e projeto de banco de dados. Rio de Janeiro:Campus, 1997 Cougo, Paulo. Modelagem Conceitual e projeto de banco de dados. Rio de Janeiro:Campus, 1997 Ocorrncia, instncia e registro so similares.

50
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Representao do Relacionamento

0:N
PESSOA Possui

0:N
IMVEL

Figura 50. Relacionamento entre PESSOA X IMVEL - metodologia de Peter Chen

Observe no exemplo apresentado que o primeiro passo para identificar o relacionamento compreender como as coisas se comportam no mundo real, a partir deste entendimento possvel caracterizar o relacionamento entre elas, isto , definir o grau do relacionamento entre as entidades. Em outras palavras, definir se uma ocorrncia de uma entidade poder ou dever se relacionar com uma ou muitas ocorrncias da outra tabela e vice-versa.

7.4. Cardinalidade
A cardinalidade ou grau do relacionamento uma restrio que expressa o nmero de ocorrncias de uma entidade ao qual outra entidade pode estar associada por meio de um relacionamento. Por exemplo: Todo FUNCIONARIO trabalha em um DEPARTAMENTO. O DEPARTAMENTO pode ter muitos FUNCIONARIOS. A seguir, considerando a caracterizao do relacionamento entre as entidades FUNCIONARIO e DEPARTAMENTO veja como a relao entre as ocorrncias das entidades:

FUNCIONRIO cod_func 7839 7782 7566 7698


Tabela 13.

DEPARTAMENTO deptno 10 10 20 30 deptno 10 20 30 40 nome-dept Accouting Research Sales operations Loc New YorkDallas Chicago Boston

nome_func King Clark Jones Blake

O FUNCIONRIO King trabalha no DEPARTAMENTO 10. O FUNCIONRIO CLARK trabalha no DEPARTAMENTO 10. O DEPARTAMENTO 10 possui 2 ocorrncias de FUNCIONARIO (King e Clark), mas cada uma destas ocorrncias de FUNCIONARIO est associada a apenas uma ocorrncia de DEPARTAMENTO (10).

51
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

As cardinalidade possveis so:

Zero-para-um (0:1) - Uma entidade A pode estar associada a uma entidade em B, no havendo
obrigatoriedade de associao da entidade B com a entidade A.

Zero-para-muitos (0:N) - Uma entidade em A pode estar associada a qualquer nmero de entidades
em B, no havendo obrigatoriedade de associao da entidade B com a entidade A. um caso especfico da cardinalidade N:M onde N vale 0.

Um-para-um (1:1) - Uma entidade em A est associada a no mximo uma entidade em B, e uma
entidade em B est associada a no mximo uma entidade em A.

Um-para-muitos (1:N) - Uma entidade em A est associada a qualquer nmero de entidades em B,


entretanto uma entidade em B est associada a no mximo uma entidade em A.

Muitos-para-muitos (N:N) - Uma entidade em A est associada a qualquer nmero de entidades em


B, e uma entidade em B est associada a qualquer nmero de entidades em A. Exemplos:

1:1
FUNCIONARIO Trabalha em

1:1
DEPARTAMENTO

Departamento

possui um/ trabalha em

Funcionrio

Departamento

possui um/ trabalha em

Funcionrio

Figura 51.

Cada funcionrio trabalha em um departamento Um departamento pode conter nenhum ou muitos funcionrios;

1:1
FUNCIONARIO Possui

1:1
CONTRATO

possui um/ Funcionrio pertence a um Contrato

Funcionrio

possui um/ pertence a um

Contrato Figura 52.

52
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Cada funcionrio possui um contrato Cada contrato pertence a um funcionrio

N:N
FUNCIONARIO PARTICIPA

N:N
PROJETO

participa de/ Funcionrio realizado por Projeto

Funcionrio Figura 53.

participa de/ realizado por

Projeto

Cada funcionrio pode participar de muitos projetos Cada projeto pode ser realizado por muitos funcionrios

q O que deve ser feito em casos de relacionamentos muitos-para-muitos


Por definio o modelo relacional no permite a representao de relacionamentos muitos-para-muitos. Para resolver essa limitao do modelo relacional preciso criar uma entidade intermediria conhecida como entidade associativa. A entidade associativa , portanto, uma entidade intermediria gerada a partir de duas entidades com relacionamento muitos-para-muitos. Por exemplo, no caso das entidades FUNCIONRIO e PROJETO existe um relacionamento muitos-para-muitos porque muitos funcionrios trabalham em muitos projetos e muitos projetos so executados por muitos funcionrios. Nesse caso precisaremos de uma entidade associativa. A nova entidade ser chamada de FUNCIONRIO/PROJETO e ter relacionamento 1:N com FUNCIONRIO e 1:n com PROJETO. A chave primria das entidades associativas uma chave composta pela chave primria de FUNCIONRIO e pela chave primria de PROJETO.

N
PROJETO

FUNCIONRIO/ PROJETO

N
FUNCIONRIO

Figura 54.

53
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

8. Modelo Entidade Relacionamento Estendido

8.1. Natureza do Relacionamento


Relacionamentos Parciais e Totais Relacionamentos Recursivos ou Auto-Relacionamento Relacionamentos Mltiplos Agregao
8.1.1. Relacionamentos Parciais e Totais Quando todo o elemento da entidade est obrigatoriamente no relacionamento, caso contrrio temos um relacionamento parcial.

Funcionrio N

Lota 1

Departamento

Figura 55.

Todo funcionrio obrigatoriamente ( | ) lota um departamento, mas nem todo (0) departamento lotado por funcionrios

8.1.2. Relacionamentos Recursivos ou Auto-Relacionamento Os auto-relacionamentos so casos especiais onde uma Entidade se relaciona com si prpria. Os auto-relacionamentos podem ser de tipo Um-para-Um, Um-para-Muitos ou Muitos-para-Muitos.

Funcionrio N GERENCIA GERENCIADO

Gerencia

Figura 56. 54
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Funcionrio desempenha o papel de gerente ou de subordinado.

8.1.3. Relacionamentos Mltiplos / Agregao a associao que envolve mais de duas Entidades.

Professor

Ensina

Disciplina

N Aluno

Figura 57.

Obs.: Para entendermos este relacionamento devemos cortar uma das arestas e fazermos um relacionamento binrio. Devido a uma limitao do modelo E-R no possvel expressar relacionamentos entre relacionamentos. Para resolver esse problema usamos a agregao. Ao associarmos um conjunto de Entidades e um Relacionamento temos uma Agregao. A agregao aplicada aos modelos para facilitar o entendimento semntico e tornar mais claros os graus dos relacionamentos ternrios ou de maior nmero. A agregao , na realidade, uma abstrao do modelo E-R atravs da qual relacionamentos so tratados como entidades de nvel superior. Vamos ver no exemplo:

Funcionrio N

Trabalha

N N

Projeto

Utiliza N Mquina

Figura 58.

Temos um relacionamento N:N entre FUNCIONRIO e PROJETO, outro relacionamento N:N entre FUNCIONRIO e MQUINA e, por fim, outro relacionamento N:N entre MQUINA e PROJETO. Agora iremos representar o relacionamento entre duas entidades como se fosse uma nova entidade. Vamos considerar o relacionamento entre FUNCIONRIO e PROJETO como se fosse uma nova entidade e iremos represent-la como sendo uma nova entidade. A seguir

55
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

devemos estabelecer o relacionamento entre a entidade MQUINA e a nova entidade. Veja como essa operao fica representada graficamente:

Funcionrio

Trabalha

Projeto

N Utiliza N Mquina

Figura 59.

Note que o relacionamento feito com a nova entidade e no com o relacionamento (a reta vai at a nova entidade e no at o relacionamento TRABALHA). A partir dessa nova modelagem podemos fazer uma releitura do modelo. Podemos interpretar que quando um funcionrio trabalha em um projeto ele utilizar uma mquina.

Funcionrio

Trabalha

Projeto

N Utiliza N Mquina

Figura 60.

56
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Professor

Ensina

Disciplina

Cursa

N Aluno

Figura 61.

O modelo E-R uma ferramenta valiosa para qualquer sistema com mltiplos depsitos (objetos) e complexos relacionamentos de dados. Ele inteiramente voltado para os relacionamentos de dados, sem oferecer quaisquer informaes sobre as funes que criam ou utilizam os dados.

8.2. Generalizao-Especializao
Existem casos em que uma entidade pode ser dividida em categorias, cada qual com atributos especficos, isto , a entidade pode possuir subclasses ou pertencer asuperclasses. A associao entre uma Generalizao (superclasses) e suas Especializaes (subclasses) representado por um tringulo e recebe o nome de "IS A" ( um).

Cdigo Filial N atende N Cliente Nome

CIC Sexo Pessoa Fsica CGC Figura 62. Pessoa Jurdica

No caso temos a Super-Classe CLIENTE e as Sub-Classes PESSOA FSICA e PESSOA JURDICA. O que diferencia essas duas subclasses so alguns poucos atributos.
57
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

O uso de uma estrutura de Generalizao-Especializao tambm conhecido como PARTICIONAMENTO. Sua principal utilidade que com ele podemos representar ENTIDADES com ATRIBUTOS parcialmente disjuntos, alm de permitir que um RELACIONAMENTO fique restrito a um subconjunto de uma ENTIDADE. Uma superclasse , portanto, uma GENERALIZAO de um conjunto de ESPECIALIZAES (subclasses). Cada ESPECIALIZAO herda atributos e relacionamentos da ENTIDADE da qual derivou. O RELACIONAMENTO entre Especializaes de uma mesma Generalizao um tipo de Auto-Relacionamento.

9. Normalizao

A Normalizao um processo formal passo a passo que examina os atributos de uma entidade com o intuito de evitar anomalias de armazenamento de tuplas (registros) especficas. Esse processo causa a simplificao dos atributos dentro da respectiva tupla, eliminando grupos repetitivos, dependncias parciais de chaves concatenadas, dependncias transitivas, entre outros, colaborando sobremaneira para integridade e a estabilidade do modelo. A experincia tem mostrado que o investimento de tempo que se faz para efetuar manutenes em uma base de dados implementada inversamente proporcional ao tempo aplicado no processo de normalizao. Para se atingir esse estgio, necessrio que as tuplas sejam analisadas de modo a verificar se seus atributos apresentam relaes no normalizadas, submetendo-as a conceitos subseqentes de primeira, segunda e terceira forma normal (FN). H tambm outras formas normais superiores terceira FN, ou seja, Boyce-Cood (BCFN), quarta forma normal, quinta forma normal e chave-domnio, que visam a agrupar atributos em tuplas mais refinadas e distintas a fim de se evitarem anomalias especficas. Porm, atingir o nvel de terceira forma normal suficiente para a maioria dos propsitos prticos de normalizao, sendo rara a necessidade de perseguir formais superiores. A normalizao um mecanismo para transformar estruturas complexas de dados em sua forma mais simples. Portanto, diz-se que uma estrutura de dados est "normalizada" quando est em seu estgio de maior simplicidade. Simplicidade de uma estrutura pode ser definida como a existncia de apenas dependncia funcional. Assim, uma tabela deve conter apenas informaes que se refiram a um mesmo tipo de dados, ou seja, todas as colunas da tabela devem depender funcionalmente da chave primria. Em resumo, a normalizao consiste em descobrir o lugar certo para cada coisa e colocar cada coisa em seu devido lugar, com o objetivo de:

minimizao de redundncias e inconsistncias; facilidade de manipulaes do Banco de Dados; facilidade de manuteno do Sistema de Informaes.
Os trs principais casos de anomalias que caracterizam uma estrutura desnormalizada so:

Grupo Repetitivo: Conjunto de atributos de uma entidade que ocorre mltiplas vezes para
cada ocorrncia da Entidade.
58
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Dependncia Funcional Parcial: Quando um atributo depende de parte da chave primria


(chave composta)

Dependncia Transitiva: Dependncia indireta entre dois ou maisatributos.

9.1. Primeira Forma Normal (1FN)


Por definio, a 1 Forma Normal consiste na normalizao da tupla, de forma que o relacionamento entre a sua chave e os seus atributos sejam unvocos, isto , para cada chave h a ocorrncia de um e somente um dado.

q Procedimentos
identificar a chave primria da entidade; identificar os atributos que formam o grupo repetitivo e remov-lo da entidade; criar uma nova entidade com a chave primria da entidade anterior e o grupo repetitivo.
A chave primria da nova entidade ser obtida pela concatenao da chave primria da entidade inicial e um ou mais atributos do grupo repetitivo. Exemplo: A empresa Bits Ltda possui um formulrio para solicitao de compra de produtos para empresa.

BITS SA Fornecedor: 0256 Plano comisso:

ORDEM DE COMPRA NEW DATA SYSTEM LTDA A Dt de Cadastro Dt de entrega Quantidade 5 100 6 01/01/2003 05/01/2003

ORD N 1234

Cdigo do Produto Descrio do Produto 015460 122236 456698 PAPEL A4 RESMA-500 FLS CD-RW 700M TINTA P/IMPRESSORA HP850

Valor Unitrio Valor Total 10,00 1,20 85,00 TOTAL: 50,00 120,00 510,00 680,00

Tabela 14.

Analisamos o formulrio por ela utilizado e verificamos a necessidade de criar uma entidade ORDEM com seus atributos. Aplicando a 1 Forma Normal criamos uma entidade chamada ORDEM_ITEM que armazenar o grupo repetitivo encontrado. Como chave primria para entidade ORDEM_ITEM teramos uma chave concatenada (Cdigo da Ordem + Cdigo do Item).

59
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Notem que, no diagrama, os atributos Cdigo da Ordem e Cdigo do Produto foram indicados como PK. Isso foi feito para ressaltar que ambas formam uma chave primria composta. Cdigo da Ordem , na verdade, uma chave estrangeira.

Entidade PK

ORDEM Cdigo da Ordem Data de Cadastro Plano de Comisso Data da Entrega Cdigo Fornecedor Nome do Fornecedor Valor Total da Ordem Cdigo do Produto Descrio do Produto Preo Unitrio do Produto Quantidade do Produto Preo Total do Produto

Entidade PK PK

ORDEM_ITEM Cdigo da Ordem Cdigo do Produto Descrio do Produto Preo Unitrio do Produto Quantidade do Produto Preo Total do Produto N

1 Entidade PK ORDEM Cdigo da Ordem Data de Cadastro Plano de Comisso Data da Entrega Cdigo Fornecedor Nome do Fornecedor Valor Total da Ordem

Figura 63.

9.2. Segunda Forma Normal (2FN)


Conforme vimos anteriormente, existem algumas tuplas que, para serem identificadas e individualizadas, necessitam conter em sua chave mais de um atributo, formando uma chave concatenada. Aps submeter a tupla anlise e converso para a 1 Forma Normal, o prximo passo verificar se a mesma possui chave concatenada, e, se for o caso, constatar se todos os atributos no chaves no apresentam dependncia parcial com a referida chave. A dependncia parcial uma situao particular em que os atributos no chaves dependem parcialmente de um atributo da chave concatenada.

q Procedimentos
Identificar os atributos que possuem dependncia parcial.
60
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Remover da entidade todos esses atributos identificados e criar uma nova entidade com eles. A chave primria da nova entidade ser o atributo do qual os atributos removidos so
funcionalmente dependentes. Exemplo : Continuando a anlise da Ordem de Compra. A criao da entidade ORDEM_ITEM fez com que a chave primria da entidade ORDEM fosse transportada para a nova entidade ORDEM_ITEM, que juntamente com os atributos transferidos pela aplicao da 1 Forma Normal fossem para a entidade ORDEM_ITEM. A chave da nova entidade passou a ser a chave concatenada formada por [Cdigo da Ordem + Cdigo do Item]. Entretanto o atributo [Descrio do Produto] apresenta dependncia parcial com a chave primria concatenada da entidade ORDEM_ITEM, sugerindo a aplicao da 2 Forma Normal.

Entidade PK PK

ORDEM_ITEM Cdigo da Ordem Cdigo do Produto Descrio do Produto Preo Unitrio do Produto Quantidade do Produto Preo Total do Produto

Entidade PK

PRODUTO Cdigo do Produto Descrio do Produto 1

N Entidade ORDEM_ITEM Cdigo do Item Cdigo do Produto Preo Unitrio do Produto

PK PK - FK

1 Entidade PK ORDEM Cdigo da Ordem Data de Cadastro Plano de Comisso Data da Entrega Fornecedor Valor Total da Ordem Entidade PK

Quantidade do Produto Preo Total do Produto N

1 ORDEM Cdigo da Ordem Data de Cadastro Plano de Comisso Data da Entrega Cdigo Fornecedor Nome do Fornecedor Valor Total da Ordem

Figura 64.

61
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

9.3. Terceira Forma Normal (3FN)


Na definio de uma tupla, pode ocorrer de alguns atributos no serem dependentes diretos da chave da mesma, mas sim, por transitividade atravs de outros atributos residentes na mesma tupla referenciada. Submetida a tupla anlise e converso para a 2 Forma Normal, verifica-se em seguida se todos os atributos no chaves no apresentam dependncia transitiva com a sua chave. A dependncia transitiva dependncia indireta que um determinado atributo tem com a chave da tupla atravs de um outro atributo no chave, do qual diretamente dependente.

q Procedimentos
Identificar todos os atributos que possuem dependncia transitiva. Remov-los e criar uma nova entidade com os mesmos. A chave primria da nova entidade ser o atributo do qual os atributos removidos so
funcionalmente dependentes.

Entidade PK

PRODUTO Cdigo do Produto Descrio do Produto 1

Entidade PK

PRODUTO Cdigo do Produto Descrio do Produto 1

N Entidade PK PK - FK ORDEM_ITEM Cdigo do Item Cdigo do Produto Preo Unitrio do Produto Quantidade do Produto Preo Total do Produto N 1 Entidade PK PK - FK

N ORDEM_ITEM Cdigo do Item Cdigo do Produto Preo Unitrio do Produto Quantidade do Produto Preo Total do Produto N Entidade PK 1 FORNECEDOR Cdigo do Fornecedor Nome do Fornecedor 1 Entidade PK ORDEM Cdigo da Ordem Data de Cadastro Plano de Comisso Figura 65. Data da Entrega FK Cdigo Fornecedor Valor Total da Ordem N

Entidade PK

ORDEM Cdigo da Ordem Data de Cadastro Plano de Comisso Data da Entrega Cdigo Fornecedor Nome do Fornecedor Valor Total da Ordem

62
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

9.4. Resumo dos Passos para Normalizao


1. Identifique atributos (ou grupos) que possuam mltiplos valores para uma ocorrncia da entidade - 1FN 2. Remova os atributos (ou grupos) com uma copia da chave primria - 1FN 3. Identifique atributos dependentes somente de parte da chave primria - 2FN 4. Remova os atributos encontrados com uma cpia de parte da chave primria - 2FN 5. Identifique atributo(s) dependente(s) de outro(s) atributo(s) no chave - 3FN 6. Remova esses atributos com uma cpia do atributo do qual depende.

63
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exerccio 1 Conceitos de Banco de Dados Relacional


01. Quais so as principais caractersticas de um Sistema Gerenciador de um Banco de dados?

02. Quais so as caractersticas de um Banco de dados Relacional? R: Armazenamento de dados em Estruturas lgicas denominadas tabelas Controle de acesso aos dados Permite o relacionamento entre tabelas evitando a necessidade de armazenamentos duplicados desnecessariamente

1.1. Atividade envolvendo o Cenrio Instituio de Ensino "Aprendendo a Aprender" Etapa 1 Considere a seguinte situao: A instituio de Ensino Tcnico "Aprendendo a aprender", localizada na zona Norte de So Paulo, fundada em 1970 contava com aproximadamente 250 alunos, 18 professores e os cursos de Processamento de Dados e Magistrio, que eram oferecidos nos perodos manh, tarde e noite, alm dos 15 funcionrios que davam suporte administrativo e financeiro a instituio. Inicialmente a instituio controlava as suas informaes manualmente por meio de fichas que continham o histrico dos alunos, os dados cadastrais de alunos, professores e funcionrios, informaes sobre os cursos, entre outras informaes. Sabemos que os alunos so matriculados em curso, que os cursos so compostos por disciplinas e que as disciplinas so ensinadas por professores. A seguir so apresentados alguns exemplos de relatrios com as informaes que eram preenchidas:

ALUNO Nome Curso Semestre Data de RG Nascimento Endereo Completo (Rua, No., complemento, Bairro, Cep, Cidade, Estado) Rua Silva Jardim, no. 329 - Bela Vista - Cep 02460-044 - So Paulo/SP

Antonio Ubaldo da Silva Processamento 1 de dados

15/08/1955

3789789

Mariana Teles Guanabara

Magistrio

01/05/1953

48937321 Rua Irm Jussara, no. 33 apto. 5 - Jardim Eldorado - Cep 03845-000 - So Paulo/SP 2134812 Rua Diogo Prado, no. 4 - Vila Velha - Cep 04231-123 - So Paulo/SP

Aristides Almeida

Processamento 2 de dados

02/12/1952

64
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

CURSO Nome Processamento de Dados Magistrio Durao 2000 horas 1800 horas Disciplinas Clculo numrico, Portugus, Fundamentos de Computao ... Portugus, Tcnicas de Magistrio, Literatura ... Portaria de aprovao 578/70 579/70

DISCIPLINA Nome Clculo Numrico Clculo Numrico Tcnicas de Ensino Tcnicas de Ensino Carga Horria 80 80 80 80 Semestre 2 2 4 4 Professor Edgard Munhoz Beltro Edgard Munhoz Beltro Turma 1 2 Curso Processamento de dados Processamento de dados Magistrio Magistrio

Maria Eustquia 1 Xavier Maria Eustquia 1 Xavier

PROFESSOR Nome Edgard Munhoz Beltro Maria Eustquia Xavier Data de Nascimento 15/08/1935 11/10/1940 RG 1787789 12387941 Endereo Completo (Rua, No., complemento, Bairro, Cep, Cidade, Estado) Rua Altino Campestre, 32, Cep 04022-010 Jaboato, So Paulo/SP Rua Altamira, 48 apto. 3 - Vila Aurora - Cep 03847-100 - So Paulo/SP

Obs.: Os nomes e informaes so fictcios

03. Considerando a tabela ALUNO identifique e exemplifique: R: a. Um registro


Antonio Ubaldo da Silva Processamento de dados 1 15/08/1955 3789789 Rua Silva Jardim, no. 329 Bela Vista Cep 02460-044 So Paulo/SP

65
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

b. Um campo Nome c. dado Antnio Ubaldo da Silva

04. Supondo que voc tenha sido contratado para implementar este "banco de dados", e que tenha que sugerir um sistema gerenciador de bancos de dados para fazer isso, que aspectos voc levaria em considerao para sugerir o SGBD, justifique a sua resposta. R: Porte da empresa, Volume de informaes a serem gerenciados, Oramentos disponveis, Nvel de Segurana, Tempo de espera, entre outras.

05. Supondo que as informaes acima foram armazenadas em Tabelas, quais as caractersticas de um Banco de dados Relacional que no esto sendo consideradas de acordo com as informaes observadas? Justifique a sua resposta. R: Redundncia no armazenamento de informaes

1.2. Estrutura dos campos e tabelas

Considerando o Cenrio "Aprendendo a Aprender", faa o que se pede para cada uma das tabelas.

01. Defina os identificador, tipo de dado e tamanho adequado para cada campo. R:
ALUNO Nome Nome do Curso Semestre Data de Nascimento dt_nasc date rg RG Endereo Completo end

Identificador Tipo de dado Tamanho

nome_aluno curso varchar2 30 varchar2 20

semestre number 2

number varchar2 9 60

66
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

CURSO Nome Identificador Tipo de dado Tamanho Durao Disciplinas disciplina varchar2 20 Portaria de aprovao port_apr varchar2 8

nome_curso duracao varchar2 20 number 5

DISCIPLINA Nome Identificador Tipo de dado Tamanho nome_disc varchar2 20 Carga Semestre Professor Horria ch number 3 Sem Number 2 professor varchar2 30 Turma turma varchar2 3 Nome do Curso curso varchar2 20

PROFESSOR PROFESSOR Identificador Tipo de dado Tamanho Nome Data de Nascimento rg number 9 RG Endereo Completo end varchar2 60

nome_aluno dt_nasc varchar2 30 date

67
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

02. Identifique um campo candidato chave primria, caso isso no seja possvel sugira o acrscimo de uma nova coluna tabela, indicando o nome da coluna e o tipo de dado. R: ALUNO poderia ser adicionado um campo Registro do Aluno (ra), do tipo numrico com 5 posies, ou ento considerar o campo RG CURSO poderia ser adicionado um campo Cdigo do Curso (cod_curso), do tipo numrico com 5 posies DISCIPLINA poderia ser adicionado um campo Cdigo da Disciplina (cod_disc), do tipo numrico com 5 posies PROFESSOR - poderia ser adicionado um campo Registro do Professor (rp), do tipo numrico com 5 posies, ou ento considerar o campo RG

03. Para que possamos estabelecer o relacionamento entre as tabelas e, com isso, evitar o armazenamento de informaes duplicadas deve-se acrescentar chaves estrangeiras s tabelas, sendo assim: a. Cite duas tabelas que deveriam ser relacionadas? R: ALUNO e CURSO DISCIPLINA e CURSO PROFESSOR e DISCIPLINA Quais seriam as vantagens obtidas ao relacionarmos as tabelas, alm de evitar a duplicao de informaes? R: Atualizao em uma nica fonte, garantindo a preciso da informao, economia de memria e espao em disco, otimizao de consultas, eliminao de colunas b. Identifique ou sugira campos que possam vir a ser chaves estrangeiras nas tabelas citadas na resposta 3.a R: Na tabela ALUNO o campo curso no qual est sendo matriculado, este campo poderia ser chamado curso, do tipo numrico com 5 posies. Na tabela DISCIPLINA poderia ser acrescida a coluna cdigo do curso ao qual est disciplina pertence, este campo poderia ser chamado curso, do tipo numrico com 5 posies. * Na tabela DISCIPLINA poderia ser acrescida a coluna cdigo do professor, este campo poderia ser chamado cod_prof, do tipo numrico com 5 posies, est sugesto no foi implementada nas solues apresentadas nos itens posteriores. c. Com o relacionamento entre as tabelas da resposta 3.a quais campos poderiam ser eliminados nas tabelas? R: a princpio: ALUNO - Nome do curso DISCIPLINA - Nome do curso CURSO Nome da disciplina PROFESSOR nenhuma

68
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

04. Considere as sugestes apresentadas anteriormente e identifique as colunas que devem possuir restries, mencione qual a restrio que dever ser utilizada e justifique a sua resposta. R:
ALUNO Registro do Aluno Identificador Tipo de dado Tamanho Restrio ra number 5 primary key Nome Cdigo do Curso Semestre semestre number 2 Data de Nascimento dt_nasc date rg number 9 unique RG Endereo Completo end varchar2 60

nome_alu curso no varchar2 30 not null number 5 foreing key

CURSO Cdigo do Curso Durao Portaria de aprovao Identificador Tipo de dado Tamanho Restrio cod_curso number 5 primary key duracao number 5 port_apr varchar2 8

DISCIPLINA Cdigo da Disciplina Identificador cod_disp Nome Carga Semestre Professor Horria sem number 2 professor varchar2 30 Turma turma Cdigo do Curso curso

nome_disc ch varchar2 20 not null number 3 not null

Tipo de dado number Tamanho Restrio 5 primary key

varchar2 number 3 5 foreing key

69
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

PROFESSOR Registro do Professor Identificador Tipo de dado Tamanho Restries rp number 5 primary key Nome Data de Nascimento RG rg Endereo Completo end

nome_aluno dt_nasc varchar2 30 not nul date

number varchar2 9 unique 60

70
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exerccio 2 Identificao de Entidades e Atributos


Caso: Instituio de Ensino "Aprendendo a Aprender"

Estamos no ano de 2004, a Instituio de Ensino "Aprendendo a Aprender" estar completando no prximo ano 35 anos de atuao, ao longo de sua existncia preserva a preocupao com a qualidade, no s nos seus servios prestados, mas principalmente no ser humano. Atualmente conta com 10.000 alunos, gradativamente deixou de oferecer cursos tcnicos e substituindo-os por cursos de Tecnologia, conta atualmente com 8 cursos de tecnologia, dentre eles Bancos de Dados, Redes de Computadores, Sistemas de Informao e Sistemas Web. Possui 500 funcionrios, sendo que, 300 so professores e 200 funcionrios administrativos. Os seus cursos continuam sendo oferecidos nos perodos matutino, vespertino e noturno. Cada curso possui uma carga horria que distribuda em disciplinas com ciclos semestrais, tambm possui um professor coordenador. As disciplinas so especficas para cada curso, mesmo que disciplinas com mesmo nome faam parte da grade de vrios cursos ela dever possuir cdigos diferentes, isso se faz necessrio, pois para cada curso a disciplina visa atender um objetivo na formao das competncias a serem desenvolvidas, tendo por isso, objetivos especficos diferenciados para cada curso. Toda disciplina possui uma carga horria, a soma das cargas horrias de uma disciplina dever ser compatvel com a carga horria do curso, o cdigo da disciplina dever ser composto pelo cdigo do curso e um identificador para a disciplina. Cada professor poder ensinar diferentes disciplinas. Cada turma dever possuir um conjunto de alunos, um conjunto de disciplinas compatvel com o semestre da grade daquela turma, um professor para cada disciplina e as informaes de ano e semestre letivos. O cdigo identificador da turma dever ser composto pelo contedo dos campos: ano letivo, que representa o ano corrente, o semestre letivo que dever identificar o se 1. semestre ou 2. semestre do ano, cdigo do curso, semestre da grade de disciplinas que dever ser atribuda turma e o identificador da turma. Os funcionrios da Instituio dividem-se em duas categorias: professores e administrativos. Para os professores necessrio o armazenamento de sua titulao, especialmente para fins de pagamento, uma vez que existe uma tabela para pagamentos que varia de acordo com a titulao do professor, o professor remunerado em funo da quantidade de aulas que leciona. J para os funcionrios administrativos importante que se conhea o cargo e salrio, tambm existe um plano de carreira para os funcionrios administrativos que prev os cargos, salrios e benefcios para cada funo.

01. Identifique as possveis entidades apresentadas no cenrio da Instituio de Ensino Aprendendo a Aprender.

02. Identifique os possveis atributos para cada entidade

03. Qualifique os atributos definindo: Nome, tipo de dado a ser armazenado, tamanho do dado e restries.

71
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

R:

ALUNO registro de aluno: numrico com 5 posies, chave primria


nome: alfanumrico com 30 posies, preenchimento obrigatrio email: alfanumrico com 20 posies data de nascimento: data

FUNCIONARIO cdigo de funcionrio: numrico com 5 posies,chave primria


nome: alfanumrico com 20 posies e preenchimento obrigatrio email: alfanumrico com 20 posies data de nascimento: data dt_admissao: date tipo: numrico com 1 posio, o contedo do campo poder ser 1 ou 2

PROFESSOR
cdigo de professor: numrico com 5 posies, chave primria, estabelece o relacionamento com a tabela FUNIONARIO titulao: alfanumrico com 15 posies

ADMINISTRATIVO
cdigo de funcionrio: : numrico com 5 posies, chave primria, estabelece o relacionamento com a tabela FUNIONARIO cargo: alfanumrico com 15 posies salrio: numrico real com 2 casas decimais

CURSO
cdigo do curso: numrico com 5 posies, chave primria nome: alfanumrico com 30 posies, contedo exclusivo carga horria: numrico com 4 posies parecer de aprovao: alfanumrico com 6 posies, contedo exclusivo coordenador: numrico com 5 posies, campo de ligao com o PROFESSOR DISCIPLINA cdigo da disciplina: campo numrico com 12 posies, chave primria nome: campo numrico com 30 posies, preenchimento obrigatrio carga horria da disciplina: numrico com 3 posies cdigo do curso: numrico com 5 posies, este campo estabelece relacionamento com a tabela CURSO

72
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

TURMA
ano letivo: numrico com 4 posies semestre letivo: numrico com 1 posio cdigo do curso: numrico com 5 posies, este campo estabelece relacionamento com a tabela CURSO semestre da grade: numrico com 5 posies cdigo da turma: numrico com 12 posies, chave primria

73
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exerccio 3 Identificao de Relacionamentos


Instrues: Este exerccio continuidade do exerccio 3

Caso: Instituio de Ensino "Aprendendo a Aprender"

Estamos no ano de 2004, a Instituio de Ensino "Aprendendo a Aprender" estar completando no prximo ano 35 anos de atuao, ao longo de sua existncia preserva a preocupao com a qualidade, no s nos seus servios prestados, mas principalmente no ser humano. Atualmente conta com 10.000 alunos, gradativamente deixou de oferecer cursos tcnicos e substituindo-os por cursos de Tecnologia, conta atualmente com 8 cursos de tecnologia, dentre eles Bancos de Dados, Redes de Computadores, Sistemas de Informao e Sistemas Web. Possui 500 funcionrios, sendo que, 300 so professores e 200 funcionrios administrativos. Os seus cursos continuam sendo oferecidos nos perodos matutino, vespertino e noturno. Cada curso possui uma carga horria que distribuda em disciplinas com ciclos semestrais, tambm possui um professor coordenador. As disciplinas so especficas para cada curso, mesmo que disciplinas com mesmo nome faam parte da grade de vrios cursos ela dever possuir cdigos diferentes, isso se faz necessrio, pois para cada curso a disciplina visa atender um objetivo na formao das competncias a serem desenvolvidas, tendo por isso, objetivos especficos diferenciados para cada curso. Toda disciplina possui uma carga horria, a soma das cargas horrias de uma disciplina dever ser compatvel com a carga horria do curso, o cdigo da disciplina dever ser composto pelo cdigo do curso e um identificador para a disciplina. Cada professor poder ensinar diferentes disciplinas. Cada turma dever possuir um conjunto de alunos, um conjunto de disciplinas compatvel com o semestre da grade daquela turma, um professor para cada disciplina e as informaes de ano e semestre letivos. O cdigo identificador da turma dever ser composto pelo contedo dos campos: ano letivo, que representa o ano corrente, o semestre letivo que dever identificar o se 1. semestre ou 2. semestre do ano, cdigo do curso, semestre da grade de disciplinas que dever ser atribuda turma e o identificador da turma. Os funcionrios da Instituio dividem-se em duas categorias: professores e administrativos. Para os professores necessrio o armazenamento de sua titulao, especialmente para fins de pagamento, uma vez que existe uma tabela para pagamentos que varia de acordo com a titulao do professor, o professor remunerado em funo da quantidade de aulas que leciona. J para os funcionrios administrativos importante que se conhea o cargo e salrio, tambm existe um plano de carreira para os funcionrios administrativos que prev os cargos, salrios e benefcios para cada funo.

01. Identifique os relacionamentos existentes entre as entidades apresentadas nos exerccios 2 e 3. R: Cada ALUNO deve ser alocado em uma e somente uma TURMA. Uma TURMA pode conter um ou muitos alunos. As TURMAS assistem a muitas DISCIPLNAS As DISCIPLINAS so assistidas por muita TURMAS Uma DISCIPLINA pode ser lecionada por um ou muitos PROFESSORES. Um PROFESSOR pode ministrar uma ou muitas DISCIPLINAS
74
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Uma DISCIPLINA compe um ou muitos CURSOS. UM CURSO composto por muitas DISCIPLINAS. Um PROFESSOR coordena um CURSO Um CURSO coordenado por um PROFESSOR. Um funcionrio pode ser ADMINISTRATIVO ou PROFESSOR. 02. Proponha um MER para o cenrio apresentado utilizando a metodologia de Peter Chen. R: Obs.: Neste ponto da matria especializao ainda no foi abordado, mas est sendo ilustrado na soluo.

Aluno 1:N

Funcionrio

1:N alocado em Professor 1:1 1:1 Turma 1:N Coordena Assiste Leciona Administrativo

N:M Disciplina 1:N 1:N

0:1 Curso 1:1

Compe

75
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exerccio 4 Estudo de Caso Biblioteca


Considere a situao: Seu grupo foi contratado para implementao de um banco de dados para a biblioteca da Instituio de Ensino Aprendendo a Aprender. Para isso, vocs devero realizar as seguintes tarefas:

01. Realize o levantamento de dados para identificao das necessidades do cliente e descreva o cenrio encontrado. R: A instituio de Ensino Aprendendo a Aprender possui um acervo composto por livros, revistas, artigos, peridicos, entre outros, todos so denominados como obras. Atualmente a catalogao das obras realizada manualmente, isto , os dados das obras so armazenados em fichas de papel e disponibilizadas em 2 arquivos, um organizado por ordem alfabtica de autor e outro por ordem alfabtica de ttulo. Estas fichas contm os seguintes dados das obras: Cdigo da Obra, Tipo da Obra (revista, livro, etc), nome do autor, cdigo do autor, ano de edio, nome da editora, cdigo da editora, classificao da obra (Informtica, infantil, literatura, etc.) Todos os usurios da biblioteca podem consultar as obras disponveis no acervo, mas somente podem pegar livros emprestados os usurios cadastrados. Para realizao do cadastro o usurio deve preencher uma ficha de cadastro e apresentar o seu documento de identificao. A ficha de cadastro preenchida manualmente e contm os seguintes dados: Identificao do usurio, tipo de usurio (aluno, professor ou funcionrio), data de nascimento, telefone, endereo, email e para menores de 18 anos dados do responsvel: nome, identidade, telefone e endereo. Quando um usurio pega um livro emprestado, a ficha do livro retirada do acervo e anexada ficha do aluno e a ficha que a atendente preenche informando cdigo do livro, cdigo do usurio, data de retirada e data de entrega e este conjunto arquivado em uma pasta organizada por data de entrega. Os usurios podem retirar qualquer tipo de obra por um prazo mximo de 10 dias. A quantidade de obras que cada usurio pode retirar de 3 obras. Para cada exemplar de uma obra preenchida uma ficha de catalogao, desta maneira se existirem 10 exemplares de um determinado livro sero preenchidas 10 fichas. Com o aumento de obras do acervo e tambm de usurios este controle est invivel, pois os atendentes precisam registrar:

Novas obras Novos usurios Emitir relatrios de utilizao de livros Emitir a listagem dos usurios em atraso e cobrar multa

a multa de 3 dias de suspenso do direito de retirada de livros para cada dia de atraso
controlar os emprstimos.
O objetivo da instituio que os processos da biblioteca sejam automatizados.

76
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

02. Identifique as entidades e atributos. R: Usurio: ID, Nome, DT_nascimento, Email, Endereco, Telefone, Responsvel, RG_Responsavel, Endereco_responsavel, Fone_responsavel Obra: ID, Tipo, Nome, DT_edio, Nome_editora, Cdigo_Editora, Nome_autor, Codigo_Autor, Classificao Emprstimo: ID_Usurio, ID_obra, DT_retirada, DT_devoluo

03. Identifique os relacionamentos entre as entidades. R: Um usurio pode retirar at 3 obras por perodo; Cada obra s pode ser retirada por um usurio de cada vez; Quando um usurio retira uma obra da biblioteca uma ficha de emprstimo preenchida.

04. Desenvolva o MER conceitual.

05. Desenvolva o MER lgico.

06. Desenvolva o MER fsico. Resposta das questes 4, 5 e 6:


Usurio id cod_usuario (FK) cod_obra (FK) nome email endereo fone responsavel id_responsavel fone_responsavel email_responsavel Obra ID_obra cod_usuario (FK) cod_obra (FK) id (FK) tipo edicao id_editora nome_obra nome_editora id_autor nome_autor classificacao

Emprstimo Cod_usuario cod_obra data_emprestimo data_retirada

77
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Usurio
id: VARCHAR2(20) cod_usuario: INTEGER cod_obra: INTEGER nome: VARCHAR2(20) email: CHAR(18) endereo: VARCHAR2(20) fone: VARCHAR2(20) responsavel: VARCHAR2(20) id_responsavel: VARCHAR2(20) fone_responsavel: VARCHAR2(20) email_responsavel: CHAR(18)

Obra
ID_obra: CHAR(18) cod_usuario: INTEGER cod_obra: INTEGER id: VARCHAR2(20) tipo: VARCHAR2(20) edicao: INTEGER id_editora: INTEGER nome_obra: VARCHAR2(20) nome_editora: VARCHAR2(20) id_autor: INTEGER nome_autor: VARCHAR2(20) classificacao: VARCHAR2(20)

Emprstimo
cod_usuario: INTEGER cod_obra: INTEGER data_emprestimo: DATE data_retirada: DATE

78
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exerccio 5 Normalizao do Exerccio 4


Instrues: Este exerccio d continuidade ao exerccio 4

Considere o modelo desenvolvido no exerccio 4, aplique as regras de normalizao e:

01. Identifique as entidades e atributos para cada grupo;

02. Construa um MER - lgico R:


Usurio id nome email endereo fone data_nascimento id_responsavel (FK) Responsvel id_responsavel nome_responsavel fone_responsavel email_responsavel endereo_responsavel

Editora id_editora nome_editora

Emprstimo

cod_usurio cod_obra id (FK) id_editora (FK) data_emprestimo data_retirada

Obra ID_obra id_editora (FK) tipo edicao nome_obra classificacao id_autor

Autor x Obra cod_autor cod_obra ID_obra (FK) id_autor (FK) id_editora (FK) Autor id_autor nome_autor

79
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Exerccio 6 Terico e Prtico Caso da Nota Fistal


Considere as seguintes entidades e dados sobre o problema:

Cliente Nome CPF RG End Fone Nascimento

Produto Codigo Descrio Valor

Nota Fiscal Numero Cliente Nome vendedor Cdigo vendedor Produto Valor total Data Entrega

Venda Vendedor Valor Comisso Data Tipo

Dados sobre o problema:

O cliente ao efetuar uma compra tem seus dados pessoais cadastrados. Existe a necessidade de se verificar a forma de pagamento, que pode ser a vista ou a prazo e em ambos os casos existe a possibilidade de faze-lo com cheque, dinheiro ou carto de crdito O produto pode ser retirado pelo cliente ou entregue em um endereo que pode ou no ser o seu endereo pessoal A venda gera um pagamento de comisso ao vendedor, o percentual de venda de 2% do valor da compra Os produtos ficam armazenados em um estoque. O vendedor antes de efetuar uma venda consulta o estoque Toda venda gera uma nota fiscal que deve conter os dados do vendedor, do cliente, da entrega, dos produtos, data e nmero da nf, valor total de cada produto, valor total geral Todo vendedor possui um gerente, que tambm deve ser cadastrado como sendo um funcionrio. Com base nestas informaes, verifique se as tabelas indicadas so suficientes para o armazenamento dos dados necessrios a construo de uma base de dados que permita o funcionamento adequado de uma loja de eletrodomsticos e:

80
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

Modelo do Banco

1. Construa um modelo lgico 2. Aplique as regras de normalizao 3. Justifique as tabelas criadas ou desmembradas. 4. Construa um modelo Fsico.

R: Soluo apresentada pelos alunos Alexandre Bevilacqua Pacheco e Ricardo de Moraes Peretto ( turma 3Bd2 2s2003)

Foi utilizada a ferramenta Erwin para modelagem e gerao dos scripts de criao das tabelas

81
Copyright Faculdade IBTA

82
Produto_estocado ID_PRODUTO_ESTOCADO: number(5) Gerente ID_GERENTE: number(5) VALOR_UNITRIO: number(10,2) QUANTIDADE: number(10) DESCRIO: varchar2(40) Itens_nf ID_NFISCAL: number(5) ID_PRODUTO_ESTOCADO: number(5) Fone_cliente VALOR_UNITRIO: number(5,2) QTDE: number(5) DDD: number(3) NUMERO: number(15) ID_CLIENTE: number(5) Cliente ID_CLIENTE: number(5) Forma_pgto ID_FORMA_PGTO: number(5) DESCRICAO: varchar2(20) CPF: number(9) CPF_CONTROLE: number(2) RG: varchar2(15) END: varchar2(50) DT_NASC: date NOME: varchar2(40)

Funcionrio

ID_FUNCIONRIO: number(5)

DT_ADMISSAO: date NOME: varchar2(40)

Vendedor

ID_VENDEDOR: number(5)

COMISSO: number(3) ID_GERENTE: number(5)

Nfiscal

ID_NFISCAL: number(5)

ID_CLIENTE: number(5) ID_FORMA_PGTO: number(5) ID_TIPO_PGTO: number(5) DT: date END_ENTREGA: varchar2(50) ID_VENDEDOR: number(5)

Copyright Faculdade IBTA

Tipo_pgto

ID_TIPO_PGTO: number(5)

DESCRICAO: varchar2(20)

IBTA 2567

DW / SI Banco de Dados Semestre III

IBTA 2567
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
83
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
84
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
85
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
86
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
87
Copyright Faculdade IBTA

IBTA 2567
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
88
Copyright Faculdade IBTA

Sistemas de Informao Desenvolvimento de Sistemas Web

Apostila do Professor
2 Bim. Semestre 3 BD

BANCO DE DADOS
Autor: Sandra G. Puga

3 BD 2T 1

Prezado aluno, Este material compreende apenas o contedo da disciplina. Assim, no deve ser a nica fonte de consultas em seus estudos. O contedo deve ser complementado com outras obras, indicadas por seu professor ou encontradas em suas pesquisas.

Revises:

2 Edio 3 Impresso 1 Semestre de 2007 Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

ndice

10. SQL Strutured Query Language ..........................................................................................1 10.1. Histrico .............................................................................................................................1 10.2. Caractersticas da SQL ......................................................................................................1 10.3. Instrues DDL ..................................................................................................................2 10.4. Instrues DML ..................................................................................................................2 10.5. Instrues DCL ..................................................................................................................2 10.6. Ambiente de trabalho .........................................................................................................3 10.7. Operadores ........................................................................................................................5 10.8. Consultas em vrias tabelas ............................................................................................10 10.8.1. Junes hbridas ..................................................................................................11 10.9. Insero de dados ...........................................................................................................31 10.10. Alterao de dados ........................................................................................................34 10.11. Remoo de dados ........................................................................................................35 10.12. Confirmando ou descartando transaes ......................................................................35 10.13. Criando tabelas .............................................................................................................38 10.14. Instrues para manipulao de tabelas .......................................................................61 10.15. Seqncia ......................................................................................................................66 10.16. Sinnimo ........................................................................................................................70 10.16.1. Consultando sinnimos no dicionrio de dados ..............................................70 10.16.2. Removendo um sinnimo ................................................................................71 10.17. ndice (Index) .................................................................................................................71 10.17.1. Criando um ndice ............................................................................................72 10.17.2. Consultando ndices no dicionrio de dados ...................................................73 10.17.3. Recriando um ndice ........................................................................................74 10.17.4. Removendo um ndice .....................................................................................74

1
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

2
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

10. SQL Strutured Query Language

Neste captulo, sero abordadas as estruturas SQL para criao e manipulao de tabelas e dados. A SQL uma linguagem estruturada que utiliza uma combinao de construtores em lgebra e clculo relacional, e que possibilita no s a realizao de consultas, como o prprio nome sugere, mas tambm a manipulao de tabelas e dados. Apesar de ser conhecida como uma linguagem para consultas, ela no s possibilita a realizao de consultas, mas tambm criao, alterao e excluso de tabelas e manipulaes de dados. A SQL a linguagem padro utilizada pelos SGBD relacionais, mesmo assim podem existir algumas variaes quanto sua utilizao. Neste curso, a SQL ser abordada de acordo com as especificidades do SGBD relacional Oracle.

10.1. Histrico
Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas sua manipulao. O Departamento de Pesquisas da IBM desenvolveu a SQL como forma de interface para o sistema de BD relacional denominado SYSTEM R. Isso ocorreu no incio dos anos 70, e a SQL era originalmente chamada de SEQUEL Structured English Query Language. Em 1977, foi revisada e passou a ser chamada de SQL Structured Query Language. Em 1986, o American National Standard Institute (ANSI) publicou um padro SQL. Ento, a SQL estabeleceu-se como linguagem padro para Bancos de Dados Relacionais.

10.2. Caractersticas da SQL


A SQL possui comandos para a definio dos dados (DDL-Data Definition Language), comandos para a manipulao de dados (DML Data Manipulation Language) e uma subclasse de comandos DML, a DCL (Data Control Language). A SQL dispe, ainda, de comandos de controle, como Grant e Revoke. Algumas caractersticas da SQL so:

Independncia de fabricante: a SQL oferecida em praticamente todos os SGBDs. Portabilidade entre computadores: a SQL pode ser utilizada desde um PC, passando por
Workstations, at Mainframes.

Reduo de custos com treinamento: devido portabilidade, as aplicaes podem se


movimentar de um ambiente para outro, sem necessidade de um novo treinamento.

Ingls estruturado de alto nvel: a SQL formada por um conjunto bem simples de sentenas
em ingls, oferecendo um rpido e fcil entendimento.

Consulta interativa: prov um acesso rpido aos dados, fornecendo respostas ao usurio
quase instantaneamente.

1
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Mltiplas vises dos dados: permite ao criador do banco de dados levar diferentes vises dos
dados a diferentes usurios.

Definio dinmica dos dados: podem-se alterar, expandir ou incluir, dinamicamente, as


estruturas dos dados armazenados.

10.3. Instrues DDL


Os comandos DDL (Data Definition Language) so compostos, entre outros, pelos comandos Create. Esses comandos so destinados criao do Banco de Dados, das Tabelas que o compem, alm das relaes existentes entre as tabelas. Como exemplo de comandos da classe DDL, temos os comandos Create, Alter e Drop. Por meio das instrues DDL, podem ser realizadas as tarefas de:

criao, alterao e eliminao de objetos do banco de dados, como, por exemplo, tabelas,
ndices, seqncias;

concesso e revogao de privilgios em objetos; criao do banco de dados; criao de usurios; concesso e revogao de privilgios a usurios.

10.4. Instrues DML


Os comandos da srie DML (Data Manipulation Language) so destinados a consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea. Como exemplo de comandos da classe DML, podem-se citar os comandos:

Insert insero de dados; Update alterao de dados; Delete remoo de dados; Commit confirmao das manipulaes; Rollback desistncia das manipulaes; Select 1 seleciona linhas de dados de tabelas ou vises.

10.5. Instrues DCL


Os comandos da srie DCL (Data Control Language) so utilizados para controlar os privilgios de usurios. Com eles, possvel:

permitir a um usurio que se conecte ao banco;


1

Select - Existem autores que a classificam com instruo do DRL Linguagem para Recuperao de Dados. 2
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

permitir que crie objetos no banco; permitir que consulte objetos do banco; entre outros; cancelar os privilgios de um usurio ou personagem.
Para isso, esto disponveis as instrues: Grant: utilizada para conceder privilgios aos usurios. Revoke: utilizada para cancelar os privilgios dos usurios.

10.6. Ambiente de trabalho


Ser utilizada como ferramenta para edio e execuo de instrues SQL o SQL*Plus. O SQL*PLUS uma ferramenta do Oracle usada como interface para acesso ao banco de dados Oracle. No grfica2 e capaz de reconhecer e executar instrues SQL e PL/SQL 3. As instrues podem ser escritas diretamente no prompt, ou em um editor de textos.

sqlplusw
Figura 1. cone do SQLl*Plus

O SQL*Plus pode ser acessado a partir de um duplo clique no cone do aplicativo, ou selecionando diretamente o arquivo que est localizado no diretrio C:\oracle\ora92\bin\sqlplusw.exe A seguir ser solicitada a identificao do usurio e o nome do banco que ser utilizado. Alguns usurios e senhas default so:

Usurio Scott HR SYS


Tabela 1.

Senha Tiger HR Oracle


4

Privilgios usurio usurio administrador

2
3

Como ferramenta grfica, poder ser utilizado, por exemplo, o ORACLE NAVIGATOR: uma ferramenta grfica do Oracle que permite ao desenvolvedor a criao e manuteno de objetos no banco de dados. PL/SQL: a linguagem procedural do SQL do ORACLE, composta essencialmente de todos os comandos SQL padro e outras instrues, tais como estruturas de seleo, estruturas de repetio, recursos de manipulao de cursores, entre outras instrues que permitem utilizar o SQL de forma procedural. Essa linguagem ser estudada com mais detalhes na parte 3 da disciplina. Esta a senha default utilizada nos laboratrios do IBTA, a senha de instalao CHANGE_ON_INSTALL 3
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Figura 2. Autenticao e conexo - usurio

Figura 3. Autenticao e conexo - administrador

Na figura 2 exemplificado como pode ser realizada a conexo com o usurio Scott. Se estiver tudo correto, isto , se o banco subir, se o usurio e senha estiverem corretos, entre outros ser aberto o ambiente do SQL*Plus. A ferramenta oferece um menu com opes para manipulao de arquivos, configurao do ambiente, entre outras opes.

Figura 4. Ambiente de trabalho do SQL Plus

Quando o Oracle 9i instalado, so disponibilizados os Scripts para criao dos usurios Scott e HR. Estes usurios nem sempre so criados durante a instalao, para fazer isso realize a conexo com o usurio administrador, conforme a figura 3 e execute os scripts desses usurios.

Usurio SCOTT HR
Tabela 2.

Procedimento: Digitar no prompt do SQL: @ C:\oracle\ora92\rdbms\admin\SCOTT.SQL @ C:\oracle\ora92\demo\schema\human_resources\HR_MAIN.SQL

As instrues so digitadas no prompt e submetidas execuo aps o enter. Tambm podem ser executados arquivos com extenso sql. Para isso, deve-se digitar o comando execute seguido do caminho e nome do arquivo. Todos os exemplos apresentados neste material e exerccios sero trabalhados, a princpio, neste ambiente.

4
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Para a edio de instrues no SQL*PLUS, devem-se considerar algumas recomendaes:

No feita distino entre maisculas de minsculas, a menos que indicado. As instrues SQL podem ser digitadas em uma ou mais linhas. As palavras-chave no podem ser divididas entre as linhas nem abreviadas. As clusulas so, em geral, colocadas em linhas separadas para melhor legibilidade e
facilidade de edio.

As guias e endentaes podem ser usadas para tornar o cdigo mais legvel. Em geral, as
palavras-chave so digitadas em letras maisculas, todas as outras palavras, como nomes de tabela e colunas, so digitadas em minsculas.

Dentro do SQL*Plus, uma instruo SQL digitada no prompt SQL e as linhas subseqentes
so numeradas. Isso se chama buffer de SQL. Somente uma instruo pode ser a atual a qualquer momento dentro do buffer. Observao: Nesta apostila, os exemplos so baseados nas tabelas do usurio SCOTT.

10.7. Operadores
q Operadores aritmticos Os operadores aritmticos podem ser utilizados em qualquer clusula de uma instruo SQL, com exceo da clusula FROM. O SQL*Plus ignora espaos em branco antes e depois do operador aritmtico.

Operador + * /
Tabela 3.

Descrio Adio Subtrao Multiplicao Diviso

Exemplo Exibir o nome de todos os funcionrios da tabela emp, os seus salrios e salrios acrescidos de 300,00 SQL> SELECT ename, sal, sal+300 2 FROM emp;

5
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado ENAME KING BLAKE CLARK JONES MARTIN ALLEN ... Observe, no exemplo anterior, que a coluna SAL+300, resultante do clculo, no uma nova coluna na tabela EMP; ela somente para exibio. Por default, o nome de uma coluna surge do clculo que a criou nesse caso, sal+300. Se uma expresso aritmtica tiver mais de um operador, a multiplicao e a diviso sero avaliadas primeiro. Se os operadores dentro uma expresso tiverem a mesma prioridade, ento, a avaliao ser realizada da esquerda para a direita. Exemplo SQL> SELECT ename, sal, sal + ((sal * 30) / 100) 2 FROM emp; SAL 5000 2850 2450 2975 1250 1600 SAL+300 5300 3150 2750 3275 1550 1900

Podem-se sobrepor as normas de precedncia usando parnteses para especificar a ordem de execuo dos operadores. Isolando as operaes entre parnteses, fora-se a avaliao da expresso entre parnteses primeiro. q Operadores de comparao Esses operadores so utilizados para estabelecer uma relao de comparao entre valores ou expresses. O resultado dessa comparao sempre um valor lgico (booleano) verdadeiro ou falso5. Esses operadores podem ser utilizados em comparaes que envolvam apenas uma linha.

Operador = <> > < >=


Tabela 4.

Descrio igual diferente maior do que menor do que maior ou igual a

Operador <= between v1 and v2 in (lista de valores) Like is null

Descrio menor ou igual a entre dois valores (inclusive) compara a coluna aos valores de uma lista vincula um padro de caractere um valor nulo

Fonte: Puga, S. e Risseti, G. Lgica de Programao e estruturas de dados com implementao em java, So Paulo: Pearson, 2003.

6
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Operador BETWEEN: os valores especificados com o operador BETWEEN so inclusivos. Por isso, deve-se especificar primeiro o limite inferior. A instruo SELECT abaixo retorna as linhas da tabela EMP para qualquer funcionrio cujo salrio esteja entre US$1.000 e US$1.500. SQL> SELECT 2 3 FROM WHERE ename, sal emp sal BETWEEN 1000 AND 1500; | Limite Inferior | Superior Limite

Operador IN: para testar os valores em uma determinada lista, use o operador IN. Pode ser usado com qualquer tipo de dados. O exemplo seguinte retorna uma linha da tabela EMP para qualquer funcionrio cujo nome estiver includo na lista de nomes na clusula WHERE: SQL> 2 3 SELECT FROM WHERE empno, emp ename IN (FORD , ALLEN); ename, mgr, deptno

Se forem utilizados caracteres ou datas na lista, eles devem estar entre aspas simples ( ). Como segue no exemplo: SQL> SELECT 2 3 FROM WHERE empno, emp hiredate in (09-DEC-82, 23-JAN-82, 12-JAN-83); ename, mgr, deptno

Operador LIKE: possvel selecionar linhas que vinculem um padro de caractere usando o operador LIKE. A operao de vinculao de um padro de caractere refere-se a uma pesquisa de curinga. Dois smbolos podem ser utilizados para construir a string de pesquisa. A instruo SELECT acima retorna o nome do funcionrio da tabela EMP para qualquer funcionrio cujo nome comece com S. Note o S. maisculo. Os nomes iniciados com s no retornaro. O operador LIKE pode ser usado como um atalho para algumas comparaes BETWEEN. O exemplo a seguir exibe os nomes e as datas de admisso de todos os funcionrios admitidos entre janeiro e dezembro de 1981: Exemplo SQL> 2 3 SELECT FROM WHERE ename, hiredate emp hiredate LIKE %1981;

7
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Outro exemplo pode ser todos os funcionrios admitidos no ms de Janeiro, no importando o ano. SQL> 2 3 SELECT ename, hiredate FROM emp WHERE hiredate LIKE %JAN%;

Operador IS NULL: Verifica nulos. Um campo nulo significa que o valor no est disponvel, no-atribudo, desconhecido ou no-aplicvel. Assim, no possvel testar com (=) porque um nulo no pode ser igual ou diferente de qualquer valor. O exemplo abaixo recupera o nome, o cargo e o cdigo do departamento de todos os funcionrios que no possuem um gerente. SQL> 2 3 select ename, job, deptno from emp where mgr IS NULL;

q Operadores lgicos Um operador lgico combina o resultado de duas condies de componentes para produzir um nico resultado com base neles ou inverter o resultado para uma condio nica. Trs operadores lgicos esto disponveis no SQL:

Operador AND OR NOT


Tabela 5.

Descrio Retorna verdadeiro se todas as expresses envolvidas na operao forem verdadeiras. Retorna verdadeiro se pelo menos uma expresso envolvida na operao for verdadeira. Se o resultado da expresso for verdadeiro, retorna falso. Caso contrrio, retorna verdadeiro.

Ateno: esses operadores so utilizados para combinar expresses que sero utilizadas na clusula WHERE, seja em consultas ou nas instrues de alterao e excluso de dados. Exemplo utilizando o operador AND Exibir o cdigo, nome, cargo e salrio de todos os funcionrios que possuem salrio maior ou igual a US$ 1.100 e cargo igual a CLERK. SQL> SELECT empno, ename, job, sal 2 3 FROM WHERE emp sal >= 1100 AND job = CLERK;

8
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado EMPNO 7876 7934 ENAME ADAMS MILLER JOB CLERK CLERK SAL 1100 1300

2 rows selected. O operador AND funciona quando as duas condies forem verdadeiras. Caso contrrio, ou seja, se uma das condies no for verdadeira, no sero selecionadas as linhas. No exemplo abaixo, as duas condies devem ser verdadeiras para cada registro a ser selecionado. Assim, um funcionrio que possua o cargo CLERK e receba mais de US$ 1.100 ser selecionado. Ateno: nas pesquisas que envolvem dados alfanumricos, existe distino entre maisculas e minsculas e estes valores devem estar entre aspas. No caso do exemplo abaixo, no ser retornada nenhuma linha se CLERK no estiver em letra maiscula.

Exemplo utilizando o operador OR Exibir o cdigo, nome, cargo e salrio de todos os funcionrios que possuem salrio maior ou igual a US$ 1.100 e cargo igual a CLERK. SQL> SELECT empno, ename, job, sal 2 3 FROM WHERE emp sal>=1100 OR job=CLERK;

Resultado EMPNO 7839 7698 7782 7566 7654 ... 7900 ... 14 rows selected. O operador OR funciona quando pelo menos uma das condies for verdadeira. Assim, um funcionrio que possua o cargo CLERK ou que receba mais de US$ 1.100 ser selecionado. JAMES CLERK 950 ENAME KING BLAKE CLARK JONES MARTIN JOB PRESIDENT MANAGER MANAGER MANAGER SALESMAN SAL 5000 2850 2450 2975 1250

9
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Exemplo utilizando o operador NOT Exibir o nome e o cargo de todos os funcionrios que no possuem os cargos CLERK, MANAGER ou ANALYST. SQL> SELECT ename, job 2 FROM emp job NOT IN (CLERK,MANAGER,ANALYST); WHERE

Resultado ENAME KING MARTIN ALLEN TURNER WARD JOB PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN

O operador NOT funciona como indicao de negao de uma condio. E pode ser utilizado tambm com outros operadores SQL, como BETWEEN, LIKE e NULL. Exemplos ... WHERE ... WHERE ... WHERE ... WHERE job sal comm NOT NOT IS IN (CLERK, ANALYST) BETWEEN NOT NULL 1000 AND 1500 LIKE %A%

ename NOT

10.8. Consultas em vrias tabelas


A partir da verso 9i, o Oracle passou a oferecer, tambm, suporte ao padro SQL ANSI99, desta maneira so possveis os seguintes tipos de consultas envolvendo vrias tabelas:

Padro Oracle Produto cartesiano Equijuno No-equijuno Juno externa Autojuno


Tabela 6.

Padro SQL 99 Juno hbrida Junes naturais Juno USING Juno externa esquerda ou direita Juno ON

10
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

10.8.1. Junes hbridas So tambm denominadas Produto Cartesiano ou Cross Join. Ocorre quando uma condio de juno omitida ou invlida. Os dados das duas tabelas so apresentados gerando o produto cartesiano, por exemplo, se a tabela EMP tem 22 linhas e a tabela DEPT tem 4 linhas, o resultado do produto cartesiano ser 88 linhas. (22 * 4 = 88). Exemplo: Dadas as tabelas EMP e DEPT, elaborar uma consulta para mostrar o nome dos funcionrios e os nomes dos departamentos em que trabalham.

Padro Oracle select EMP.ename, DEPT.dname from EMP, DEPT


Tabela 7.

Padro ANSI 99 Select EMP.ename, DEPT.dname From EMP CROSS JOIN DEPT

Observao: para se trabalhar com vrias tabelas recomenda-se que o nome da coluna seja precedida do nome ou apelido da tabela.

Resultado ENAME sandra ALLEN ... sandra ALLEN OPERATIONS OPERATIONS DNAME ACCOUNTING ACCOUNTING

88 linhas selecionadas.

11
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

q Junes idnticas (equijoin) Uma juno idntica pode ser estabelecida entre tabelas que possuem chaves primria e estrangeira correspondentes. EMP EMPNO -----7839 7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 ENAME ------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH EPTNO -----10 30 10 20 30 30 30 30 30 20 20 DEPT DEPTNO ------10 20 30 DNAME ---------ACCOUNTING RESEARCH SALES LOC --------NEW YORK DALLAS CHICAGO

Chave primria

Chave estrangeira

Exemplo Dadas as tabelas EMP e DEPT, elaborar uma consulta para mostrar o nome dos funcionrios e os nomes dos departamentos em que trabalham. Para solucionar este problema, ser necessrio consultar os dados das colunas empno e ename, da tabela EMP, e dname, da tabela depto. Observe que a tabela EMP possui a coluna deptno, que uma chave estrangeira e promove o relacionamento desta tabela com a tabela DEPT, que tambm contm um campo com o nome deptno, que, neste caso, chave primria. Para que as tabelas sejam relacionadas, tem-se a situao de uma juno idntica que implementada pela condio de comparao entre as colunas: WHERE tabela_A.coluna_pk = tabela_B.coluna_fk

Padro Oracle Select EMP.ename, DEPT.dname from EMP, DEPT where EMP.deptno = DEPT.deptno;

12
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

No exemplo anterior: A clusula SELECT especifica os nomes de coluna a recuperar: nome do funcionrio e nmero do departamento, que so as colunas da tabela EMP, e nome do departamento, que coluna da tabela DEPT. A clusula FROM especifica as duas tabelas que o banco de dados deve acessar: tabela EMP e a tabela DEPT. A clusula WHERE especifica como as tabelas sero unidas: EMP.DEPTNO = DEPT.DEPTNO

Padro SQL 99 Junes naturais: utilizam todas as colunas com nomes e tipos de dados correspondentes para unir as tabelas. Select EMP.ename, DEPT.dname From EMP NATURAL JOIN DEPT; Para estabelecer o relacionamento, utilizando uma coluna especfica, deve-se utilizar a clusula USING: Select EMP.ename, DEPT.dname From EMP JOIN DEPT USING (deptno); Note que no exemplo anterior a palavra reservada NATURAL no est presente, NATURAL s deve ser utilizada quando no especificada a coluna utilizada para juno. Observao: a coluna utilizada na clusula USING no deve ser precedida de qualificador, isto , nome ou apelido da tabela. Uma outra variao de equijuno do padro SQL 99 inclui a utilizao da clusula ON para especificar a condio de juno: Select EMP.ename, DEPT.dname From EMP INNER JOIN DEPT ON (EMP.deptno = DEPT.deptno); Observao: o uso da palavra JOIN opcional Em todos os exemplos apresentados o resultado ser o mesmo ENAME ALLEN WARD 11 linhas selecionadas. DNAME SALES SALES

13
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

q Junes No-idnticas (No Equijoin) Uma juno no-idntica ocorre quando existe a necessidade de obteno de dados de tabelas que no possuem relacionamentos preestabelecidos. EMP EMPNO -----7839 7698 7782 7566 7654 7499 7844 7900 ... ENAME ------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES SAL -----5000 2850 2450 2975 1250 1600 1500 950 SALGRADE GRADE ----1 2 3 4 5 LOSAL -----700 1201 1401 2001 3001 HISAL -----1200 1400 2000 3000 9999

O salrio na tabela EMP est entre salrio inferior e salrio superior na tabela SALGRADE

O relacionamento entre a tabela EMP e a tabela SALGRADE uma juno no-idntica, o que significa que nenhuma coluna da tabela EMP corresponde diretamente a uma coluna da tabela SALGRADE. O relacionamento entre as duas tabelas permite que um valor da coluna SAL (da tabela EMP) esteja entre a coluna LOSAL e HISAL, da tabela SALGRADE. O relacionamento obtido usando um outro operador que no o igual (=). Exemplo Exibir o nome do funcionrio, seu salrio e a grade correspondente faixa salarial:

Padro Oracle SELECT FROM e.ename, e.sal, s.grade emp e, salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

Padro SQL 99 SELECT e.ename, e.sal, s.grade

FROM emp e JOIN salgrade s ON ( e.sal BETWEEN s.losal AND s.hisal)

14
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado ENAME JAMES SMITH ADAMS ... 14 rows selected. No exemplo anterior, foi criada uma juno no-idntica para avaliar uma classificao de salrio do funcionrio. O salrio deve estar entre qualquer par de faixas salariais inferior ou superior. importante notar que todos os funcionrios aparecem exatamente uma vez quando essa consulta executada. Nenhum funcionrio repetido na lista. H dois motivos para isto: Nenhuma das linhas na tabela de classificao salarial possui classificaes que se sobrepem, isto , o valor do salrio para um funcionrio pode estar somente entre valores salariais superiores e inferiores de uma das linhas tabela de classificao salarial; Todos os salrios dos funcionrios esto entre limites fornecidos pela tabela de classificao salarial, ou seja, nenhum funcionrio ganha menos que o valor contido na coluna LOSAL, ou mais que o valor mais alto contido na coluna HISAL. q Junes Externas (Outer join) utilizada para consultar os registros que atendem condio de juno e tambm os que no atendem. A(s) linha(s) ausente(s) pode(m) ser retornada(s) se um operador de juno externa for utilizado na condio de juno. No padro Oracle O operador de juno um sinal de adio entre parnteses (+), e colocado ao lado da juno que est com informao insuficiente. Esse operador possui o efeito de criar uma ou mais linhas nulas, para qual (quais) uma ou mais linhas da tabela no-deficiente pode ser unida. Sintaxe SELECT FROM WHERE onde: WHERE tabela1.coluna = tabela2.coluna(+); a condio de juno, o (+), sinal de juno externa deve ser indicado apenas para uma tabela.coluna. No Padro SQL 99 existem as seguintes possibilidades para realizao de Junes externas (outerjoin): tabela1.coluna, tabela1, tabela2 tabela1.coluna = tabela2.coluna(+); tabela2.coluna SAL 950 800 1100 GRADE 1 1 1

Juno externa que resulta as linhas de uma equijoin mais as linhas sem correspondentes em
tabelas esquerdas (OUTER JOIN LEFT) ou direitas (OUTER JOIN RIGHT)
15
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Juno externa completa que resulta as linhas de uma equijoin mais as linhas sem
correspondentes em ambos os lados (FULL OUTER JOIN).

Juno externa direita Exemplo Exiba os nomes dos funcionrios, e o nome do departamento em que trabalham. Exiba tambm os departamentos que no possuem funcionrios. Padro Oracle SELECT e.ename, d.deptno, d.dname FROM emp e, dept d WHERE e.deptno(+) = d.deptno ORDER BY e.deptno; Padro SQL 99 select EMP.ename, DEPT.dname FROM EMP RIGHT OUTER JOIN DEPT ON (EMP.deptno = DEPT.DEPTNO)

Resultado ENAME ----ALLEN WARD ... OPERATIONS 12 linhas selecionadas. No exemplo anterior, o operador de juno externa indica que podem existir departamentos que no possuam registros na tabela EMP. No resultado, pode-se observar que o departamento OPERATIONS no possui funcionrios. Ateno: uma condio envolvendo uma juno externa no pode usar o operador IN ou estar vinculada a outra condio pelo operador OR. DNAME ------SALES SALES

16
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Juno externa esquerda: Exemplo Exiba os nomes dos funcionrios e o nome do departamento em que trabalham. Exiba tambm os funcionrios que no esto alocados em nenhum departamento.

Padro Oracle select EMP.ename, DEPT.dname from EMP, DEPT where EMP.deptno = DEPT.deptno(+)

Padro SQL 99 select EMP.ename, DEPT.dname FROM EMP LEFT OUTER JOIN DEPT ON (EMP.deptno = DEPT.DEPTNO) ENAME ALLEN WARD ... ricardo danilo 22 linhas selecionadas. DNAME SALES SALES

Juno externa completa no possui correspondente no padro Oracle.

Padro SQL 99 select EMP.ename, DEPT.dname FROM EMP FULL OUTER JOIN DEPT ON (EMP.deptno = DEPT.DEPTNO)

17
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado ENAME KING ricardo danilo DNAME ACCOUNTING

OPERATIONS 23 linhas selecionadas. q Autojuno (Self-join) Algumas vezes, ser necessrio estabelecer o relacionamento entre colunas da mesma tabela. Neste caso, temos uma autojuno. Exemplo Exibir o nome dos funcionrios e o nome dos gerentes para o qual cada um subordinado. Cada registro do funcionrio contm uma coluna para o cdigo do gerente (MGR). Ento, para que seja possvel identificar o nome do gerente, ser necessrio associar est coluna coluna nmero do funcionrio (EMPNO). Observe que todos os dados esto na mesma tabela e mais, todo gerente um funcionrio!

Padro Oracle select WORKER.ename || trabalha para || Manager.ename FROM WHERE emp WORKER, emp MANAGER WORKER.mgr = MANAGER.empno;

Na resoluo, a tabela Emp recebe dois apelidos WORKER e MANAGER. A clusula WHERE contm a juno que significa em que lugar o nmero de gerente do trabalhador corresponde ao nmero do funcionrio para o gerente.

Padro SQL select WORKER.ename || trabalha para || Manager.ename FROM emp WORKER JOIN emp MANAGER ON(WORKER.mgr = MANAGER.empno);

18
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

EMP (WORKER) EMPNO 7839 7698 7782 7566 7654 7499 ENAME KING BLAKE CLARK JONES MARTIN ALLEN 7839 7839 7839 7698 7698 MGR

EMP(MANAGER) EMPNO 7839 7839 7839 7698 7698 ENAME KING KING KING BLAKE BLAKE

...

...
MGR na tabela WORKER igual a EMPNO na tabela MANAGER

Resultado WORKER.ENAME||TRABALHAPARA||MANAGER.EN ----------------------------------------BLAKE CLARK JONES ALLEN SCOTT ADAMS MILLER ... trabalha para trabalha para trabalha para trabalha para trabalha para trabalha para trabalha para KING KING KING BLAKE JONES SCOTT CLARK

Funes SQL As funes SQL, assim como em outras linguagens, recebem argumentos, processam esses argumentos e retornam um resultado ao ambiente de chamada. Um argumento pode ser uma constante fornecida pelo usurio, uma varivel, um nome de coluna ou uma expresso. Existem dois tipos de funes: as funes de uma nica linha e as funes de vrias linhas. q Funes de uma nica linha Funes de uma nica linha so usadas para manipular itens de dados. Elas aceitam um ou mais argumentos e retornam um valor para cada linha retornada pela consulta. As funes de linha so utilizadas para manipular caracteres, nmeros, data e para converso de dados.

19
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Funes de linha para manipulao de caracteres

Funo LOWER(arg1) UPPER(arg1) INITCAP(arg1)

Descrio Converte uma cadeia de caracteres em letras minsculas. Converte uma cadeia de caracteres em letras maisculas. Converte a primeira letra de cada palavra para maiscula e mantm as outras letras em minscula. Concatena dois valores.

Exemplo Select Lower(ename) from emp; Select Upper(ename) from emp; Select Initicap(ename) from emp; Select Concat(ename, job) from emp;

CONCAT(arg1, arg2)

Ateno: A funo concat opera apenas com dois argumentos, para concatenar n valores, utilize o operador de concatenao ||. Exemplo: Select ename || trabalha como || job from emp; SUBSTR(arg1, arg2, arg3) Extrai uma cadeia de caracteres do arg1 iniciando a partir da posio indicada em arg2 conforme o tamanho especificado em arg3. Exibe o tamanho de um argumento. Select Substr(Plataformas, 6 2, 4) from dual ; Resultado: lata Select Length(Plataformas) from dual; Resultado: 11 Select Instr(Plataformas, t) from dual; Resultado: 4 Select Lpad(sal,10, *) from emp; Resultado: ******2000

LENGTH(arg1)

NSTR(arg1, arg2)

Localiza a posio numrica de arg2 em arg1. Exibe o valor de arg1 justificado direita, complementando as posies indicadas em arg2, e no preenchidas, com o caractere indicado em arg3 do lado esquerdo do valor.

LPAD(arg1,arg2, arg3)

RPAD(arg1,arg2, arg3): Exibe o valor de arg1 justificado esquerda, complementando as posies indicadas em arg2, e no preenchidas, com o caractere indicado em arg3, do lado direito do valor.
Tabela 8.

Select rpad(sal,10, *) from emp; Resultado: 2000******

A tabela DUAL pertence ao usurio SYS e pode ser acessada por todos os usurios. Ela contm uma coluna, DUMMY, e uma linha com o valor X. A tabela DUAL til quando se deseja retornar um valor somente uma vez por exemplo, o valor de uma constante, pseudocoluna ou expresso que no derivada de uma tabela com dados do usurio. A tabela DUAL, em geral, utilizada pela totalidade de sintaxe da clusula SELECT, pois as duas clusulas, SELECT e FROM, so obrigatrias e diversos clculos no precisam ser selecionados das tabelas reais.

20
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Funes de linha para manipulao de nmeros

Funo ROUND(arg, preciso)

Descrio Arredonda a coluna, expresso ou valor para n casas decimais. Se o segundo argumento for 0 ou estiver ausente, o valor ser arredondado para nenhuma casa decimal. Se o segundo argumento for 2, o valor ser arredondado para duas casas decimais, se o segundo argumento for -2, o valor ser arredondado para duas casas decimais para a esquerda. A funo ROUND pode tambm ser utilizada com funes de data. Trunca a coluna, expresso ou valor para n casas decimais. Se o segundo argumento for 0, ou estiver ausente, o valor ser truncado para nenhuma casa decimal. Se o segundo argumento for 2, o valor ser truncado para duas casas decimais, se o segundo argumento for -2, o valor ser truncado para duas casas decimais para esquerda. Pode ser usada com funes de data. Retorna o resto da diviso de arg1 por arg2. calcula n elevado a m calcula a raiz quadrada de n arredonda n para cima arredonda n para baixo

Exemplo Select Round(1500.8987, 2) From Dual; Resultado: 1500.9 Select Round(1999.8987,-2) From Dual; Resultado: 2000

TRUNC (arg1, arg2)

Select Trunc(1500.8987, 2) From Dual; Resultado: 1500.89

MOD(arg1, arg2) POWER(n,m) SQRT(n) CEIL(n) FLOOR(n)


Tabela 9.

Select Mod(14,3) From Dual; Resultado: 2 Select power(5, 9) from dual; Select SQRT(88) from dual; Select CEIL(25.2) from dual; Resultado: 26 Select FLOOR(25.2) from dual; Resultado: 25

Funes de linha para manipulao de datas O Oracle armazena datas em um formato numrico interno, representando o sculo, ano, ms, dia, horas, minutos e segundos. Sendo assim, podem-se executar operaes aritmticas com elas. O formato de entrada e exibio default para qualquer data DD-MON-YY. Datas vlidas para o Oracle esto entre 1 de janeiro, 4712 A.C. e 31 de dezembro, 9999 D.C. O exemplo apresentado a seguir utiliza o operador aritmtico de subtrao.

21
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Exemplo Exibir o nome e o nmero de semanas trabalhadas de todos os funcionrios: SQL> SELECT ename, (SYSDATE - hiredate) / 7 SEMANAS 2 FROM emp deptno = 10; 3 WHERE

Resultado ENAME KING CLARK MILLER ... SEMANAS 830.93709 853.93709 821.36566

SYSDATE: retorna a data e a hora atual. Exemplo Exibir a data do sistema. SQL> Select sysdate from dual; Resultado: 18/03/03

MONTHS_BETWEEN(data1, data2): retorna o nmero de meses entre a data1 e a data2. O resultado pode ser positivo ou negativo. Se data1 for posterior a data2, o resultado ser positivo; se data1 for anterior a data2, o resultado ser negativo. A parte no-inteira do resultado representa uma parte do ms. Exemplo Selecionar o nmero de meses trabalhados de cada funcionrio. SQL> SELECT ENAME, TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS MESES FROM EMP; Resultado ENAME KING BLAKE CLARK JONES ...
22
Copyright Faculdade IBTA

MESES 253 259 258 260

IBTA 2568
DW / SI Banco de Dados Semestre III

ADD_MONTHS(data, n): Adiciona um nmero de meses, representados por n, data. O valor de n deve ser inteiro e pode ser positivo ou negativo. Exemplo Adicionar 10 meses data de admisso do funcionrio. SQL> SELECT ENAME, 2 ADD_MONTHS( HIREDATE, 10) AS ADICIONAR_10_MESES 3 FROM EMP; Resultado ENAME KING BLAKE CLARK ... ADICIONAR_10 17-SEP-82 01-MAR-82 09-APR-82

NEXT_DAY(data, char): localiza a data do prximo dia especificado da data seguinte da semana (char). O valor de char pode ser um nmero representando um dia ou uma string de caractere. Exemplo Exibir a data do prximo domingo a partir da data de admisso para cada funcionrio. SQL> SELECT ENAME, NEXT_DAY(HIREDATE, 1) FROM EMP; Resultado ENAME KING BLAKE CLARK ... NEXT_DAY( 22-NOV-81 03-MAY-81 14-JUN-81

LAST_DAY(data): localiza a data do ltimo dia do ms da data especificada em data. Exemplo Exibir o ltimo dia do ms a partir da data de admisso de cada funcionrio. SQL> SELECT ENAME, LAST_DAY(HIREDATE) FROM EMP;

23
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado ENAME KING BLAKE CLARK ... LAST_DAY( 30-NOV-81 31-MAY-81 30-JUN-81

TRUNC(data[, formato]): retorna a data com a parte da hora do dia truncada para a unidade especificada pelo modelo de formato formato. Se o modelo de formato formato for omitido, a data ser truncada para o dia mais prximo. O formato pode representar o dia, ms ou ano. Exemplo SQL> SELECT ENAME, TRUNC(HIREDATE, YEAR) FROM EMP; Resultado ENAME KING BLAKE CLARK ... q Funes para converso de dados Muitas vezes, necessrio que converses de dados sejam feitas para que seja possvel a realizao de alguma operao. Para isso, existem as funes de converso de tipos de dados TO_CHAR (nmero ou data, formato), TO_NUMBER(char), TO_DATE(char, formato), NVL(coluna, valor). TRUNC(HIR 01-JAN-81 01-JAN-81 01-JAN-81

Converso de datas em caracteres A converso de datas em caracteres especialmente interessante para algum tipo de manipulao que requeira a apresentao de datas em formatos especficos. Para isso, deve-se:

Especificar o modelo de formato, que deve estar entre aspas simples, e fazer distino entre
maisculas e minsculas.

Utilizar formato de data vlido (vide lista de formatos apresentada anteriormente). Separar o valor da data do modelo de formato por uma vrgula.

24
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Alguns formatos para representao e manipulao das datas so: DD dia do ms DY nome do dia abreviado com 3 letras DAY nome do dia DDSP nome do dia no ms por extenso MM nmero do ms MON nome do ms abreviado MONTH nome do ms por extenso YY ano com dois dgitos YYYY ano com quatro dgitos HH:MI:SS hora, minutos e segundos HH24 hora (0 a 23) TH nmero ordinal AM ou PM indicador meridiano Ateno

Os nomes de dias e meses na sada so preenchidos automaticamente por espaos. Pode-se redimensionar o tamanho da exibio do campo de caractere resultante com o
comando COLUMN do SQL*Plus.

A largura da coluna resultante , por padro, de 80 caracteres.


Exemplo 1 Exibir a data e hora do sistema, seguindo o formato do exemplo: 30/Abril/2004 11:32:15 SQL> Select to_char(sysdate,DD/MMMM/YYYYHH24:MI:SS) 2 from dual; Resultado 18/MARO /2003 18:31:00

Exemplo 2 Exibir a data e hora do sistema seguindo o formato do exemplo: 30 de Abril de 2004, 11:32 manh SQL> select 2 to_char(sysdate, dd de month de yyyy , hh:mi am) 3 from dual; Resultado 18 de maro de 2003 , 06:33 tarde
25
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Converso de nmeros em caracteres Assim como na converso de datas em caracteres, a converso de nmeros em caracteres especialmente utilizada para manipulao que requeira a apresentao de nmeros em formatos especficos. A seguir, so apresentados alguns exemplos de formatos e a exibio gerada pela sua utilizao. Exemplo Valor de entrada 1234

Formato e descrio $ - exibe o cifro no lado esquerdo do valor , - separador de milhar . - separador decimal 0 - completa com zeros esquerda quando o valor informado tiver comprimento menor do que o especificado 9 - completa com brancos esquerda quando o valor informado tiver comprimento menor do que o especificado
Tabela 10.

Formato $99999 999,999 99999.99 099999 99999

Resultado $1234 1,234 1234.00 01234 b1234

Exemplo Exibir os valores da coluna do salrio no formato original e no formato monetrio. SQL> SELECT sal, TO_CHAR(sal, $99,999.99) FROM EMP; Resultado SAL 800 1600 1250 160000 TO_CHAR(SAL $800.00 $1,600.00 $1,250.00 ########

Observe no resultado que, na ltima linha, o valor formatado foi substitudo por #. Isso ocorreu porque o valor correspondente em SAL ultrapassa o comprimento definido. Ateno

O Oracle Server exibe uma string com sinais numricos (#) no lugar de um nmero inteiro cujos
dgitos excedam o nmero de dgitos fornecidos no modelo de formato.

O Oracle Server arredonda os valores decimais armazenados para o nmero de espaos


decimais fornecidos no modelo de formato.

26
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Converso de caracteres em nmeros Converte uma cadeia de caracteres numricos para um nmero inteiro. Exemplo Exibir o resto da diviso do caractere 999 por 5. SQL> select mod(to_number(999),5) from dual; Resultado:4 Observe que o valor 999 do tipo caractere. Sendo assim, para realizao da operao aritmtica solicitada, deve-se convert-lo para um tipo numrico.

Converso caracteres em datas Converte uma cadeia de caracteres para data Exemplo SQL> Select to_date(01/maro/03) from dual; Resultado: 01/03/03 Exemplo2 SQL> Select to_TIMESTAMP(01/maro/03) from dual; Resultado: 01/03/03 00:00:00,000000000 q Outras funes de linha NVL (arg1, arg2): converso de nulos em valores. O valor informado em arg2 substitui os nulos encontrados em arg1. Pode-se usar NVL para converter qualquer tipo de dados. Porm, o valor do retorno dever ser do mesmo tipo de dados do arg1. Exemplo Exibir o nome, salrio, comisso e comisso total de todos os funcionrios. Na coluna comisso total, se o funcionrio no possuir comisso, dever ser exibido o valor 0. SQL> SELECT ename, sal, comm, NVL(comm, 0) as COMISSAO TOTAL EMP; FROM

27
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado ENAME SMITH ALLEN WARD JONES MARTIN BLAKE SAL 800 1600 1250 2975 1250 2850 1400 300 500 COMM NVL(COMM,0) 0 300 500 0 1400 0

NVL2(arg1, arg2, arq3): funo para converso de nulos em valores. Verifica se arg1 nulo, se no for retornar arg2, caso contrrio retornar arg3. Exemplo Exiba o nome, salrio, valor da comisso e o salrio total dos funcionrios, isto , o salrio adicionado da comisso quando houver um valor, caso contrrio o salrio total ter o mesmo valor do que o salrio. SELECT ename, sal, comm, NVL2(comm,sal + comm, sal) as SALRIO TOTAL FROM EMP; Resultado ENAME SMITH ALLEN WARD SAL 800 1600 1250 300 500 COMM SALRIO TOTAL 800 1900 1750

...

NULLIF(arg1, arg2): compara duas expresses: se forem iguais, retornar nulo, caso contrrio retornar arg1. Exemplo Verifique a quantidade de caracteres de Nome e Cargo, se forem iguais retorne nulo, caso contrrio retorne o tamanho do nome: Select LENGTH(ename), LENGTH(job), NULLIF (LENGTH(ename),LENGTH(job)) FROM EMP;

28
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado LENGTH(ENAME) 5 5 4 LENGTH(JOB) 5 8 8 5 4 NULLIF(LENGTH(ENAME),LENGTH(JOB))

COALESCE (arg1, arg2, ...argN): retorna a primeira expresso no-nula da lista. Exemplo Exibir nome do funcionrio e o valor da comisso, caso seja nulo, exiba o valor de salrio, se for nulo tambm exiba o valor 0; Select ENAME, COMM, SAL, FROM EMP; Resultado ENAME ADAMS ALLEN Arnaldo 300 COMM SAL COALESCE(COMM,SAL,0) 1100 1600 1100 300 0 COALESCE(COMM, Sal, 0)

DECODE (coluna, valor1, operao1, valor2, operao2, ... operaoN): funciona de maneira anloga estrutura de seleo Se-Seno. A funo decode verifica se o contedo do argumento coluna igual a valor1. Se verdadeiro, ento, realiza a operao indicada em operao1. Se no for verdadeiro, verifica se o contedo da coluna igual a valor2, se for verdadeiro realiza a operao indicada em operao2 e segue at o final. A operaoN (default) ser realizada para todas as linhas cuja coluna no atende s condies anteriores. Se o valor default for omitido, ser retornado um valor nulo, no qual um valor de pesquisa no corresponde a quaisquer valores de resultado. Exemplo Exibir os cargos e salrios dos funcionrios e calcular o reajuste salarial, de acordo com as especificaes:

Cargo ANALIST CLERK MANAGER Demais cargos


Tabela 11.

Percentual de reajuste 10% 15% 20% 0%

29
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

SQL> SELECT job, sal, 2 3 2 3 6 FROM emp; DECODE(job,ANALYST,SAL*1.1, CLERK , SAL*1.15, MANAGER, SAL*1.20, SAL) SAL_REVISADO

Resultado JOB PRESIDENT MANAGER MANAGER ... SAL 5000 2850 2450 SAL_REVISADO 5000 3420 2940

A soluo do exemplo anterior pode ser lida da seguinte maneira: Selecionar cargo, salrio e se cargo for igual a ANALYST, ento, aumente salrio em 10%; se cargo for igual a CLERK, ento, aumente salrio em 15%; se cargo for igual a MANAGER, ento, aumente salrio em 20% seno mostre salrio apenas da tabela EMP.

CASE: avalia uma expresso, se for verdadeira realiza uma instruo, caso contrrio avalia outra expresso, se for verdadeira realiza uma instruo e assim sucessivamente. Sintaxe CASE expr WHEN comparao1 THEN instrues1 WHEN comparao2 THEN instrues2 WHEN comparaoN THEN instruesN ELSE instrues_else END Considerando o mesmo exemplo apresentado no DECODE SELECT job, sal, CASE JOB WHEN ANALYST THEN SAL * 1.10 WHEN CLERK ELSE SAL END from EMP; THEN SAL * 1.15 WHEN MANAGER THEN SAL * 1.20

30
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado JOB CLERK SALESMAN SAL 800 1600 CASE 920 1600

Para utilizao de operaes de comparao diferentes de igual utilize a sintaxe abaixo: CASE WHEN comparao1 THEN instrues1 WHEN comparao2 THEN instrues2 WHEN comparaoN THEN instruesN ELSE instrues_else END Exemplo
SELECT job, sal,

Case When sal >= 1000 then precisa de reajuste When sal > 1000 and sal < 2000 then bom Else sem reajuste END from EMP Resultado JOB CLERK SALESMAN SAL CASEWHENSAL>=1000TH 800 sem reajuste 1600 precisa de reajuste

10.9. Insero de dados


A insero de dados uma operao DML. Sintaxe INSERT INTO tabela [(coluna [, coluna...])] VALUES (valor [, valor...]); Onde: Tabela Coluna Valor o nome da tabela. o nome da coluna a ser preenchida. A lista de colunas pode ser omitida. Neste caso, devem ser informados valores para todas as colunas. o valor correspondente para a coluna. Os valores de data e caractere devem ser informados entre aspas simples.

31
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Para verificar a ordem default das colunas de uma tabela e o tipo de dado esperado, utilize a instruo describe. SQL> DESCRIBE Name ---------DEPTNO DNAME LOC dept Null? ----------NUMBER(2) VARCHAR2(14) VARCHAR2(13) Type -------NOT NULL

Exemplo 1 Instruo completa para insero de dados SQL> INSERT INTO 2 VALUES dept (DEPTNO, DNAME, LOC)

(70, PRODUCAO, MARILIA);

Neste caso, no existe a necessidade de indicar as colunas que iro receber as inseres, pois esto sendo inseridos valores para todas as colunas. Ento, o mesmo exemplo poderia ser resolvido assim:

Exemplo 2 SQL> INSERT INTO 2 VALUES dept

(70, PRODUCAO, MARILIA);

Tambm possvel a insero implcita de nulos, isto , pode-se deixar de informar uma coluna na insero de dados para a qual ser atribudo nulo:

Exemplo 3 SQL> INSERT INTO 2 VALUES dept (deptno, dname )

(60, MIS);

A tabela dept contm as colunas deptno, dname e loc, no entanto, no exemplo anterior, esto sendo inseridos valores apenas nas colunas deptno e dname. Neste caso, a coluna loc ir conter NULL.

Exemplo 4 SQL> INSERT INTO 2 VALUES dept

(70, FINANCE, NULL);

J neste outro exemplo o nulo para a coluna loc est sendo explicitado. Note que a lista de colunas omitida, pois esto sendo mencionados os dados para todas as colunas. A palavra NULL poderia ser substituida por aspas simples (70, FINANCE, ).
32
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Para insero de datas, o formato default do Oracle DD-MON-YY, mas a data tambm pode ser informada de acordo com a configurao do sistema. Veja o exemplo a seguir: Exemplo 5 SQL> INSERT INTO emp 2 VALUES (2296,AROMANO,SALESMAN,7782, 03/02/97, 3 1300, NULL, 10); O resultado pode ser visualizado executando a consulta: SQL> Select * 2 from emp7;

EMPNO ----2296
Tabela 12.

ENAME ------AROMANO

JOB -------SALESMAN

MGR ---7782

HIREDATE SAL -------03/02/97 ---300

COMM ----

DEPTNO -----10

Observao: para insero de horas deve-se utilizar uma funo de linha, para converso de tipos de dados, este assunto ser abordado em captulos posteriores. A seguir apresentado um exemplo para insero e consulta de horas: Exemplo 5 Considere a tabela TEMPO criada a seguir: SQL> create table TEMPO 2 3 (hora1 date, hora2 timestamp);

Insira em hora1 o valor 18:15:10 e em hora2 o mesmo valor: 1 Insert into TEMPO(hora1, hora2)

2* Values (to_date(18:15:10,HH24:MI:SS), to_timestamp(18:15:10, HH24:MI:SS)) SQL> / 1 linha criada. Consulte a linha inserida SQL> SELECT TO_CHAR(hora1, HH24:MI:SS), hora2 2 from TEMPO;

A instruo select ser abordada com mais detalhes posteriormente. 33


Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

TO_CHAR(...) 18:15:10

HORA2 01/11/05 18:15:10,000000

Observe que em hora1 o segundo aparece com 2 casas, enquanto que em hora2, alm das duas casas a parte de fraes tambm aparece.

10.10. Alterao de dados


A alterao de dados uma operao DML. Sintaxe UPDATE tabela SET coluna = valor [, coluna = valor, ...] [WHERE condio]; onde: Tabela Coluna Valor Condio o nome da tabela. o nome da coluna a ser preenchida, podem ser atualizados os dados de vrias colunas. o valor correspondente ou subconsulta para a coluna. uma clusula opcional e identifica as linhas a serem atualizadas, de acordo com uma condio que pode ser composta por expresses de comparao ou subconsultas.

Exemplo Alterar o cdigo do departamento para 20 do funcionrio com cdigo 7782: SQL> UPDATE emp 2 3 SET WHERE deptno = 20 empno = 7782;

Ateno todas as linhas na tabela so modificadas quando a clusula WHERE for omitida.

34
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

10.11. Remoo de dados


A remoo de dados uma operao DML. Sintaxe DELETE [FROM]tabela [WHERE condio]; onde: Tabela Condio o nome da tabela. esta clusula opcional e identifica as linhas a serem eliminadas de acordo com uma condio que pode ser composta por expresses de comparao ou subconsultas.

Exemplo SQL> DELETE FROM dept 2 WHERE dname = PRODUCAO;

Ateno: todas as linhas na tabela sero removidas se a clusula WHERE for omitida.

10.12. Confirmando ou descartando transaes


Do ponto de vista do usurio, uma transao parece uma simples operao. Assim, por exemplo, ao transferir o dinheiro de uma conta corrente para outra, o usurio informa os dados requeridos para que a operao de transferncia seja realizada, e recebe uma notificao de concluso da operao. Por outro lado, para que a operao seja realizada com sucesso, sem a ocorrncia de falhas, uma srie de operaes devem ser realizadas. No caso do exemplo de transferncia de valores de uma conta para outra, as operaes, de maneira bem simplificada, so essas:

o dinheiro precisa ser debitado de uma conta. Portanto, uma operao de atualizao de dados
deve ser realizada nessa conta;

o dinheiro precisa ser creditado em outra conta. Portanto, outra operao de atualizao de
dados deve ser realizada nessa outra conta. Sendo assim, uma transao um conjunto de operaes DML que so realizadas para concluir uma determinada tarefa. Para garantir a integridade dos dados, necessrio que as transaes assegurem:

a consistncia de dados; a atomicidade todas as operaes devem ser refletidas corretamente no banco, ou, ento,
nenhuma das operaes dever ser realizada;

35
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

a integridade da base de dados.


Quando no ocorrem falhas no processamento das operaes de uma transao, ela pode ser efetivada. Nesse caso, as modificaes so refletidas fisicamente no banco de dados. Enquanto isso no ocorre, as modificaes so refletidas apenas em memria e podem ser desfeitas ou descartadas. O controle de transaes tambm permite que as alteraes realizadas possam ser visualizadas antes de se tornarem permanentes, e que as operaes relacionadas logicamente possam ser agrupadas. As instrues responsveis pelo controle das transaes so o commit e o rollbback. A emisso de um commit confirma as transaes, isto , efetiva as manipulaes de dados realizadas nas tabelas. A emisso de um rollback descarta as transaes que ainda no tenham sido confirmadas. Uma transao tem incio quando a primeira instruo SQL executvel realizada e termina com um dos seguintes eventos:

a emisso de uma instruo COMMIT ou ROLLBACK; a execuo de uma instruo DDL ou DCL. Nesse caso, ocorre um commit automtico; quando o usurio sai do SQL*Plus; houver uma falha no computador ou o sistema cair.
Um commit automtico ocorre sob as seguintes circunstncias:

a instruo DDL emitida; a instruo DCL emitida; a sada normal do SQL*Plus, sem emitir explicitamente COMMIT ou ROLLBACK.
Um ROLLBACK automtico ocorre quando h uma finalizao anormal do SQL*Plus ou queda do sistema.

Em efetivao parcial

Em efetivao

Ativa

Em falha

Abortada

Figura 5. Diagrama de estados de uma transao Fonte: Silberschatz [1999]

36
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782;

incio da transao; transao ativa; uma cpia dos dados antes da alterao armazenada no segmento de rollback. em efetivao parcial; concluso da operao; a alterao est disponvel em memria; as linhas afetadas ficam bloqueadas. em efetivao; a alterao refletida fisicamente no banco; as linhas afetadas so desbloqueadas. A imagem antiga retirada do segmento de rollback8.

SQL> COMMIT;

O bloqueio implcito ocorre para todas as instrues SQL, exceto SELECT. O mecanismo de bloqueio default do Oracle automaticamente usa o nvel mais inferior da restrio aplicvel, fornecendo, assim, o maior grau de simultaneidade e mxima integridade de dados. O bloqueio em um banco de dados do Oracle automtico e no requer ao do usurio. Ateno: importante lembrar que, aps a emisso do comando COMMIT, no h mais como reverter a operao feita anteriormente.

Exemplo usando rollback Remover todas as linhas da tabela employee SQL> Delete 2 From employee; 14 rows deleted incio da transao; transao ativa; uma cpia dos dados antes da alterao armazenada no segmento de rollback. em efetivao parcial; concluso da operao; a alterao est disponvel em memria; as linhas afetadas ficam bloqueadas.

SQL> ROLLBACK;

transao abortada; as modificaes so desfeitas; as linhas afetadas so desbloqueadas. A imagem antiga retirada do segmento de rollback.

A verso original, mais antiga, dos dados no segmento de rollback gravada de volta na tabela. por meio da consistncia na leitura dos dados que cada usurio visualiza os dados como eles eram no ltimo commit, antes de a operao DML iniciar. Com uma leitura consistente, assegura-se que:

os usurios no vejam os dados que estejam sendo alterados; as alteraes feitas por um usurio no interrompam nem entrem em conflito com as
alteraes que outro usurio esteja fazendo;

linhas que esto sendo alteradas sejam disponibilizadas apenas para consulta.
A implementao da consistncia de leitura automtica, mantm uma cpia parcial do banco de dados em segmentos de rollback, isto , quando uma operao de insero, atualizao ou excluso feita no banco de dados, o Oracle Server tira uma cpia dos dados antes de serem alterados e grava-os no segmento de rollback.
8

Segmento de rollback arquivo que armazena uma cpia dos dados de uma tabela que esto envolvidos em transaes. 37
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

10.13. Criando tabelas


Essa uma operao DDL. Para criar uma tabela, necessrio que o usurio tenha privilgio e uma rea para armazenamento. A sintaxe simplificada para criao de tabelas : Sintaxe: CREATE TABLE [esquema.]tabela (nome da coluna tipo do dado [DEFAULT expr] [constraint da coluna], ..., [constraint da tabela]); onde: Esquema Tabela DEFAULT expr Coluna Tipo de dados Constraint o nome do proprietrio da tabela. Quando omitido, a tabela criada no esquema do usurio corrente. o nome da tabela. especifica um valor default que ser utilizado quando um dado for omitido na insero. o nome da coluna. o tipo de dados e o comprimento da coluna. esta clusula opcional e especifica as restries para a coluna ou para a tabela. Quando o nome da constraint omitido, o Oracle assume uma identificao.

Convenes para Nomeao de Tabelas e Colunas:

Deve comear por uma letra; Pode ter de 1 a 30 caracteres; Deve conter somente AZ, az, 09, _, $ e #; No deve duplicar o nome de outro objeto de propriedade do mesmo usurio; No deve ser uma palavra reservada pelo Oracle Server.

38
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Tipos de dados

Tipo de Dados VARCHAR2(tamanho)

Descrio dados de caractere de comprimento varivel, o tamanho deve ser especificado. Tamanho mnimo 1, tamanho mximo 4000 caracteres. dados de caractere de comprimento fixo, O tamanho default mnimo 1 e mximo 2000 caracteres. dados numricos de comprimento varivel, onde p o tamanho total e s a parte correspondente aos decimais. O tamanho (p) pode variar de 1 a 38 e a escala (s) de -84 a 127 caracteres. valores de data e hora. dados de caractere de comprimento varivel at 2 gigabytes. dados binrios brutos. O tamanho mximo de 2000 caracteres e deve ser especificado. dados binrios brutos de tamanho varivel. O tamanho mximo 2 gigabytes. dados de caractere de um byte de at 4 gigabytes. dados binrios de at 4 gigabytes. dados binrios armazenados em um arquivo externo de at 4 gigabytes. um sistema numrico de base 64 que representa o endereo exclusivo de uma linha na tabela. Data e hora armazenadas com fraes de segundo, onde fraes de segundo pode ser um valor entre 0 e 9. O valor default 6. armazena, alm da data e hora com fraes de segundo, o deslocamento de fuso horrio, isto , a diferena entre o horrio local e o UTC (Coordinated Universal Time). o Oracle retorna os dados no fuso horrio local da sesso dos usurios. Obs.: o deslocamento de fuso horrio no armazenado. intervalos de anos e meses, armazena a diferena entre dois valores de datas e horas, as partes importantes so ms e ano. intervalos de dias, horas, minutos e segundos, armazena a diferena entre dois valores de datas e horas.

CHAR(tamanho) NUMBER(p,s)

DATE LONG RAW LONG RAW CLOB BLOB BFILE ROWID TIMESTAMP[fraes de segundo] TIMESTAMP[fraes de segundo] WiTH TIME ZONE TIMESTAMP[fraes de segundo] WiTH LOCAL TIME ZONE INTERVAL TO MONTH INTERVAL DAY TO SECOND

Tabela 13.

39
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

No exemplo abaixo, est sendo criada a tabela DEPT, com trs colunas chamadas, DEPTNO, DNAME e LOC. SQL>CREATE TABLE dept 2(deptno NUMBER(2), 3 4 dname VARCHAR2(14), loc VARCHAR2(13));

Table created.

Observao: a numerao das linhas no faz parte da instruo, apenas ilustrativa, no ambiente SQL a cada enter, a numerao das linhas incrementada automaticamente. A instruo Describe utilizada para exibir a estrutura de uma tabela. SQL> DESCRIBE dept Name ----------------DEPTNO DNAME LOC Null? ------Type -------NUMBER(2) VARCHAR2(14) VARCHAR2(13)

Restries (constraints) As restries impem regras que podem ser no nvel da coluna ou no nvel da tabela. So utilizadas para impedir que dados invlidos sejam digitados nas tabelas, garantindo, assim, a consistncia dos dados. Os seguintes tipos de restrio so vlidos no Oracle:

NOT NULL impe a insero obrigatria de dados nas colunas com essa restrio; UNIQUE campos com essa restrio no aceitam dados com valores j inseridos em outros
registros

PRIMARY KEY define uma ou mais colunas como chave primria da tabela. FOREIGN KEY define uma ou mais colunas como chave estrangeira da tabela. CHECK especifica uma lista de valores que sero utilizados para validar a insero de um
dado. Todas as restries so armazenadas no dicionrio de dados, as restries no nomeadas sero identificadas pelo Oracle com o formato SYS_cn, onde n um nmero inteiro para criar um nome de restrio exclusivo. As restries podem ser definidas enquanto a tabela est sendo criada. Elas podem tambm ser adicionadas aps sua criao, podendo, ainda, ser desativadas temporariamente.

40
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

q Restrio NOT NULL A restrio NOT NULL assegura que os valores nulos no sejam permitidos na coluna. As colunas sem uma restrio NOT NULL podem conter valores nulos por default. Deve ser definida no nvel da coluna Exemplo No exemplo acima, a restrio NOT NULL est sendo aplicada s colunas ENAME e DEPTNO da tabela EMP. Observe que, na linha 3, a restrio est sendo identificada, j na linha 9 no. Neste caso, o Oracle ir identific-la de acordo com o seu padro de identificao SYS_cn. SQL> CREATE TABLE emp( 2 3 4 5 6 7 8 9 empno ename NUMBER(4), VARCHAR2(10) constraint emp_ename_NN NOT NULL,

job VARCHAR2(9), mgr NUMBER(4), hiredate comm DATE, sal NUMBER(7,2), NUMBER(7,2), deptno NUMBER(7,2) NOT NULL);

Para verificar se as colunas da tabela esto ou no com a restrio NOT NULL, utilize a instruo DESCRIBE, como segue exemplo abaixo: SQL> DESCRIBE EMP; Name EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO q Restrio UNIQUE KEY Uma restrio de integridade UNIQUE KEY requer que cada valor em uma coluna ou conjunto de colunas (chave) seja exclusivo ou seja, duas linhas de uma tabela no podem ter valores duplicados em uma coluna especfica ou conjunto de colunas. A coluna (ou conjunto de colunas) includa na definio da restrio UNIQUE KEY chamada de chave exclusiva. Se a chave UNIQUE contiver mais de uma coluna, tal grupo de colunas considerado uma chave exclusiva composta. Podem ser definidas no nvel da coluna ou da tabela NOT NULL Null? NOT NULL Type NUMBER(4) VARCHAR2(10) VARCHAR2(9) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(2)

41
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Exemplo Criar a tabela dept cujo nome do departamento (dname) no poder ser duplicado. SQL> CREATE TABLE 2 deptno dept(

NUMBER(2),

3dname VARCHAR2(14), 4locVARCHAR2(13), 5CONSTRAINT dept_dname_uk UNIQUE(dname)); No exemplo anterior, a constraint dept_dname_uk est sendo criada no nvel da tabela. q Restrio PRIMARY KEY Uma restrio PRIMARY KEY cria uma nica chave primria para cada tabela. A restrio PRIMARY KEY uma coluna ou conjunto de colunas que identifica exclusivamente cada linha em uma tabela. Essa restrio impe a exclusividade da coluna ou combinao de colunas e assegura que nenhuma coluna que seja parte da chave primria possa conter um valor nulo. Pode ser definida no nvel da tabela ou da coluna Ateno: um ndice UNIQUE automaticamente criado para uma coluna PRIMARY KEY. Exemplo Criar a tabela dept cujo campo nmero do departamento (deptno) dever ser a chave de identificao do registro: Resoluo 1 Definio da chave primria no nvel da tabela: SQL> CREATE TABLE 2 4loc 5 6 deptno 3dname dept(

NUMBER(2), VARCHAR2(14),

VARCHAR2(13),

CONSTRAINT dept_dname_uk UNIQUE (dname), CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));

Resoluo 2 Definio da chave primria no nvel da coluna: SQL> CREATE TABLE 2 3 4 5 dname loc dept(

deptno NUMBER(2)CONSTRAINT dept_deptno_pk PRIMARY KEY, VARCHAR2(14), VARCHAR2(13),

CONSTRAINT dept_dname_uk UNIQUE (dname);

42
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Ateno: a definio de uma chave primria composta deve ser feita no nvel da tabela: SQL> CREATE TABLE 2 3 4 pk_composta(

valor1 NUMBER(2), valor2 NUMBER(2), CONSTRAINT dept_deptno_pk PRIMARY KEY(valor1, valor2));

q Restrio FOREIGN KEY uma restrio de integridade referencial, designa uma coluna ou combinao de colunas como a chave estrangeira e estabelece um relacionamento entre a chave primria ou uma chave exclusiva na mesma tabela ou em uma tabela diferente. Um valor de chave estrangeira deve corresponder a um valor existente na tabela me ou ser NULL. As chaves estrangeiras so baseadas nos valores dos dados, sendo puramente lgicas, e no ponteiros fsicos. Pode ser definida no nvel da tabela ou da coluna. Exemplo No exemplo a seguir, o DEPTNO foi definido como a chave estrangeira na tabela EMP (tabela filha ou dependente); essa chave faz referncia coluna DEPTNO da tabela DEPT (tabela-me ou referenciada). Resoluo 1 Restrio Foreign Key definida no nvel da tabela: SQL> CREATE TABLE emp( 2 3 4 5 6 7 8 9 10 11 empno NUMBER(4), ename VARCHAR2(10) NOT NULL, jobVARCHAR2(9), mgrNUMBER(4), hiredate DATE, salNUMBER(7,2), comm NUMBER(7,2), deptnoNUMBER(7,2) NOT NULL, CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) REFERENCES dept (deptno) ON DELETE CASCADE );

43
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

TABELA EMP empno pk ename job mgr hiredate sal deptno fk comm
Tabela 14.

TABELA DEPT deptno pk dname loc

Observe que o campo deptno chave primria na tabela DEPT e est sendo utilizado na tabela EMP como chave estrangeira. Por meio destas duas colunas, ser possvel relacionar as tabelas EMP e DEPT.

Resoluo 2 Restrio Foreign Key definida no nvel da coluna. Observe que a instruo foreign key no requerida. SQL> CREATE TABLE emp( 2 3 4 5 6 7 8 9 10 empno NUMBER(4), ename VARCHAR2(10) NOT NULL, jobVARCHAR2(9), mgrNUMBER(4), hiredate DATE, salNUMBER(7,2), comm NUMBER(7,2), emp_deptno_fk REFERENCES dept (deptno) not null)); deptno NUMBER(7,2) constraint

Ateno: a definio de uma chave estrangeira composta deve ser feita no nvel da tabela. q Restrio CHECK Define uma condio que cada registro deve atender. Podem ser utilizados operadores de comparao para delimitao dos valores a serem aceitos para a coluna. Exemplo Para evitar erros de digitao do usurio, voc coloca uma restrio do tipo CHECK para o campo SALRIO. Nesse campo, o salrio deve ser maior que o salrio mnimo de R$200,00. Dessa forma, ao tentar inserir valores menores que 200, a restrio ser ativada e ser apresentado um erro para o usurio.
44
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resoluo 1 Restrio criada no nvel da tabela: SQL> CREATE TABLE 2 3 4 5 6 7 8 empno emp( NUMBER(4),

ename VARCHAR2(10) NOT NULL, job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), constraint emp_sal_ck check (sal > 200));

Resoluo 2 Restrio criada no nvel da coluna: SQL> CREATE TABLE 2 3 4 5 6 7 emp( NUMBER(4),

empno

ename VARCHAR2(10) NOT NULL, job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2) check (sal > 200));

q Consultando restries de uma tabela A instruo SELECT, que ser estudada com mais detalhes em um tpico posterior, utilizada para realizao de consultas. Sintaxe Select nome_coluna1, nome_coluna2 ... nome_colunaN from nome_tabela1, nome_tabelaN where condio; No exemplo a seguir, sero consultadas as restries definidas para a tabela emp: SQL>SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, 2 3 4 STATUS,SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME = EMP;

45
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

onde: CONSTRAINT_NAME CONSTRAINT_TYPE o nome da restrio. tipos de restries aos quais os campos esto envolvidos, onde: C = NOT NULL P = PRIMARY KEY R = FOREIGN KEY e U = UNIQUE KEY STATUS representa o estado em que a restrio se encontra: ENABLE significa que a restrio est vlida e est sendo usada, e DISABLE que a restrio est desabilitada e que, por isso, no est em uso. a condio expressa da restrio.

SEARCH_CONDITION Resultado: CONSTRAINT_NAME

C C C P R R U

STATUS ------ENABLED ENABLED ENABLED ENABLED ENABLED ENABLED

SEARCH_CONDITION -------------------EMPNO IS NOT NULL DEPTNO IS NOT NULL

------------------SYS_C00884 SYS_C00885 EMP_EMPNO_PK EMP_MGR_FK EMP_DEPTNO_FK EMP_ENAME_UK

Instruo ALTER TABLE Depois de as tabelas terem sido criadas, pode ser necessrio alterar suas estruturas para acrescentar uma nova coluna, para redefinir a estrutura de uma coluna, ou para adicionar ou alterar uma restrio. Para isso, pode ser utilizada a instruo ALTER TABLE. q Adicionando colunas Para adicionar colunas deve-se utilizar a clusula add em conjunto com a instruo ALTER TABLE: Sintaxe ALTER TABLE tabela Add (nome da coluna tipo de dado [restries] , ...);

46
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Onde: Tabela Nome da coluna Tipo de dado Restries Exemplo Adicionar a coluna hobby, alfanumrica com 15 posies, tabela EMP. SQL> ALTER TABLE emp 2 ADD (hobby VARCHAR2(15)); nome da tabela que ir ser alterada para possuir a coluna ou restrio especificada. nome da coluna que ser acrescentada. tipo de dado da coluna que ser acrescentada. especificao das restries para a coluna acrescentada, se for necessrio.

A nova coluna torna-se a ltima coluna na tabela. Ateno: se uma tabela j contiver linhas quando uma coluna for adicionada, ento, a nova coluna ser inicialmente nula para todas as linhas. q Adicionando restries Para adicionar colunas, deve-se utilizar a clusula add em conjunto com a instruo ALTER TABLE: Sintaxe ALTER TABLE tabela ADD [CONSTRAINT restrio] tipo (coluna); onde: Tabela Restrio Tipo Coluna Exemplo Adicionar uma restrio FOREIGN KEY tabela EMP, indicando que um gerente j deve existir como um funcionrio vlido na tabela EMP. SQL> ALTER TABLE 2 3 ADD CONSTRAINT FOREIGN KEY(mgr) emp emp_mgr_fk REFERENCES emp(empno); o nome da tabela. o nome da restrio. opcional, mas recomendado. o tipo da restrio. o nome da coluna afetada pela restrio.

47
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Ateno

Restries no podem ser modificadas, mas, para adicionar uma restrio NOT NULL, pode-se
usar a clusula MODIFY.

Uma coluna pode ser especificada como NOT NULL somente se a tabela no contiver linhas.
q Modificando colunas Para modificar a estrutura das colunas, deve-se utilizar a clusula modify em conjunto com a instruo ALTER TABLE: Sintaxe: ALTER TABLE tabela MODIFY onde: Tabela Coluna Especificaes Exemplo Alterar o tamanho da coluna ename da tabela EMP para 30 posies. o nome da tabela. nome da coluna que sofrer modificaes tipo de dado, tamanho, restries. (coluna especificaes);

SQL> ALTER TABLE 2 MODIFY

EMP

(ename VARCHAR2(30));

possvel:

aumentar a largura ou preciso de uma coluna numrica; diminuir a largura de uma coluna se contiver somente valores nulos e ou se a tabela no tiver
linhas;

alterar o tipo de dados se a coluna contiver valores nulos; converter uma coluna CHAR para o tipo de dados VARCHAR2, ou vice-versa, se a coluna
contiver valores nulos ou se o tamanho da coluna no for alterado. Ateno: uma alterao no valor default de uma coluna afeta somente as inseres subseqentes tabela.

48
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

q Eliminando uma restrio Para remover uma restrio, deve-se utilizar a clusula drop constraint em conjunto com a instruo ALTER TABLE Sintaxe ALTER TABLE tabela DROP PRIMARY KEY | UNIQUE (coluna) | restrio [CASCADE]; CONSTRAINT onde: Tabela Coluna Restrio Cascade Exemplo Remover a restrio PRIMARY KEY na tabela DEPT e eliminar a restrio FOREIGN KEY associada coluna EMP.DEPTNO. SQL> ALTER TABLE 2 dept o nome da tabela. o nome da coluna afetada pela restrio. nome da constraint que ser eliminada. esta clusula elimina todas as restries dependentes.

DROP PRIMARY KEY CASCADE;

Para descobrir o nome da restrio, pode-se consultar as views9 do dicionrio de dados USER_CONSTRAINTS, ou USER_CONS_COLUMNS. Antes de executar a consulta, verifique os nomes das colunas com a instruo DESCRIBE. Exemplo SELECT CONSTRAINT_NAME, COLUMN_NAME FROM WHERE USER_CONS_COLUMNS TABLE_NAME = EMP;

Resultado CONSTRAINT_NAME EMP_DEPTNO_FK EMP_EMPNO_PK EMP_ENAME_UK EMP_MGR_FK SYS_C00884 SYS_C00885


9

COLUMN_NAME DEPTNO EMPNO ENAME MGR EMPNO DEPTNO

As views do dicionrio de dados so tabelas lgicas que contm informaes sobre os objetos do banco de dados. 49
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

q Desativando e ativando uma restrio Uma restrio pode ser desativada com a utilizao da clusula DISABLE em conjunto com a instruo ALTER TABLE. Para torn-la ativa novamente, utiliza-se a clusula ENABLE. Sintaxe ALTER TABLE DISABLE/ENABLE onde: Tabela Restrio Cascade Exemplo 1 Desativar a chave primria da tabela emp SQL> ALTER TABLE 2 emp o nome da tabela. nome da constraint que ser eliminada. essa clusula elimina todas as restries dependentes. tabela CONSTRAINT restrio [CASCADE];

DISABLE CONSTRAINT emp_empno_pk CASCADE;

Exemplo 2 Ativar a chave primria da tabela emp SQL> ALTER TABLE 2 emp emp_empno_pk;

ENABLE CONSTRAINT

Pode-se usar a clusula DISABLE nas instrues CREATE TABLE e ALTER TABLE. Ateno: para tornar uma restrio ativa, os dados inseridos na coluna devem estar em conformidade com a restrio, isto devem respeit-la. Caso contrrio, no ser possvel.

Eliminando uma tabela A instruo DROP TABLE remove a definio de uma tabela. Quando uma tabela eliminada, o banco de dados perde todos os dados na tabela e todos os ndices associados a ela. Sintaxe DROP TABLE tabela; onde: Tabela o nome da tabela.

50
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Exemplo Eliminar a tabela dept30. SQL> DROP TABLE dept30; Ao eliminar uma tabela:

todos os dados so deletados da tabela; as views e sinnimos permanecero, mas sero invlidos; todas as transaes pendentes sofrero commit; somente o criador da tabela ou um usurio com o privilgio DROP ANY TABLE poder remover
uma tabela. Ateno: a instruo DROP TABLE, uma vez executada, irreversvel. O Oracle Server no questiona a ao quando voc emite a instruo DROP TABLE. Se voc possuir tal tabela ou tiver um privilgio de nvel superior, ento a tabela ser imediatamente removida.

Funes de grupo Diferente das funes de uma nica linha, as funes de grupo operam em conjuntos de linhas para fornecer um resultado por grupo. As operaes das funes de grupo podem envolver todas as linhas de uma tabela ou conjuntos de linhas definidos por critrios preestabelecidos. . Assim como as funes de diversas outras linguagens ou aplicativos, as funes disponveis na SQL requerem argumentos para realizao das operaes e retornam valores; neste caso, os argumentos sero representados pelo nome da coluna: FUNO(coluna). Algumas funes disponveis: AVG ( ) retorna a mdia obtida entre os valores de um conjunto. COUNT ( ) retorna a quantidade de ocorrncias. MAX ( ) retorna o maior valor de um conjunto. MIN ( ) retorna o menor valor de um conjunto. SUM( ) retorna a somatria dos valores de um conjunto. VARIANCE( ) retorna a varincia entre os valores de um conjunto Sintaxe SELECT[coluna,] FROM [WHERE [GROUP BY tabela condio] coluna] funo_de_grupo(coluna)

[ORDER BYcoluna];

51
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

onde: [coluna,] funo_de_grupo(coluna) lista de colunas envolvidas na consulta, opcional. indica o nome da funo que ser utilizada e que os dados da coluna especificada sero passados como parmetro para a funo. tabela ou tabelas utilizadas na consulta. condio para realizao da consulta, limita o conjunto de dados que iro compor o conjunto. cria grupos de dados. limita os grupos a serem mostrados, similar clusula where, mas aplica-se somente s colunas que tenham valores agrupados a ordenao por default ascendente.

FROM tabela [WHERE condio] [GROUP BY coluna] [HAVING condio]

[ORDER BY coluna]; Ateno

A clusula DISTINCT faz com que a funo considere somente valores no-duplicados; ALL faz
com que ela considere cada valor, inclusive duplicados. O default ALL e, portanto, no precisa ser especificado.

Todas as funes de grupo, exceto COUNT(*), ignoram valores nulos. Para substituir um valor
por valores nulos, use a funo NVL. O agrupamento simples envolve todo o conjunto de uma determinada tabela, isto , considera todas as linhas que satisfazem a um critrio e cada funo envolvida produz um nico resultado para o conjunto.

Exemplo 1 Verificar o maior salrio do conjunto. Neste caso, todas as linhas da tabela seriam avaliadas e apenas um valor retornaria como resultado. SQL> Select MAX(sal) 2 from EMP;

Exemplo 2 Calcular a mdia salarial, o maior salrio, o menor salrio e a somatria dos salrios de todos os funcionrios que possuem a cadeia de caracteres SALES como parte do cargo. SQL> SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal) 3 4 FROM emp WHERE job LIKE SALES%;

52
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado AVG(SAL) 1400 MAX(SAL) 1600 MIN(SAL) 1250 SUM(SAL) 5600

Exemplo 3 Exibir a quantidade de funcionrios que trabalham no departamento 30. SQL> SELECT COUNT(*) 2 3 FROMemp WHERE deptno = 30;

A funo COUNT tem dois formatos: COUNT(*) e COUNT(expr):

COUNT(*) retorna o nmero de linhas em uma tabela, inclusive linhas duplicadas e linhas
contendo valores nulos em qualquer uma das colunas. Se uma clusula WHERE estiver includa na instruo SELECT, COUNT(*) retornar o nmero de linhas que satisfizer condio na clusula WHERE.

COUNT(expr) retorna o nmero de linhas no-nulas na coluna identificada por expr.


q Agrupando resultados Exemplo 4 Exibir a mdia salarial por departamento. SQL> SELECT 2 3 FROM deptno, AVG(sal) emp

GROUP BY deptno;

Resultado DEPTNO 10 20 30 AVG(SAL) 2916.6667 2175 1566.6667

Ateno: ao utilizar a clusula GROUP BY:

Para limitar o resultado de linhas que sero envolvidas no agrupamento, deve-se primeiro
utilizar a clusula WHERE e depois a clusula GROUP BY.

Todas as colunas individuais envolvidas na consulta, isto , que no esto participando de


funes de grupo, devem ser includas na clusula GROUP BY.

No possvel usar o apelido de coluna na clusula GROUP BY. Por default, as linhas so classificadas por ordem crescente das colunas includas na lista
GROUP BY. Isso pode ser sobreposto usando a clusula ORDER BY.
53
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

A coluna GROUP BY no precisa estar na clusula SELECT. Pode-se utilizar a funo de grupo na clusula ORDER BY.
Exemplo 5 Exiba a somatria dos salrios por departamento e cargo. SQL> SELECT 2 3 FROM deptno, job, sum(sal) emp

GROUP BY deptno, job;

Resultado: DEPTNO ---------10 CLERK 10 MANAGER 30 CLERK 30 MANAGER 30 SALESMAN ... JOB ---------1300 2450 950 2850 5600 SUM(SAL) -----------

No exemplo 5, primeiro as linhas so agrupadas pelo nmero do departamento. Em seguida, dentro dos grupos de nmeros de departamentos, as linhas so agrupadas pelo cargo. Dessa forma, a funo SUM aplicada coluna de salrios para todos os cargos dentro de cada grupo de nmeros de departamentos.

Ateno: qualquer coluna ou expresso na lista SELECT que no contenha uma funo agregada deve estar na clusula GROUP BY. q Restringindo resultados do grupo Da mesma forma que se usa a clusula WHERE para restringir as linhas que sero selecionadas, pode-se usar a clusula HAVING para restringir grupos. As seguintes etapas so executadas quando a clusula HAVING utilizada:

as linhas so agrupadas; a funo de grupo aplicada ao grupo; os grupos que correspondem aos critrios na clusula HAVING so exibidos.

54
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Ateno: a clusula HAVING pode preceder a clusula GROUP BY, mas recomenda-se que a clusula GROUP BY aparea primeiro, pois os grupos so formados e as funes de grupo so calculadas antes de a clusula HAVING ser aplicada aos grupos na lista SELECT.

Exemplo 6 Exibir os nmeros de departamentos e o salrio mximo para os departamentos, cujo salrio mximo seja maior do que 2.900. SQL> SELECT 2 3 4 Resultado DEPTNO 10 20 MAX(SAL) 5000 3000 FROM HAVING deptno, max(sal) emp max(sal)>2900;

GROUP BY deptno

Subconsultas Uma subconsulta uma consulta utilizada dentro de uma instruo SQL. Pode ser utilizada dentro de instrues select, insert, delete update ou create table. Pode ser do tipo:

Subconsultas de uma nica linha: consultas que retornam somente uma linha da instruo
SELECT interna.

Subconsultas de vrias linhas: consultas que retornam mais de uma linha da instruo
SELECT interna.

Subconsultas de vrias colunas: consultas que retornam mais de uma coluna da instruo
SELECT interna. q Subconsulta em consultas O uso de subconsultas em Consultas til quando a consulta principal requer valores desconhecidos. Por exemplo: suponha que seja necessrio criar uma consulta para descobrir quem recebe um salrio maior que o salrio de Jones; neste caso qual o salrio de Jones? Para resolver esse problema, so necessrias duas consultas: uma consulta para descobrir quanto Jones recebe e outra para descobrir quem recebe mais do que ele.

55
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Sintaxe SELECTcolunas, FROM tabela (SELECT FROM onde: A condio envolve uma operao de comparao entre uma coluna e o resultado que ser retornado pela subconsulta. A subconsulta uma consulta, portanto, pode ser construda de acordo com o problema apontado e incluir condies, funes de grupo, vrias colunas, etc. A subconsulta (consulta interna) executada uma vez antes da consulta principal. possvel colocar a subconsulta em vrias clusulas SQL: select_list tabela); WHERE condio operador expr

clusula WHERE clusula HAVING clusula FROM


Ateno

As subconsultas devem estar entre parnteses e ao lado direito do operador de comparao. No utilizar uma clusula ORDER BY a uma subconsulta. Utilizar operadores de uma nica linha com subconsultas de uma nica linha. Utilizar operadores de vrias linhas com subconsultas de vrias linhas.
q Subconsultas de uma linha Podem ser utilizados os operadores relacionais <,>,.>=,<= e = para subconsultas que retornam uma linha. Nos exemplos 1, 2, 3 e 4, so apresentadas diversas situaes para subconsultas de uma linha. Exemplo 1 Utilizando subconsultas em condies: exiba o nome de todos os funcionrios cujo salrio maior do que o salrio do funcionrio 7566. SQL> SELECT ename 2 3 4 5 6 FROM WHERE emp sal > (SELECT sal FROM emp empno = 7566); WHERE

56
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Exemplo 2 Utilizando subconsultas em condies compostas: exiba o nome e o cargo dos funcionrios cujo cargo igual ao cargo do funcionrio 7369 e o salrio maior do que o salrio do funcionrio 7876. SQL>SELECT ename, job 2 3 4 5 6 7 8 9 10 AND sal > (SELECT FROM emp WHEREempno = 7876); sal FROM WHERE emp job = (SELECT job FROM emp WHERE empno = 7369)

Exemplo 3 Utilizando subconsultas com funes de grupo: exiba o nome, cargo e salrio de todos os funcionrios com o salrio igual ao menor salrio recebido pelos funcionrios. SQL> SELECT ename, job, sal 2 3 4 5 FROMemp WHERE sal = (SELECT MIN(sal) FROM emp);

Exemplo 4 Utilizando subconsultas com funes de grupo na clusula having: exiba o menor salrio por departamento quando o menor salrio for inferior ao menor salrio do departamento 20. SQL> SELECT deptno, MIN(sal) 2 3 4 5 6 7 FROM emp GROUP BY deptno HAVING MIN(sal) > (SELECT MIN(sal) FROM emp WHERE deptno = 20);

Ateno um erro comum em subconsultas ocorre quando se utiliza um operador simples para um retorno de vrias linhas.

57
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

q Subconsultas de vrias linhas Nas operaes de comparao, que envolvem subconsultas de vrias linhas, podem ser utilizados os operadores:

Operador in not in any all exists not exists


Tabela 15.

Descrio verifica se um valor faz parte de um conjunto de valores, no considera os nulos. verifica se um valor no faz parte de um conjunto de valores verifica se um determinado argumento coincide com qualquer membro da lista verifica se um determinado argumento coincide com qualquer membro da lista verifica se um dado valor existe em um conjunto, considera os nulos. verifica se um dado valor no existe em um conjunto, considera os nulos.

Exemplo 5 Exiba os nomes, cdigos de gerente e datas de admisso dos funcionrios que possuem cargos iguais aos cargos do funcionrio 7844, ou aos do funcionrio 7900. SQL> SELECT ENAME, MGR, HIREDATE 2 FROM EMP (SELECT JOB FROM EMP WHERE EMPNO IN (7844, 7900)); q Subconsultas de vrias colunas Nas subconsultas que envolvem vrias colunas, existe a necessidade de compatibilidade entre o nmero de colunas da subconsulta e o nmero de colunas da condio. Exemplo 6 Exiba a ID da ordem, a ID do produto e a quantidade de itens na tabela de itens que corresponda ID do produto e quantidade de um item na ordem 605. SQL> SELECT ordid, prodid, qty 2 3 4 5 6 7 AND ordid 605; FROM item WHERE(prodid, qty) IN (SELECT prodid, qty FROM WHERE item ordid = 605) WHERE JOB IN

58
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

O exemplo acima o de uma subconsulta de vrias colunas porque a subconsulta retorna mais de uma coluna. Ele compara os valores na coluna PRODID e na coluna QTY de cada linha do candidato na tabela ITEM aos valores na coluna PRODID e na coluna QTY dos itens na ordem 605. Ateno: se houver a possibilidade de valores nulos serem parte do conjunto resultante de uma subconsulta, o operador NOT IN no ser usado. O operador NOT IN equivalente a !=ALL. Observe que o valor nulo, como parte do conjunto resultante de uma subconsulta, no ser um problema se estiver usando o operador IN. O operador IN equivalente a =ANY. q Subconsulta na clusula FROM Pode-se usar uma subconsulta na clusula FROM de uma instruo SELECT, o que se parece muito com a forma de utilizar as views10. Uma subconsulta na clusula FROM de uma instruo SELECT define uma origem de dados para essa, e somente essa, instruo SELECT em particular. Exemplo 7 Exiba o nome, salrio, nmero do departamento e a mdia salarial do departamento quando o salrio do funcionrio for maior do que a mdia salarial do departamento. SQL> SELECT 2 3 4 5 6 WHERE AND FROM a.ename, a.sal, a.deptno, b.salavg emp a, (SELECT FROM deptno, avg(sal) salavg emp

GROUP BY deptno) b a.deptno = b.deptno a.sal > b.salavg;

No exemplo anterior, a subconsulta da clusula from retorna um conjunto de dados, nmero do departamento e mdia salarial por departamento, este conjunto ser tratado com o apelido de b. q Criando uma tabela usando uma subconsulta Ao se criar uma tabela a partir de uma subconsulta, a mesma ser criada com os nomes de coluna especificados. As linhas recuperadas pela instruo SELECT sero inseridas na tabela. Sintaxe CREATE TABLE tabela [(coluna, coluna...)] AS subconsulta;

10

Views so vises dos dados de tabelas que atendem a critrios especficos. Sero vistas em detalhes posteriormente. 59
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Onde: tabela coluna subconsulta o nome da tabela. o nome da coluna, valor default e restrio de integridade. a instruo SELECT que define o conjunto de linhas a serem inseridas na nova tabela.

Ateno: deve-se fazer a correspondncia entre o nmero de colunas especificadas e o nmero de colunas da subconsulta.

Exemplo 8 Criar uma tabela com as colunas nmero do funcionrio, nome do funcionrio, salrio anual, data de admisso e as linhas correspondentes da tabela emp para todos os funcionrios que trabalham no departamento 30. SQL> CREATE TABLE dept30 2 3 4 WHERE SELECT FROM deptno = 30; AS empno, ename, sal*12 ANNSAL, hiredate emp

Observe que no exemplo anterior os nomes das colunas foram omitidos na instruo principal (create), pois as colunas dessa tabela recebero os mesmos nomes e definies das colunas da subconsulta. SQL> DESCRIBE dept30 Resultado Name EMPNO ENAME ANNSAL HIREDATE q Insero a partir de subconsultas A insero de dados tambm pode ser realizada a partir de dados armazenados em outras tabelas. Para isso, deve-se criar uma opo insert com uma subconsulta. Ateno: no deve ser utilizada a palavra values. necessrio que exista correspondncia entre o nmero de colunas da clusula INSERT com o nmero de colunas da subconsulta. Veja o exemplo: SQL> INSERT INTO managers(id, name, salary, hiredate) 2 3
60
Copyright Faculdade IBTA

Null? NOT NULL

Type NUMBER(4) VARCHAR2(10) NUMBER DATE

SELECT FROM

empno, ename, sal, hiredate emp

IBTA 2568
DW / SI Banco de Dados Semestre III

WHEREjob = MANAGER;

Neste exemplo, sero inseridas todas as linhas retornadas pela consulta. Os dados da coluna empno sero inseridos na coluna id, ename em name e assim por diante. Note que deve existir correspondncia entre as colunas da tabela que receber os valores e a lista de colunas da subconsulta; os tipos de dados tambm devem ser os mesmos. q Alterao de dados a partir de subconsultas Exemplo 9 Alterar o cargo e o departamento do funcionrio 7698, para que este tenha os mesmo cargo e departamento do funcionrio 7499. SQL> UPDATE 2 3 4 WHERE empno = 7698; emp FROM emp WHEREempno = 7499)

SET (job, deptno) = (SELECT job, deptno

q Remoo de linhas a partir de subconsultas Exemplo 10 Excluir todos os dados da tabela employee quando o nmero do departamento for igual ao nmero do departamento SALES. SQL> DELETE FROM employee 2 3 4 WHERE deptno = (SELECT WHERE deptno FROM dept dname =SALES);

No exemplo acima, so excludos todos os funcionrios que estejam no departamento 30. A subconsulta procura a tabela DEPT para localizar o nmero de departamento para o departamento SALES. A subconsulta, ento, alimenta o nmero de departamento para a consulta principal, que deleta linhas de dados da tabela EMPLOYEE baseada nesse nmero de departamento. Este tipo de deleo usando subconsulta muito utilizado.

10.14. Instrues para manipulao de tabelas


As instrues DDL Data Definition Language so responsveis pelas manipulaes nas estruturas das tabelas, so elas:

Create table cria tabelas. Esta instruo j foi abordada anteriormente. Alter table altera a estrutura da tabela.

61
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Drop table elimina uma tabela.


Ateno: estas instrues sofrem commit automtico.

Criando vises Sintaxe CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW nome_view [(apelido[, apelido]...)] AS subconsulta [WITH CHECK OPTION [CONSTRAINT restrio]] [WITH READ ONLY];

onde: CREATE VIEW OR REPLACE cria uma view ou substitui a view existente. nome_view FORCE NOFORCE apelido Identificador da view cria a view independentemente das tabelas-base existirem ou no. cria a view somente se as tabelas-base existirem (default). especifica apelidos para as colunas selecionadas pela view, opcional, mas, se utilizados, devem corresponder ao nmero de colunas selecionadas na consulta. operao de consulta s tabelas-base ou a outras views para gerar o resultado da viso. uma instruo SELECT completa (voc pode usar apelidos para as colunas na lista SELECT) e no pode conter a clusula order by. especifica que somente linhas acessveis view podem ser inseridas ou atualizadas. o nome atribudo restrio CHECK OPTION. assegura que as operaes DML no possam ser executadas nessa view.

consulta da view subconsulta

WITH CHECK OPTION restrio WITH READ ONLY

H duas classificaes para views: simples e complexa. Uma view simples uma que:

Seleciona dados a partir de somente uma tabela. No contm funes ou grupos de dados. Pode-se executar a DML.
62
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Uma view complexa uma que:

Seleciona dados a partir de vrias tabelas. Contm funes ou grupos de dados. Nem sempre se pode executar a DML.
Exemplo 1 Criar uma view com nome EMPVU10, que contenha detalhes, tais como nmero, nome e cargo dos funcionrios que trabalham no departamento 10. SQL> CREATE VIEW 2 3 4 FROM WHERE empvu10 emp deptno = 10;

AS SELECT empno, ename, job

A estrutura da view pode ser exibida utilizando o comando DESCRIBE do SQL*Plus: SQL> DESCRIBE EMPVU10; Name EMPNO ENAME JOB Null? NOT NULL Type NUMBER(4) VARCHAR2(10) VARCHAR2(9)

Ateno: se no for especificado um nome de restrio para uma view criada com CHECK OPTION, o sistema ir atribuir um nome default no formato SYS_Cn. A opo OR REPLACE altera a definio da view sem elimin-la, recri-la ou reconceder-lhe os privilgios de objetos anteriormente concedidos.

Exemplo 2 Alterar a definio da view empvu10 para que sejam exibidos apelidos para as colunas da consulta: id_emp, nome e cargo: SQL> CREATE OR REPLACE VIEW empvu10 2 3 4 5 FROM WHERE (id_emp, nome, cargo) AS SELECT empno, ename, job emp deptno = 10;

63
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Exemplo 3 Criar uma view para exibir o nome do departamento e o menor salrio, maior salrio e a mdia salarial de cada departamento. SQL> CREATE VIEW 2 3 4 5 6 7 FROM WHERE GROUP BY dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal) emp e, dept d e.deptno = d.deptno d.dname;

No exemplo anterior, est sendo criada uma view complexa para exibir os nomes de departamento, maior salrio, menor salrio e o salrio mdio por departamento. Note que os nomes alternativos foram especificados para a view. Esse um requisito se uma coluna da view derivar de uma funo ou expresso.

Exemplo 4 Criar uma view, identificada por empvu20, com todas as colunas da tabela emp e todos os funcionrio do departamento 20. Acrescentar uma clusula para garantir que as manipulaes permaneam no domnio da view. SQL> CREATE OR REPLACE VIEW empvu20 2 3 4 5 AS SELECT * FROM WHERE emp deptno = 20

WITH CHECK OPTION CONSTRAINT empvu20_ck;

No exemplo anterior, qualquer tentativa de alterao do nmero do departamento para qualquer linha na view falhar porque ela violar a restrio WITH CHECK OPTION. Essa clusula especifica que INSERTS e UPDATES executados pela view no tm permisso de criar linhas que a view no possa selecionar e, portanto, ela permite restries de integridade e verificaes de validao de dados a serem impostas aos dados que estiverem sendo inseridos ou atualizados. Se houver uma tentativa de executar operaes DML em linhas que a view no selecionou, ser exibido um erro com o nome da restrio, se ele tiver sido especificado. Como exemplo, a instruo DML a seguir realiza uma alterao no nmero do departamento, utilizando a view empvu20. SQL> UPDATE empvu20 2 3 SET WHERE * ERRO na linha 1: (ERROR at line1) deptno = 10 empno = 7788;

update empvu20

64
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

ORA-01402: violao na clusula where WITH CHECK OPTION na view (view WITH CHECK OPTION where clause violation). Nesse caso, nenhuma linha ser atualizada porque, se o nmero do departamento fosse alterado para 10, a view no seria mais capaz de enxergar o funcionrio. Por isso, com a clusula WITH CHECK OPTION, a view poder ver apenas funcionrios do departamento 20 e no permitir que o nmero de departamento para esses funcionrios seja alterado na view.

Exemplo 5 Utilizando a clusula WITH READ ONLY alterar as definies da view empvu10 para que se torne somente para leitura. SQL> CREATE OR REPLACE VIEW empvu10 2 3 4 5 6 FROM WHERE WITH READ ONLY; (employee_number, employee_name, job_title) AS SELECT empno, ename, job emp deptno = 10

Quaisquer tentativas de inserir uma linha ou modific-la usando a view resultar em erro no Oracle Server -01733: no permitida coluna virtual aqui (virtual column not allowed here).

Removendo uma view Pode-se remover uma view sem perder dados porque uma view est baseada em tabelas subjacentes no banco de dados. Sintaxe DROP VIEW view; Exemplo Remover a view empvu10. SQL> DROP VIEW empvu10; A instruo DROP VIEW remove a definio da view do banco de dados. A eliminao de views no tem efeito nas tabelas nas quais ela baseada. As views ou outras aplicaes baseadas em views deletadas tornam-se invlidas. Apenas o criador ou usurio com o privilgio DROP ANY VIEW poder remover uma view.

Consultando views no dicionrio de dados As definies da view ficam armazenadas no dicionrio de dados como uma consulta. A tabela do dicionrio de dados USER_VIEWS contm o nome e a definio da view. O texto da instruo SELECT, que constitui a view, armazenado em uma coluna LONG.

65
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Exemplo Exibir o nome e o texto de definio das views do usurio corrente: SQL> SELECT VIEW_NAME, TEXT FROM USER_VIEWS; Resultado: VIEW_NAME SALES TEXT SELECT REPID, ORD.CUSTID, CUSTOMER.NAME CUSTNAME, PRODUCT.PRODID, DESCRIP PRODNA Quando a base de dados acessada usando uma view, o Oracle Server executa as seguintes operaes:

Recupera a definio da view da tabela do dicionrio de dados USER_VIEWS. Verifica os privilgios de acesso para a tabela-base da view. Converte a consulta da view em uma operao equivalente nas tabelas ou tabela-base
subjacentes. Em outras palavras, os dados so recuperados a partir da(s) tabela(s)-base, ou uma atualizao feita nela(s).

10.15. Seqncia
Uma seqncia um objeto do banco de dados criado pelo usurio que pode ser compartilhado por vrios usurios para gerar nmeros inteiros exclusivos. Pode-se usar as seqncias para gerar valores de chave primria automaticamente. A seqncia gerada e incrementada (ou diminuda) por uma rotina Oracle8 interna. Esse objeto pode economizar tempo, pois capaz de reduzir a quantidade de cdigo de aplicao necessria para criar uma rotina de gerao de seqncias. Alm disso, acelera a eficcia do acesso a valores de seqncia quando esto em cache na memria.

Criando uma seqncia Sintaxe CREATE SEQUENCE nome_seqncia [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

66
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

onde: nome_seqncia INCREMENT BY n START WITH n MAXVALUE n NOMAXVALUE MINVALUE n NOMINVALUE o identificador da seqncia. especifica o intervalo entre nmeros de seqncia, onde n um nmero inteiro, o default 1. especifica o primeiro nmero de seqncia a ser gerado, default 1. especifica o valor mximo que a seqncia pode gerar especifica um valor mximo de 10^27, para uma seqncia crescente, e 1 para uma seqncia decrescente (NOMAXVALUE a opo default). especifica o valor mnimo de seqncia. especifica um valor mnimo de 1, para uma seqncia crescente, e (10^26) para uma seqncia decrescente. (NOMINVALUE a opo default). especifica que a seqncia continue a gerar valores aps alcanar seu valor mximo ou mnimo, ou no gere valores adicionais (NOCYCLE a opo default).

CYCLE | NOCYCLE

CACHE n | NOCACHE especifica quantos valores o Oracle Server alocar previamente e manter na memria (por default, o Oracle Server colocar em cache 20 valores). Exemplo Criar uma seqncia identificada por dept_deptno. A seqncia dever iniciar em 91, ser incrementada de 1 em 1, ter como valor mximo 100 e as demais configuraes default. SQL> CREATE SEQUENCE dept_deptno 2 3 4 5 6 INCREMENT BY 1 START WITH 91 MAXVALUE 100 NOCACHE NOCYCLE;

O exemplo acima cria uma seqncia chamada DEPT_DEPTNO para ser usada na coluna DEPTNO, da tabela DEPT. A seqncia comea em 91, no permite cache e no permite o ciclo da seqncia. Ateno: se o valor do parmetro INCREMENT By for negativo, a seqncia ser descendente.

Consultando seqncias no dicionrio de dados As definies da seqncia ficam armazenadas no dicionrio de dados e podem ser consultadas na view USER_SEQUENCES. SQL> select *

from user_sequences where sequence_name = DEPT_DEPTNO;


67
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado SEQUENCE_NAME MIN_VALUE LAST_NUMBER DEPT_DEPTNO 1 MAX_VALUE INCREMENT_BY C O CACHE_SIZE

Y N

A coluna LAST_NUMBER exibe o prximo nmero de seqncia disponvel.

Utilizando uma seqncia Para utilizar a seqncia, pode-se fazer referncia aos seus valores, usando as pseudocolunas NEXTVAL e CURRVAL.

NEXTVAL retorna o prximo valor de seqncia disponvel. CURRVAL obtm o valor de seqncia atual.
NEXTVAL e CURRVAL podem ser usadas nos seguintes casos:

Na lista SELECT de uma instruo SELECT que no seja parte de uma subconsulta. Na lista SELECT de uma subconsulta em uma instruo INSERT. Na clusula VALUES de uma instruo INSERT. Na clusula SET de uma instruo UPDATE.
NEXTVAL e CURRVAL no podem ser usadas nos seguintes casos:

Na lista SELECT de uma view. Em uma instruo SELECT, com a palavra-chave DISTINCT. Em uma instruo SELECT, com as clusulas GROUP BY, HAVING ou ORDER BY. Em uma subconsulta de uma instruo SELECT, DELETE ou UPDATE.
Exemplo 1 Utilizando NEXTVAL inserir um registro na tabela dept utilizando a sequence dept_deptno para fornecer o cdigo do departamento. O nome do departamento MARKETING, e a sua localizao SAN DIEGO. SQL> INSERT INTO 2 3 VALUES dept(deptno, dname, loc)

(dept_deptno.NEXTVAL,

MARKETING, SAN DIEGO);

Exemplo 2 Utilizando CURRVAL consultar o prximo valor da seqncia dept_deptno: SQL> SELECT dept_deptno.CURRVAL 2
68
Copyright Faculdade IBTA

FROMdual;

IBTA 2568
DW / SI Banco de Dados Semestre III

q Alterando uma seqncia possvel alterar as especificaes de uma seqncia. Para isso, necessrio informar a clusula que sofrer alteraes, as demais clusulas permanecero com os valores anteriores. Sintaxe Alter SEQUENCE nome_seqncia [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

Exemplo 3 Aterar a sequence dept_deptno, o valor mximo dever ser modificado para 99999 e as demais configuraes devero permanecer as mesmas. SQL> ALTER SEQUENCE dept_deptno 2 MAXVALUE 999999;

Ateno

Somente o proprietrio ou usurios que possuam o privilgio ALTER podem alterar a


seqncia.

Somente os nmeros de seqncia futuras so afetados. A seqncia deve ser eliminada e recriada para reiniciar a seqncia em um nmero diferente. Alguma validao executada, Por exemplo, no possvel impor um novo MAXVALUE menor
do que o nmero de seqncia atual.

Removendo uma seqncia Aps remover a seqncia do dicionrio de dados, no ser possvel fazer referncia a ela. Sintaxe DROP SEQUENCE nome_seqncia;

Exemplo Remover a seqncia dept_deptno. SQL> DROP SEQUENCE dept_deptno; Ateno: somente o proprietrio da seqncia ou usurios com privilgio DROP ANY SEQUENCE podem remover uma seqncia.
69
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

10.16. Sinnimo
Um sinnimo um nome alternativo para um objeto do banco de dados. Esse recurso pode ser empregado para facilitar o acesso aos objetos ou para esconder a verdadeira identidade de um objeto. Por exemplo, a tabela EMP faz parte do esquema do usurio Scott, supondo que um outro usurio, que tenha privilgios, utilize est tabela freqentemente para realizar consulta, para isso precisar fazer referncia ao esquema e a instruo seria apresentada da seguinte maneira: Select * from Scott.emp; com uso de um sinnimo para fazer referncia ao objeto, este poderia ser tratado por um nome alternativo, por exemplo empregado, desta forma qualquer usurio que necessitasse fazer uso da tabela emp do usurio Scott, poderia faz-lo utilizando o sinnimo empregado: Select * from empregado; Internamente o Oracle identifica e localiza o objeto pela referncia original e completa. Sintaxe CREATE [PUBLIC] SYNONYM sinnimo FOR onde: PUBLIC sinnimo objeto Ateno cria um sinnimo acessvel a todos os usurios o nome do sinnimo a ser criado identifica o objeto para o qual o sinnimo ser criado objeto;

O objeto que receber um sinnimo no pode estar contido em um pacote. Um nome de sinnimo deve ser distinto de todos os outros objetos de
propriedade do mesmo usurio.

Exemplo Criar um sinnimo de uso pblico para a tabela emp do usurio Scott. SQL> CREATE PUBLIC SYNONYM empregado 2 FOR Scott.emp;

10.16.1. Consultando sinnimos no dicionrio de dados As definies dos sinnimos ficam armazenadas no dicionrio de dados e podem ser consultadas na view USER_SYNONYM.

Exemplo Consultar todas as definies dos sinnimos do usurio corrente. SQL> select * from user_synonyms;

70
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Resultado SYNONYM_NAME CATALOG COL TABLE_OWNER SYS SYS TABLE_NAME CATALOG COL DB_LINK

---------------------------------------------------------

10.16.2. Removendo um sinnimo A instruo para se remover um sinnimo : DROP SYNONYM nome_sinnimo;

Exemplo Eliminar o sinnimo empregado. SQL> DROP SYNONYM empregado;

Ateno: Somente usurios com privilgios de DBA podem eliminar um sinnimo pblico

10.17. ndice (Index)


Um ndice do Oracle Server um objeto de esquema que pode acelerar a recuperao de linhas usando um ponteiro. Se no houver um ndice na coluna, ocorrer uma anlise em toda a tabela. O ndice muito parecido com uma chave:

Permite classificao por outros campos; Acelera a busca de registros especficos; A chave primria e a chave secundria so ndices.
A diferena entre chave e ndice que as chaves so estruturas lgicas, usadas para identificar registros em uma tabela, e ndices so estruturas fsicas, usadas para otimizar o processamento de dados, pois so objetos no banco de dados que fornecem um mapeamento de todos os valores em uma coluna de uma tabela. Cada linha em uma tabela identificada de maneira nica pelo seu ROWID. O ROWID uma pseudocoluna que contm as seguintes informaes: local exato de uma linha dentro do banco de dados, ID do objeto, ID do arquivo de dados, ID do bloco e ID da linha. O acesso linha pelo ROWID mais rpido. Os ndices armazenam o ROWID com os campos-chave do ndice e o Oracle atualiza automaticamente todos os ROWIDs de referncia se uma linha for inserida, atualizada ou removida11. 11
Hotka, Dan. Aprendendo Oracle 9i Pearson Education do Brasil, 2002 71
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

Os ndices podem ser usados para garantir a unicidade dos elementos inseridos numa coluna (ou campo) e tambm para alavancar a performance na busca por registros. O aumento de performance obtido quando o critrio de pesquisa por dados na tabela inclui referncia de coluna(s) indexada(s). Um ndice fornece acesso direto e rpido s linhas em uma tabela. Seu objetivo reduzir a necessidade de E/S do disco usando um caminho indexado para localizar dados rapidamente. O ndice usado e mantido automaticamente pelo Oracle Server. Aps a criao de um ndice, no necessria nenhuma atividade direta do usurio. Os ndices so lgica e fisicamente independentes da tabela que indexam. Isso significa que eles podem ser criados e eliminados a qualquer momento e no tm nenhum efeito sobre as tabelas-base ou outros ndices. Ateno: quando uma tabela eliminada, os ndices associados a ela tambm so eliminados. possvel criar dois tipos de ndices:

ndice exclusivo - O Oracle Server cria esse ndice automaticamente quando voc define que
uma coluna de uma tabela tenha uma restrio PRIMARY KEY ou UNIQUE KEY. O nome do ndice o nome dado restrio.

ndice no-exclusivo - Por exemplo, voc pode criar um ndice da coluna FOREIGN KEY para
uma juno em uma consulta a fim de aumentar a velocidade de recuperao.

10.17.1. Criando um ndice Sintaxe CREATE INDEX nome_ndice ON tabela (coluna[, coluna]...); onde: nome_ndice tabela coluna Exemplo Criar um ndice para coluna ename da tabela emp. SQL> CREATE INDEX 2 ON emp_ename_idx o nome do ndice. o nome da tabela. o nome da coluna na tabela a ser indexada.

emp(ename);

possvel criar vrios ndices para uma tabela, mas isso no significa que as consultas sero aceleradas. Cada operao DML que seja submetida a commit em uma tabela com ndices significa que os ndices devem ser atualizados. Quanto mais ndices associados a uma tabela voc tiver, maior ser o esforo feito pelo Oracle Server para atualizar todos os ndices aps uma DML. Por isso recomenda-se a criao de ndices quando:

a coluna for usada freqentemente na clusula WHERE ou em uma condio de juno;


72
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

a coluna contiver uma ampla faixa de valores; a coluna contiver um grande nmero de valores nulos; duas ou mais colunas forem usadas juntas com freqncia em uma clusula WHERE ou em
uma condio de juno;

a tabela for grande e se esperar que a maioria das consultas recupere menos que 2 a 4% das
linhas. Ateno

Lembre-se de que, para aplicar exclusividade, deve-se definir uma restrio exclusiva na
definio da tabela. Em seguida, um ndice exclusivo ser criado automaticamente.

Quando a tabela for atualizada com freqncia, se voc tiver um ou mais ndices em uma
tabela, as instrues DML que acessarem a tabela sero mais lentas.

10.17.2. Consultando ndices no dicionrio de dados As definies do ndice ficam armazenadas no dicionrio de dados, possvel consult-las utilizando a view USER_INDEXES. Tambm possvel checar as colunas envolvidas em um ndice consultando a view USER_IND_COLUMNS. Ateno: a view user_indexes contm muitas colunas, por isso recomendado que verifique a estrutura da view e elabore uma consulta somente com as colunas relevantes pesquisa, para isso utilize a instruo DESCRIBE user_indexes. Exemplo Exibir as informaes sobre o tipo de ndice e o nome da tabela para o ndice emp_ename_idx. 1 2 SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME FROM USER_INDEXES

3* WHERE INDEX_NAME = EMP_ENAME_IDX Resultado INDEX_NAME ---------------------EMP_ENAME_IDX INDEX_TYPE ------------------------NORMAL TABLE_NAME -------------EMP

73
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

10.17.3. Recriando um ndice Para melhoria de performance recomendado que, periodicamente, os ndices sejam recriados (REBUILD). ALTER INDEX nome_index REBUILD TABLESPACE nome_tablespace12; Exemplo ALTER INDEX emp_ename_idx REBUILD;

10.17.4. Removendo um ndice Somente o proprietrio do ndice ou usurios com privilgio DROP ANY INDEX podem remover o ndice. Sintaxe DROP INDEX nome_indice Exemplo Eliminar o ndice emp_ename_idx. SQL> DROP INDEX nome_indice

Ateno: um ndice no pode ser modificado, para alter-lo deve-se elimin-lo e, em seguida, recri-lo.

12

TABLESPACE ser estudado na matria de ABD1, uma estrutura lgica que determina como o espao fsico do banco de dados ser construdo.

74
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
75
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
76
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
77
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
78
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
79
Copyright Faculdade IBTA

IBTA 2568
DW / SI Banco de Dados Semestre III

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
80
Copyright Faculdade IBTA

IBTA 2696
DW / SI Banco de Dados Semestre III Nome: Professor: Turma: Data:

Prtica 1 Ambientao com o Erwin


Nesta primeira prtica o Professor dever abrir a ferramenta e navegar pelos menus e opes explicando as principais funcionalidades.

Figura 1

Exemplo: Definindo entidades e atributos:

1) Na Erwin Toolbox selecione o cone Entidade:

Figura 2

Copyright Faculdade IBTA

IBTA 2696
DW / SI Banco de Dados Semestre III

2) Clique com o boto direito do mouse e selecione a opo Attibutes:

Figura 3 - Identificao de Atributos

3) Ser exibida a caixa de dilogo a baixo:


Lista de entidades

Figura 4 - Identificao de Atributos

Para definir os atributos da Entidade: Na caixa de dilogo Attributes:

Selecione a entidade na lista de entidades - ENTITY Selecione a opo NEW


Na caixa New Attribute:

Selecione a forma de exibio dos atributos Hierachically ou Alphabetically O cone para representao do atributo, se ele pertencer a famlia string, number etc. Especifique o Nome do atributo Attribute Name Selecione OK.

Repita o processo para todos os atributos e a seguir selecione OK da caixa ENTITY.


Copyright Faculdade IBTA

IBTA 2697

DW / SI Banco de Dados Semestre III

Prtica 2 Representao de Entidades e Atributos Instrues: Esta prtica baseada no Exerccio 3 Identificao de Entidades e Atributos, cujo cenrio apresentado a seguir. Caso: Instituio de Ensino Aprendendo a Aprender
Estamos no ano de 2004, a Instituio de Ensino Aprendendo a Aprender estar completando no prximo ano 35 anos de atuao, ao longo de sua existncia preserva a preocupao com a qualidade, no s nos seus servios prestados, mas principalmente no ser humano. Atualmente conta com 10.000 alunos, gradativamente deixou de oferecer cursos tcnicos e substituindo-os por cursos de Tecnologia, conta atualmente com 8 cursos de tecnologia, dentre eles Bancos de Dados, Redes de Computadores, Sistemas de Informao e Sistemas Web. Possui 500 funcionrios, sendo que, 300 so professores e 200 funcionrios administrativos. Os seus cursos continuam sendo oferecidos nos perodos matutino, vespertino e noturno. Cada curso possui uma carga horria que distribuda em disciplinas com ciclos semestrais, tambm possui um professor coordenador. As disciplinas so especficas para cada curso, mesmo que disciplinas com mesmo nome faam parte da grade de vrios cursos ela dever possuir cdigos diferentes, isso se faz necessrio, pois para cada curso a disciplina visa atender um objetivo na formao das competncias a serem desenvolvidas, tendo por isso, objetivos especficos diferenciados para cada curso. Toda disciplina possui uma carga horria, a soma das cargas horrias de uma disciplina dever ser compatvel com a carga horria do curso, o cdigo da disciplina dever ser composto pelo cdigo do curso e um identificador para a disciplina. Cada professor poder ensinar diferentes disciplinas. Cada turma dever possuir um conjunto de alunos, um conjunto de disciplinas compatvel com o semestre da grade daquela turma, um professor para cada disciplina e as informaes de ano e semestre letivos. O cdigo identificador da turma dever ser composto pelo contedo dos campos: ano letivo, que representa o ano corrente, o semestre letivo que dever identificar o se 1o. semestre ou 2o. semestre do ano, cdigo do curso, semestre da grade de disciplinas que dever ser atribuda turma e o identificador da turma. Os funcionrios da Instituio dividem-se em duas categorias: professores e administrativos. Para os professores necessrio o armazenamento de sua titulao, especialmente para fins de pagamento, uma vez que existe uma tabela para pagamentos que varia de acordo com a titulao do professor, o professor remunerado em funo da quantidade de aulas que leciona. J para os funcionrios administrativos importante que se conhea o cargo e salrio, tambm existe um plano de carreira para os funcionrios administrativos que prev os cargos, salrios e benefcios para cada funo. 1) Abra o erwin e salve o seu arquivo com o nome PRATICA2 2) Represente as entidades e atributos identificados no cenrio apresentado. 3) Salve o seu arquivo.

IBTA 2697

DW / SI Banco de Dados Semestre III

R:
ALUNO registro Nome_Aluno email data_nascimento FUNCIONARIO codigo Nome email data_admissao tipo data_nascimento PROFESSOR codigo titulacao CURSO codigo_curso nome carga_horaria coordenador

TURMA ano_letivo semestre codigo_curso codigo da turma ADMINISTRATIVO codigo cargo salario

DISCIPLINA codigo_disciplina nome carga_horaria codigo_curso

IBTA 2698

DW / SI Banco de Dados Semestre III

Prtica 3 Representao de Entidades e Atributos Instrues: Esta prtica baseada no Exerccio 3 Identificao de Entidades e Atributos e d continuidade a prtica 2 1) 2) 3) 4) Abra o arquivo PRTICA 2 e salve-o com o nome PRATICA3 Identifique as chaves primria e estrangeira de cada entidade Estabelea os relacionamentos entre as entidades. Salve o seu arquivo.

Obs.: Modelo no normalizado

IBTA 2698

DW / SI Banco de Dados Semestre III

R:
ALUNO registro codigo da turma (FK) Nome_Aluno email data_nascimento codigo_turma P TURMA codigo da turma ano_letivo semestre codigo_curso

DISCIPLINA codigo_disciplina codigo_curso (FK) codigo (FK) nome carga_horaria P PROFESSOR codigo titulacao Z

CURSO codigo_curso codigo (FK) nome carga_horaria coordenador

Z FUNCIONARIO codigo (FK) Nome email data_admissao tipo data_nascimento ADMINISTRATIVO codigo (FK) cargo salario Z

IBTA 2699

DW / SI Banco de Dados Semestre III

Prtica 4 Modelo Fsico Instrues: Esta prtica baseada no Exerccio 3 Identificao de Entidades e Atributos e d continuidade a prtica 3 1) Abra o arquivo PRTICA 3 e salve-o com o nome PRATICA4 2) Gere o modelo Fsico. 3) Salve o seu arquivo. Obs.: Modelo no normalizado

IBTA 2699

DW / SI Banco de Dados Semestre III

R:
ALUNO codigo_da_turma: INTEGER Nome_Aluno: VARCHAR(20) email: DATE data_nascimento: DATE codigo_turma: CHAR(18) TURMA codigo_da_turma: INTEGER ano_letivo: INTEGER semestre: INTEGER codigo_curso: INTEGER

DISCIPLINA codigo_disciplina: CHAR(18) codigo_curso: INTEGER codigo: INTEGER nome: VARCHAR(20) carga_horaria: INTEGER

PROFESSOR codigo: INTEGER titulacao: VARCHAR(20)

CURSO codigo_curso: INTEGER codigo: INTEGER nome: VARCHAR(20) carga_horaria: INTEGER coordenador: INTEGER

FUNCIONARIO codigo: INTEGER Nome: CHAR(18) email: VARCHAR(20) data_admissao: DATE tipo: INTEGER data_nascimento: DATE

ADMINISTRATIVO codigo: INTEGER cargo: VARCHAR(20) salario: CHAR(18)

IBTA 2745
DW / SI Banco de Dados Semestre III Nome: Professor: Turma: Data:

Prtica 5 Estudo de Caso - Biblioteca

Obs: Se voc j resolveu o Exerccio terico e prtico 5, utilize os dados anotados seno faa agora a conforme o procedimento abaixo.

Considere a situao: Seu grupo foi contratado para implementao de um banco de dados para a biblioteca da Instituio de Ensino Aprendendo a Aprender. Para isso, vocs devero realizar as seguintes tarefas:

1. Realize o levantamento de dados para identificao das necessidades do cliente e descreva o cenrio encontrado. 2. Identifique as entidades e atributos. 3. Identifique os relacionamentos entre as entidades. 4. Desenvolva o MER conceitual 5. Desenvolva o MER lgico 6. Desenvolva o MER fsico.

Copyright Faculdade IBTA

IBTA 2745
DW / SI Banco de Dados Semestre III

Copyright Faculdade IBTA

IBTA 2746

DW / SI Banco de Dados Semestre III

Prtica 6 Ambientao com o SQL Instrues: Siga o roteiro apresentado a seguir, execute-o passo a passo. Objetivos: Conhecer o ambiente de trabalho do SQL; Conhecer os passos requeridos para inicializao do Oracle nos laboratrios do IBTA; Preparar o ambiente de trabalho;

Roteiro: 1. Para realizao do login no sistema operacional utilizar: Usurio: Oracle Senha: Oracle

2. Para iniciar o servio Oracle: a. Nos laboratrios de informtica do IBTA voc encontrar o cone de servio na barra de tarefas do Windows. Para acessa-la sem o atalho utilize as opes de menu: Iniciar Configuraes Painel de Controle Ferramentas Administrativas Servios b. Selecione a opo: OracleServiceDB3BD1 OracleServiceNomeDoBanco, no nosso caso

c. Inicie o Servio, para isso, clique com o boto direito do mouse e selecione a opo Iniciar/Start ou na barra de ferramentas selecione o cone 3. Para acessar o SQL: a. Nos laboratrios de informtica do IBTA voc encontrar o cone do SQL Plus na barra de tarefas do Windows.
1

IBTA 2746

DW / SI Banco de Dados Semestre III

Para acessa-lo sem o atalho selecione as opes de Menu: Iniciar Programas Oracle OraHome92 Application Development SQL Plus b. Para realizar o login no ambiente do SQLPlus, temos as seguintes opes de usurio/Senha: Usurio Senha Privilgios Scott Tiger usurio HR HR usurio SYS Oracle1 administrador Para esta atividade iremos realizar o login como administrador do Banco, pois iremos preparar o ambiente de trabalho, para isso digite: Nome do Usurio: SYS Senha: ORACLE String de Host: DB3BD1 as SYSDBA

4. Agora vamos criar o usurio SCOTT, para isso, no prompt do SQL Plus: @ C:\oracle\ora92\rdbms\admin\SCOTT.SQL 5. Realize a conexo com o usurio SCOTT. Para isso, no prompt do SQL: a. Digite EXIT, voc estar fechando a sesso do usurio SYS b. Selecione o cone do SQLPlus c. Na caixa de dilogo Logon digite: Nome do Usurio: SCOTT
1

Esta a senha default utilizada nos laboratrios do IBTA, a senha de instalao CHANGE_ON_INSTALL

IBTA 2746

DW / SI Banco de Dados Semestre III

Senha: TIGER String de Host: DB3BD1 6) Vamos verificar quais so as tabelas pertencentes ao esquema do SCOTT: Select object_name from user_objects where object_type = TABLE; O comando acima ir retornar o nome dos objetos do usurio destes objetos (Scott) quando o tipo de objeto for Tabela. 7) Vamos verificar a estrutura de cada uma das tabelas do SCOTT: Describe EMP Desc DEPT Desc SALGRADE Desc BONUS Exerccio: Agora vamos realizar os mesmos procedimentos para criao do usurio HR. 1. Relaize a conexo com o usurio administrador R: Conn Sys/Oracle@DB3BD1 as SYSDBA 2. Localize e rode o script do usurio hr, nome do arquivo HR_MAIN.SQL R: @ C:\oracle\ora92\demo\schema\human_resources\HR_MAIN.SQL OBSERVAO: Sero solicitados os parmetros abaixo, informe conforme a indicao: specify password for HR as parameter 1: Informe o valor para 1: HR specify default tablespeace for HR as parameter 2: Informe o valor para 2: USER specify temporary tablespace for HR as parameter 3: Informe o valor para 3: TEMP specify password for SYS as parameter 4: Informe o valor para 4: ORACLE
3

O comando Select utilizado para realizao de consultas sua sintaxe : Select lista_colunas From nome_tabela Where condio;

O comando Describe ou simplesmente Desc listra a estrutura da Tabela: Nome da Coluna Se a coluna aceita nulos ou no Tipo de dado/Comprimento da coluna

IBTA 2746

DW / SI Banco de Dados Semestre III

specify log path as parameter 5: Informe o valor para 5: C: 3. Realize a conexo com o usurio HR R: CONN HR/HR@DB3BD1 4. Liste os objetos Tabela do usurio HR. R: Select object_name from user_objects where object_type = TABLE; 5. Verifique a estrutura das tabelas do usurio HR. R: DESC EMPLOYEES DESC DEPARTMENT ...

IBTA 2747

DW / SI Banco de Dados Semestre III

Prtica 7 Consultas Bsicas e com o uso de Operadores


1. H quatro erros de codificao nesta instruo. Voc pode identific-los? SQL> SELECT empno, ename 2 salary x 12 ANNUAL SALARY 3 FROM emp; R: A tabela EMP no contm uma coluna chamada salary. A coluna chamada sal. O operador de multiplicao *, no x, como mostrado na linha 2. O apelido ANNUAL SALARY no pode incluir espaos. O apelido deve ser ANNUAL_SALARY ou estar entre aspas duplas. Falta uma vrgula aps a coluna ENAME. 2. Crie uma consulta para exibir os cargos exclusivos a partir da tabela EMP. R: SQL> SELECT DISTINCT job 2 FROM emp; 3. Crie uma consulta para exibir o nome e o salrio dos funcionrios que recebem mais de US$2.850. R: SQL> SELECT ename, sal 2 FROM emp 3 WHERE sal > 2850; 4. Crie uma consulta para exibir o nome do funcionrio e o nmero do departamento relativos ao nmero de funcionrio 7566. R: SQL> SELECT ename, deptno 2 FROM emp 3 WHERE empno = 7566; 5. Exiba o nome do funcionrio, o cargo e a data de admisso dos funcionrios admitidos entre 20 de fevereiro de 1981 e 1 de maio de 1981. Ordene a consulta de modo crescente pela data inicial. R: SQL> SELECT ename, job, hiredate 2 FROM emp 3 WHERE hiredate BETWEEN 4 TO_DATE('20-Feb-1981','DD-MON-YYYY') AND 5 TO_DATE('01-May-1981','DD-MON-YYYY') 6 ORDER BY hiredate;

IBTA 2747

DW / SI Banco de Dados Semestre III

6. Exiba o nome do funcionrio e o nmero do departamento de todos os funcionrios dos departamentos 10 e 30 em ordem alfabtica de nome. R: SQL> SELECT ename, deptno 2 FROM emp 3 WHERE deptno IN (10, 30) 4 ORDER BY ename; 7. Exiba o nome e a data de admisso de todos os funcionrios admitidos em 1982. R: SQL> SELECT ename, hiredate 2 FROM emp 3 WHERE hiredate LIKE '%82'; 8. Exiba o nome e o cargo de todos os funcionrios sem um gerente. R: SQL> SELECT ename, job 2 FROM emp 3 WHERE mgr IS NULL; 9. Exiba o nome, o salrio e a comisso de todos os funcionrios que recebem comisso. Classifique os dados em ordem decrescente de salrio e comisso. R: SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE comm IS NOT NULL 4 ORDER BY sal DESC, comm DESC; 10. Exiba os nomes de todos os funcionrios cuja terceira letra do nome seja A. Observao: H dois sublinhados (_) antes de A na clusula WHERE. R: SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE '__A%'; 11. Exiba os nomes de todos os funcionrios cujo nome tem duas letras L no departamento 30 ou cujo gerente seja 7782. R: SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE '%L%L%' 4 AND deptno = 30 5 OR mgr = 7782;
2

IBTA 2747

DW / SI Banco de Dados Semestre III

12. Crie uma consulta para exibir o nome, o nmero do departamento e o nome do departamento de todos os funcionrios. R: SQL> SELECT e.ename, e.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno; 13. Crie uma lista nica de todos os cargos existentes no departamento 30. Inclua a localizao do departamento 30 na sada. R: SQL> SELECT DISTINCT e.job, d.loc 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 AND e.deptno = 30; 14. Crie uma consulta para exibir o nome do funcionrio, o nome do departamento e a localizao de todos os funcionrios que recebem comisso. R: SQL> SELECT e.ename, d.dname, d.loc 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 AND e.comm IS NOT NULL; 15. Exiba o nome do funcionrio e o nome do departamento de todos os funcionrios que tm A no nome. R: SQL> SELECT e.ename, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 AND e.ename LIKE '%A%'; 16. Crie uma consulta para exibir o nome, o cargo, o nmero do departamento e o nome do departamento de todos os funcionrios que trabalham em DALLAS. R: SQL> SELECT e.ename, e.job, e.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 AND d.loc = 'DALLAS'; 17. Crie uma consulta que exibir o nome do funcionrio, o nmero do departamento e todos os funcionrios que trabalham no mesmo departamento que um determinado funcionrio. Fornea a cada coluna um label apropriado. R: SQL> SELECT e.deptno department, e.ename employee, 2 c.ename colleague 3 FROM emp e, emp c 4 WHERE e.deptno = c.deptno
3

IBTA 2747

DW / SI Banco de Dados Semestre III

5 AND e.empno <> c.empno 6 ORDER BY e.deptno, e.ename, c.ename; SELECT e.ename "Employee", e.empno "Emp#", m.ename "Manager", m.empno "Mgr#" FROM emp e, emp m WHERE e.mgr = m.empno(+) SQL> SELECT e.ename "Employee", e.empno "Emp#", 2 m.ename "Manager", m.empno "Mgr#" 3 FROM emp e, emp m 4 WHERE e.mgr = m.empno; 18. Crie uma consulta para exibir o nome e a data de admisso de qualquer funcionrio admitido aps o funcionrio Blake. R: SQL> SELECT emp.ename, emp.hiredate 2 FROM emp, emp blake 3 WHERE blake.ename = 'BLAKE' 4 AND blake.hiredate < emp.hiredate; 19. Exiba os nomes e as datas de admisso de todos os funcionrios junto com o nome do gerente e a data de admisso de todos os funcionrios admitidos antes dos respectivos gerentes. Coloque um label nas colunas Employee, Emp Hiredate, Manager e Mgr Hiredate, respectivamente. R: SQL> SELECT e.ename "Employee", e.hiredate "Emp Hiredate", 2 m.ename "Manager", m.hiredate "Mgr Hiredate" 3 FROM emp e, emp m 4 WHERE e.mgr = m.empno 5 AND e.hiredate < m.hiredate;

IBTA 2748

DW / SI Banco de Dados Semestre III

Prtica 8- Exerccios envolvendo Consultas com Join Lembrete: Inicie o servio do Oracle Instrues: Estabelea conexo com o usurio SCOTT. Utilize as tabelas do usurio Scott.

1. Exiba o nome dos funcionrios e o nome dos departamentos em que trabalham. R: Select ename, dname from emp, dept where dept.deptno = emp.deptno; 2. Exiba o nome do departamento e a sua localizao para todos os departamentos que possuem funcionrios com o cargo de CLERK R: Select dname, loc from deptno, emp where emp.deptno = dept.deptno and emp.job = CLERK; 3. Exiba o nome de todos os funcionrios que atuam nos departamentos localizados em NEW YORK R: Select ename from emp, dept where dept.deptno = emp.deptno and dept.loc = NEW YORK; 4. Exiba a localizao dos departamentos que possuem salrios superiores a 1500. R: Select dept.loc from dept, emp where dept.deptno = emp.deptno and emp.sal > 1500; 5. Exiba o nome e o nmero de dias inteiros trabalhados por cada um dos funcionrios do departamento 30. R: Select ename, round(sysdate hiredate,0) dias_trabalhados from emp, deptno where dept.deptno = emp.deptno and emp.deptno = 30; 6. Exiba o nome do funcionrio e o nome do seu gerente sob os apelidos Funcionrio e Gerente respectivamente. R: Select func.ename, gerente.ename From emp func, emp gerente Where func.mgr = gerente.empno;
1

IBTA 2748

DW / SI Banco de Dados Semestre III

7. Crie uma consulta para exibir o nome, cargo, salario, data de admisso da tabela de funcionrios e relacione com a tabela de departamento exibindo tambm os campos Nome do departamento e Localizao R: SELECT A.ENAME, A.JOB, A.SAL, A.HIREDATE, B.DNAME, B.LOC FROM EMP A, DEPT B WHERE A.DEPTNO = B.DEPTNO;

IBTA 2749

DW / SI Banco de Dados Semestre III

Prtica 9 Exerccios envolvendo Consultas com funes de linha Lembrete: Inicie o servio do Oracle Instrues: Estabelea conexo com o usurio SCOTT. Utilize as tabelas do usurio Scott.

1. Exibir nomes (ename) e cargos (job) dos funcionrios sob a identificao nomes e cargos respectivamente. R: Select ename nomes, job cargos from emp; 2. Exibir o nome de todos os funcionrios que trabalham no departamento 30 R: Select ename from emp where deptno = 30; 3. Exiba o nome de todos os funcionrios com cargo de analista (ANALYST) R: Select ename from emp where job = ANALYST; 4. Exiba o nome de todos os funcionrios que trabalham nos departamentos 10 ou 30 R: SElect ename from emp where deptno = 10 or deptno = 30; 5. Exiba o nome de todos os funcionrios que trabalham no departamento 10 com salrio maior ou igual a 500 R: Select ename from emp where deptno = 10 and sal >= 500; 6. Exiba em ordem crescente o nome de todos os funcionrios: a) em letras maisculas R: Select upper(ename) from emp order by ename;

IBTA 2749

DW / SI Banco de Dados Semestre III

b) Com a primeira letra de cada palavra em minsculas R: Select initicap(ename) from emp order by ename; c) Com todas as letras minsculas R: Select lower(ename) from emp order by ename; 7. Escreva consultas que retornem o resultado das seguintes operaes: a) Exiba o resto da diviso de 151 por 8 R: Select mod(151,8) resto_divisao from dual; b) Exiba o resultado da diviso de 151 por 8 com 2 casas decimais R: Select round(151/8,2) diviso from dual; c) Exiba o resultado da diviso de 151 por 8 truncado e sem nenhuma casa decimal. R: Select trunc(151/8,0) from dual; Obs.: Utilize a tabela DUAL. 8. Exiba o nome do funcionrio e o resultado da operao indicada de acordo com as condies abaixo sob o apelido bnus: Se o cargo do funcionrio for CLERk o bnus do salrio dever ser de 15% Se o cargo do funcionrio for ANALYST o bnus do salrio dever ser de 20% Para os demais cargos no o valor do bnus 0. Utilize a funo Decode. R: Select ename, decode (job, CLERK, sal * 0.15, ANALYST, sal * 0.20, 0) as BONUS From emp;

IBTA 2749

DW / SI Banco de Dados Semestre III

9. Resolva o exerccio 9 utilizando a funo Case. R: select ename, case job when 'CLERK' THEN sal * 0.15 when 'ANALYST' THEN sal * 0.20 else 0 end as BONUS from emp; 10. Exiba o nome dos funcionrios, o salrio sob o apelido salrio e calcule o reajuste de salrio para cada funcionrio de acordo com as condies abaixo, exiba o resultado do clculo sob o apelido Salrio_atualizado. Se salrio <= 500 reajuste de 50% Se salrio > 500 e salrio <= 1000 reajuste de 25% Se salrio > 1000 e salrio <= 5000 reajuste de 12,5% Demais salrios 6% R: Select ename, sal as salario, case WHEN sal <= 500 THEN sal + (sal * 0.5) WHEN sal > 500 and sal <= 1000 THEN sal +(sal *0.25) WHEN sal > 1000 and sal < 5000 THEN sal+(sal *0.125) Else sal+(sal * 0.06) End as Salario_atualizado From EMP; 11. Exiba nome e o valor do salrio adicionado da comisso de cada funcionrio. Utilize a funo NVL. R: Select ename, sal + (nvl(comm,0) from emp; 12. Exiba nome e o valor do salrio adicionado da comisso de cada funcionrio Utilize a funo NVL2. R: Select ename, nvl2(comm,sal + comm, sal) from emp; 13. Exiba o nome de todos os funcionrios cuja primeira letra do nome S. R: Select ename from emp where ename like S%;

IBTA 2749

DW / SI Banco de Dados Semestre III

14. Exiba o nome e o cargo de todos os funcionrios que foram contratados no ano de 1981 ou 1982; R: Select ename, job from emp where hiredate like %1981 or hiredate like %1982; 15. Exiba o nome de todos os funcionrios que trabalham em um dos departamentos 10, 20 ou 30 e tenham um dos cargos CLERK, SALESMAN R: Select ename from emp where deptno in (10, 20,30) and job in (CLERK, SALESMAN); 16. Exiba o nome e cargo de todos os funcionrios que possuem salrio entre 1000 e 2000 R: Select ename, job from emp where sal between 1000 and 2000; 17. Exiba o nome e o salrio de todos os funcionrios cuja data de contratao foi entre o perodo de 01/05/1981 e 05/10/2005. R: Select ename, sal from emp where hiredate between 01/05/1981 and 02/10/2005;

IBTA 2750

DW / SI Banco de Dados Semestre III

Prtica 10 Exerccios envolvendo Instrues DML Lembrete: Inicie o servio do Oracle Instrues: Estabelea conexo com o usurio SCOTT. Utilize as tabelas do usurio Scott. Para saber quais so as tabelas faa a seguinte consulta: Select object_name from user_objects where object_type = TABLE; esta instruo seleciona o nome dos objetos TABELA do usurio corrente, neste caso o Scott. Antes de iniciar as resolues verifique a estrutura das tabelas

1. Insira as linhas a seguir na tabela EMP. Empno 8816 8817 8818 Ename JORGE LUIZA Job ANALISTA Mgr 7902 7902 Hiredate Sal Comm 800 deptno 10 20 20

VENDEDOR 7839

15/08/2002 2500 23/02/2004 3800 15/01/2001 4800

ROBERTO ANALISTA

R: insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno) values(8816, 'JORGE', 'VENDEDOR', 7839, '15/08/2002', 2500, 800, 10); insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno) values(8817,'LUIZA', 'ANALISTA', 7902, '23/02/2004', 3800, null, 20); insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno) values(8818,'ROBERTO', 'ANALISTA', 7902, '15/01/2001', 4800, null, 20) 2. Altere o salrio de todos os funcionrios que possuem cargo de CLERK para 5000,50 R: Update EMP set sal = 5000.50 where job = CLERK; 3. Exclua todos os funcionrios que possuem salrios superiores a 1500,00 R: Delete from EMP where sal > 1500.00;

IBTA 2750

DW / SI Banco de Dados Semestre III

4. Inclua o departamento de cdigo 28 e nome Recursos Humanos, localizado em Cuiab R: Insert into dept(deptno, dename, loc) values (28, Recursos Humanos, Cuiaba); 5. Altere a localizao de todos os departamentos com cdigo > 10 e menor do que 15 para So Paulo. R: Update DEPT set loc = So Paulo where deptno > 10 and deptno < 15; 6. Desfaa as alteraes R: Rollback 7. Altere o nome do departamento da tabela DEPT para DBA, onde a localizao for NEW YORK. Cancele a transao. R: UPDATE DEPT SET DNAME = 'DBA' WHERE LOC = 'NEW YORK'; ROLLBACK; 8. Altere o cargo dos empregados da tabela EMP, onde for ANALYST para DBA. Cancele a transao. R: UPDATE EMP SET JOB = 'DBA' WHERE JOB = 'ANALYST'; ROLLBACK; 9. Delete todos os funcionrios da tabela EMP que ganhem menos que 1500. Cancele a transao. R: DELETE FROM EMP WHERE SAL < 1500; ROLLBACK;

IBTA 2750

DW / SI Banco de Dados Semestre III

10. Delete todos os departamentos localizados em BOSTON. Cancele a transao. R: DELETE FROM DEPT WHERE LOC = 'BOSTON'; ROLLBACK; 11. Altere o nome do funcionrio JOO para JOHN. R: Update EMP Set nome = JOHN WHERE ENAME = JOO; 12. Alter para 3000 o salrio de todos os funcionrios que ganham menos do que 2000. Desfaa a transao. R: Update EMP Set sal = 3000 Where sal < 2000; Rollback; 13. Exclua todos os funcionrios que trabalham no departamento de nmero 20, desfaa a transao. R: Delete from EMP where deptno = 20; Rollback; 14. Selecione os campos (ename, job e sal) da tabela EMP R: SELECT ENAME, JOB, SAL FROM EMP; 15. Selecione o campo ename da tabela EMP e formate a apresentao desta consulta de forma que a sada seja a seguinte: EMPLOYEE KING EMPLOYEE ALAN EMPLOYEE CLARK R: SELECT EMPLOYEE || ENAME FROM EMP;

IBTA 2750

DW / SI Banco de Dados Semestre III

IBTA 2751

DW / SI Banco de Dados Semestre III

Prtica 11 Instrues DDL Create, Alter e Drop Table Lembrete: Inicie o servio do Oracle Instrues: Estabelea conexo com o usurio SCOTT. Utilize as tabelas do usurio Scott.

1. Crie uma tabela com o usurio SCOTT com as seguintes caractersticas: Nome da tabela : XXX Campos : CODIGO NUMBER(5), NOME VARCHAR2(50), SALARIO NUMBER(19,2) e SEXO CHAR(1). R: CREATE TABLE XXX (CODIGO NUMBER(5), NOME VARCHAR2(50), SALARIO NUMBER(19,2), SEXO CHAR(1)); 2. Inserir 5 linhas quaisquer na tabela previamente criada (XXX) e commitar ao final das inseres. R: INSERT INTO XXX (CODIGO, NOME, SALARIO, SEXO) VALUES (1, ARNALDO, 10000, M); INSERT INTO XXX (CODIGO, NOME, SALARIO, SEXO) VALUES (2, LCIA, 11000, F); INSERT INTO XXX (CODIGO, NOME, SALARIO, SEXO) VALUES (3, GABRIELA, 11000, F); INSERT INTO XXX (CODIGO, NOME, SALARIO, SEXO) VALUES (4, MILTON, 6000, M); INSERT INTO XXX (CODIGO, NOME, SALARIO, SEXO) VALUES (5, RICARDO, 4000, M); INSERT INTO XXX (CODIGO, NOME, SALARIO, SEXO) VALUES (6, JAIME, 4000, M); COMMIT;

IBTA 2751

DW / SI Banco de Dados Semestre III

3. Adicione uma coluna nova na tabela XXX. CARGO VARCHAR2(30) R: ALTER TABLE XXX ADD CARGO VARCHAR2(30); 4. Modifique o tamanho da coluna criada NOME para o tamanho de 30. R: ALTER TABLE XXX MODIFY (NOME VARCHAR2(20));

ERROR at line 2: ORA-01441: column to be modified must be empty to decrease column length O erro acima deve ter acontecido, o que voc dever fazer para alterar o tamanho da coluna? UPDATE XXX SET NOME = NULL; COMMIT; ALTER TABLE XXX MODIFY (NOME VARCHAR2(20)); 5. Coloque novamente os valores na tabela XXX conforme antes estavam. R: DELETE FROM XXX;

INSERT INTO XXX (CODIGO, NOME, SALARIO, SEXO) (SELECT CODIGO, NOME, SALARIO, SEXO FROM YYY); COMMIT; 6. Preencha os valores da tabela XXX na coluna CARGO conforme segue: 1 DBA ORACLE DBA DB2 2 DBA ORACLE 5 - DBA DB2 3 DBA ORACLE 6 - DBA SQL SERVER R: UPDATE XXX SET CARGO = DBA ORACLE WHERE CODIGO = 1; UPDATE XXX SET CARGO = DBA ORACLE WHERE CODIGO = 2; UPDATE XXX SET CARGO = DBA ORACLE WHERE CODIGO = 3; UPDATE XXX SET CARGO = DBA DB2 WHERE CODIGO = 4; UPDATE XXX SET CARGO = DBA DB2
2

IBTA 2751

DW / SI Banco de Dados Semestre III

WHERE CODIGO = 5; UPDATE XXX SET CARGO = DBA SQL SERVER WHERE CODIGO = 6; COMMIT; 7. Coloque a coluna SEXO da tabela XXX como no usada. R: ALTER TABLE xxx SET UNUSED (SEXO);

8. Elimine as colunas que no esto sendo usadas. R: ALTER TABLE xxx DROP UNUSED COLUMNS;

9. Adicione uma restrio nica(UNIQUE KEY) com o nome de XXX_NOME_UK na coluna NOME da tabela XXX. (Testar a condio). R: ALTER TABLE XXX ADD CONSTRAINT XXX_NOME_UK UNIQUE(NOME); 10. Adicione uma restrio Check(Check Constraint) com o nome de XXX_SALARIO_CK na coluna SALARIO da tabela XXX, onde o salario deve ser maior que 500. (Testar a condio). R: ALTER TABLE XXX ADD CONSTRAINT XXX_SALARIO_CK CHECK (SALARIO > 500); 11. Adicione uma restrio Chave Primria(PRIMARY KEY) com o XXX_CODIGO_PK na coluna CODIGO da tabela XXX. (Testar a condio). R: ALTER TABLE XXX ADD CONSTRAINT XXX_CODIGO_PK PRIMARY KEY(CODIGO); 12. Adicione uma restrio No nula(NOT NULL) com o nome de XXX_CARGO_NN na coluna CARGO da tabela XXX. (Testar a condio). R: ALTER TABLE XXX MODIFY CARGO CONSTRAINT XXX_CARGO_NN NOT NULL; nome de

IBTA 2751

DW / SI Banco de Dados Semestre III

13. Adicione uma restrio No nula(NOT NULL) com o nome de XXX_SEXO_NN na coluna SEXO da tabela XXX. (Testar a condio). R: ALTER TABLE XXX MODIFY SEXO CONSTRAINT XXX_SEXO_NN NOT NULL; 14. Elimine a restrio No nula(NOT NULL) com o nome de XXX_SEXO_NN na coluna SEXO da tabela XXX. (Testar a condio). R: ALTER TABLE XXX DROP CONSTRAINT XXX_SEXO_NN; 15. Desative a restrio No nula(NOT NULL) com o nome de XXX_CARGO_NN na coluna CARGO da tabela XXX. (Testar a condio). R: ALTER TABLE XXX DISABLE CONSTRAINT XXX_CARGO_NN; 16. Ative novamente a restrio No nula(NOT NULL) com o nome de XXX_CARGO_NN na coluna CARGO da tabela XXX. (Testar a condio). R: ALTER TABLE XXX ENABLE CONSTRAINT XXX_CARGO_NN; 17. Selecione o nome, o tipo e o status da restrio criada para a tabela XXX. R: SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, STATUS FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'XXX'; 18. Elimine todas as linhas da tabela sem o uso do comando DELETE R: TRUNCATE TABLE xxx; 19. Elimine a tabela XXX. R: Drop table XXX.

IBTA 2752

DW / SI Banco de Dados Semestre III

Prtica 12 Exerccios envolvendo funes de grupo

Lembrete: Inicie o servio do Oracle Instrues:


Estabelea conexo com o usurio SCOTT. Utilize as tabelas do usurio Scott.

1. Exiba o maior salrio dos funcionrios que trabalham no departamento 10. R: SElect max(sal) from emp where deptno = 10; 2. Exiba a mdia salarial entre todos os funcionrios.

R: SElect avg(sal) from emp; 3. Exiba a soma entre todos os salrios dos funcionrios que trabalham no mesmo departamento que o funcionrio SMITH. R: SElect sum(sal) from emp where deptno = (select deptno from emp where ename = SMITH); 4. Exiba os salrios menor, maior, mdio e a soma de todos os salrios de todos os funcionrios, colocando os apelidos (Labels ou Alias) Mnimo, Mximo, Mdio e Total respectivamente. R: SELECT MIN(SAL) MINIMO, MAX(SAL) MXIMO, AVG(SAL) MEDIA, SUM(SAL) TOTAL FROM EMP; 5. Exiba a data de hoje o mesmo formato do exemplo: 13 de Setembro de 2004 Horrio - 12:32:15 obs.: Devem ser utilizadas as funes para converso de datas e exibio da data do Sistema Operacional. R: Select to_char(sysdate, dd de month de YYYY Horrio HH24:MI:SS) from dual; 6. Exiba o salrio de todos os funcionrios, sem repetio, de acordo com o exemplo: $ 99,999.99 R: Select distinct to_char(sal, $ 99,999.99) from emp;
1

IBTA 2752

DW / SI Banco de Dados Semestre III

7. Crie uma consulta para exibir o nmero de pessoas com o mesmo cargo. R: SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB; 8. Selecione as medias salriais de cada departamento R: SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO; 9. Selecione os maiores salrios agrupados por departamento e verifique se nestes grupos o salrio maior ou igual a 2000 R: SELECT DEPTNO, MAX(SAL) FROM EMP GROUP BY DEPTNO HAVING MAX(SAL) >= 2000; 10. Exiba o nome do gerente e a quantidade de funcionrios que trabalham para o mesmo gerente. R: Select g.ename, count(e.mgr) From emp g, emp e Where e.mgr = g.empno Group by g.ename

IBTA 2753

DW / SI Banco de Dados Semestre III

Prtica 13 Exerccios envolvendo subconsulta Lembrete: Inicie o servio do Oracle Instrues: Estabelea conexo com o usurio SCOTT. Utilize as tabelas do usurio Scott.

1. Exiba a soma entre todos os salrios dos funcionrios que trabalham no mesmo departamento que o funcionrio SMITH. 2. Crie uma consulta para exibir o nome do funcionrio e a data de admisso de todos os funcionrios do mesmo departamento que Blake. Excluindo Blake. 3. Exiba o nome e o salrio dos funcionrios que trabalham para o gerente KING. 4. Exiba o nmero do departamento, o nome e o cargo de todos os funcionrios do departamento de Vendas (SALES) 5. Crie uma consulta para exibir o nmero e o nome de todos os funcionrios que recebem mais que o salrio mdio. Classifique os resultados, por salrio em ordem decrescente. 6. Criar consulta que mostre o nome do funcinrio, nmero do departamento e o salrio dos funcionrios cujo nmero do departamento e o salrio correspondem ao nmero do departamento e ao salrio de qualquer funcionrio que receba comisso. 7. Selecione o nome do empregado com o maior salrio do departamento SALES 8. Selecione o nome, salario e cargo dos funcionrios cujo cargo o mesmo do funcionrio CLARK com exceo deste mesmo. 9. Selecione o cdigo do departamento e as mdias salarias agrupadas por departamento onde a mdia salarial agrupada deve ser maior que a mdia salarial do departamento com o cdigo 20. 10. Crie a tabela EMP2 com base na tabela EMP, na criao popule a tabela com os registros de todos os funcionrios com cargo = CLERK 11. Crie a tabela EMP3 com base nas tabelas EMP e DEPT, na criao popule a tabela com os registros de todos os funcionrios que trabalham nos departamentos localizados em NEW YORK. A tabela EMP3 dever conter os campos empno, ename, job, sal, mgr, deptno, dname e loc
1

IBTA 2753

DW / SI Banco de Dados Semestre III

12. Insira na tabela EMP2 todos os registros dos funcionrios que trabalham nos departamentos 10 ou 20 13. Altere os salrios dos funcionrios da tabela EMP3 que trabalham no departamento 20 para o valor da mdia salarial dos funcionrios que trabalham no departamento 30 da tabela emp. Desfaa a transao 14. Exclua todas as linhas da tabela EMP quando o cdigo do departamento for o mesmo cdigo de departamento do funcionrio 7839. Desfaa a transao.

IBTA 2754

DW / SI Banco de Dados Semestre III

Prtica 14 Views, Sinnimos, Seqncias, ndices Lembrete: Inicie o Servio do Banco Instrues: Realize conexo com o usurio Scott 1. Crie uma view VW_XXX com os campos NOME, CARGO, SALARIO da tabela XXX, onde os valores salariais sejam superiores a 6000. R: CREATE VIEW VW_XXX AS SELECT NOME, CARGO, SALARIO FROM XXX WHERE SALARIO > 6000; 2. Crie uma view VW_XXX2 com os campos CODIGO, SEXO da tabela XXX, onde os valores salariais sejam inferiores ou iguais a 6000. R: CREATE VIEW VW_XXX2 AS SELECT CODIGO, SEXO FROM XXX WHERE SALARIO <= 6000; 3. Selecione as linhas das views criadas acima VW_XXX e VW_XXX2. R: SELECT * FROM VW_XXX; SELECT * FROM VW_XXX2; 4. Modifique a view VW_XXX2 para que esta contenha alm das colunas j existentes adicione a coluna NOME, mantendo as mesmas restries j existentes. R: CREATE OR REPLACE VIEW VW_XXX2 AS SELECT CODIGO, SEXO, NOME FROM XXX WHERE SALARIO <= 6000; 5. Limite as operaes da view VW_XXX apenas as condies que a ela foram apresentadas usando a clusula WITH CHECK OPTION. Testar condio com o comando que segue: UPDATE VW_XXX SET SALARIO = 5000; R: CREATE OR REPLACE VIEW VW_XXX AS SELECT NOME, CARGO, SALARIO FROM XXX WHERE SALARIO > 6000 WITH CHECK OPTION;

IBTA 2754

DW / SI Banco de Dados Semestre III

6.

Limitar os usurios a apenas selecionar as linhas da view VW_XXX2. (Usurios no podem emitir DMLs nesta view) R: CREATE OR REPLACE VIEW VW_XXX2 AS SELECT CODIGO, SEXO, NOME FROM XXX WHERE SALARIO <= 6000 WITH READ ONLY;

7.

Remover a view VW_XXX2. R: DROP VIEW VW_XXX2;

8.

Selecione o nome e o texto da view criada por voc. R: SELECT VIEW_NAME, TEXT FROM USER_VIEWS;

9.

Crie uma sequncia (SEQUENCE) com o nome SQ_CODIGO_XXX, que inicie em 100 e que incremente de 10 em 10 unidades. R: CREATE SEQUENCE SQ_CODIGO_XXX INCREMENT BY 10 START WITH 100;

10.

Consulte as sequencias criadas pelo usurio SCOTT. R: SELECT SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, LAST_NUMBER FROM USER_SEQUENCES;

11.

Insira 2 novas linhas na tabela YYY, usando no campo CODIGO os valores trazidos da Sequencia (SEQUENCE). Efetive a operao. R: INSERT INTO YYY (CODIGO, NOME, SALARIO, SEXO) VALUES (SQ_CODIGO_XXX.NEXTVAL, JOAO, 3000, M); INSERT INTO YYY (CODIGO, NOME, SALARIO, SEXO) VALUES (SQ_CODIGO_XXX.NEXTVAL, MARIA, 3000, F); COMMIT;

IBTA 2754

DW / SI Banco de Dados Semestre III

12.

Altere a sequencia (SEQUENCE) para deixar 30 valores em cache e coloque o valor mximo da sequencia para 99999. R: ALTER SEQUENCE SQ_CODIGO_XXX INCREMENT BY 10 MAXVALUE 99999 CACHE 30;

13.

Remova a sequencia (SEQUENCE) SQ_CODIGO_XXX do usurio SCOTT. R: DROP SEQUENCE SQ_CODIGO_XXX;

14.

Crie um ndice composto com o nome de IDX_NOMECARGO_XXX para os campos NOME e CARGO da tabela XXX. R: CREATE INDEX IDX_NOMECARGO_XXX ON XXX (NOME, CARGO);

15.

Consulte o ndice criado e quais colunas foram usadas para sua criao nas views do sistema. R: SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME, STATUS FROM USER_INDEXES; SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME, COLUMN_LENGTH FROM USER_IND_COLUMNS;

16.

Elimine o ndice criado IDX_NOMECARGO_XXX. R: DROP INDEX IDX_NOMECARGO_XXX;

17.

Crie um Sinnimo com o nome de VPX para a view VW_XXX. (Testar sinnimo com comando SQL). R: CREATE SYNONYM VPX FOR VW_XXX; SELECT * FROM VPX;

18.

Elimine o Sinnimo VPX. R: DROP SYNONYM VPX;

IBTA 2754

DW / SI Banco de Dados Semestre III

IBTA 2755

DW / SI Banco de Dados Semestre III

Prtica 15 Atividade Terico/Prtica - Exerccios envolvendo Modelagem e SQL Caso NF Lembrete: Inicie o servio do Oracle Instrues: Estabelea conexo com o usurio SCOTT. Considere o Modelo Criado anteriormente, na Prtica 6, cujo enunciado segue abaixo e faa o que se pede: PRODUTO Codigo Descrio valor NOTA FISCAL Numero Cliente Nome vendedor Cdigo vendedor Produto Valor total Data Entrega VENDA Vendedor Valor Comisso Data Tipo

CLIENTE Nome Cpf Rg End Fone nascimento

Dados sobre o problema: O cliente ao efetuar uma compra tem seus dados pessoais cadastrados. Existe a necessidade de se verificar a forma de pagamento, que pode ser a vista ou a prazo e em ambos os casos existe a possibilidade de faze-lo com cheque, dinheiro ou carto de crdito O produto pode ser retirado pelo cliente ou entregue em um endereo que pode ou no ser o seu endereo pessoal A venda gera um pagamento de comisso ao vendedor, o percentual de venda de 2% do valor da compra Os produtos ficam armazenados em um estoque. O vendedor antes de efetuar uma venda consulta o estoque Toda venda gera uma nota fiscal que deve conter os dados do vendedor, do cliente, da entrega, dos produtos, data e nmero da nf, valor total de cada produto, valor total geral Todo vendedor possui um gerente, que tambm deve ser cadastrado como sendo um funcionrio. Com base nestas informaes, verifique se as tabelas indicadas so suficientes para o armazenamento dos dados necessrios a construo de uma base de dados que permita o funcionamento adequado de uma loja de eletrodomsticos e: Modelo do Banco 1. A partir do Modelo Fsico desenvolvido do ERWIN, gere os scripts de criao das tabelas
1

IBTA 2755

DW / SI Banco de Dados Semestre III

2. Cadastre: os clientes: Siliane Florzinha Joo Bonzo Leandro Grando Os vendedores Thiago Vende Tudo Ari Bab Pedro Pedrinha Os produtos Geladeira - preo 1200,00 Fogo preo 500,00 Secador de cabelos 90,00 Barbeador eltrico 120,00 Os demais dados devem ser complementados de acordo com a sua criatividade! Todas as tabelas criadas devem conter pelo menos 3 registros COMPLETOS 3. Inclua uma linha na tabela CLIENTE contendo os seus dados. 4. Altere o valor Do produto geladeira para 1288,00 5. Altere o preo de todos os produtos acrescentando 10 do seu valor original. 6. Cadastre o produto Microcomputador com valor de 1500,00 7. Exclua o produto Barbeador Eltrico 11.14 Consultas 8. Exiba o nome de todos os clientes atendidos pelo vendedor Thiago Vende Tudo 9. Exiba o nome dos vendedores e dos seus gerentes. 10. Exiba o nome dos vendedores e a soma das suas comisses no ms de julho 11. Exiba o nome dos clientes e o valor mdio das suas compras 12. Exiba a lista de clientes aniversariantes do ms corrente. 13. Exiba a lista com os 5 melhores vendedores da loja. 14. Exiba o nome e endereo de todos os clientes cujo nome iniciado com a letra A 15. Exiba todos os dados da nota fiscal para uma determinada compra. 16. Exiba todas as entregas programadas para o data corrente. 17. Exiba os nmeros das notas fiscais e os nomes dos clientes cujas notas foram emitidas na data corrente.
2

IBTA 2755

DW / SI Banco de Dados Semestre III

Resoluo: Soluo apresentada pelos alunos -- Alexandre Bevilacqua Pacheco e Ricardo de Moraes Peretto ( turma 3Bd2 2s2003) Foi utilizada a ferramenta Erwin para modelagem e gerao dos scripts de criao das tabelas

IBTA 2755

DW / SI Banco de Dados Semestre III

IBTA 2755

DW / SI Banco de Dados Semestre III

DROP TABLE cliente CASCADE CONSTRAINTS; CREATE TABLE cliente ( id_cliente number(5)CONSTRAINT PK_cliente PRIMARY KEY, nome varchar2(40) NOT NULL, cpf number(9) NOT NULL, cpf_controle number(2) NOT NULL, rg varchar2(15) NOT NULL, end varchar2(50) NOT NULL, dt_nasc date NOT NULL );

DROP TABLE fone_cliente CASCADE CONSTRAINTS; CREATE TABLE fone_cliente ( id_cliente number(5), ddd number(3), numero number(15), CONSTRAINT PK_fone_cliente PRIMARY KEY(id_cliente, ddd, numero), CONSTRAINT FK_fone_cliente FOREIGN KEY(id_cliente) REFERENCES cliente(id_cliente) );

DROP TABLE funcionario CASCADE CONSTRAINTS; CREATE TABLE funcionario ( id_funcionario number(5) CONSTRAINT PK_funcionario PRIMARY KEY, nome varchar2(40) NOT NULL, dt_admissao date NOT NULL );

DROP TABLE gerente CASCADE CONSTRAINTS; CREATE TABLE gerente ( id_gerente number(5) CONSTRAINT PK_gerente PRIMARY KEY, CONSTRAINT FK_gerente_funcionario FOREIGN KEY(id_gerente) REFERENCES funcionario(id_funcionario) );

DROP TABLE vendedor CASCADE CONSTRAINTS; CREATE TABLE vendedor ( id_vendedor number(5)CoNSTRAINT PK_vendedor PRIMARY KEY, id_gerente number(5) NOT NULL, comissao number(3) NOT NULL, CONSTRAINT FK_vendedor_funcionario FOREIGN KEY(id_vendedor) funcionario(id_funcionario),

REFERENCES

IBTA 2755

DW / SI Banco de Dados Semestre III

CONSTRAINT FK_vendedor_gerente gerente(id_gerente) );

FOREIGN

KEY(id_gerente)

REFERENCES

DROP TABLE produto_estocado CASCADE CONSTRAINTS; CREATE TABLE produto_estocado ( id_produto_estocado number(5) CONSTRAINT PK_produto PRIMARY KEY, descricao varchar2(40) NOT NULL, valor_unitario number(7,2) NOT NULL, quantidade number(10) NOT NULL );

DROP TABLE tipo_pgto CASCADE CONSTRAINTS; CREATE TABLE tipo_pgto ( id_tipo_pgto number(5)CONSTRAINT PK_tipo_pgto PRIMARY KEY, descricao varchar2(20) NOT NULL );

DROP TABLE forma_pgto CASCADE CONSTRAINTS; CREATE TABLE forma_pgto ( id_forma_pgto number(5) CONSTRAINT PK_forma_pgto PRIMARY KEY, descricao varchar2(20) NOT NULL );

DROP TABLE nfiscal CASCADE CONSTRAINTS; CREATE TABLE nfiscal ( id_nfiscal number(5) CONSTRAINT PK_nfiscal PRIMARY KEY, id_vendedor number(5) NOT NULL, id_cliente number(5) NOT NULL, id_forma_pgto number(5) NOT NULL, id_tipo_pgto number(5) NOT NULL, dt date NOT NULL, end_entrega varchar2(50) NOT NULL, CONSTRAINT FK_nfiscal_vendedor FOREIGN KEY(id_vendedor) REFERENCES vendedor(id_vendedor), CONSTRAINT FK_nfiscal_cliente FOREIGN KEY(id_cliente) REFERENCES cliente(id_cliente), CONSTRAINT FK_nfiscal_forma_pgto FOREIGN KEY(id_forma_pgto) REFERENCES forma_pgto(id_forma_pgto),
6

IBTA 2755

DW / SI Banco de Dados Semestre III

CONSTRAINT FK_nfiscal_tipo_pgto FOREIGN KEY(id_tipo_pgto) tipo_pgto(id_tipo_pgto) );

REFERENCES

DROP TABLE itens_nf CASCADE CONSTRAINTS; CREATE TABLE itens_nf ( id_nfiscal number(5) NOT NULL, id_produto_estocado number(5) NOT NULL, qtde number(5) NOT NULL, valor_unitario number(7,2) NOT NULL, CONSTRAINT PK_itens_nf PRIMARY KEY(id_nfiscal, id_produto_estocado), CONSTRAINT FK_nf_prod_nf FOREIGN KEY(id_nfiscal) REFERENCES nfiscal(id_nfiscal), CONSTRAINT FK_nf_prod_prod FOREIGN KEY(id_produto_estocado) REFERENCES produto_estocado(id_produto_estocado) );

-- SEQUENCIAS DROP DROP DROP DROP DROP DROP DROP SEQUENCE SEQUENCE SEQUENCE SEQUENCE SEQUENCE SEQUENCE SEQUENCE sq_cliente; sq_fone_cliente; sq_funcionario; sq_produto_estocado; sq_tipo_pgto; sq_forma_pgto; sq_nfiscal; sq_cliente; sq_fone_cliente; sq_funcionario; sq_produto_estocado; sq_tipo_pgto; sq_forma_pgto; sq_nfiscal;

CREATE CREATE CREATE CREATE CREATE CREATE CREATE

SEQUENCE SEQUENCE SEQUENCE SEQUENCE SEQUENCE SEQUENCE SEQUENCE

Instrues DML -- INSERTS TABELA CLIENTE INSERT INTO cliente VALUES ( sq_cliente.NEXTVAL , 'Siliane Florzinha' , 123456789 , 00 , '12.345.678-X' , 'Rua Estela, 10' , '01/01/1971' ); INSERT INTO cliente VALUES ( sq_cliente.NEXTVAL , 'Joo Bonzo' , 223456789 , 00 , '22.345.678-X' , 'Rua Estela, 20' , '02/01/1971' ); INSERT INTO cliente VALUES ( sq_cliente.NEXTVAL , 'Leandro Grando ' , 323456789 , 00 , '32.345.678-X' , 'Rua Estela, 30' , '03/01/1971' ); INSERT INTO cliente VALUES ( sq_cliente.NEXTVAL , 'Cicrano de Sousa' , 423456789 , 00 , '42.345.678-X' , 'Rua Estela, 40' , '04/01/1971' );
7

IBTA 2755

DW / SI Banco de Dados Semestre III

INSERT INTO cliente VALUES ( sq_cliente.NEXTVAL , 'Beltrano da Silva' , 523456789 , 00 , '52.345.678-X' , 'Rua Estela, 50' , '05/01/1971' ); -- INSERTS TABELA FONE_CLIENTE INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO fone_cliente fone_cliente fone_cliente fone_cliente fone_cliente VALUES VALUES VALUES VALUES VALUES ( ( ( ( ( 2 3 2 4 1 , , , , , 11 11 11 11 11 , , , , , 12345678 22345678 32345678 42345678 52345678 ); ); ); ); );

-- INSERTS TABELA FUNCIONARIO INSERT INTO funcionario VALUES ( sq_funcionario.NEXTVAL Tudo' , '12/12/2002' ); INSERT INTO funcionario VALUES ( sq_funcionario.NEXTVAL '13/11/2001' ); INSERT INTO funcionario VALUES ( sq_funcionario.NEXTVAL , , '14/01/2004' ); INSERT INTO funcionario VALUES ( sq_funcionario.NEXTVAL , , '14/05/2001' ); INSERT INTO funcionario VALUES ( sq_funcionario.NEXTVAL , , '16/02/2002'); INSERT INTO funcionario VALUES ( sq_funcionario.NEXTVAL , '20/01/1983'); -- INSERTS TABELA GERENTE INSERT INTO gerente VALUES ( 2 ); INSERT INTO gerente VALUES ( 4 ); INSERT INTO gerente VALUES ( 6 ); -- INSERTS TABELA VENDEDOR INSERT INTO vendedor VALUES ( 1 , 2 , 5 ); INSERT INTO vendedor VALUES ( 3 , 2 , 6 ); INSERT INTO vendedor VALUES ( 5 , 4 , 7 ); -- INSERTS TABELA PRODUTO_ESTOCADO INSERT INTO produto_estocado VALUES ( sq_produto_estocado.NEXTVAL , 'Geladeira' , 1200 , 10 ); INSERT INTO produto_estocado VALUES ( sq_produto_estocado.NEXTVAL , 'Fogo' , 500 , 5 ); INSERT INTO produto_estocado VALUES ( sq_produto_estocado.NEXTVAL , 'Microondas' , 1100 , 10 );
8

, 'Thiago Vende , 'Ari Bab' , 'Pedro Pedrinha' 'Brano de Souza' 'Bruno de Souza' 'Juao Alemao' ,

IBTA 2755

DW / SI Banco de Dados Semestre III

INSERT INTO produto_estocado VALUES 'PlayStation2' , 900 , 15 ); INSERT INTO produto_estocado VALUES 'Computador' , 3200 , 50 ); INSERT INTO produto_estocado VALUES 'NoteBook' , 6400 , 10 ); INSERT INTO produto_estocado VALUES 'Handheld' , 900 , 5 ); INSERT INTO produto_estocado VALUES 'Secador de cabelos' , 90 , 60 ); INSERT INTO produto_estocado VALUES 'Barbeador eltrico' , 120 , 40 ); -- INSERTS TABELA TIPO_PGTO INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO tipo_pgto tipo_pgto tipo_pgto tipo_pgto tipo_pgto tipo_pgto VALUES VALUES VALUES VALUES VALUES VALUES ( ( ( ( ( (

( ( ( ( ( (

sq_produto_estocado.NEXTVAL sq_produto_estocado.NEXTVAL sq_produto_estocado.NEXTVAL sq_produto_estocado.NEXTVAL sq_produto_estocado.NEXTVAL sq_produto_estocado.NEXTVAL

, , , , , ,

sq_tipo_pgto.NEXTVAL sq_tipo_pgto.NEXTVAL sq_tipo_pgto.NEXTVAL sq_tipo_pgto.NEXTVAL sq_tipo_pgto.NEXTVAL sq_tipo_pgto.NEXTVAL

, , , , , ,

'cartao' ); 'cheque' ); 'dinheiro' ); 'fiado' ); 'boleto' ); 'carne' );

-- INSERTS TABELA FORMA_PGTO INSERT INTO forma_pgto VALUES ( sq_forma_pgto.NEXTVAL , 'vista' ); INSERT INTO forma_pgto VALUES ( sq_forma_pgto.NEXTVAL , 'prazo' ); INSERT INTO forma_pgto VALUES ( sq_forma_pgto.NEXTVAL , 'outra' ); -- INSERTS TABELA NFISCAL INSERT INTO '05/06/2004' INSERT INTO '15/04/2004' INSERT INTO '20/06/2004' nfiscal VALUES ( sq_nfiscal.NEXTVAL , 'RUA DA MADRUGADA, 3965' ); nfiscal VALUES ( sq_nfiscal.NEXTVAL , 'RUA SEI LA O QUE, 6815 BLOCO R' ); nfiscal VALUES ( sq_nfiscal.NEXTVAL , 'Rua Tal, 199' ); , , , 1 5 1 , , , 2 3 1 , , , 1 2 3 , , , 4 6 5 , , ,

-- INSERTS TABELA ITENS_NF INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO itens_nf itens_nf itens_nf itens_nf itens_nf itens_nf itens_nf VALUES VALUES VALUES VALUES VALUES VALUES VALUES ( ( ( ( ( ( ( 1 1 1 2 2 2 2 , , , , , , , 1 2 3 4 5 6 7 , , , , , , , 1 1 1 2 1 3 2 , , , , , , , 1200 ); 500 ); 1100 ); 900 ); 3966 ); 6173 ); 900 );
9

IBTA 2755

DW / SI Banco de Dados Semestre III

--- CONSULTAS SIMPLES SELECT SELECT SELECT SELECT SELECT SELECT SELECT SELECT SELECT SELECT * * * * * * * * * * FROM FROM FROM FROM FROM FROM FROM FROM FROM FROM cliente; fone_cliente; funcionario; gerente; vendedor; produto_estocado; tipo_pgto; forma_pgto; nfiscal; itens_nf;

INSERT INTO cliente VALUES ( sq_cliente.NEXTVAL , 'Nova linha' , 111111985 , 11 , '30.909.8088' , 'R. tal, 10' , '01/01/1976' ); UPDATE produto_estocado SET valor_unitario=1288.00 WHERE UPPER(descricao) = 'GELADEIRA';

Consultas SELECT c.nome NomeCliente FROM cliente c, nfiscal n, funcionario f WHERE c.id_cliente = n.id_cliente AND n.id_vendedor = f.id_funcionario AND UPPER(f.nome) = 'THIAGO VENDE TUDO'; SELECT ven.nome nomeVendedor, ger.nome nomeGerente FROM ( SELECT v.id_vendedor, v.id_gerente, f.nome FROM vendedor v, funcionario f WHERE v.id_vendedor=f.id_funcionario) ven, (SELECT g.id_gerente, f.nome FROM gerente g, funcionario f WHERE g.id_gerente=f.id_funcionario ) ger WHERE ven.id_gerente = ger.id_gerente;

SELECT func.nome, venda.comissao FROM ( SELECT v.id_vendedor, f.nome FROM vendedor v, funcionario f WHERE v.id_vendedor=f.id_funcionario) func, ( SELECT n.id_vendedor, sum(com.comi) comissao FROM nfiscal n, (SELECT id_nfiscal, (sum(valor_unitario*qtde)*0.02) comi FROM itens_nf
10

IBTA 2755

DW / SI Banco de Dados Semestre III

GROUP BY id_nfiscal) com WHERE n.id_nfiscal = com.id_nfiscal AND TO_CHAR(n.dt, 'mm')='06' GROUP BY n.id_vendedor) venda WHERE func.id_vendedor = venda.id_vendedor;

SELECT c.nome, comp.mediaCompra FROM cliente c,( SELECT n.id_cliente, AVG(nota.valor) mediaCompra FROM nfiscal n, ( SELECT id_nfiscal, sum(valor_unitario*qtde) valor FROM itens_nf GROUP BY id_nfiscal) nota WHERE n.id_nfiscal nota.id_nfiscal GROUP BY n.id_cliente) comp WHERE c.id_cliente = comp.id_cliente;

SELECT ven.nome, 'Funcionario Ouro' mensagem FROM ( SELECT v.id_vendedor, f.nome, f.dt_admissao FROM vendedor v, funcionario f WHERE v.id_vendedor = f.id_funcionario AND TO_CHAR(f.dt_admissao, 'yyyy') < 1985) ven UNION SELECT ven.nome, 'Funcionario Prata' mensagem FROM ( SELECT v.id_vendedor, f.nome, f.dt_admissao FROM vendedor v, funcionario f WHERE v.id_vendedor = f.id_funcionario AND TO_CHAR(f.dt_admissao, 'yyyy') BETWEEN 1986 AND 2002) ven UNION SELECT ven.nome, 'Funcionario Bronze' mensagem FROM ( SELECT v.id_vendedor, f.nome, f.dt_admissao FROM vendedor v, funcionario f WHERE v.id_vendedor = f.id_funcionario AND TO_CHAR(f.dt_admissao, 'yyyy') > 2002) ven;

11

IBTA 2755

DW / SI Banco de Dados Semestre III

12

Anda mungkin juga menyukai