1 1. BANCOS DE DADOS......................................................

Propaganda
1.
BANCOS DE DADOS ................................................................................4
1.1. Banco de Dados (BD)...................................................................................4
1.2. Sistema de Gerência de Banco de Dados (SGBD)....................................4
1.2.1.Processamento de Dados sem Banco de Dados....................................5
1.2.2.Processamento de dados com uso de SGBD.........................................5
1.2.3.Principais Componentes de um SGBD..................................................6
1.2.4.Funções de um SGBD.............................................................................6
1.3. Fluxo Operacional de Dados e Controle.....................................................8
1.4. Abstração de Dados....................................................................................10
1.5. Modelos de Bancos de Dados....................................................................11
1.6. Independência de Dados.............................................................................11
1.7. Especificação CODASYL para arquitetura BD.......................................12
1.8. Especificação ANSI/X3/SPARC para arquitetura BD............................12
1.9. Funções relacionadas ao SGBD ................................................................14
1.9.1.Administrador de Dados .......................................................................14
1.9.2.Administrador de Banco de Dados......................................................14
1.10.Arquiteturas para uso do SGBD ................................................................15
1.10.1.Mono-usuário.......................................................................................15
1.10.2.Multi-Usuário com Processamento Central ......................................15
1.10.3.Arquitetura Cliente/Servidor ..............................................................15
1.11.Fases do Projeto de BD ..............................................................................16
1.11.1.Construir o Modelo Conceitual.........................................................16
1.11.2.Construir o Modelo Lógico ................................................................16
1.11.3.Construir o Modelo Físico..................................................................16
1.11.4.Avaliar o Modelo Físico .....................................................................16
1.11.5.Implementar o BD...............................................................................16
2.
MODELAGEM DE DADOS....................................................................17
2.1. Conceitos .....................................................................................................17
2.2. Requisitos para Modelagem de Dados......................................................17
2.3. Modelos Conceituais ..................................................................................17
2.4. Modelos Lógicos.........................................................................................18
2.4.1.Modelo Relacional.................................................................................18
2.4.2.Modelo de Rede .....................................................................................19
2.4.3.Modelo Hierárquico ..............................................................................20
2.5. Modelo de Dados Físico.............................................................................23
1
3.
MODELO ENTIDADE-RELACIONAMENTO (M.E.R.)....................23
3.1. Introdução ....................................................................................................23
3.2. Entidade .......................................................................................................23
3.3. Relacionamento...........................................................................................24
3.3.1.Auto-relacionamento.............................................................................25
3.3.2.Cardinalidade de Relacionamentos......................................................25
3.3.3.Cardinalidade Máxima..........................................................................26
3.3.4.Classificação de Relacionamentos Binários .......................................27
3.3.5.Relacionamento ternário .......................................................................30
3.3.6.Cardinalidade mínima ...........................................................................30
3.4. Notações Alternativas.................................................................................31
3.5. Atributo ........................................................................................................32
3.5.1.Domínio..................................................................................................32
3.5.2.Tipos de Atributos.................................................................................32
3.5.3.Atributo de Relacionamento.................................................................33
3.5.4.Identificador de Entidades ....................................................................33
3.5.5.Relacionamento Identificador (Entidade Fraca).................................34
3.5.6.Identificador de Relacionamentos........................................................34
3.6. Generalização/Especialização....................................................................35
3.7. Entidade Associativa (Agregação) ............................................................37
3.8. Relacionamento Mutuamente Exclusivo ..................................................38
4.
O MODELO RELACIONAL....................................................................39
4.1. Características das Tabelas - Modelo Relacional ...................................40
4.2. Conceitos Básicos .......................................................................................41
4.2.1.Chave primária : (primary key) ............................................................41
4.2.2.Chave estrangeira : (foreign key).........................................................41
4.2.3.Chave candidata ou alternativa ............................................................41
4.3. Normalização...............................................................................................42
4.3.1.Ilustração de um sistema a ser normalizado .......................................43
4.3.2.Análise de Dependência Funcional......................................................46
4.3.3.Formas Normais.....................................................................................50
4.3.4.Roteiro Prático para Normalização......................................................50
4.3.5.Exemplo de Normalização....................................................................52
4.4. Transposição D.E.R para D.T.R (Diagrama de Tabelas Relacionais)...56
4.4.1.Simbologia adotada no modelo relacional ..........................................56
4.4.2.Análise da Entidade no D.E.R..............................................................57
4.4.3.Análise de Relacionamento ..................................................................57
2
4.5. Restrições de integridade no modelo Relacional .....................................65
4.5.1.Integridade Lógica.................................................................................65
4.5.2.Integridade Física ..................................................................................65
4.6.Linguagens Relacionais................................................................................80
4.7.SQL (Structured Query Language) .............................................................85
4.7.1.DDL (Data Definition Language .........................................................86
4.7.2.DML (Data Manipulation Language).................................................93
4.7.3.DCL (Data Control Language).......................................................... 107
4.7.4.Transaction Control............................................................................ 110
4.7.5.Restrições de Integridade usando Stored Procedures e Triggers... 113
5.
EXERCÍCIOS:......................................................................................... 127
5.1.Exercicios de Modelagem de Dados......................................................... 127
5.2.Exercícios de Normalização:..................................................................... 130
5.3.Exercícios de SQL...................................................................................... 133
5.4.Execícios de Algebra Relacional .............................................................. 138
6.
BIBLIOGRAFIA............................... .................................................142
3
1. BANCOS DE DADOS
1.1. B ANCO DE D ADOS (BD)
Um Banco de Dados (BD) pode ser definido como uma coleção de
dados interrelacionados, armazenados de forma centralizada ou distribuída,
com redundância controlada, para servir a uma ou mais aplicações.
1.2. SISTEMA DE GERÊNCIA DE B ANCO DE D ADOS (SGBD)
Conjunto de software para gerenciar (definir, criar, modificar,
usar) um BD e garantir a integridade e segurança dos dados. O SGBD é a
interface entre os programas de aplicação e o BD. Em inglês é denominado
DataBase Management System (DBMS).
4
1.2.1. P ROCESSAMENTO DE D ADOS SEM B ANCO DE D ADOS
Dados de diferentes aplicações não estão integrados, pois são projetados
para atender a uma aplicação específica.
Problemas da falta de integração de dados:
O mesmo objeto da realidade é múltiplas vezes representado na base de
dados. Exemplo: dados de um produto em uma indústria.
Redundância não controlada de dados: Não há gerência automática da
redundância, o que leva a inconsistência dos dados devido a
redigitação de informações
Dificuldade de extração de informações: os dados são projetados para
atender aplicações especificas gerando dificuldades para o
cruzamento de informações
Dados pouco confiáveis e de baixa disponibilidade
1.2.2. P ROCESSAMENTO DE DADOS COM USO DE SGBD
Os dados usados por uma comunidade de usuários são integrados no
Banco de Dados. Cada informação é armazenada uma única vez, sendo que as
eventuais redundâncias são controladas pelo sistema em computador, ficando
transparentes para os usuários.
5
1.2.3. P RINCIPAIS C OMPONENTES DE UM SGBD
Dicionário de dados (Data Dictionary):
Descreve os dados e suas relações em forma conceitual e independente de
seu envolvimento nas diversas aplicações. Fornece referências cruzadas entre
os dados e as aplicações.
Linguagem de definição de dados (DDL - Data Definition Language):
Descreve os dados que estão armazenados no BD. As descrições dos dados
são guardadas em um “meta banco de dados”.
Linguagem de acesso (DML - Data Manipulation Language):
Usada para escrever as instruções que trabalham sobre a base de dados,
permitindo o acesso e atualização dos dados pelos programas de aplicação.
Linguagem de consulta (QUERY):
Permite que o usuário final, com poucos conhecimentos técnicos, possa
obter de forma simples, informações do BD.
Utilitários administrativos:
Programas auxiliares para carregar, reorganizar, adicionar, modificar a
descrição do BD, obter cópias de reserva e recuperar a integridade física em
caso de acidentes.
1.2.4. F UNÇÕES DE UM SGBD
Um princípio básico em BD determina que cada item de dado deveria
ser capturado apenas uma vez e então armazenado, de modo que possa tornar
disponível para atender a qualquer necessidade de acesso qualquer momento.
6
Alguns pontos importantes são:
Independência dos dados: O SGBD deve oferecer isolamento das
aplicações em relação aos dados. Esta característica permite
modificar o modelo de dados do BD sem necessidade de reescrever
ou recompilar todos os programas que estão prontos. As definições
dos dados e os relacionamentos entre os dados são separados dos
códigos os programas.
Facilidade uso/desempenho: Embora o SGBD trabalhe com estruturas
de dados complexas, os arquivos devem ser projetados para atender a
diferentes necessidades, permitindo desenvolver aplicações melhores,
mais seguras e mais rapidamente. Deve possui comandos poderosos
em sua linguagem de acesso.
Integridade dos dados: O SGBD deve garantir a integridade dos dados,
através da implementação de restrições adequadas. Isto significa que
os dados devem ser precisos e válidos.
Redundância dos dados: O SGBD deve manter a redundância de dados
sob controle, ou seja, ainda que existam diversas representações do
mesmo dado, do ponto de vista do usuário é como se existisse uma
única representação.
Segurança e privacidade dos dados: O SGBD deve assegurar que estes
só poderão ser acessados ou modificados por usuários autorizados.
Rápida recuperação após falha: Os dados são de importância vital e
não podem ser perdidos. Assim, o SGBD deve implementar sistemas
de tolerância a falhas, tais como estrutura automática de recover e
uso do conceito de transação.
Uso compartilhado: O BD pode ser acessado concorrentemente por
múltiplos usuários.
Controle do espaço de armazenamento: O SGBD deve manter
controle das áreas de disco ocupadas, evitando a ocorrência de falhas
por falta de espaço de armazenamento.
7
1.3. F LUXO OPERACIONAL DE D ADOS E CONTROLE
1
PROGRAMA DE
APLICACAO
AREA LOCAL
DO PROGRAMA
10
S.G.B.D
5
9
AREA DE
ENTRADA/SAIDA
2
6
8
4
SISTEMA
OPERACIONAL
ESQUEMAS,
DICIONARIO
DE DADOS,
DIRETORIOS
BASE
DADOS
3
7
FLUXO DE DADOS
FLUXO DE CONTROLE
8
1 - O programa do usuário comunica-se com o SGBD utilizando DML
pedindo a leitura de um registro lógico.
2 - O SGBD emite um comando para o S.O. para leitura dos
esquemas (META DADOS).
3 - O S.O. acessa os esquemas.
4 - Os Meta-dados são transferidos para área de E/S do SGBD.
5 - O SGBD consulta os Meta-dados para saber como traduzir o
comando do usuário.
6 - O SGBD emite os comandos para que o S.O. leia os
registros físicos necessários.
7 - O S.O. acessa a base de dados.
8 - Os registros físicos são transferidos para área de E/S do
SGBD.
9 - O SGBD seleciona os dados necessários para formar o(s)
registro(s) lógico(s) pedidos pelo usuário, se necessário faz a
transformação, e coloca o registro lógico na área do
usuário/aplicação.
10 - O SGBD envia ao programa de aplicação um código indicando fim
de comando.
9
1.4. ABSTRAÇÃO DE D ADOS
Um propósito central de um SGBD é proporcionar aos usuários uma
visão abstrata dos dados, isto é, o sistema esconde certos detalhes de como os
dados são armazenados ou mantidos. No entanto, os dados precisam ser
recuperados eficientemente.
A preocupação com a eficiência leva a concepção de estruturas de
dados complexas para representação dos dados no BD. Porém, uma vez que
SGBD são freqüentemente usados por pessoas sem treinamento na área de
computação, esta complexidade precisa ser escondida dos usuários. Isto é
conseguido definindo-se diversos níveis de abstração pelos quais o BD pode
ser visto:
NÍVEL FÍSICO: É o nível mais baixo de abstração, no qual se descreve
como os dados são armazenados. Estruturas complexas, de baixo
nível, são descritas em detalhe.
NÍVEL CONCEITUAL: É o nível que descreve quais os dados são
realmente armazenados no BD e quais os relacionamentos existentes
entre eles. Este nível descreve o BD como um pequeno número de
estruturas relativamente simples. Muito embora a implementação de
estruturas simples no nível conceitual possa envolver estruturas
complexas no nível físico, o usuário do nível conceitual não
precisa saber disto.
NÍVEL VISÃO: Este é o nível mais alto de abstração, no qual se expõe
apenas parte do BD. Na maioria das vezes os usuários não estão
preocupados com todas as informações do BD e sim com apenas
parte delas (Visões dos Usuários)
10
1.5. MODELOS DE B ANCOS DE D ADOS
Um modelo de (banco de) dados é uma descrição dos tipos de
informações que estão armazenadas em um banco de dados, ou seja, é a
descrição formal da estrutura de BD.
Estes modelos podem ser escritos em linguagens textuais ou linguagens
gráficas. Cada apresentação do modelo é denominado “esquema de banco de
dados”.
Se tomarmos como exemplo uma indústria, o modelo de dados deve
mostrar que são armazenadas informações sobre produtos, tais como código,
descrição e preço. Porém o modelo de dados não vai informar quais produtos
estão armazenados no Banco de Dados.
No projeto de um banco de dados, geralmente são considerados 3
modelos: conceitual, lógico e físico.
Modelo conceitual: É uma descrição mais abstrata da base de dados.
Não contém detalhes de implementação e é independente do tipo de
SGBD usado. É o ponto de partida para o projeto da base de dados.
Modelo Lógico: É a descrição da base de dados conforme é vista pelos
usuário do SGBD (programadores e aplicações). É dependente do tipo
de SGBD escolhido, mas não contém detalhes da implementação
(uma vez que o SGBD oferece abstração e independência de dados).
Modelo físico (interno): Descrição de como a base de dados é
armazenada internamente. Geralmente só é alterada para ajuste de
desempenho. A tendência dos produtos modernos é ocultar cada vez
mais os detalhes físicos de implementação.
1.6. INDEPENDÊNCIA DE D ADOS
Independência de dados a nível físico: a capacidade de se modificar o modelo
físico, sem precisar reescrever os programas de aplicação.
Independência dados a nível lógico: a capacidade de se modificar o esquema
lógico, sem a necessidade de reescrever os programas de aplicação.
Modificações no nível lógico são necessárias sempre que a estrutura lógica
do BD for alterada. Em alguns casos a recompilação pode ser requerida.
11
1.7. ESPECIFICAÇÃO CODASYL PARA ARQUITETURA BD
Primeira especificação padrão de BD conhecida, no papel 1960,
implementada 1971 - Modelo DBTG-CODASYL(Data Base Task Group –
Conference on Data Systems and Languages)
Introduziu o conceito de SCHEMA ( descrição completa do BD) e SUBSCHEMA (descrição do dados que são conhecidos por um ou mais programas
de aplicação)
1.8. ESPECIFICAÇÃO ANSI/X3/SPARC PARA ARQUITETURA BD
Proposta de modelo de referência para arquiteturas de BD.
Teve início em 1972 (Relatório provisório ) e terminou em 1983 (
Relatório final ).
Abordagem proposta por um grupo de trabalho estabelecido pelo
SPARC(Standard
Planning
and
Requeriments
Committe)
do
ANSI/X3(American National Standards Committe on Computers and
Information Processing).
Os objetivos do grupo de estudo, foram os de determinar as áreas, se
existentes, de tecnologia de BD onde fosse apropriada uma atividade de
padronização, e de produzir um conjunto de recomendações para ações em
cada uma dessas áreas.
Trabalhando sobre estes objetivos, o grupo verificou que os
INTERFACES seriam os únicos aspectos do SBD possivelmente passíveis de
serem padronizados.
12
Grupo sugere três esquemas:
APLICACAO 1
VISAO
USUARIO
VISAO GLOBAL
(de toda empresa)
ESQUEMA EXTERNO 1
APLICACAO 2
ESQUEMA EXTERNO 2
ESQUEMA
CONCEITUAL
APLICACAO 3
ESQUEMA EXTERNO 3
S.G.B.D.
ESQUEMA INTERNO
VISAO IMPLEMENTACAO
(fisica)
BD
13
1.9. F UNÇÕES RELACIONADAS AO SGBD
1.9.1. ADMINISTRADOR DE D ADOS
Gerenciar o dado como um recurso da empresa.
Planejar, desenvolver e divulgar as bases de dados da empresa.
Permitir a descentralização dos processos, mas manter centralizado os dados.
Permitir fácil e rápido acesso as informações a partir dos dados armazenados
O grande objetivo de administrador de dados é permitir que vários usuários
compartilhem os mesmos dados. Deste modo, os dados não pertencem a
nenhum sistema ou usuário de forma específica, e sim, à organização como
um todo. Assim, o administrador de dados se preocupa basicamente com a
organização dos dados e não com o seu armazenamento.
1.9.2. ADMINISTRADOR DE B ANCO DE D ADOS
O DBA (DataBase Administrator) é pessoa ou grupo de pessoas
responsável pelo controle do SGBD. São tarefas do DBA:
Responsabilidade pelos modelos lógico e físico (definindo a estrutura de
armazenamento)
Coordenar o acesso ao SGBD (usuários e senhas)
Definir a estratégia de backup
Melhorar o desempenho do SGBD
Manter o dicionário de dados
14
1.10. ARQUITETURAS PARA USO DO SGBD
1.10.1. MONO-USUÁRIO
BD está no mesmo computador que as aplicações
Não há múltiplos usuários
Recuperação geralmente através de backup
Típico de computadores pessoais
1.10.2. MULTI -U SUÁRIO COM P ROCESSAMENTO CENTRAL
BD está no mesmo computador que as aplicações
Múltiplos usuários acessando através de terminais
Típico de ambientes com mainframe
1.10.3. ARQUITETURA CLIENTE/S ERVIDOR
Multi-usuário
Servidor dedicado ao Banco de Dados, executando o SGBD
As estações clientes executam apenas as aplicações
Tráfego na rede é menor
Arquitetura atualmente em uso
15
1.11. F ASES DO P ROJETO DE BD
1.11.1. CONSTRUIR O MODELO CONCEITUAL
Modelo de alto nível, independente da implementação
Etapa de levantamento de dados
Uso de uma técnica de modelagem de dados
Abstração do ambiente de hardware/software
1.11.2. CONSTRUIR O MODELO L ÓGICO
Modelo implementável, dependente do tipo de SGBD a ser usado
Considera as necessidades de processamento
Considera as características e restrições do SGBD
Etapa de normalização dos dados
1.11.3. CONSTRUIR O MODELO F ÍSICO
Modelo implementável, com métodos de acesso e estrutura física
Considera necessidades de desempenho
Considera as características e restrições do SGBD
Dependente das características de hardware/software
1.11.4. A VALIAR O MODELO F ÍSICO
Avaliar o desempenho das aplicações
Avaliar os caminhos de acesso aos dados e estruturas utilizadas
1.11.5. IMPLEMENTAR O BD
Etapa de carga (load) dos dados
Gerar as interfaces com outras aplicações
16
2.
MODELAGEM DE DADOS
2.1. CONCEITOS
Abstração: processo mental através do qual selecionamos determinadas
propriedades ou características dos objetos e excluímos outras, consideradas
menos relevantes para o problema que esta sendo analisado.
Modelo: é uma abstração, uma representação simplificada, de uma parcela do
mundo real, composta por objetos reais.
Modelagem: atividade através da qual se cria um modelo.
Modelo de dados: Um modelo de dados é uma descrição das informações que
devem ser armazenadas em um banco de dados, ou seja, é a descrição
formal da estrutura de BD (descrição dos dados, dos relacionamentos entre
os dados, da semântica e das restrições impostas aos dados).
2.2. REQUISITOS PARA MODELAGEM DE D ADOS
Entender a realidade em questão, identificando os objetos que compõe a parte
da realidade que vai ser modelada..
Representar formalmente a realidade analisada, construindo um modelo de
dados.
Estruturar o modelo obtido e adequá-lo ao SGBD a ser usado, transformando o
modelo conceitual em modelo lógico.
2.3. MODELOS C ONCEITUAIS
São usados para descrição de dados no nível conceitual. Proporcionam
grande capacidade de estruturação e permitem a especificação de restrições de
dados de forma explícita. Exemplos:
Modelo Entidade-Relacionamento (M.E.R.)
Modelo de Semântica de dados
Modelo Infológico
Modelos Orientados para Objetos (OO)
17
2.4. MODELOS LÓGICOS
São usados na descrição dos dados no nível lógico. Em contraste com
modelos conceituais, esses modelos são usados para especificar tanto a
estrutura lógica global do BD como uma descrição em alto nível da
implementação.
2.4.1. MODELO RELACIONAL
Um BD relacional possui apenas um tipo de construção, a tabela. Uma
tabela é composta por linhas (tuplas) e colunas (atributos). Os relacionamentos
entre os dados também são representados ou por tabelas, ou através da
reprodução dos valores de atributos.
Idéias básicas Edward F. Codd , laboratório pesquisas da IBM em 1970
Exemplo : Considere o BD composto de clientes e contas.
NOME
José
Juca
Juca
Carlos
Carlos
RUA
Rua A
Rua B
Rua B
Rua C
Rua C
Nº CONTA
40
30
38
45
CIDADE
JF
RJ
RJ
SP
SP
Nº CONTA
40
30
38 *
45
38 *
SALDO
1.000,00
2.000,00
2.500,00
3500,00
* compartilham a mesma conta, devem ser sócios
18
2.4.2. MODELO DE R EDE
O BD em rede é um grafo, onde os nós representam os registros e os
arcos representam os relacionamentos entre os registros, através de ligações
pai-filho. Diferente do modelo hierárquico, um registro pode possuir diversos
registros pai.
Origem na linguagem de programação Cobol, Primeiro SGBD comercial
IDS (Integrated Data Store) projetado para a General Eletric na década de 60.
Extensão : DBTG-CODASYL(Data Base Task Group – Conference on
Data Systems and Languages) , 1º especificação padrão de BD em 1971.
Exemplos : TOTAL, IDMS, ADABAS
JOSE
RUA A
JF
40
1.000,00
JUCA
RUA B
RJ
30
2.000,00
CARLOS
RUA C
SP
38
2.500,00
45
3.500,00
19
2.4.3. MODELO HIERÁRQUICO
Um BD hierárquico é uma coleção de árvores de registros. Os registros
são usados para representar os dados e ponteiros são usados para representar o
relacionamento entre os dados, numa ligação do tipo pai-filho. A restrição é
que um determinado registro somente pode possuir um registro pai.
Exemplo : 1º SGBD da IBM IMS (Information Management System),
DMS2 SGBD da Unisys.
JOSÉ RUA A JF
JUCA RUA B RJ
CARLOS RUA C SP
40 1.000,00
30 2.000,00
38 2.500,00
38 2.500,00
45 3.500,00
20
EXEMPLOS DOS MODELOS
A) MODELO RELACIONAL :
FORNECEDOR ( fabricante )
RAZÃO
Unisys
Elebra
Flex Disk
IBM
Microlab
TECNOLOGIA
Propria
Control Data
Shugart
Propria
Ampex
PEÇA (disco)
CODIGO
410
416
421
427
TIPO
Flexível
Rígido
Rígido
Rígido
ACIONAMENTO
Step Motor
Voice Coil Linear
Step Motor
Voice Coil Rotatório
FORNECIMENTO
RAZAO
Unisys
Elebra
Elebra
Flex Disk
Flex Disk
IBM
Microlab
CODIGO
416
416
410
421
427
416
427
PREÇO
6.360,00
2.480,00
230,00
250,00
900,00
5.808,00
1.100,00
21
B) MODELO REDE
UNISYS
PROP.
ELEBRA
6.360,00
410
CON.DATA
FLEX DISK
230,00
250,00
2.480,00
FLEXIVEL
STEP M
416
RIGIDO
VOICE
SHUGART
IBM PROP.
900,00
421
RIGIDO
MICROLAB
5.808,00
STEP M
427
RIGIDO
AMPEX
1.100,00
VC DAT
C) MODELO HIERÁRQUICO
416
410
FLEXIVEL
RIGIDO
STEP M
UNISYS
PROPRIA
ELEBRA
ELEBRA
VOICE COIL LINEAR
C. DATA
230,00
421
RIGIDO
SHUGART
RIGIDO
2.420,00
PROPRIA
5.808,00
VOICE COIL ROTATORIO
STEP M
F DISK
F DISK
C. DATA
IBM
427
6.380,00
SHUGART
900,00
250,00
MICROLAB
AMPEX
1.100,00
22
2.5. MODELO DE D ADOS F ÍSICO
Usados para descrever os dados em seu nível mais baixo. Capturam os
aspectos de implementação do SGBD.
3.
MODELO ENTIDADE-RELACIONAMENTO (M.E.R.)
3.1. INTRODUÇÃO
Apresentado por Peter Chen, em 1976
É a técnica mais difundida para construir modelos conceituais de bases de
dados
É o padrão para modelagem conceitual, tendo sofrido diversas extensões
Está baseado na percepção de uma realidade constituída por um grupo básico
de objetos chamados ENTIDADES e por RELACIONAMENTOS entre
estas entidades
Seu objetivo é definir um modelo de alto nível independente de implementação
O modelo é representado graficamente por um Diagrama de EntidadeRelacionamento (DER), que é simples e fácil de ser entendido por usuários
não técnicos
Conceitos centrais do MER: entidade, relacionamento, atributo,
generalização/especialização, agregação (entidade associativa)
3.2. ENTIDADE
Conjunto de objetos da realidade modelada sobre os quais deseja-se manter
informações no Banco de Dados
Uma entidade pode representar objetos concretos da realidade (pessoas,
automóveis, material, nota fiscal) quanto objetos abstratos (departamentos,
disciplinas, cidades)
A entidade se refere a um conjunto de objetos; para se referir a um objeto em
particular é usado o termo instância (ou ocorrência)
No DER, uma entidade é representada através de um retângulo que contém o
nome da entidade
PESSOA
DEPARTAMENTO
23
3.3. RELACIONAMENTO
É toda associação entre entidades, sobre a qual deseja-se manter informações
no Banco de Dados.
Os relacionamentos representam fatos ou situações da realidade, onde as
entidades interagem de alguma forma
Um dado por si só não faz uma informação, pois não tem sentido próprio; é
necessário que haja uma associação de dados para que a informação seja
obtida.
Exemplos:
Fornecimento: entre as entidades FORNECEDOR e MATERIAL
Matrícula: entre as entidades ALUNO e DISCIPLINA
Financiamento: entre as entidades PROJETO e AGENTE
FINANCEIRO
No DER, os relacionamentos são representados por losangos, ligados às
entidades que participam do relacionamento
DEPARTAMENTO
LOTAÇÃO
EMPREGADO
Diagrama de ocorrências de relacionamentos:
24
3.3.1. AUTO- RELACIONAMENTO
Relacionamento entre ocorrências da mesma entidade.
PESSOA
marid
o
esposa
CASAMENTO
Diagrama de ocorrências no auto-relacionamento:
O papel da entidade no relacionamento indica a função que uma
ocorrência de uma entidade cumpre em uma ocorrência de um relacionamento.
3.3.2. C ARDINALIDADE DE R ELACIONAMENTOS
A cardinalidade de uma entidade em um relacionamento expressa o
número de instâncias da entidade que podem ser associadas a uma determinada
instância da entidade relacionada.
Devem ser consideradas duas cardinalidades:
Cardinalidade mínima de uma entidade é o número mínimo de instâncias
da entidade associada que devem se relacionar com uma instância da
entidade em questão.
Cardinalidade máxima de uma entidade é o número máximo de
instâncias da entidade associada que devem se relacionar com uma
instância da entidade em questão.
25
3.3.3. C ARDINALIDADE MÁXIMA
No projeto para BD relacional (como neste curso) não é necessário
distinguir as cardinalidades que sejam maiores que 1. Assim, são usados
apenas as cardinalidades máximas 1 e n (muitos).
26
3.3.4. CLASSIFICAÇÃO DE RELACIONAMENTOS B INÁRIOS
A cardinalidade máxima é usada para classificar os relacionamentos
binários (aqueles que envolvem duas entidades).
a) Relacionamentos 1:1 (um-para-um)
Uma instância da entidade “A” está associada com no máximo uma instância
da entidade “B”.
Uma instância da entidade “B” está associada com no máximo uma instância
da entidade “A”.
A
B
A1
B1
A2
B2
A3
B3
27
b) Relacionamentos 1:N (um-para-muitos)
. Uma instância da entidade "A" esta associada a qualquer número de
instâncias da entidade "B".
. Uma instância da entidade "B", todavia, pose estar associada a no
máximo uma instância da entidade "A"
A1
B1
A2
B2
B3
B4
28
c) Relacionamentos N:N (muitos-para-muitos)
Uma instância da entidade "A" esta associada a qualquer número
instâncias da entidades "B". Uma instância da entidade "B" esta associada a
qualquer número de instância da entidades "A"
A
B
A1
B1
A2
B2
A3
B3
A4
B4
29
3.3.5. RELACIONAMENTO TERNÁRIO
É o relacionamento formado pela associação de três entidades
Cardinalidade em relacionamentos ternários:
3.3.6. C ARDINALIDADE MÍNIMA
A cardinalidade mínima é usada para indicar o tipo de participação da
entidade em um relacionamento. Esta participação pode ser:
Parcial ou Opcional: quando uma ocorrência da entidade pode ou não
participar de determinado relacionamento; é indicado pela
cardinalidade mínima = 0 (zero).
Total ou Obrigatória: quando todas as ocorrências de uma entidade
devem participar de determinado relacionamento; é indicado pela
cardinalidade mínima > 0 (zero).
30
Exemplos:
CLIENTE
1
N
REALIZ
A
PEDIDO
Um cliente pode fazer pedidos ou não, mas todos os pedidos devem
estar associados a um cliente.
DEPTO
1
N
ALOCA
EMPREGADO
Todos os departamentos devem possuir pelo menos um empregado
alocado, e todos os empregados devem estar alocados em um departamento.
DEPTO
1
N
ALOCA
EMPREGADO
10
Parcialidade mínima: para um departamento ser criado, devem existem
pelo menos 10 empregados alocados.
3.4. NOTAÇÕES A LTERNATIVAS
Notação Santucci/MERISE: semântica participativa
DEPTO
(0,
N)
ALOCA
(1,
1)
ALOCA
N
EMPREGADO
Notação Setzer: semântica associativa
1
DEPTO
EMPREGADO
Notação Heuser: semântica associativa
(1
DEPTO
(0,N
ALOCA
EMPREGADO
31
3.5. A TRIBUTO
É um dado que é associado a cada ocorrência de uma entidade ou
relacionamento.
Os atributos não possuem existência própria ou independente - estão sempre
associados a uma entidade ou relacionamento
Exemplos:
Funcionário: Matrícula, Nome, Endereço
Material: Código, Descrição
Financiamento: Valor total, Meses
Fornecedor: Nome, Endereço
3.5.1. DOMÍNIO
É o conjunto de valores válidos que um atributo pode assumir.
Ex: Estado civil: solteiro, casado, divorciado, viúvo
3.5.2. TIPOS DE A TRIBUTOS
a) Opcional/Mandatório
Opcional: o atributo pode possuir um valor nulo (vazio). Ex: número de
telefone
Mandatório: o atributo deve possuir um valor válido, não nulo. Ex:
nome do cliente
b) Monovalorado/Multivalorado
Monovalorado: o atributo assume um único valor dentro do domínio.
Ex: data de nascimento
Multivalorado: o atributo pode assumir um número qualquer de valores
dentro do domínio. Ex: Telefone para contato
32
c) Atômico/Composto
Atômico: o atributo não pode ser decomposto em outros atributos. Ex:
Idade
Composto: o atributo é composto por mais de um atributo. Ex: Endereço
3.5.3. A TRIBUTO DE RELACIONAMENTO
Assim como as entidades, os relacionamentos também podem possuir
atributos.
3.5.4. IDENTIFICADOR DE E NTIDADES
Conjunto de atributos que tem a propriedade de identificar univocamente cada
ocorrência de uma entidade
Toda entidade deve possuir um identificador
O identificador deve ser mínimo, único, monovalorado e mandatório
33
3.5.5. RELACIONAMENTO IDENTIFICADOR (ENTIDADE F RACA)
Existem casos em que uma entidade não pode ser identificada apenas
com seus próprios atributos, mas necessita de atributos de outras entidades com
as quais se relaciona. Este relacionamento é denominado Relacionamento
Identificador. Alguns autores denominam uma entidade nesta situação de
Entidade Fraca.
3.5.6. IDENTIFICADOR DE R ELACIONAMENTOS
Uma ocorrência de relacionamento diferencia-se das demais pelas
ocorrências das entidades que participam do relacionamento. No exemplo
No exemplo, uma ocorrência de ALOCAÇÃO é identificada pela
ocorrência de Engenheiro e pela ocorrência de Projeto. Ou seja, para cada par
(engenheiro, projeto) há no máximo um relacionamento de alocação.
Em certos casos, será necessário o uso de atributos identificadores de
relacionamentos. Por exemplo:
Como o mesmo médico pode consultar o mesmo paciente em diversas
ocasiões, é necessário o uso de um atributo que diferencie uma consulta da
outra.
34
3.6. GENERALIZAÇÃO/E SPECIALIZAÇÃO
A generalização é um processo de abstração em que vários tipos de entidade
são agrupados em uma única entidade genérica, que mantém as propriedades
comuns
A especialização é o processo inverso, ou seja, novas entidades especializadas
são criadas, com atributos que acrescentam detalhes à entidade genérica
existente
A entidade genérica é denominada superclasse e as entidades especializadas
são as subclasses. A superclasse armazena os dados gerais de uma entidade,
as subclasses armazenam os dados particulares
Este conceito está associado à idéia de herança de propriedades. Isto significa
que as subclasses possuem, além de seus próprios atributos, os atributos da
superclasse correspondente.
Usada quando é necessário caracterizar entidades com atributos próprios ou
participação em relacionamentos específicos
35
Uma generalização/especialização pode ser total ou parcial:
É total quando, para cada ocorrência da entidade genérica, existe sempre
uma ocorrência em uma das entidades especializadas.
É parcial quando nem toda ocorrência da entidade genérica possui uma
ocorrência correspondente em uma entidade especializada.
36
3.7. ENTIDADE A SSOCIATIVA (AGREGAÇÃO)
O uso desta abstração é necessário quando um relacionamento deve ser
representado como uma entidade no modelo conceitual. Isto ocorre quando é
necessário estabelecer um relacionamento entre uma entidade e um
relacionamento.
Para atender a esta situação foi criado o conceito de Entidade Associativa ou
Agregação. A agregação é simplesmente um relacionamento que passa a ser
tratado como entidade.
Considerando o exemplo
Se for necessário adicionar a informação que, a cada consulta um ou
mais medicamentos podem ser prescritos ao paciente, será necessário criar uma
nova entidade (MEDICAMENTO). Esta entidade deve se relacionar com as
consultas, mas CONSULTA é um relacionamento. Deve ser criada então uma
entidade associativa.
37
Outra forma alternativa de se representar a entidade associativa é
3.8. RELACIONAMENTO MUTUAMENTE E XCLUSIVO
Neste tipo de relacionamento uma ocorrência de um entidade pode estar
associada com ocorrências de outras entidades, mas não simultaneamente.
AVIÃO
TRANSPORTE
CARGA
TRANSPOR
TE
PASSAGEIRO
38
4.
O MODELO RELACIONAL
Foi introduzido pelo pesquisador da IBM Edward F. Codd, 1970.
Duas características marcantes, razões de sucesso :
. estrutura de dados simples e uniforme
. fundamentação teórica sólida
É o modelo que opera com os dados organizados como um conjunto de
relações.
O modelo de dados Relacional representa o banco de dados com uma coleção
de tabelas
Representação tabular :
Toda relação pode ser vista como uma tabela, onde cada linha é uma tupla e em
cada coluna estão valores de um mesmo domínio.
Exemplo :
FORNECIMENTO
FORNECEDOR
1
2
4
PEÇA
2
3
1
PROJETO
5
7
1
QUANTIDADE
18
25
4
Relação = tabela
Tupla = linha
Atributo = coluna
39
4.1. C ARACTERÍSTICAS DAS TABELAS - MODELO R ELACIONAL
a) Cada Tabela tem um nome único através do qual ela é referenciada.
b) Cada Tabela contém um número fixo de colunas(grau tabela).
c) Não existem linhas iguais.
d) A ordem das linhas é irrelevante(identificação não é feita pela
localização, mas sim pelo valor da chave primária).
e) Cada coluna tem um nome único(diferente das demais colunas).
f) A ordem das colunas é irrelevante(a coluna é identificada pelo seu nome).
g) Cada coluna contém valores atômicos(não são permitidos grupos de
valores).
h) Cada valor de coluna é extraido de um determinado DOMÍNIO(conjunto
de valores possíveis).
i) Duas ou mais colunas podem ser definidas sobre um mesmo Domínio.
j) Operações sobre colunas diferentes exigem que as colunas pertençam ao
mesmo Domínio,
k) Conexões entre Tabelas somente serão expressas através de valores das
colunas(Chave Estrangeira).
40
4.2. CONCEITOS B ÁSICOS
4.2.1. CHAVE PRIMÁRIA : (PRIMARY KEY)
É um atributo(coluna) ou uma combinação de atributos cujos valores
distinguem uma linha das demais dentro de uma tabela.
NUMFUNC
Chave primária
NOMEFUNC
CPFFUNC
DEPTOFUNC
4.2.2. CHAVE ESTRANGEIRA : (FOREIGN KEY)
É um atributo ou uma combinação de atributos, cujos valores aparecem
necessariamente na chave primária de uma tabela.
A chave estrangeira é o mecanismo que permite a implementação de
relacionamentos(navegabilidade) em um banco de dados relacional.
NUMFUNC
Chave primária
NOMEFUNC
DEPTO
Chave primária
NOMEDPTO
CPFFUNC
DEPTOFUNC
Chave estrangeira
4.2.3. CHAVE CANDIDATA OU ALTERNATIVA
Em alguns casos, mais de um atributo ou combinações de atributos podem
servir para distinguir uma linha das demais. Um dos atributos (ou combinação
de atributos) é escolhido como chave primária, os demais atributos (ou
combinações) são denominados chaves CANDIDATAS
NUMFUNC
Chave primária
NOMEFUNC
CPFFUNC
Chave candidata
DEPTOFUNC
Chave estrangeira
41
4.3. NORMALIZAÇÃO
O que é ?
É o processo formal de exame e agrupamento de dados numa forma capaz
de suportar melhor as mudanças futuras, minimizando o impacto destas
mudanças sobre a base de dados.
Segundo Edward F. Codd , normalização é um processo sistemático e
reversível, que consiste em substituir um determinado conjunto de relações por
sucessivos conjuntos nos quais as relações tenham uma estrutura mais simples
e regular.
Principais objetivos :
Reduzir as redundâncias
Reduzir a necessidade de reestruturar as relações quando novos tipos de
dados são introduzidos
Escopo :
A partir deste processo pode-se, gradativamente, substituir um conjunto
de entidades e relacionamentos por um outro, o qual se apresenta “purificado”
em relação as anomalias de (inclusão, alteração, exclusão)
Conclusão :
Durante a Modelagem Conceitual poderemos estar trabalhando sobre
estruturas não normalizadas, pois o objetivo deste modelo é com a
representação semântica da realidade da empresa em primeiro lugar.
Nossa proposta é que seja feita uma revisão a nível de transposição do
DER para o DTR, verificando as regras de normalização antes da transposição
entre os modelos Conceitual e Lógico da realidade modelada.
42
4.3.1. ILUSTRAÇÃO D E UM S ISTEMA A S ER N ORMALIZADO
PEDIDO(Num-Ped, Data-Ped, Num-Cli, Nome-Cli, End-Cli
((Cod-Prod, Nome-Prod, Qtde-Ped,Preço-Prod, Total-Prod)), Total-Ped)
(
Pedido
) Dentro dos parenteses estão os Ítens de dados que constituem o
((
)) Os parenteses duplos envolvem os atributos do item da tupla do
Pedido. Esses (( )) são utilizados para indicar que mais do que um Pedido de
linha pode compor um Pedido:
O Ítem de linha do Pedido é chamado de ‘GRUPO DE REPETIÇÃO’
Num Data- Num Nome End-Cli
-Ped Ped
-Cli -Cli
Produtos
Cod- NomeProd Prod
10
Banana
20
Maça
30
Laranja
100
1/3/99 100
João
Rua A, 19
200
2/4/99 100
João
Rua A, 19
20
40
300
3/5/99 200
Júlio
Rua B, 19
10
50
400
4/7/99 300
Carlos Rua C, 20
10
Total
Qtde- Preço- Total- -Ped
Ped Prod prod
10
0,10
1,00
15
1,00 15,00
20
0,20
4,00
20,00
Maça 20
1,00 20,00
Mamão 10
0,50
5,00
25,00
Banana 20
0,10
2,00
Pêra
10
0,50
5,00
7,00
Banana 10
0,10
1,00 1,00
43
Nesta Estrutura
O que acontece se:
- O Cliente mudar o endereço
Estes problemas ocorrem na vida real
Devemos analisar também a redundância, um mesmo Cliente cada
vez que fizer um pedido vamos guardar (nome-cli, end-cli).
Anomalias de armazenamento.
1 – Inclusão :
Só é possível incluir um novo Cliente a partir de um pedido.
Se nosso sistema fosse, única e exclusivamente baseado na tabela
apresentada até o momento, não poderíamos cadastrar um novo Cliente em
nossa tabela, a menos que surgisse um pedido para ele.
2 – Exclusão :
Se houver a exclusão do Pedido número 400, toda a informação do
Cliente Carlos será perdida.
Neste caso, podemos perceber que o fato de um pedido conter, em sua
estrutura, os dados do Cliente, vinculados diretamente a sua existência, pode
nos levar simplesmente, perder esses dados quando um pedido for excluído.
3 – Alteração :
Se algum dado do Cliente 100 mudar, teremos que efetuar esta operação
em várias linhas da tabela.
Neste caso será necessário processar a alteração em cada uma das linhas
de cada um dos pedidos pertencentes a esse cliente
44
Um analista experiente, intuitivamente separaria os vários
atributos do Pedido em arquivos(TABELAS) distintos.
CLIENTE
PEDIDO
ITEM-PEDIDO
PRODUTO
A Normalização realiza formalmente esta separação dos atributos
em registros normalizados(CLIENTE, PEDIDO, ITEM-PEDIDO, PRODUTO)
baseado na Dependência existente entre cada atributo e sua chave primária.
Ela consegue essa separação de ENTIDADES baseada não na
intuição(como acontece com um analista de sistemas experiente), mas através
de uma metodologia formal, que não requer experiência anterior com
computadores.
45
4.3.2. ANÁLISE DE D EPENDÊNCIA F UNCIONAL
Técnica de normalização adotada em nosso curso.
Dependência Funcional :
O atributo B é funcionalmente dependente do atributo A se, em qualquer
instante, um valor em A determina, de modo único, o valor correspondente em
B, na mesma relação.
Exemplo:
EMPREGADO
#Num-Emp
Nome-Emp
Vlr-Sal-Emp
O Nome-Emp é funcionalmente dependente do Num-Emp, pelo fato de cada
Num-Emp está associado sempre ao mesmo Nome-Emp.
Para denotar esta dependência funcional, usa-se uma expressão na forma
Num-Emp à Nome-Emp. A expressão denota que a coluna Nome-Emp
depende funcionalmente da coluna Num-Emp. Diz-se que a coluna Num-Emp
é o determinante da dependência Funcional.
De forma geral, o determinante de uma dependência funcional pode ser um
conjunto de colunas e não somente uma coluna como na definição acima.
46
Propõe três tipos de dependências entre os atributos de uma tabela.
a) Dependência Funcional Total:
Os atributos de uma tabela tem que depender da chave primária e somente da
chave primária.
Um atributo C é totalmente funcionalmente dependente da chave primária
composta pelo atributos A e B , quando for funcionalmente dependente de A
e B e não dependente funcionalmente de qualquer parte da chave primária.
Exemplo :
ALOCAÇÃO
# Num-Emp
# Cod-Proj
Qtde-horas-trab
- A quantidade de horas trabalhadas num projeto não é funcionalmente
dependente do cod-proj, porque não significa o total de horas do projeto e
não é funcionalmente dependente da matrícula do funcionário, porque não
significa o total de horas trabalhadas pelo empregado.
- A quantidade de horas trabalhadas é determinada, de modo único, pela
composição da matrícula do empregado e do código do projeto, porque
significa a quantidade de
horas trabalhadas por empregado em um
determinado projeto.
b) Dependência Funcional Parcial :
O atributo C é parcialmente funcionalmente dependente da chave primária
composta pelos atributos A e B quando for funcionalmente dependente de
A ou B e não de ambos A e B
# Cod-mat
# Cod-forn
Nom-forn
Prc-mat
O atributo nom-forn é funcionalmente dependente somente do atributo
cod-forn. O nome do fornecedor é determinado, de modo único pelo código
do fornecedor, independente dos materiais que são fornecidos.
47
A dependência funcional parcial ocorre quando a chave primária da
relação é composta e se constitui numa anomalia que se deve ser evitada.
A solução para o problema da dependência parcial consiste na criação
de uma nova relação, que será composta pelo atributo ou atributos que
dependem de parte da chave e a chave que determine, de modo único estes
atributos
# Cod-mat
# Cod-forn
# Cod-forn
Nom-forn
Prc-mat
c) Dependência Funcional Transitiva
- O atributo C é dependente funcional transitivo de A se C é funcionalmente
dependente de B e B funcionalmente dependente de A, na mesma relação.
# Num-emp
DFT
D
F
T
D
F
Nom-emp
A
Data-adm-emp
B
C
Cod-proj
Data-term-proj
DF
DF
DF
O atributo data-term-proj é funcionalmente dependente do atributo
cod-proj, que por sua vez é funcionalmente dependente do atributo Numemp. Então data-term-proj é dependente transitivo de Num-emp.
A dependência funcional transitiva constitui numa anomalia que deve ser
evitada.
A solução para o problema da D.F.T. consiste na criação de uma nova
relação que será composta pelo atributo ou atributos que são dependentes
funcionais transitivos tendo como chave primária o atributo que determina a
transitividade.
# Num-emp
Nom-emp
Data-adm-emp
# Cod-proj
Data-term-proj
Cod-proj
48
Resultado da análise da dependência Funcional:
Uma relação estará normalizada segundo a análise da dependência funcional,
quando possuir uma única chave primária, todos os atributos não chaves
forem totalmente funcionalmente dependentes da chave primária e
independentes entre si, ou seja, após a eliminação da dependência funcional
parcial e transitiva, caso exista.
49
4.3.3. F ORMAS N ORMAIS:
1a Forma Normal :
Uma relação estará na 1a FN se não houver atributo representando
agrupamento e nem atributo repetitivo(multivalorado).
2a Forma Normal :
Uma relação estará na 2a FN, se e somente se, estiver na 1a FN e os seus
atributos não chaves forem dependentes funcionais completos da chave
primária.
3a Forma Normal :
Uma relação estará na 3a FN, se e somente se, estiver na 2 FN e todos os
seus atributos não chaves forem dependentes não transitivos da chave primária.
4.3.4. ROTEIRO P RÁTICO PARA NORMALIZAÇÃO:
A)TRANSFORMAÇÃO DE RELAÇÕES NÃO NORMALIZADAS EM
RELAÇOES NA 1ª FN.
- Escolher uma chave primária para a relação
- Separar da relação os atributos(ou grupos) repetitivos, transformando a
relação em outras duas relações.
. Uma delas contendo o grupo repetitivo e que terá como chave a
combinação da chave primária da relação não normalizada e uma chave (ou +)
escolhida(s) entre os atributos repetitivos. (Regra Geral)
. Outra que permanece com a chave original e os atributos restantes.
- Transformar atributos COMPOSTOS em atributos ATÔMICOS
50
B)TRANSFORMAÇÃO DAS RELAÇÕES EM 1ª FN PARA RELAÇÕES
NA 2ª FN.
- Examinar as relações com chave primária composta e verificar se todos os
atributos dependem funcionalmente de toda a chave ou apenas de parte dela.
- Os atributos que dependem de parte da chave, formam uma nova relação, cuja
chave primária é a parte da chave da relação em 1ª FN da qual dependem.
- Apenas os atributos que dependem totalmente da chave composta
permanecem na relação original.
C) TRANSFORMAÇÃO DAS RELAÇÕES EM 2ª FN PARA RELAÇÕES
EM 3ª FN.
- Examinar as dependências funcionais entre todos os atributos das relações em
2ª FN.
- Aqueles atributos que dependem de outro atributo da relação, que não a sua
chave, vão constituir uma nova relação cuja chave é o atributo do qual
dependem.
ATENÇÃO : Esta chave continua como atributo na tabela Base pois é o
elo de ligação entre ambas.
51
4.3.5.EXEMPLO DE NORMALIZAÇÃO:
ENTIDADE
ATRIBUTO
Num-Ped
Data-Ped
Num-Cli
Nome-Cli
End-Cli
Cod-Prod
Nome-Prod
Qtde-Ped
Preço-Prod
Total-Prod
Total-Ped
PEDIDO
X
\
\
\
\
(\)
(\)
(\)
(\)
(\)
\
52
1ª FN – Ëliminar atributos multivalorados e atributos representam agrupamento
ENTIDADE
ATRIBUTO
Num-ped
Data-Ped
Num-Cli
Nome-Cli
Nome-log
Numero-log
Cidade-log
Estado-log
Cep-log
Cod-Prod
Nome-Prod
Qtde-Ped
Preço-Prod
Total-Prod
Total-Ped
PEDIDO ITEM PED
X
\
\
\
\
\
\
\
\
X
X
\
\
\
\
\
53
2 ª FN – Eliminar D.F.P
ENTIDADE
ATRIBUTO
Num-Ped
Data-Ped
Num-Cli
Nome-Cli
Nome-Log
Numero-Log
Cidade-Log
Estado-Log
Cep-Log
Cod-Log
Nome-Prod
Qtde-Ped
Preço-Prod
Total-Prod
Total-Ped
PEDIDO
ITEM PED PRODUTO
X
\
\
\
\
\
\
\
\
X
X
X
\
\
\
\
\
54
3 ª FN – Eliminar D.F.T
- Redundância deve ser evitada. Não devo guardar o que posso
calcular(Cuidado - carroça)
ENTIDADE
ATRIBUTO
Num-Ped
Data-Ped
Num-Cli
Nome-Cli
Nome-Log
Numero-Log
Cidade-Log
Estado-Log
Cep-Log
Cod-Prod
Nome-Prod
Qtde-Ped
Preço-Prod
Total-Prod
Total-Ped
PEDIDO
ITEM PED
X
\
\
X
PRODUTO
CLIENTE
X
\
\
\
\
\
\
X
X
\
\
\
55
4.4. TRANSPOSIÇÃO D.E.R PARA D.T.R
RELACIONAIS)
(D IAGRAMA DE TABELAS
4.4.1. SIMBOLOGIA ADOTADA NO MODELO RELACIONAL
. James Martin
um opcional
um obrigatório
vários
.
Bachman
Notação de setas
1:1
1:N
N:N
56
4.4.2. ANÁLISE DA ENTIDADE NO D.E.R
Toda Entidade vai virar uma Tabela no D.T.R
4.4.3. ANÁLISE DE R ELACIONAMENTO
As ligações entre as tabelas assumem um papel importante, pois ‚
através delas que são representados os relacionamentos do modelo relacional.
Regra Geral :
Toda vez que um relacionamento tiver atributo, este relacionamento
vai ser representado por uma Tabela
Representação do Relacionamento no D.T.R
. Relacionamento vira Tabela
. Relacionamento vai ser representado por uma Chave Estrangeira
4.4.3.1 – Mapeamento Relacionamento 1 p/ 1
A) - As duas relações possuem a mesma chave primária.
Há uma forte razão para unir as duas relações em uma só. Combinam-se
os atributos permanecendo uma única chave primária.
PRODUTO
ESTOQUE-PROD
#COD-PROD
DESC-PROD
PRC-UNIT
#COD-PROD
QTDE-EST
DATA-ULT-MOV
PRODUTO
#COD-PROD
DESC-PROD
PRC-UNIT
QTDE-EST
DATA-ULT-MOV
57
B) - As duas relações possuem diferentes chaves primárias
B.1) - Pelo menos uma das entidades possue participação total no
relacionamento. O atributo Num-emp foi transposto para a relação
departamento, com o objetivo de representar a restrição de que todo
departamento possui um gerente que é empregado da empresa.
1
DEPTO
CHEFIA
1
EMPREGADO
DEPTO
EMPREGADO
#COD-DEPTO
NOME-DEPTO
NUM-EMP
#NUM-EMP
NOME-EMP
B.2) - Ambas entidades possuem participação parcial no relacionamento
Define-se uma terceira relação correspondendo ao relacionamento.
HOMEM
1
CASAMENTO
1
MULHER
HOMEM
MULHER
#CPF-H
NOME-H
#CPF-M
NOME-M
HOMEM
CASAMENTO
MULHER
#CPF-H
NOME-H
#CPF-H
#CPF-M
DATA-CAS
#CPF-M
NOME-M
58
4.4.3.2 – Mapeamento Relacionamento 1 p/ N
A) - A entidade do lado 1 possui participação total no relacionamento.
A chave primária da relação do lado "um" é parte integrante da relação do
lado muitos.
1
CLIENTE
N
FAZ
PEDIDO
CLIENTE
PEDIDO
#COD-CLI
NOME-CLI
CGC-CLI
#NRO-PED
DATA-PED
COD-CLI
B) - A entidade do lado um possui participação parcial no
relacionamento. Define-se
uma terceira
relação correspondendo ao
relacionamento.
HOMEM
1
CASAMENTO
N
MULHER
HOMEM
MULHER
#CPF-H
NOME-H
#CPF-M
NOME-M
HOMEM
CASAMENTO
MULHER
#CPF-H
NOME-H
#CPF-H
#CPF-M
DATA-CAS
#CPF-M
NOME-M
59
4.4.3.3 – Mapeamento Relacionamento N p/ N
- Um relacionamento N:N sempre pode ser resolvido em dois relacionamentos
1:N. Uma relação de interseção deverá ser implementada.
N
N
FORNECEDOR
FORNECIMENTO
MATERIAL
FORNECEDOR
FORNECIMENTO
MATERIAL
#COD-FORN
NOME-FORN
#COD-FORN
#COD-MAT
QTDE
#COD-MAT
DESC-MAT
4.4.3.4 – Mapeamento Relacionamento Múltiplo
FORNECEDOR
N
FORNECIMENTO
N
MATERIAL
N
PROJETO
FORNECEDOR
FORNECIMENTO
MATERIAL
#COD-FORN
NOME-FORN
#COD-FORN
#COD-MAT
#COD-PROJ
QTDE
#COD-MAT
DESC-MAT
PROJETO
#COD-PROJ
NOME-PROJ
60
4.4.3.5 – Mapeamento Agregação
MEDICO
N
ATENDE
N
PACIENTE
N
SOLICITA
N
EXAME
MEDICO
ATENDE
PACIENTE
#COD-MED
NOME-MED
#COD-MED
#COD-PAC
DATA-CONS
#COD-PAC
NOME-PAC
SOLICTA
#COD-MED
#COD-PAC
#COD-EXAME
RESULTADO-EX
EXAME
#COD-EXAME
DESC-EXAME
61
4.4.3.6 – Mapeamento Auto Relacionamento
DISCIPLINA
N
N
PRE-REQUISITO
DISCIPLINA
#COD-DISC
NOME-DISC
PRE-REQUISITO
#COD-DISC-P
#COD-DISC-S
DATA-PRE
62
4.4.3.7 – Mapeamento Hierarquia de Classe
COD-CLI
CLIENTE
NOME-CLI
TIPO
FISCAL
CPF
PESSOA
FÍSICA
CGC
PESSOA
JURÍDICA
63
a) Mapear em uma única Relação
CLIENTE
# COD-CLI
NOME-CLI
CPF-CLI /CGC-CLI
b) Mapear nas Subclasses as relações
PESSOA FÍSICA
# COD-CLI
NOME-CLI
CPF-CLI
PESSOA JURÍDICA
# COD-CLI
NOME-CLI
CGC-CLI
c) Mapear como Relações distintas
CLIENTE
# COD-CLI
NOME-CLI
PESSOA FÍSICA
# COD-CLI
CPF-CLI
PESSOA JURÍDICA
# COD-CLI
CGC-CLI
64
4.5. RESTRIÇÕES DE INTEGRIDADE NO MODELO R ELACIONAL
4.5.1. INTEGRIDADE L ÓGICA
. Conjunto de regras que existem para o modelo de dados, assim como um
conjunto de regras de negócio, que regem a manipulação do BD, de forma a
não ferir nenhuma destas regras estabelecidas
4.5.2. INTEGRIDADE F ÍSICA
. Conjunto de procedimentos operacionais que garantem a integridade do BD,
mesmo em situações de falha de algum componente do ambiente onde o BD é
manipulado
4.5.1- INTEGRIDADE LÓGICA
a) Restrição de Chave
Uma relação deve ter pelo menos uma chave
b) Restrição de Integridade de Entidade
Nenhum valor da chave primária de uma relação pode ser nula
c) Restrição de Integridade de Referência
A chave estrangeira deve ter correspondência com a chave primária em outra
tabela ou ser nula
d) Restrição de Integridade Semântica ou Regras do Negócio
São regras ditadas pelo negócio e não são mapeadas pelo M.E.R por se tratar
de condições especiais
EX: . Valor mínimo de depósito para abertura de uma conta R$10.000,00
. Conta corrente sem movimento a 180 dias será encerrada.
Podem ser cumpridas e implementadas pelos SGBDs Relacionais, através do
mecanismo de Regras ou gatilhos (Triggers), hoje existentes no SQL
65
4.5.1.1 - INTEGRIDADE REFERENCIAL DE INSERÇÃO
1 - Respeitar as cardinalidades mínimas
2 - Antes de INSERIR uma nova linha em uma tabela que contem um valor de
chave estrangeira, é necessário que já exista uma linha em uma tabela com este
valor de chave primária.
Caso contrário, a operação de INSERÇÃO deve ser rejeitada ou uma linha
com a chave primária deverá ser inserida na respectiva tabela.
DEPARTAMENTO
NUMDESCRIÇÃO
DEPTO
100
R.H
200
COBRANÇA
300
INFORMÁTICA
FUNCIONÁRIO
NUMNOME
FUNC
9999
LUIZ
8888
VERA
9898
ALBERTO
NUMDEPTO
100
300
200
4.5.1.2 - INTEGRIDADE REFERENCIAL DELEÇÃO
. Quando uma linha de uma tabela é deletada então:
a) Todas as ocorrências de chave estrangeira desta chave primária também
devem ser deletadas (CASCATA)
b) Os valores de chave estrangeira devem ser atualizados para nulo(SET
NULL)
c) A operação de deleção pode ser rejeitada, se existir uma ocorrência de chave
estrangeira da chave primária a ser deletada. (RESTRITA)
66
4.5.1.3 - INTEGRIDADE REFERENCIAL ATUALIZAÇÃO:
. Se uma chave primária é atualizada, então
a) Mudar para nulas todas as ocorrências existentes de chave estrangeira como
antigo valor
b)Mudar todas as ocorrências de chave estrangeira do antigo valor para o novo
valor
c)Rejeitar a atualização
67
SISTEMAS DE BANCOS DE DADOS
FORMULÁRIOS PARA OS MODELOS CONCEITUAL E LÓGICO DE BANCO DE DADOS
Este texto visa apresentar os formulários usados para documentação do projeto de
Banco de Dados.
Dentro do projeto pretende-se abordar duas fases básicas:
- O Modelo Conceitual: um modelo de alto nível, independente da implementação. O
principal objetivo desta fase é uma produção de uma descrição formal dos dados levantados a
partir dos requisitos dos usuários. O modelo adotado é o Modelo de Entidades e
Relacionamentos (MER), estendido com o conceito de abstração de dados. Nesta fase é
gerado um Diagrama de Entedidades e Relacionamentos (DER).
- O Modelo Lógico: um modelo implementável, que seja processável por determinada
classe de SGBD. O modelo adotado é o Modelo Relacional. Nesta fase do projeto é gerado um
Diagrama de Tabelas Relacionais (DTR), derivado do DER da fase anterior. Durante o projeto
lógico, deverão ser levadas em consideração as necessidades de processamento, a
normalização dos dados e as restrições de integridade das tabelas.
A documentação do projeto de dados constará então de 3 formulários:
a) O Modelo Conceitual de Dados (Anexo 1), composto pelo Diagrama de Entidades e
Relacionamentos (DER) - entidades, relacionamentos, cardinalidade, participação das
entidades
nos
relacionamentos,
abstrações
de
dados
(agregação,
generalização/especialização).
b) O Modelo Relacional (Anexo 2), composto pelo Diagrama de Tabelas Relacionais
(DTR), com a identificação das tabelas e das ligações entre as mesmas.
c) A Descrição da Tabela (Anexo 3), sendo usado um formulário para cada tabela,
composto pela descrição dos dados da tabela e as restrições aplicáveis. As restrições para
garantir a integridade dos dados serão consideradas sob 3 aspectos:
- Integridade de chave:
Em cada tabela será definida uma chave primária, com valores não-nulos.
- Restrição de existência:
Devem ser analisadas as restrições no caso de inclusão de uma nova tupla
ou de alteração de uma tupla existente.
Deve ser mantida a integridade referencial, no caso de tabelas que
possuam chaves estrangeiras.
- Restrição de persistência:
Devem ser analisadas as restrições no caso de exclusão de uma tupla, a
fim de ser mantida a integridade referencial.
3 situações podem ser consideradas:
a) Remoção em CASCATA: propaga a remoção ocorrida em uma tabela
para as outras tabelas relacionadas através de uma chave estrangeira.
b) Bloqueio total (Regra Restrita): a remoção não é permitida se a tupla é
referenciada por outra tabela através de uma chave estrangeira; caso contrário a
remoçao é permitida.
c) Nulificação (Regra SET NULL): a remoção de uma tupla que é
referenciada por outra tabela, através de uma chave estrangeira, implica em
atribuir valores nulos para estas chaves estrangeiras.
68
Anexo 1
CES
Modelo de Dados
Diagrama de Entidades e Relacionamentos - DER
Nome Sistema
Data
69
Anexo 2
CES
Modelo de Dados
Diagrama de Tabelas Relacionais - DTR
Nome Sistema
Data
70
Anexo 3
Modelo de Dados
Descrição de Tabela- DT
CES
Nome Sistema
Nome da
Tabela
Data
Código da
Tabela
Descrição Sumária da Tabela
Composição da Tabela
Nome do Elemento de Dado
Tipo
Códigos para o Tipo de Elemento de Dado:
CP - Chave Primária
CS - Chave Secundária
PO - Preenchimento Obrigatório
CE - Chave Estrangeira
Restrições de Integridade da Tabela
Código da
Tabela
Relacionada
XX
Código do
Restrições em relação à Tabela Relacionada
Relacionamento
YY
Inclusão:
Alteração:
Exclusão:
71
Exercício Padrão – Seção Eleitoral
EXERCÍCIO - UMA SEÇÃO ELEITORAL
A narrativa a seguir descreve o funcionamento de uma seção eleitoral durante uma eleição:
Um eleitor fornece a sua identificação e esta é validada. Se for um eleitor válido ele recebe
autorização para votar. Um eleitor válido é aquele cadastrado na seção, identificado pelo número de seu
Título de elitor (Num_Tit_Ele). Para cada eleitor existem informações armazenadas: nome (Nome_Ele),
Data de nascimento (Data_Nasc_Ele), Endereço(End_Ele), Zona Eleitoral(Num_Zona_Ele) e Seção
Eleitoral(Num-Seção_Ele).
Os votos recebidos são armazenados, sendo gerado um comprovante de votação, entregue ao
eleitor. O voto é uma associação entre um eleitor com os candidatos. Cada voto tem uma data (Data_Vot)
associada e é válido quando o candidato citado é válido. Os candidatos são identificados através de sua
inscrição na Justiça Eleitoral (Num_Insc_Cand), além de seu nome (Nome_Cand) e partido ao qual se
filia (Partido_Cand).
Se o eleitor não comparecer à seção para votar, ele pode justificar-se, enviando um documento à
Justiça Eleitoral. Se a justificativa é aceita, ela é registrada, sendo gerado um comprovante de
justificativa, enviado ao eleitor. As justificativas são registradas através de um número de identificação,
além de informações sobre o eleitor e do local de origem. Existem eleitores que não comparecem à
votação e que, ainda assim, não justificam sua abstenção.
Baseie-se na narrativa apresentada para fazer:
a)
b)
c)
Um diagrama de fluxo de dados - DFD;
Um diagrama de entidades e relacionamentos - DER;
Transponha o DER para o Modelo Relacional, usando as Regras de Mapeamento.
72
Diagrama de Fluxo de dados
ELEITOR
ELEITORES
ELEITOR NÃO
AUTORIZADO
IDENTIFICAÇÃO
ELEITOR
1
VALIDAR
ELEITOR
AUTORIZAÇÃO
CANDIDATOS
2
REGISTRAR
VOTO
VOTO
COMPROVANTE
VOTO
VOTOS
CONFIRMAÇÃO
VOTO
3
GERAR
CONFIRMAÇÃO
VOTO
ELEITORES
ELEITOR
JUSTIFICATIVA
4
VALIADAR
JUSTIFICATIVA
JUSTIFICATIVA
NAO ACEITA
JUSTIFICATIVA
ACEITA
COMPROVANTE
JUSTIFICATIVA
CONFIRMAÇÃO
JUSTIFICATIVA
JUSTIFICATIVAS
5
REGISTRAR
JUSTIFICATIVA
6
GERAR
CONFIRMAÇÃP
JUSTIFICATIVA
73
Diagrama de Entidade e Relacionamento
1
ELEITOR
1
FAZ
JUSTIFICATIVA
N
VOTA
N
CANDIDATO
74
Diagrama de Tabelas Relacionais
T1-ELEITOR
T4-JUSTIF
R1
R2
T2-VOTA
R3
T3-CANDIDATO
75
CES
Nome da
Tabela
Modelo de Dados
Descrição de Tabela- DT
Nome Sistema Data
Eleição
MMM/AA
Eleitor
Código da
Tabela
T1
Descrição Sumária da Tabela
Cadastro dos eleitores válidos
Composição da Tabela
Nome do Elemento de Dado
Num-Tit-Ele
Nome-Ele
Data-Nasc-Ele
End-Ele
Num-Zona-Ele
Num-Seção-Ele
Restrições de Integridade da Tabela
Código da
Tabela
Relacionada
Código do
Tipo
CP,PO
PO
PO
PO
PO
PO
Códigos para o Tipo de Elemento de Dado:
CP - Chave Primária
CS - Chave Secundária
PO - Preenchimento Obrigatório
CE - Chave Estrangeira
Restrições em relação à Tabela Relacionada [ I - Inclusão A - Alteração
E - Exclusão]
Relacionamento
T2
R2
I : Sem restrições
A : Não é permitida a alteração da CP
E : Restrita
T4
R1
I : Sem restrições
A : Não é permitida a alteração da CP
E : Restrita
76
CES
Nome da
Tabela
Modelo de Dados
Descrição de Tabela- DT
Nome Sistema Data
Eleição
MMM/AA
Voto
Código da
Tabela
T2
Descrição Sumária da Tabela
Votos realizados pelos eleitores
Composição da Tabela
Nome do Elemento de Dado
Num-Tit-Ele
Num-Insc-Cand
Data-Voto
Tipo
CP,CE,PO
CP,CE,PO
PO
Códigos para o Tipo de Elemento de Dado:
CP - Chave Primária
CS - Chave Secundária
PO - Preenchimento Obrigatório
CE - Chave Estrangeira
Restrições de Integridade da Tabela
Código da
Tabela
Relacionada
Código do
Restrições em relação à Tabela Relacionada
Alteração
E - Exclusão]
[ I - Inclusão
A-
Relacionamento
T1
R2
I : O eleitor deve estar cadastrado e não deve possuir nenhuma
justificativa
A : Não é permitida a alteração das CP
E : Sem restrições
T3
R3
I : O candidato deve estar cadastrado
A : Não é permitida a alteração das CP
E : Sem restrições
77
CES
Nome da
Tabela
Modelo de Dados
Descrição de Tabela- DT
Nome Sistema Data
Eleição
MMM/AA
Candidato
Código da
Tabela
T3
Descrição Sumária da Tabela
Candidatos cadastrados para a eleição
Composição da Tabela
Nome do Elemento de Dado
Num-Insc-Cand
Nome-Cand
Partido-Cand
Tipo
CP,PO
PO
PO
Códigos para o Tipo de Elemento de Dado:
CP - Chave Primária
CS - Chave Secundária
PO - Preenchimento Obrigatório
CE - Chave Estrangeira
Restrições de Integridade da Tabela
Código da
Tabela
Relacionada
T2
Código do
Restrições em relação à Tabela Relacionada
Alteração
E – Exclusão]
[ I - Inclusão
A-
Relacionamento
R3
I : Sem restrições
A : Não é permitida a alteração da CP
E : Restrita
78
CES
Nome da
Tabela
Modelo de Dados
Descrição de Tabela- DT
Nome Sistema Data
Eleição
MMM/AA
Justif
Código da
Tabela
T4
Descrição Sumária da Tabela
Justificativas apresentadas pelos eleitores ausentes à eleição
Composição da Tabela
Nome do Elemento de Dado
Num-Justif
Local-Justif
Data-Justif
Motivo-Justif
Num-Tit-Ele
Tipo
CP,PO
PO
PO
PO
CE,PO
Códigos para o Tipo de Elemento de Dado:
CP - Chave Primária
CS - Chave Secundária
PO - Preenchimento Obrigatório
CE - Chave Estrangeira
Restrições de Integridade da Tabela
Código da
Tabela
Relacionada
T1
Código do
Restrições em relação à Tabela Relacionada
Alteração
E - Exclusão]
[ I - Inclusão
A-
Relacionamento
R1
I : O eleitor deve estar cadastrado e não deve possuir nenhum voto
A : Não é permitida a alteração das chaves CP ou CE
E : Sem restrições
79
4.6.LINGUAGENS R ELACIONAIS
- FORMAIS
- COMERCIAIS
ÁLGEBRA
CÁLCULO
TUPLAS
DOMÍNIO
SQL
QUEL (Linguagem Consulta) INGRES (1976)
QBE (Query by Example) – IBM (1975)
HISTÓRICO
. 1970: Edward F. Codd
Artigo Modelo Relacional de Dados para grandes BD compartilhados
1º protótipo de um SGBD relacional. SYSTEM/R
. 1974/1975 : Criada a Linguagem SEQUEL
. 1975: QBE(Qurey by Example) - IBM
. 1976/1977: Versão SEQUEL/2 (alterado SQL)
. 1976: Criada a Linguagem QUEL - INGRES
. 1978/1979: ORACLE (Oracle Corporation)
. 1981: Diversos fabricantes lançam produtos baseados no SQL
. 1982: Criação comitê na ANSI para proposta padrão
. 1983: DB2 (IBM)
. 1986: O padrão ANSI SQL é utilizado – SQL 1
. 1988: DB2 versão 2 (IBM)
SQL 1: Padrão original não havia cláusula para especificar chave; modificado
em 1989
SQL 2: aprovado em 1992: implementa conexão cliente/servidor
SQL 3: em fase de aprovação; implementa o Modelo Orientado a Objeto
80
4.6.1 - ÁLGEBRA RELACIONAL
Matemáticamente falando, uma tabela (relação) é um conjunto , um conjunto
de linhas.
No modelo relacional temos o B.D. representado como uma coleção de tabelas,
quando queremos manipular ( recuperar ) dados em geral o resultado nos é
apresentado como uma tabela, derivada de alguma forma de outras tabelas.
A álgebra relacional é um conjunto de operações e relações.
4.6.1.1 - Operações tradicionais
- union
- intersection
- diference
- cartesian
4.6.1.2- Operações especiais
- project
- select
- join
- divide
81
4.6.1 - ÁLGEBRA RELACIONAL
Operadores SQL possuem equivalentes diretos em álgebra
Um S.G.B.D. para ser considerado completamente relacional tem que suportar:
- B.D.R. ( conceito domínio, chave, ...)
- Uma linguagem que seja pelo menos tão potente quanto a álgebra.
4.6.1.1 - Operações Tradicionais
. UNION
R1 union R2 giving R3
R1
COD
NOME CIDADE
S1
JOAO
S2
JOSE
R2
COD
NOME CIDADE
RJ
S1
JOAO
RJ
S3
BETO
R3
COD
NOME CIDADE
RJ
S1
JOAO
RJ
SP
S2
JOSE
RJ
S3
BETO
SP
. INTERSECTION
R1 intersection R2 giving R4
R4
COD
NOME CIDADE
S1
JOAO
RJ
. DIFERENCE
R1 diference R2 giving R5
R5
COD
NOME CIDADE
S2
JOSE
RJ
82
4.6.1.1 - Operações Tradicionais
. CARTESIAN
R6 cartesian R7 giving R8
R6
A
B
A1
A2
R7
C
D
B1
C1
B2
C2
R8
A
B
C
D
D1
A1
B1
C1
D1
D2
A1
B1
C2
D2
A2
B2
C1
D1
A2
B2
C2
D2
4.6.2.2- Operações Especiais
. PROJECT
Project R1 over Cod giving R9
R1
COD
NOME
R9
COD
F1
JOSE
F1
F2
JOAO
F2
F3
MARIA
F3
F4
PEDRO
F4
. SELECT
Select R10 where salario > 5.000 giving R11
R10 COD DEPTO SALARIO
F1
D1
1.000
F2
D2
4.000
F3
D1
6.000
R11 COD
F3
DEPTO SALARIO
D1
6.000
83
4.6.2.2- Operações Especiais
. DIVIDE
Divide R12 by R13 over Cod giving R14
R12 COD B
R13 B
R14 COD
A1
B1
B2
A3
A2
B1
B3
A7
A3
B2
A7
B2
A2
B3
A3
B3
A7
B3
JOIN NATURAL
O JOIN na verdade duplica a coluna que ‚ passada como argumento. (
Nós adotamos que não )
R15 A
B
C
D
R16 A
E
F
S1
ZE
20
RJ
S1
5
6
S2
JO
10
SP
S2
10
7
S3
15
8
R17 A
B
C
D
E
F
S1
ZE
20
RJ
5
6
S2
JO
10
SP
10
7
!
!
A
S1
S2
Join R15 and R16 over A giving R17
Estamos trabalhando com JUNÇÃO baseada em igualdade de valores
(EQUI-JOIN). Mas poderíamos ter JUNÇÃO "maior que", JUNÇÃO "não
igual", etc...
Uma EQUI-JOIN com uma das colunas idênticas eliminadas chama-se
JOIN NATURAL.
84
4.7.SQL (S TRUCTURED QUERY L ANGUAGE)
Mais que uma linguagem de consulta, oferece funções para DEFINIÇÃO,
MANIPULAÇAO e CONTROLE dos dados de um Banco de dados.
DDL (Data Definition Language)
- CREATE
- ALTER
- DROP
: criação de novas estruturas
: alteração de estruturas
: remoção de estruturas
DML (Data Manipulation Language)
- INSERT
- DELETE
- UPDATE
- SELECT
: Inserção de registros
: deleção de registros
: atualização de registros
: Seleção de registros
DCL (Data Control Language)
- GRANT
- REVOKE
: concessão de privilégios a tabelas e visões
: revogação de privilégios a tabelas e visões
Transaction Control
- COMMIT
: efetiva uma alteração no banco de dados
- ROLLBACK : desfaz uma alteração antes de ser efetivada no banco
- SAVEPOINT : permite uma subdivisão lógica de uma transação longa
Restrições de integridade usando
-.STORED PROCEDURES
-.TRIGGERS
85
Dicionário de Dados (Catálogo)
. É um BD de sistema, que pode ser consultado por meio de comandos
SELECT da SQL, contendo:
.informações sobre as tabelas básicas
.as visões
.os direitos de acesso
.as identificações dos usuários, etc
. Sua forma exata é uma característica de cada sistema e não da SQL
4.7.1 - DDL (D ATA DEFINITION L ANGUAGE)
a)CREATE
a-1) CREATE TABLE nome_tabela
(nome_coluna tipo [(tamanho)] [restrição_coluna],
nome_coluna tipo [(tamanho)] [restrição_coluna],
[restrição_tabela] );
.restrição: É um mecanismo pelo qual você limita ou restringe o tipo de dado
que uma coluna pode armazenar.
.restrição_coluna: referencia somente uma coluna, aceitando todos os tipos de
restrições.
[CONSTRAINT nome_restrição] tipo_restrição
.restrição_tabela: referencia uma ou mais colunas. Só não aceita o tipo NOT
NULL.
[CONSTRAINT nome_restrição] tipo_restrição (coluna, ...)
Tipos de restrições
[NOT] NULL :
Indica se a coluna pode ou não receber valores nulos. O default é NULL
UNIQUE :
Indica que a coluna ou combinação de colunas não pode ter valores
repetidos.
86
PRIMARY KEY :
Indica que a coluna ou combinação de colunas forma a chave primária.
Chave Estrangeira
REFERENCES nome_tabela_pai(nome_coluna_pai)
[ON DELETE CASCADE]
Usada a nível de coluna, indica que a coluna é uma chave estrangeira.
FOREIGN KEY(nome_coluna_filho)
REFERENCES nome_tabela_pai(nome_coluna_pai)
[ON DELETE CASCADE]
Usada a nível de tabela, indica que a coluna ou combinação de colunas é
uma chave estrangeira.
ON DELETE CASCADE
Indica quando uma linha na tabela_pai é deletada haverá uma deleção das
linhas correspondentes (chave estrangeira) na tabela_filho.
Obs : O default na ausência da clausula ON DELETE CASCADE é
RESTRICT.
.Exist e ai nda opç ão no padr ão SQ L/2 ON DE LE TE SE T NU LL e
ON UPD ATE C ASC ADE .
CHECK
Não permite que valores que violem a condição estabelecida sejam gravados na
coluna.
Tipos de dados permitidos
CHAR(n): Tipo de dado caracter de tamanho fixo.
VARCHAR(n): Tipo de dado caracter de tamanho variável, sendo sempre
definido seu tamanho máximo(n).
NUMBER(n): Tipo numérico.
NUMBER(p,q): Tipo numérico de ponto decimal (p : posições sendo q: casas
decimais).
DATE: Tipo data
87
Exemplos
a) Restrições a nível de Tabela
CREATE TABLE depto (
num_depto
NUMBER(2),
nome_depto
VARCHAR(15),
local_depto
VARCHAR(15),
CONSTRAINT depto_PK
PRIMARY KEY (num_depto),
CONSTRAINT depto_nome_depto_UK
UNIQUE (nome_depto)
);
CREATE TABLE emp (
num_emp
NUMBER(6),
nome_emp
VARCHAR(30),
salario_emp
NUMBER(7,2),
sexo_emp
CHAR(1),
cargo_emp
VARCHAR(30),
num_depto
NUMBER(7) NOT NULL,
CONSTRAINT emp_PK
PRIMARY KEY (num_emp),
CONSTRAINT sexo_emp_CK
CHECK (sexo_emp in (‘M’, ‘F’)),
CONSTRAINT emp_num_depto_FK
FOREIGN KEY (num_depto)
REFERENCES depto (num_depto)
ON DELETE CASCADE
);
88
b) Restrições a nível de coluna
CREATE TABLE depto (
num_depto
NUMBER(2) PRIMARY KEY,
nome_depto
VARCHAR(15) UNIQUE KEY,
local_depto
VARCHAR(15)
);
CREATE TABLE emp (
num_emp
NUMBER(6) PRIMARY KEY,
nome_emp
VARCHAR(30),
salario_emp
NUMBER(7,2),
sexo_emp
CHAR(1) CHECK ( sexo_emp in (‘M’, ‘F’)),
cargo_emp
VARCHAR(30),
num_depto
NUMBER(7) NOT NULL REFERENCES
depto(num_depto) ON DELETE CASCADE
);
89
a-2) CREATE [UNIQUE] INDEX nome_índice
ON nome_tabela (nome_coluna1, nome_coluna2, ...);
Sugestões criação índices:
. Colunas usadas frequentemente na cláusula WHERE
. FOREIGN KEYS pois estão geralmente envolvidas em JOINS
. PRIMARY KEYS e UNIKE KEYS (normalmente o Sistema cria
automaticamente um UNIQUE INDEX).
Exemplo:
CREATE INDEX emp_nome_emp_idx
ON emp (nome_emp);
Observações:
1 – índices não podem ser alterados; devem ser removidos (com DROP) e
recriados
2 – A decisão de se usar ou não um índice em resposta a uma solicitação
específica de dado não é tomada pelo usuário mas sim pelo sistema
90
b)ALTER
Comando usado para alterar a estrutura de uma tabela:
. adicionando ou alterando colunas.
. inserindo ou removendo restrições
b.1) Adicionando ou modificando colunas de uma tabela
ALTER TABLE nome_tabela
[ ADD (nome_coluna tipo[(tamanho)],...)]
[ MODIFY (nome_coluna tipo[(tamanho)],...)]
Exemplo:
ALTER TABLE emp
ADD (data_nasc_emp date);
ALTER TABLE emp
MODIFY (nome_emp(60) NOT NULL);
b.2) Adicionando ou removendo uma restrição de uma tabela
ALTER TABLE nome_tabela
[ ADD restrição_tabela]
[ DROP PRIMARY KEY | UNIQUE (nome_coluna) |
CONSTRAINT nome_restrição [CASCADE] ];
Exemplo:
ALTER TABLE depto
ADD CONSTRAINT depto_local_depto_UK
UNIQUE (local_depto);
ALTER TABLE depto
DROP PRIMARY KEY CASCADE;
Neste exemplo o comando remove a restrição PRIMARY KEY na tabela
Depto e remove a restrição FOREIGN KEY associada na tabela Emp.
Obs : Aqui estamos removendo apenas as constraints associadas as
tabelas e não os registros de fato.
91
b.3) Habilitando e desabilitando uma restrição em uma tabela
ALTER TABLE nome_tabela
ENABLE | DISABLE nome_restrição [CASCADE];
Exemplo :
ALTER TABLE depto
ENABLE CONTRAINT depto_local_depto_uk;
c)DROP
Para excluir uma tabela ou índice
c.1) Excluir uma tabela, onde os índices também são excluídos
DROP TABLE nome_tabela [CASCADE CONSTRAINTS];
Exemplo:
DROP TABLE emp;
DROP TABLE depto CASCADE CONSTRAINTS;
Neste exemplo o comando exclui a tabela depto e remove todas as
restrições FOREIGN KEY que fazem referência a PRIMARY KEY desta
tabela.
Obs : Aqui CASCADE CONSTRAINTS desfaz apenas as restrições
associadas à chave primária e não excluiu os registros associados pelas chaves
estrangeiras.
c.2) Exclui um índice
DROP INDEX nome_indice
Exemplo :
DROP INDEX emp_nome_emp_idx
92
4.7.2.-DML (DATA MANIPULATION L ANGUAGE)
a) INSERT
a-1) Adicionar novas linhas em uma tabela
INSERT INTO nome_tabela [(nome_coluna1 [,nome_coluna2 ...] )]
VALUES ( valor1 [, valor2 ...]);
Exemplo:
INSERT INTO depto
VALUES (100, ‘INFORMATICA’, ‘JUIZ DE FORA’);
INSERT INTO emp (Num_Emp, Nome_Emp, Sexo, Num_Depto)
VALUES (1313, ‘TEREZA CRISTINA’, ‘F’, 100);
a-2) Copiando linhas de uma outra tabela:
INSERT INTO nome_tabela [(nome_coluna1 [, nome_coluna2...])]
Subquery;
Exemplo:
CREATE TABLE gerente
num_emp
NUMBER(6) PRIMARY KEY,
nome_emp
VARCHAR(30);
INSERT INTO gerente
Select num_emp, nome_emp
From emp
Where cargo_emp = ‘GERENTE’;
93
b)DELETE
DELETE FROM nome_tabela
[WHERE condição] ;
Exemplo:
DELETE FROM depto
WHERE local_depto = ‘JUIZ DE FORA’;
DELETE FROM depto;
Deleta todas as linhas da tabela se for omitida WHERE
94
c)UPDATE
c.1) Atualizar linhas de uma tabela
UPDATE nome_tabela
SET nome_coluna = valor [, nome_coluna = valor]
[WHERE condição];
Exemplo
UPDATE emp
SET nome_emp = ‘JAIR BATISTA’ , sexo_emp = ‘M’
WHERE num_emp = 1313;
Obs : Todas as linhas de uma tabela são atualizadas se você omitir a cláusula
WHERE.
c.2) Atualizar linhas a partir de uma Subquery
UPDATE nome_tabela
SET (nome_coluna, nome_coluna ...) =
(SELECT nome_coluna, nome_coluna, ...
FROM nome_tabela
WHERE condição);
Exemplo:
UPDATE emp
SET (cargo_emp, num_depto) =
(SELECT cargo_emp, num_depto
FROM emp
WHERE num_emp = 1313)
WHERE num_emp = 1320;
95
d)SELECT
Comando usado para fazer consultas as bases de dados
d.1) Forma Básica:
SELECT [DISTINCT] nome_coluna [,nome_coluna...] FROM nome_tabela
Seleção de colunas específicas : Basta relacionar as colunas desejadas
Exemplo:
SELECT num_emp, nome_emp
FROM emp;
Seleção de todas as colunas : Substituir os nome das colunas por *
Exemplo:
SELECT *
FROM emp;
Evitando duplicações: Usar a palavra DISTINCT na cláusula SELECT
Exemplo:
SELECT DISTINCT nome_emp, cargo_emp
FROM emp;
Usando Pseudônimos: Uma consulta SQL normalmente usa o nome da coluna
como cabeçalho; é possível definir um pseudônimo para a coluna que
aparecera no cabeçalho
Exemplo:
SELECT num_emp “Numero do Empregado”
FROM emp;
96
d.2) Uso cláusula WHERE
Usada para filtrar um subconjunto de linhas de uma tabela
SELECT nome_colunas
FROM nome_tabela
[WHERE condição]
Operadores:
=
igual a
<>
diferente de
>
maior que
<
menor que
Between ... and...
entre dois valores
In(lista)
qualquer valor da lista
Like
corresponde a um gabarito
% : corresponde a uma seqüência de zero ou mais caracteres
- : corresponde a um caracter
IS NULL
é valor nulo
Obs : Os quatro últimos podem ser negados através do operador NOT:
. NOT BETWEEN, NOT IN , NOT LIKE, IS NOT NULL
Conjunção de Condições: várias condições podem ser conectadas na cláusula
WHERE usando o operador AND
Exemplo:
WHERE nome_cargo = ‘GERENTE’ AND num_depto > 1000;
Disjunção de Condições : usando operador OR
Exemplo:
WHERE num_depto = 1313 OR local_depto LIKE ‘_J %’;
Obs: _ :primeira posição, J: segunda posição
97
d.3 ) Uso Cláusula ORDER BY
Ordenando o resultado de uma consulta
SELECT nome_colunas
FROM nome_tabela
[WHERE condição]
[ORDER BY {nome_coluna, ...} [ASC|DESC]]
Exemplo:
ORDER BY nome_emp
d.4) Junção de Tabelas
As linhas de uma tabela podem ser combinadas(JOIN) às linhas de outra tabela
através de valores comuns em colunas correspondentes.
Exemplo:
SELECT emp_name, depto_name
FROM emp e, depto d
WHERE e.num_depto = d.num_depto;
d.5) Produto Cartesiano
Todas as linhas da primeira tabela são combinadas com todas as linhas da
segunda tabela.
Ocorre na omissão da cláusula WHERE.
Exemplo:
Tabela EMP com 14 registros
Tabela DEPTO com 4 registros
SELECT nome_emp, nome_depto
FROM emp, depto;
98
d.6) Funções de Manipulação de Valores
Operadores aritméticos
+
*
/
soma
subtração
multipllicação
divisão
Funções Numéricas
SIGN(número) : -1 se negativo, 1 se positivo
MOD(dividendo, divisor) retorna o resto da divisão
ROUND (número, [n_casas]) retorna o numero arrendondado com n casas
TRUNC(número,[n_casas] retorna o número truncado com n casas
Funções Alfanuméricas
CHR(número) retorna o caracter cujo código ASCII seja igual ao número
Ex: CHAR(75) à k
LOWER(string) retorna a string toda em letra minuscula
Ex: LOWER(EXEMPLO FUNC) à exemplo func
UPPER(string) retorna a string toda em letra maiscula
Ex: UPPER(exemplo func) à EXEMPLO FUNC
LENGH(sring) retorna o tamanho da string
Funções de Grupo
Retornam um valor para um grupo de linhas
SELECT função_grupo(nome_coluna)
FROM nome_tabela
[WHERE condição]
[ORDER BY nome_coluna]
99
Obs: Se a cláusula SELECT contiver funções de grupo, o resultado será
somente uma linha. Assim na cláusula SELECT não podem aparecer resultados
individuais junto com expressões que contenham funções de grupo. Neste caso
deveríamos usar GROUP BY
Exemplo : SELECT nome-emp, AVG(salario_emp)
FROM emp WHERE num_depto = 30;
COUNT(* | [DISTINCT] nome_coluna) : Retorna a quantidade de linhas do
grupo
COUNT(*) : inclui linhas duplicatas e linhas que contenham valores NULL.
COUNT(nome_coluna) : retorna o número de linhas com valores NOT NULL
para a coluna(expressão) especificada.
COUNT(DISTINCT nome_coluna) : retorna o número de linhas com valores
distintos.
MAX([DISTINCT] expressão) : Retorna o valor máximo dessa expressão ou
coluna dentro do grupo
MIN([DISTINCT] expressão) : Retorna o valor mínimo dessa expressão ou
coluna dentro do grupo
SUM([DISTINCT] expressão) : Retorna o somatório da expressão de todas as
linhas do grupo
AVG([DISTINCT] expressão) : Retorna a média aritmética de todas as linhas.
Valores NULL são ignorados.
AVG(NVL(nome_coluna,0)) : considera como zero os NULL na média
aritmética.
100
d.7) Uso da Cláusula GROUP BY
Usada para dividir as linhas de uma tabela em grupos menores.
O SQL recupera cada grupo de linhas de acordo com os valores da(s)
expressão(ões) especificada(s) na cláusula GROUP BY.
SELECT nome_colunas , função_de_grupo(nome_coluna)
FROM nome_tabela
[WHERE condição]
[GROUP BY exp1, exp2...]
A cláusula GROUP BY deverá vir sempre após a cláusula WHERE (ou após a
cláusula FROM quando não existir WHERE)
Quando a cláusula GROUP BY é utilizada é possível combinar resultados
individuais com funções de grupo na cláusula SELECT.
Quando a cláusula GROUP BY é utilizada, é possível combinar resultados
individuais com funções de grupo na cláusula SELECT, desde que aqueles
resultados individuais sejam usados no GROUP BY.
Exemplo
SELECT num_ depto, COUNT(nome_emp)
FROM emp
GROUP BY num_depto;
Observação:
Quando estiver usando o GROUP BY certifique-se que todas as colunas não
usadas na função de grupo estejam incluídas na clausula GROUP BY
Usando a cláusula WHERE você pode selecionar linhas antes de agrupar.
Usando GROUP BY para múltiplas colunas:
SELECT num_depto, cargo_emp, SUM(salario_emp)
FROM emp
GROUP BY num_depto, cargo_emp;
101
d.8) Uso da Cláusula GROUP BY com HAVING
A cláusula WHERE não pode ser usada para restringir funções de grupo.
Exemplo:
SELECT num_depto, AVG(salario_emp)
FROM emp
WHERE AVG(salario_emp) > 2000
GROUP BY num_depto;
Os grupos definidos pela cláusula GROUP BY podem ser filtrados pela
cláusula HAVING.
Exemplo:
SELECT num_depto, AVG(salario_emp)
FROM emp
GROUP BY num_depto
HAVING AVG(salario_emp) > 2000
SELECT nome_colunas , função_de_grupo(nome_coluna)
FROM nome_tabela
[WHERE condição]
[GROUP BY exp1, exp2...]
[HAVING função_de_grupo(nome_coluna)]
[ORDER BY nome_coluna]
Exemplo
SELECT cargo_emp, SUM(salario_emp)
FROM emp
WHERE cargo_emp NOT LIKE ‘GEREN%’
GROUP BY cargo_emp
HAVING SUM(salario_emp) > 5000
ORDER BY SUM(salario_emp);
102
d.9) Uso de Subqueries
Subqueries
São comandos SELECT que são utilizados em condições de cláusulas
WHERE ou HAVING para prover resultados que são utilizados para completar
a consulta principal.
Exemplo
SELECT nome_emp, cargo_emp
FROM emp
WHERE cargo_emp = (
SELECT cargo_emp
FROM emp
WHERE nome_emp = ‘JONES’);
Operadores ANY e ALL
Quando a subquery retornar mais de um valor, os operadores ANY e ALL
podem ser utilizados para compatibilizar o resultado da subquery com o tipo do
operador de comparação.
Exemplo
salario_emp > ANY <subquery>
Essa condição será verdadeira quando salario_emp for maior que qualquer um
dos resultados da query.
salario_emp < ANY <subquery>
Essa condição será verdadeira quando salario_emp for menor que qualquer um
dos resultados da query.
salario_emp > ALL <subquery>
Essa condição será verdadeira quando salario_emp for maior que todos os
resultados da subquery.
salario_emp < ALL <subquery>
Essa condição será verdadeira quando salario_emp for menor que todos os
resultados da subquery.
103
Exemplo
SELECT num_emp, nome_emp, cargo_emp
FROM emp
WHERE salario_emp < ANY (
SELECT salario_emp
FROM emp
WHERE cargo_emp = ‘GERENTE’);
Operadores IN e NOT IN
É igual para qualquer membro da lista
... WHERE cargo_emp IN (
SELECT cargo_emp
FROM emp
WHERE nome_emp LIKE ‘A%’);
SELECT nome_emp, salario_emp
FROM emp
WHERE salario_emp IN (800, 950, 13000);
Operadores de Conjuntos
Como o resultado de um query é um conjunto de linhas você pode realizar
operações de conjuntos entre queries:
UNION : União entre os resultados das queries;
INTERSECT : Interseção entre os resultados das queries;
MINUS : Subtração entre os resultados das queries.
104
Exemplo
SELECT nome_emp, cargo_emp, salario_emp
FROM emp
WHERE salario_emp IN(
SELECT salario_emp
FROM emp
WHERE nome_emp = ‘CARLOS’
UNION
SELECT salario_emp
FROM emp
WHERE nome_emp = ‘MARIO’);
Operador EXIST e NOT EXIST
EXIST: retorna “verdadeiro” se uma determinada subquery retornar ao menos
uma linha e “falso” caso contrário
NOT EXIST: retorna o resultado contrário do EXIST.
105
d.10) Criação e Uso de Visões
OBJETIVO
Restringir acesso à certas porções dos dados por questões de segurança. Pré definir
certas consultas definindo tabelas virtuais que poderão ser utilizadas por outras
consultas.
VISÃO
Pode ser vista como uma tabela virtual, isto é, uma tabela que realmente não existe
como tal, mas sim como derivação de uma ou + tabelas básicas.
Uma definição da visão fica armazenada no dicionário, esta definição mostra como
ela é derivada das tabelas básicas.
CRIAÇÃO
CREATE VIEW nome_visão [(nome_coluna [, nome_coluna..])]
AS <SELECT ...>
Obs : Na cláusula AS a Subquerie não pode conter : ORDER BY
Exemplo
A)
CREATE VIEW emp_visao
AS SELECT num_emp, nome_emp, cargo_emp
FROM emp WHERE cod_depto = 20;
B) Depois de criada uma visão, ela estará disponível no Dicionário de Dados;
até este ponto a instrução SELECT não foi executada.
SELECT * FROM emp_visao;
REMOÇÃO
DROP VIEW <nome visão>
A definição será removida do Dicionário de Dados.
106
4.7.3. DCL (D ATA CONTROL L ANGUAGE)
Responsável pela segurança das informações no Banco de dados
Informando ao SGBD, quais operações que um usuário terá sobre uma
determinada tabela do BD
Quando um usuário cria seus objetos(tabelas, visões, procedures,...) diz-se que ele é
o OWNER(dono) destes objetos.
O conjunto de todos os objetos que pertencem a determinado usuário é chamado de
ESQUEMA deste usuário.
Para acessar os objetos de outro esquema( de outro usuário ) basta prefixar o nome
do objeto com o nome do usuário que o criou ( seu owner).
Exemplo
SELECT * FROM CARLOS.emp;
Você pode evitar a repetição da prefixação de uma tabela de outro usuário criando
um sinônimo para ela:
CREATE SYNONYM emp1
FOR CARLOS.emp;
SELECT * FROM emp1;
a) Criação de objetos
a.1) Criação um usuário (CREATE USER)
CREATE USER user
IDENTIFIED BY password;
Exemplo:
CREATE USER carlos
IDENTIFIED BY solrac;
ALTER USER carlos
IDENTIFIED BY newsenha;
O DBA cria o usuário e concede privilégios ao usuário que determinam o que este
usuário pode fazer a nível de Banco de dados
107
b) Concessão de privilégios (GRANT)
b.1) Concessão de privilégios de sistema
GRANT privilégio[, privilégio...]
TO usuário[, usuário..]
privilégios: . CREATE SESSION, CREATE TABLE, CREATE SEQUENCE,
CREATE VIEW, CREATE PROCEDURES.
Exemplo :
GRANT create table, create view
TO carlos;
b.2) Concessão de privilégios sob objetos
O OWNER tem todos os privilégios de um objeto.
GRANT <lista_privilégios>
ON objeto
TO {<lista de usuários> | grupo | PUBLIC }
[WITH GRANT OPTION];
108
lista_privilégios
SELECT
INSERT
UPDATE
DELETE
ALTER
INDEX
ALL
A opção WITH GRANT OPTION : permite que o usuário que está recebendo
o privilégio, possa dar GRANT neste objeto a outros usuários.
Exemplo
GRANT SELECT, INSERT
ON depto
TO julio, mario;
c) Revogação de privilégios
REVOKE <lista_privilégios>
ON objeto
FROM {<lista_usuarios> | grupo | PUBLIC };
OBS : Privilégios concedidos a outros com a opção WITH GRANT OPTION
também serão revogados.
Exemplo
REVOKE SELECT, INSERT
ON depto
FROM mario;
109
4.7.4 - TRANSACTION C ONTROL
A linguagem SQL possui também comandos que permitem o controle do
resultado de uma transação.
Uma transação é uma seqüência ATÔMICA de operações no BD que constitui
a unidade lógica de trabalho dos SGBDs.
Exemplo
Transferencia de dinheiro entre duas contas.
Conta A = 1000 e Conta B = 2000 .
Consistência Somatório Contas A e B igual 3000.
Transação de Transferência A à B
Passo 1 da transação
Read(A,a)
a:= a-100
Write(A,a)
Passo 2 da transação
Read(B,b)
B:= b+100
Write(B,b)
Imagine o que aconteceria se o primeiro passo fosse executado com sucesso,
mas por algum motivo não fosse possível completar o segundo passo. O
dinheiro da conta A haveria desaparecido e a consistência do BD estaria
comprometida.
O esquema de transações garante que isso não acontecerá, pois enquanto o
COMMIT não for executado, as atualizações não serão efetivadas. No caso de
uma falha, o primeiro passo seria desfeito.
110
a) COMMIT
Sempre que um comando COMMIT é executado :
. A transação em andamento é implicitamente terminada.
. As alterações realizadas pelas transações são tornadas permanentes e
irreversíveis.
Os possíveis bloqueios que a transação mantinha são liberados.
Apaga todos os savepoints.
b) ROLLBACK [to SAVEPOINT point_name]
Sempre que um comando ROLLBACK é executado:
. Encerra a transação
. As alterações realizadas pela transação em andamento são desfeitas
como se nunca tivessem ocorrido.
. Os possíveis bloqueios que a transação mantinha são desfeitos.
. Apaga todos os SAVEPOINTs.
Se você executar comando ROLLBACK TO SAVEPOINT :
. Desfaz todas as alterações até o SavePoint especificado.
. Apaga todos os SavePoints criados após o especificado e mantém os
demais.
c)SAVEPOINT point_name
Em muitas implementações de SQL, existe o comando SAVEPOINT para
permitir a subdivisão lógica de transações longas.
111
Exemplo
INSERT
UPDATE
INSERT
DELETE
|<----------------------------------transação------------------------------------------- >|
. Commit
. Savepoint A
. Savepoint B
< -------------------RollBack to Savepoint B
< ---------------------------------------------------------------------RollBack to Savepoint A
< --------------------------------------------------------------------------------------------RollBack
Commit : Termina a corrente transação tornando permanentes as alterações.
Savepoint : Marca um Savepoint na corrente transação
RoolBack : Termina a corrente transação descartando todas as alterações não
efetivadas.
RollBack to Savepoint name : descarta as alterações não efetivadas até o
savepoint indicado
112
4.7.5 – RESTRIÇÕES DE INTEGRIDADE USANDO S TORED P ROCEDURES E
TRIGGERS
. Conforme foi mostrado anteriormente as restrições de integridade são
especificadas de forma declarativa no momento da definição dos dados
(CREATE) ou depois (ALTER). SQL/92.
.Uma outra forma de especificar restrições de integridade é a forma
procedimental, através de TRIGGERS e STORED PROCEDURES.
. A maioria dos SGBDs relacionais de ponta disponíveis no mercado suporta
este tipo de regras ativas mas infelizmente a SQL/92 não previu a sua
padronização.
4.7.5.1 - STORED PROCEDURES
113
.Quando uma aplicação solicita a execução de uma QUERY, todo o texto da
mesma é enviado pela rede ao servidor onde será finalmente compilado e
executado.
. Stored Procedures são na verdade uma seqüência de comandos SQL,
armazenados no Dicionário de Dados (DD), agrupados de forma que executar a
stored procedure é executá-los todos seqüencialmente no servidor
. Podem ser também usadas para implementar regras de negócios que não
podem ser especificadas declarativamente na descrição das tabelas.
- Criando uma Stored Procedured
CREATE PROCEDURE <Nome_procedure>
[(argumento [IN|OUT|IN OUT] tipo)]
AS Comandos_SQL;
IN :
argumento é de entrada
OUT :
argumento é de saída
IN OUT argumento é utilizado como entrada na chamada da procedure e
como saída após sua execução.
114
a) Exemplo de procedure sem parâmetro
Criar uma procedure que aumente o salário dos empregados em 10%
CREATE PROCEDURE aumento_salario
AS
BEGIN
UPDATE emp
SET salario_emp = salario_emp * 1.1;
END;
EXEC aumento_salario;
b)Exemplo de procedure com parâmetro de input:
Criar uma procedure para aumentar os salários de apenas um departamento e
com um percentual diferente
CREATE PROCEDURE aum_sal_depto
(var_depto IN number, percentual IN number)
AS
BEGIN
UPDATE emp
SET salario_emp = salario_emp *(1+percentual/100)
WHERE num_depto = var_depto;
END;
EXEC aum_sal_depto(30,21)
Estabelecendo aumento de 21 por cento para o depto 30
- Excluindo uma Stored Procedure
DROP PROCEDURE <nome_procedure>
115
4.7.5.2. TRIGGERS
.São tipos especiais de Stored Procedures que são executados automaticamente
pelo servidor quando um comando INSERT, UPDATE ou DELETE é
executado em uma tabela ou visão.
.Permite especificar regras de negócios do tipo EVENTO-CONDIÇÃOAÇÃO, em que o SGBD detecta a ocorrência de um EVENTO, avalia uma
CONDIÇÃO no banco de dados e, se esta for satisfeita, executa uma AÇÃO
predeterminada.
116
Criando uma Trigger
CREATE [OR REPLACE] TRIGGER <nome_da_trigger>
{BEFORE | AFTER }
{DELETE | INSERT | UPDATE [OF coluna [,coluna]...]}
[OR { DELETE | INSERT | UPDATE [OF coluna [,coluna]...]} ]
ON {nome_tabela}
[ [REFERENCING { OLD [AS] old | NEW [AS] new}...]
FOR EACH {ROW | STATMENT}[WHEN (condição)] ]
Comandos SQL
BEFORE : o trigger é disparado antes de executar o comando associado ao
trigger (quando for necessário fazer algum pré-processamento antes do
comando)
AFTER: o trigger é disparado depois de executar o comando associado ao
trigger
DELETE : o trigger é associado ao comando DELETE
INSERT : : o trigger é associado ao comando INSERT
UPDATE : o trigger é associado ao comando UPDATE. UPDATE OF associa
o trigger a colunas específicas; caso contrário, o trigger será associado à
alteração de qualquer coluna
STATMENT
Este trigger é disparado apenas uma vez.
Exemplo:Se um comando UPDATE atualizar 15 linhas, os comandos contidos
no trigger serão executados apenas uma vez, e não a cada linha processada.
ROW
Esse trigger tem os seus comandos executados para todas as linhas que sejam
afetadas pelo comando que gerou o acionamento do trigger
Dentro de um trigger do tipo ROW_LEVEL é possível acessar o valor de um
campo de uma linha. Normalmente é necessário preceder o nome da coluna
com o sufixo :new ou :old, pois em determinado instante pode-se obter tanto o
valor antigo como o valor novo do campo.
117
No comando INSERT, os valores dos campos que serão gravados deverão ser
precedidos pelo sufixo :new
No comando DELETE os valores dos campos da linha que está sendo
processada devem ser precedidos do sufixo :old
No comando UPDATE, o valor original que será gravado é acessado com o
sufixo :old; os novos valores que serão gravados devem ser precedidos do
sufixo :new
WHEN
Só é valida para FOR EACH ROW
Especifica a restrição do trigger, onde a condição é avaliada para cada linha e
se a condição for verdadeira a expressão SQL associada ao trigger é executada.
118
a)Exemplo
Regra: Nenhum funcionário pode ganhar mais que oito mil reais.
Além de ativar o trigger de inclusão (INSERT), evitando que um novo
funcionário tenha um salário superior ao limite, as rotinas de atualização
(UPDATE) devem ser verificadas para evitar que os salários dos funcionários
existentes sejam alterados para valores não permitidos.
CREATE TRIGGER testa_salario
BEFORE INSERT OR UPDATE OF salario_emp
ON emp
FOR EACH ROW
BEGIN
IF :NEW.salario_emp > 8000 THEN
raise_application_error (-20000, ‘valor incorreto’);
END IF
END;
Disparo do gatilho
UPDATE emp
SET salario_emp = 30000
WHERE num-emp = 2500;
Saída do comando:
Update emp
ERRO na linha 1
ORA-20000 : valor incorreto
ORA-04088 : erro durante a execução do trigger ‘testa_salario’
119
b)Exemplo
Após incluir um registro na tabela emp vamos replicar este registro na tabela
empdup.
CREATE TRIGGER repins_emp
AFTER INSERT ON emp
FOR EACH ROW
BEGIN
INSERT INTO empdup
VALUES
(:NEW.num_emp, :NEW.nome_emp, :NEW.salario_emp,
:NEW.sexo_emp, :NEW.cargo_emp, : NEW.num_depto);
END;
Quando inserir na tabela emp inserir também na tabela repins_emp
INSERT INTO emp
(1313, ‘CARLOS’, 4000,00 ,’M’, ‘GERENTE’, 30);
c)Exemplo
Após deletar um registro na tabela emp vamos deletar este registro na tabela
empdup.
CREATE TRIGGER repdel_emp
AFTER DELETE ON emp
FOR EACH ROW
BEGIN
DELETE FROM empdup
WHERE num_emp = :old.num_emp;
END;
120
d)Exemplo
Regra: Não é permitido aumentar o limite de crédito em mais de 50%.
CREATE TRIGGER T_monitora_limite
BEFORE UPDATE OF limite_credito
ON conta
REFERENCING OLD AS antes, NEW AS depois
FOR EACH ROW
BEGIN
IF :depois.limite_credito > 1,5 * :antes.limite_credito THEN
raise_application_error (-20001, ‘Aumento inválido);
END IF
END;
.Esta característica da SQL é fundamental em sistemas Cliente-Servidor.
.Uma regra de negócios global, válida para todo o banco de dados, pode ser
especificada no servidor, não havendo a necessidade de ser replicada em todos
os programas de aplicação que potencialmente possam violar a regra.
.Isto confere modularidade na especificação de regras, o que implica em
facilidade de manutenção, já que a regra é especificada apenas uma vez e
automaticamente executada no servidor.
Ativando/desativando um trigger
ALTER TRIGGER <nome-trigger> ENABLE/DISABLE;
Removendo um trigger
DROP TRIGGER <nome_trigger>;
121
Exercício:
Suponhamos que exista uma regra no Banco de Dados BANCO: Quando uma
registro de PESSOA é excluído, seu CPF, nome e endereço devem ser
gravados num tabela de histórico EX_CLIENTES.
Com uso de STORED POCEDURE
CREATE PROCEDURE P_exclui_pessoa
(X_CPF IN VARCHAR)
AS
X_Nome VARCHAR;
X_End
VARCHAR;
BEGIN
SELECT nome, endereço INTO X_nome , X_end
FROM pessoa WHERE CPF = X_CPF;
INSERT INTO ex_cliente VALUE (X_CPF, X_nome, X_end);
DELETE FROM pessoa WHERE CPF = X_CPF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN raise_application_error(-20002, ‘CPF inválido’);
END exclui_pessoa;
Sendo assim qualquer exclusão de PESSOA deve ser feito através do
procedimento P_exclui_pessoa.
Com uso do TRIGGER T_exclui_pessoa
CREATE TRIGGER T_exclui_pessoa
BEFORE DELETE
ON pessoa
FOR EACH ROW
BEGIN
INSERT INTO ex_cliente
VALUES (:old.CPF, :old.nome, :old.endereco);
END T_exclui_pessoa;
A diferença entre P-exclui_pessoa e T_exclui_pessoa é que o trigger executa a
regra automaticamente toda vez que um registro de PESSOA é excluído,
enquanto o “procedure” requer uma chamada explícita do usuário ou de uma
aplicação.
122
4.7.6 - SQL EMBUTIDA
As instruções da SQL EMBUTIDA são prefixadas por um sinal $(para que
possa ser facilmente reconhecida pelo pré compilador) e as instruções SQL
podem referenciar variáveis do programa utilizando o prefixo %
Observação:
Estes prefixos podem variar de linguagem para linguagem.
1 - A instrução $SELECT inclui uma clausula INTO especificando variáveis as
quais são atribuídos valores recuperados do BD.
2 - A maioria das instruções SQL pode ser embutida em linguagens
hospedeiras(COBOL, PASCAL, C, ...) de uma forma bastante direta (isto é,
com apenas algumas alterações sobre sua sintaxe)
Entretanto a instrução SQL SELECT faz com que seja retornada uma tabela ao
usuário(dai, conceito CURSOR: mecanismo que permite acesso aos registros
do conjunto 1 por 1)
* Definição
LET <cursor nome> BE <expressão>
* Ativação
OPEN <cursor nome>
Posiciona antes do 1º registro que satisfaça a condição
* Avanço
FETCH <cursor nome>
Avança e extrai campos para INTO
* Desativação
CLOSE <cursor nome>
@ SQLCODE :
Status da pesquisa :
0
ok!
+100
problema
123
Exemplo 1
BD Empresa Bancária
Type Nome = String[25];
Var Aumento : Integer
Continua : Char
D
: Record
Anome, Cnome
:Nome;
Conta
:String[07];
Saldo
:Real;
end;
C
: Record
Cnome
Rua
Cidade
:Nome;
:String[20];
:String[15];
end;
124
A) Segmento de programa que lê o Nome de um Cliente e imprime seu
endereço.
$ DECLARE CLIENTE TABLE
(Nome-Cliente
:Char[50] NOT NULL,
Rua-Cliente
:Char[10],
Cidade-Cliente
:Char[10]);
C1: Continua := ‘S’;
WHILE Continua = ‘S’ DO
BEGIN
WRITELN(‘Entre com o nome do Cliente’);
READLN(C.Cnome);
$ SELECT Rua-Cliente, Cidade-Cliente
INTO %C.Rua, %C.Cidade
FROM CLIENTE
WHERE Nome-Cliente = %C.Cnome;
WRITELN(C.Rua, C.Cidade);
WRITELN(‘Mais Nomes de Clientes (S/N)’);
READLN(Continua);
END;
125
B) Porem, uma consulta SQL pode recuperar várias tuplas.
O que fazer?
Seja um Segmento de programa que lê um nome de agência e lista os Clientes
que tem depósito nesta agência.
Este segmento também lê uma quantidade utilizada para aumentar o saldo de
cada um dos clientes acima.
$ DECLARE DEPOSITO TABLE
(Nome-Agencia
:Char[10] NOT NULL,
Numero-Conta
:Char[08],
Nome-Cliente
:Char[30] NOT NULL,
Saldo
: Real);
C2 : WRITELN(‘Entre com o Nome da Agencia : ‘);
READLN(D.Anome);
$ LET DEPCUR BE
$ SELECT Numero-Conta, Nome-Cliente,Saldo
FROM DEPOSITO
WHERE Nome-Agencia = % D.Anome
FOR UPDATE OF Saldo;
$ OPEN DEPCUR;
$ FETCH DEPCUR INTO %D.Conta, %D.Cnome,%D.Saldo;
WHILE SQLCODE = 0 DO
BEGIN
WRITELN(‘NomeEmpregado’,D.Cnome,D.Conta);
WRITELN(‘Entre com o aumento :’);
READLN(Aumento);
$ UPDATE DEPOSITO SET Saldo=Saldo+%Aumento
WHERE CURRENT OF DEPCUR;
$ FETCH DEPCUR INTO %D.Conta,%D.Cnome,%D.Saldo;
END;
$ CLOSE DEPCUR;
126
5.
– EXERCÍCIOS:
5.1. – EXERCICIOS DE MODELAGEM DE DADOS
5.1.1.Projetos
Este texto descreve uma Empresa de Projetos de grande porte, envolvendo diversos
projetos como Engenharia, Urbanismo, Transporte. A Empresa é organizada em Deptos.
Cada Depto coordena (é responsável) por vários projetos e um projeto é coordenado
obrigatoriamente por um único Depto.
Cada Depto tem um Empregado que o gerencia. Um empregado deve pertencer
obrigatoriamente a um Depto, mas pode estar alocado à vários Projetos.
5.1.2.Loja
Uma loja especializada em computadores resolveu automatizar seus procedimentos de
venda e aluguel de computadores. Através de entrevistas com seu diretor, gerente e
funcionários, observou o seguinte:
Os clientes da loja podem alugar ou comprar computadores.
Se o cliente faz opção por alugar então obrigatoriamente tem que fazer um contrato de
manutenção para dar cobertura ao computador que está sendo alugado.
Sabe-se ainda que :
Dado um cliente e um Contrato este par pode estar associado a várias máquinas.
Dado uma máquina de um determinado contrato este par pertence a várias máquinas.
Dado um Cliente e uma máquina este par pertence a um único contrato.
5.1.3.A Universidade Milenium
Os diversos institutos da Universidade Milenium estão organizados em Departamentos.
Cada departamento possui um corpo docente e um dos professores é o Chefe do
Departamento.
Um Departamento é responsável pelo ensino de diversas disciplinas. Cada disciplina
pode ser lecionada por vários professores. Um professor pode lecionar mais de uma
disciplina.
Os alunos cursam as disciplinas de acordo com os pré-requisitos já alcançados. Os
alunos podem optar com qual professor ele cursará determinada disciplina.
A Universidade mantém, para cada aluno, um Histórico Escolar, que relaciona as
disciplinas que ele já cursou, com as respectivas notas e a freqüência.
5.1.4.Controle de Projetos
Uma Empresa manufatureira funciona num esquema de Projeto, nos quais são alocados
seus empregados com um certo percentual de dedicação.
Administrativamente, os empregados estão lotados em departamentos e podem gerenciar
um ou mais projetos que são gerenciados por um único empregado.
As Peças utilizadas nos projetos são armazenadas nos vários armazéns.
A Empresa mantém um controle do fornecimento Efetivo de Peças feito aos projetos
pelos fornecedores, e um controle de fornecimento Potencial de Peças de cada
um
dos seus fornecedores.
Deve-se controlar a composição das peças, onde uma peça pode ser simples ou composta.
As peças compostas são montagens de peças simples. Cada peça simples pode ser
utilizada para compor várias peças compostas.
127
5.1.5. Empresa do ramo de alimentação
Deseja-se controlar as principais atividades de uma empresa do ramo de alimentação,
que possui várias lojas de varejo e vários armazéns para guardar seus produtos. Estes
armazéns são especializados (por exemplo, frigorífico) de maneira que um produto só
pode ser armazenado em um único armazém e um armazém pode armazenar vários produtos.
As lojas podem emitir vários pedidos, sendo que um pedido deve pertencer
obrigatoriamente a uma loja. Um Pedido é composto de vários produtos e um produto
pode fazer parte de vários pedidos.
Para entregar os pedidos a empresa conta com uma frota de caminhões dos mais variados
tipos. Um caminhão pode atender a vários pedidos, e um pedido pode ser atendido por
mais de caminhão (por exemplo, no caso em que pedido não caiba em um único caminhão).
Observe que o sistema deve ser capaz de informar quais os produtos de determinado
pedido estão em determinado caminhão. O sistema deve permitir ainda que existam
pedidos que não sejam atendidos por nenhum caminhão.
Cada caminhão tem um obrigatoriamente um funcionário que é o responsável pelo mesmo,
e um Funcionário pode ser responsável por mais de um caminhão.
5.1.6.Restaurante
Deseja-se desenvolver um Sistema de Controle das principais atividades de um
restaurante, atendendo às seguintes considerações:
Os
Clientes
novos
deverão
ser
cadastrados
pelo
sistema
para
efeito
de
correspondências futuras, sendo necessário armazenar os dados pessoais. Sabe-se que
cada cliente pode fazer vários pedidos, ou nenhum, e um pedido sempre estará
associado a um único cliente.
Um pedido está associado obrigatoriamente a vários itens de cardápio. Cada item do
cardápio pode estar associado a vários pedidos ou nenhum, sendo necessário armazenar
quais itens foram pedidos, a quantidade de cada um e a data do pedido, a fim de que a
conta, com o valor total, possa ser gerada no final do atendimento.
Cada item do cardápio possui um código, um nome, um tipo (indicando se é bebida ou
comida), uma descrição detalhada e um preço unitário.
Cada pedido está obrigatoriamente associado a uma mesa, sendo possível associar
vários pedidos a uma mesma mesa. Cada mesa é atendida por um único garçon, que pode
atender a várias mesas. O número de identificação do garçon também deve constar na
conta a ser gerada.
5.1.7.A cadeia de Hotéis Imperador
A cadeia de Hotéis Imperador possui diversos hotéis situados nas principais capitais.
Cada hotel possui vários tipos de apartamento (simples, luxo, suite, etc.) e um
apartamento, naturalmente, pertence a um único hotel.
Toda vez que um cliente se hospeda, é necessário que ele informe o número da Carteira
de Identidade ou Passaporte, endereço, data de nascimento e o sexo. Para controle
interno, o hotel também registra o número do quarto alocado e a data da hospedagem.
Qualquer hotel da cadeia deve ser capaz de responder imediatamente a um pedido de
reserva (efetivando-a ou negando-a). A data em que foi feita a reserva deve ser
registrada.
O hóspede pode utilizar os diversos serviços do hotel (lavanderia, sauna, etc.),
pagando a conta apenas no check-out. Os serviços oferecidos por toda a cadeia de
hotéis são padronizados.
128
5.1.8.Modelo para uma biblioteca
Uma Empresa possui uma Biblioteca para uso exclusivo dos seus empregados que podem
levar emprestado um número qualquer de exemplares, e fazer solicitações de empréstimo
(RESERVA) quando não houver exemplar disponível.
Os Livros são classificados em Categorias e em Subcategorias. Eles devem pertencer a
uma única categoria Principal e podem pertencer a várias Categorias Secundárias.
Quando um Livro possui vários Autores um deles e referido como Autor Principal e os
outros como Co-Autores.
129
5.1 – EXERCÍCIOS DE NORMALIZAÇÃO:
5.2.1 - PEDIDOS(#Num-pedido, data-Pedido, Num-Cliente, Nome-Cliente,
End-Cliente, ((Cod-Produto, nome-Produto, Preço-Unitário, QtdePedida,Valor-Total-Item)),Valor-Total-Pedido)
5.2.2 - CONTRATO(#Num-contrato, Cod-Cliente, Nome-Cliente, CPFCliente, Dt-inic-contrato, Dt-term-contrato, ((Num-prestação, Valor-Prestação,
Dt-Venc-prest)), Valor-Total-Contrato)
5.2.3 - EMPREGADO(#Cod-Empregado, Nome-Empregado, TítuloEmpregado, ((Cod-Curso,Nome-Curso, data-início-Curso, Resultado-Curso)))
5.2.4 - PEÇA-ESTOCADA(#Cod-Peça, #Cod-Armazem, Qtde-Estocada,
Tel-armazem)
5.2.5 - QUADRO-PESSOAL
#Cod-Orgão
Nome-Orgão
CARGO N vezes
Cod-Cargo
Nome-Cargo
Número-Vagas
FUNCIONÁRIO N vezes
Matricula-Emp
Nome-Emp
Data-Posse
130
5.2.6 - DADOS-EMPREGADO
#Matricula
Nome
Endereço
Código-Cargo-Atual
Nome-Cargo-Atual
CURSOS N vezes
Cod-Curso
Nome-Curso
Data-Conclusão
Nota-Final
HABILIDADES N vezes
Cod-Habilidade
Nome-Habilidade
Grau-Habilitação
Data-Admissão
Codigo-Orgão-Lotação
Nome-Orgão-Lotação
5.2.7 – PROJETO
#Cod-Proj
Tipo-Proj
Desc-Proj
EMPREGADO N VEZES
Cod-Empregado
Nome-Emp
Cat-Emp
Sal-Emp
Data-ini-Proj
5.2.8 – ARQ_CANDIDATO
#Cod-Curso
Nome-Curso
Num-Vagas-Curso
CANDIDATO N VEZES
Cod-Cand
Nome-Cand
Escore-Cand
131
5.2.9 – ARQ_ALUNO
#Cod-Aluno
Nome-Aluno
CURSO N VEZES
Cod-Curso
Nome-Curso
Sem-Ingresso
DISCIPLINA N VEZES
Cod-Disciplina
Nome-Disciplina
SEMESTRE-CURSADO N VEZES
Sem-Disc-Cursada
Nota-Disc
132
5.2 – EXERCÍCIOS DE SQL.
FORNECEDOR
Cod_forn
F1
F2
F3
F4
F5
Nome_forn
PAVAN
ABC
TUCANO
MATIASE
RODOPAZ
Status_forn
20
10
30
20
30
Cidade_forn
JUIZ DE FORA
RIO DE JANEIRO
RIO DE JANEIRO
JUIZ DE FORA
SÃO PAULO
PEÇA
Cod_peca
P1
P2
P3
P4
P5
P6
Nome_peca
PARAFUSO
PORCA
ARRUELA
PREGO
CANO
FIO
Cor_peca
PRETA
AZUL
BRANCA
PRETA
VERDE
AZUL
EMBARQUE
Cod_Forn
F1
F1
F1
F1
F1
F1
F2
F2
F3
F4
F4
F4
Cod_peca
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5
Qtde
300
200
400
200
100
100
300
400
200
200
300
400
133
0) Criar as tabelas.
CREATE TABLE fornecedor (
cod_forn
CHAR(02),
nome_forn
VARCHAR(50) UNIQUE KEY,
status_forn
NUMBER(02) NOT NULL,
cidade_forn
VARCHAR(30),
CONSTRAINT fornecedor_PK
PRIMARY KEY (cod_forn)
);
CREATE TABLE peca (
cod_peca
CHAR(02) PRIMARY KEY,
nome_peca
VARCHAR(50) UNIQUE KEY,
cor_peca
NUMER(02) NOT NULL,
);
CREATE TABLE embarque (
cod_forn
CHAR(02),
cod_peca
CHAR(02),
qtde
NUMBER(05) NOT NULL,
CONSTRAINT embarque_PK
PRIMARY KEY (cod_forn,cod_peca),
CONSTRAINT cod_forn_embarque_FK
FOREIGN KEY (cod_forn)
REFERENCES fornecedor(cod_forn),
CONSTRAINT cod_peca_embarque_FK
FOREIGN KEY (cod_peca)
REFERENCES peca(cod_peca)
);
134
1) Obtenha o Código de todas as peças fornecidas
SELECT DISTINCT cod_peca
FROM embarque;
2) Obtenha o código dos fornecedores do RIO DE JANEIRO com status > 20
SELECT cod_forn
FROM fornecedor
WHERE cidade = ‘RIO DE JANEIRO’ and status_forn > 20;
3) Obtenha o nome dos fornecedores que fornecem a peça P2
SELECT DISTINCT nome_forn
FROM fornecedor F, embarque E
WHERE F.cod_forn = E. cod_forn and
E.cod_peca = ‘P2’;
4) ORDER BY
Obtenha o código e o status dos fornecedores do RIO DE JANEIRO, por ordem
descendente de Status
SELECT cod_forn,status_forn
FROM fornecedor
WHERE cidade = ‘RIO DE JANEIRO’
ORDER BY status_forn DESC;
135
5). GROUP BY
Para cada Peça fornecida, obtenha o número da Peça e a quantidade total fornecida
daquela Peça.
SELECT cod_peca, SUM(Qtde )
FROM embarque
GROUP BY cod_peca;
Agrupa a tabela por Grupos, de forma que o:
1º Grupo contenha as linhas da Peça P1, o
2º Grupo contenha as linhas da Peça P2, e
assim sucessivamente
A Clausula SELECT é então aplicada a cada Grupo da tabela particionada.
6) HAVING
Obtenha os cod_peca das Peças, para todas Peças fornecidas por mais de um
fornecedor
SELECT cod_peca
FROM embarque
GROUP BY cod_peca
HAVING COUNT(*) > 1;
Funciona para Grupos da mesma forma que WHERE funciona para linha(Se
HAVING for especificado, GROUP BY também tem que ser especificado).
136
7)COUNT
Obtenha o número total de fornecedores que estão efetivamente fornecendo Peças.
SELECT COUNT(DISTINCT cod_forn)
FROM embarque;
8) LIKE
Obtenha todas as Peças, com nome começando com a letra C
SELECT cod_peca
FROM peca
WHERE nome_peca LIKE ‘C%’;
9) IN
Obtenha o nome dos fornecedores que fornecem a Peça P2 .
SELECT nome_forn
FROM fornecedor
WHERE cod_forn IN
(SELECT cod_forn
FROM embarque E
WHERE E.cod_peca = ‘P2’);
137
5.3 - EXECÍCIOS DE ALGEBRA RELACIONAL
5.4.1 - Considere as seguintes relações
FORN
#FN Fnome
1313 Pavan
1320 ABC
1330 DEF
1350 Gil
1360 Visart
FORNECIMENTO
#FN
1313
1313
1320
1320
1360
1313
Fcidade
J. Fora
T.Rios
J. Fora
J. Fora
R.Janeiro
PEÇA
#PN
P1
P2
P2
P3
P3
P4
#PN
P1
P2
P3
P4
Pnome Pcor
pia
branca
vaso bege
sifão branca
fio
preto
QTDE
25
20
25
20
25
20
A) Quais os nomes dos fornecedores que fornecem pelo
menos 1 peça.
a.1) PROJECT FORNECIMENTO OVER FN GIVING R1
a.2) JOIN FORN AND R1 OVER FN GIVING R2
a.3) PROJECT R2 OVER Fnome GIVING R3
PRINT R3
a.1)R1
FN
1313
1320
1360
a.3)R3
Fnome
Pavan
ABC
Visart
a.2) R2
FN
1313
1320
1360
Fnome
Pavan
ABC
Visart
Fcidade
J. Fora
T. Rios
R. Janeiro
138
B) Quais os nomes de todos os fornecedores
PROJECT FORN OVER Fnome GIVING ARQ
C) Encontre o nome da cidade do fornecedor 1360
SELECT FORN WHERE FN = 1360 GIVING R1
PROJECT R1 OVER Fcidade GIVING R2
D)
Encontre o nome dos fornecedores de J. Fora
SELECT FORN WHERE Fcidade=‘J. Fora’ giving R1
PROJECT R1 OVER Fnome GIVING R2
E)
Encontre o nome das Peças fornecidas pelo
fornecedor 1313
F)
Obtenha o nome dos fornecedores que fornecem
a peça P2
139
5.4..2 Considere as seguintes relações
ALUNO
#Matr
9516001
9516002
9516003
9616001
9616002
APROVADO
Nome
Jose
Juca
Joao
Pedro
Carlos
#Matr
9516001
9516001
9516002
9516002
9516002
9516003
DISC#Codigo Nome
ADMP
Administ.
LTPIV
B.D
TAPII
Projeto
#Codigo
LTPIV
TAPII
ADMP
LTPIV
TAPII
ADMP
Nota
55,0
60,0
80,0
90,0
90,0
70,0
Falta
2
4
0
1
2
2
A) Obter o nome dos alunos que já cursaram todas as
diciplinas.
140
5.4.3 - Considere as seguintes relações
DEPTO
#DN
1313
1320
1350
1360
Dnome
Informática
Pessoal
Material
Contábil
EMPREGADO #EN
11310
11530
11540
11560
11570
11600
11620
11630
11650
11700
11750
Enome
Carlos
Adriana
Léo
João
Júlio
Pedro
Alyne
Juca
Mário
Ricardo
Geraldo
Dlocal
RJ
SP
SP
JF
Dchefe
11310
11560
11600
11650
Esalário
5.000,00
3.000,00
3.500,00
5.000,00
3.000,00
5.000,00
3.000,00
8.000,00
5.000,00
3.000,00
7.000,00
DN
1313
1313
1313
1320
1320
1350
1350
1350
1360
1360
1360
A)Obter o nome dos empregados que ganham mais do que
seus chefes.
141
6.
BIBLIOGRAFIA
1 – ELMASRI, Ramez e NAVATHE, Shamkant B. Fundamentals of
Database System. Third Edition. Ed. Addison-Wesley, 2000.
2 – KORTH, H. F. e SILBERSCHATZ, A. Sistemas de Banco de
Dados. Terceira edição Ed. McGraw Hill, 1999.
3 – HEUSER, Carlos Alberto.Projeto de Banco de Dados. Porto
Alegre. Ed. Sagra Luzzato, 1998.
4 -DATE, C. J. Introdução a Sistemas de Banco de Dados, Rio de
Janeiro, Ed. Campus, 1986.
5 - STEZER, Valdemar W.. Banco de Dados, São Paulo, Ed. Edgar
Blucher, 1986.
6 - COUGO, Paulo. Modelagem Conceitual, Rio de Janeiro, Ed.
Campus,1997.
7 - BARBIERI, Carlos. Modelagem de Dados, Rio de Janeiro, Ed. IBPI
Press,1994.
8 - MACHADO, Felipe Nery R. Projeto de Banco de Dados uma
visão prática, São Paulo, Ed. Érica, 1995.
9 - CERÍOLA, Vicente Osvaldo. Banco de dados relacional e
distribuído, São Paulo, LTC, 1995.
10 - CHEN, Peter. Gerenciando Banco de Dados. A abordagem
entidade e Relacionamento, São Paulo, Ed. McGraw Hill, 1990
11 – Apostila Curso oracle(OR8) : SQL and PL/SQL, Volumes 1 e 2.
Oracle Corporation, 1998
12 – Ramalho, José Antônio. Oracle 8i-Série Ramalho , São Paulo,
1999.
13 – SUNDERRAMAN, Rajshekhar. Oracle Programming, Geórgia
Ed. Addison-Wesley, 1999
142
Download