BancoDados - Professora Magu

Propaganda
Parte 1 – Conceitos Introdutórios
Dados – Matéria bruta de que é feita a informação. Valores fisicamente registrados no banco de dados.
Informação – Dado que significa alguma coisa para alguém e é utilizado em algum contexto.
Usuários/Profissionais e Atividades Envolvidas na Área de Banco de Dados
- Considera-se haver quatro grandes classes de usuários de banco de dados:
Usuário final: Precisa ter acesso à base de dados para consultar, modificar e gerar relatórios.
 Interage com o sistema por meio de programas de aplicação ou através de interfaces integrantes do
próprio sistema.
 A maioria dos sistemas fornece pelo menos uma aplicação embutida, ou seja, um processador de
linguagem de consulta interativo, com o qual o usuário é capaz de emitir instruções de alto nível para o
SGBD. Outros possuem ainda interfaces adicionais através das quais os usuários operam escolhendo
itens de menus ou preenchendo formulários.
Projetista da base de dados:
 Decide o conteúdo do banco de dados: Identifica os dados a serem armazenados e escolhe estruturas
apropriadas para representar e armazenar tais dados, ou seja, faz o projeto conceitual do banco de
dados.
Programador de aplicações:
1. Responsável pelo desenvolvimento dos programas que utilizam o banco de dados,
caracteristicamente escritos em linguagens de terceira geração (Cobol, PL/I, C, Pascal, Java, etc).
2. Tais programas operam sobre os dados de todas as formas usuais: recuperação, inserção, deleção e
atualização de dados são executadas pelo envio de solicitações apropriadas ao SGBD.
Administrador de banco de dados (DBA):
 É a pessoa, ou grupo de pessoas, responsável pelo controle do sistema, tendo as seguintes
responsabilidades:
o Servir de elo com os usuários: Garantir a disponibilidade dos dados de que eles necessitam.
o Definir os controles de segurança e de integridade: Acesso autorizado, quem pode acessar o que,
encriptação de dados, auditoria da base de dados. Local físico de armazenamento, duplicação,
etc.
o Definir estratégias de recuperação: Na eventualidade de danos a partes do banco de dados,
causados seja por erro humano, por falha no hardware ou no sistema operacional, é importante
recuperar os dados o mais rapidamente possível e com o mínimo de conseqüências para o
restante do sistema.
o Monitorar o desempenho e atender as necessidades de modificações.
Modelo Relacional e Outros
- Um sistema relacional é aquele no qual:
1) Os dados são percebidos pelos usuários como tabelas;
2) Os operadores à disposição dos usuários são operadores que geram novas tabelas a partir das antigas.
1
NOME
RUA
C ID A D E
João
Ana
S a n d ra
M a rc o s
R ia c h u e lo
G a l O s ó r io
A c á c ia s
A p a r e c id a
S o ro c a b a
Itú
S o ro c a b a
São R oque
NÚMERO
CONTA
900
556
800
647
NÚMERO
SALDO
CONTA
900
5 5 ,0 0
556
1 0 0 0 0 0 ,0 0
800
4 2 6 7 ,0 0
647
3 5 8 ,0 0
-
-
O modelo relacional resultou de um estudo teórico realizado por Codd (pesquisador da IBM), tendo por base a
teoria dos conjuntos e a álgebra relacional. O estudo foi apresentado em 1970, mas só nos anos 80 foi
implementado.
Revelou-se ser o mais flexível e adequado ao solucionar os vários problemas que se colocam ao nível da
concepção e implementação das bases de dados.
-
A maioria dos sistemas de bancos de dados desenvolvidos nos últimos anos são relacionais, ao contrário dos
sistemas mais antigos.
-
A abordagem relacional representa a tendência dominante no mercado de hoje e o modelo relacional é
considerado como a evolução mais importante em toda a história do ramo de banco de dados.
Os Outros
-
Pode-se dividir os sistemas de acordo com as estruturas de dados e os operadores que apresentam ao usuário
em cinco categorias: hierárquico, rede, lista invertida, relacional e orientado a objetos.
-
O modelo orientado a objetos foi o último a surgir (meados dos anos 80), sendo utilizado em aplicações tais
como Sistemas de Informações Geográficas (SIG) e sistemas CAD/CAM.
-
A seguir temos uma pequena lista com exemplos de sistemas comerciais das quatro categorias.
Modelo
Sistema
DB2
SQL/DS
Relacional
INGRES
ORACLE
Rdb/VMS
MODEL 204
Lista Invertida ADABAS
DATACOM/DB
IMS
Hierárquico
System 2000
IDMS
Rede
DMS 1100
TOTAL
Fabricante
IBM
IBM
Relational Technology Inc.
ORACLE Corp.
DEC
CCA
Software AG
Applied Data Research
IBM
Intel
Cullinet
Sperry
Cincorn Systems
2
Trabalho de Pesquisa
1) Procure na Internet, em sites de ofertas de emprego, quais as denominações mais comuns para os profissionais
de banco de dados e identifique quais as habilidades mais requisitadas para tais profissionais. Faça um resumo de
uma página sobre o que encontrou.
2) Novamente, tomando por base ofertas de emprego para profissionais de banco de dados, enumere quais são os
SGBDs mencionados com maior frequência. Para cada SGBD, especifique o número de vezes (ofertas de emprego
diferentes) em que foi mencionado. Verifique, no mínimo, 20 ofertas distintas.
3) Faça o cálculo da média salarial dos profissionais de banco de dados, com base nas ofertas que encontrou.
Algumas questões de concursos públicos
1) (CESGRANRIO - 2010 - Petrobrás - Técnico em Informática) Existem muitas atividades envolvidas em um
Sistema Gerenciador de Bancos de Dados, o que torna necessária a contratação de profissionais especializados para
manter o bom funcionamento do sistema. Entre esses profissionais, aquele que tem a responsabilidade de
identificar os dados que irão compor a base de dados e escolher estruturas apropriadas para representar e armazenar
esses dados é o
a) Analista de Suporte Sênior.
b) Programador de Aplicações SQL.
c) Administrador da Base de Dados.
d) Técnico de Suporte a Usuários.
e) Projetista da Base de Dados.
2) (CESGRANRIO - 2010 - Petrobrás - Técnico em Informática) A linguagem, na qual um usuário requisita
informações do Banco de Dados e que é de mais alto nível que uma linguagem de programação comum, constitui
uma linguagem de
a) Consulta.
b) Conexão.
c) Máquina.
d) Manipulação.
e) Requisição.
3) (FCC - 2010 - AL-SP - Agente Técnico Legislativo Especializado - Admin e Arquitetura de Dados) A
identificação dos dados que devem ser armazenados no banco de dados, escolhendo a estrutura correta para
representar e armazenar dados, e, a avaliação das necessidades de cada grupo de usuários para definir as visões que
serão necessárias, integrando-as, fazendo com que o banco de dados seja capaz de atender a todas as necessidades
dos usuários, são de responsabilidade do
a) projetista de Banco de Dados.
b) DBA.
c) DBM.
d) ADB.
e) usuário final.
4) (FMP-RS - 2011 - TCE-RS - Auditor Público Externo – Administração) Um administrador de banco de dados
(Data Base Administrator – DBA) é responsável por realizar uma série de funções sobre um determinado banco
de dados. Entre as funções listadas abaixo, assinale a que NÃO É de competência específica de um DBA.
a) Conceder autorização para acesso a dados a usuários.
b) Zelar pela integridade do banco de dados e definir procedimentos para criação e recuperação de backups.
c) Auxiliar equipes de desenvolvimento e de testes a maximizar o desempenho e uso do banco de dados.
d) Planejar, documentar, gerenciar e integrar recursos de informações corporativas de forma a manter as regras de
negócio coerentes.
e) Projetar o armazenamento dos dados de forma a atender às necessidades de acesso.
3
Parte 2 – Modelagem: MER
Ciclo de vida de um banco de dados relacional
1. Formulação e análise de requisitos:
 Relacionamentos naturais entre os dados (independentes de processo).
 Plataforma: hardware/software: SO, SGBD
 Requisitos de desempenho e integridade.
Resultado: Documento de especificação de requisitos.
2. Projeto lógico do banco de dados:
 Modelo ER (projeto conceitual)
 Integração dos múltiplos diagramas ER da empresa.
 Transformação dos diagramas ER para tabelas relacionais.
 Normalização das tabelas relacionais.
Resultado: Esquema global transformado para definições de tabelas.
4



3. Projeto físico do banco de dados e distribuição:
Definição das estruturas físicas de armazenamento de dados: tipo e tamanho dos campos, nomenclaturas, etc.
Seleção de índices e métodos de acesso.
Fragmentação dos dados, replicação: Minimizar tempo de resposta, minimizar custos, maximizar
disponibilidade.
4. Implementação do banco de dados, monitoração e manutenção.
Modelo Entidade-Relacionamento
- O modelo Entidade-Relacionamento foi proposto originalmente por Peter Pin Shan-Chen (MIT) em 1976, no
trabalho intitulado "The Entity-Relationship Model - Toward a Unified View of Data".
- Tem sido usado rotineiramente na análise e modelagem de sistemas.
- O modelo entidade-relacionamento (E-R) é baseado na percepção do mundo real como um conjunto de objetos
básicos chamados entidades e nos relacionamento entre as mesmas.
- Para a introdução dos conceitos associados ao modelo entidade-relacionamento e ao projeto de uma base de
dados, vamos utilizar um exemplo: A base de dados COMPANHIA.
A Base de Dados Companhia
- Base que armazena dados sobre funcionários, departamentos e projetos. Descrição:




Companhia organizada em departamentos. Cada departamento tem:
o Um nome;
o Um número que identifica o departamento;
o Número de funcionários;
o Uma localização;
o Um funcionário que gerencia o departamento:
 Armazena-se a data de início em que o funcionário começou a gerenciar o departamento.
Um departamento é responsável pelo controle de diversos projetos. Cada projeto tem:
o Um nome;
o Um número que identifica o projeto;
o Uma localização.
Sobre o funcionário armazena-se:
o Nome;
o Número do seguro social;
o CPF;
o Endereço;
o Telefones;
o Salário;
o Sexo;
o Data de nascimento;
o Idade.
Todo funcionário é associado a um departamento, mas pode trabalhar em diversos projetos, não
necessariamente controlados pelo mesmo departamento (todo projeto é controlado por algum departamento,
mas há departamentos que não controlam nenhum projeto). Todo funcionário precisa atuar em pelo menos um
projeto. Armazena-se:
o Número de horas que o funcionário trabalha em cada projeto.
5

o Quem é o supervisor direto de cada funcionário. Todo funcionário tem um supervisor.
Os dependentes de cada funcionário são armazenados para garantir os benefícios do seguro. Para cada
dependente são armazenados:
o Nome;
o Sexo;
o Data de nascimento;
o Idade;
o Relacionamento com o empregado.
Símbolos Utilizados
Retângulos – Representam entidades.
Elipses – Representam atributos.
Losângulos – Representam relacionamentos.
Linhas – Ligam atributos a entidades e entidades a relacionamentos.
Conceitos do Modelo Entidade-Relacionamento
Entidades e Atributos
- Entidade: - É uma classe de objetos do mundo real que possuem uma existência independente e que possuem
propriedades em comum sobre as quais se deseja armazenar dados.
- Tais objetos podem ter existência física: Pessoa, Carro, Livro.
- Podem ainda ter apenas existência conceitual: Curso Universitário, Projeto.
6
- Instância de entidade:
- É uma ocorrência de uma entidade. O equivalente lógico de uma instância é um
registro de uma tabela. Exemplo: A entidade Funcionário possui várias instâncias: o funcionário Pedro da Costa,
com CPF 123456789, que mora no endereço R. A, 23; o funcionário Paulo da Silva, com CPF 987654321, que
mora no endereço R. B, 32 e assim por diante.
- Atributos: - Propriedades particulares de uma entidade (ou relacionamento).
Exemplo:
Nome=João Nunes Silva da Silva
f1
Endereço = R. Goiás, 711
São Paulo - SP, CEP: 13011-000
Idade = 55
Fone residencial = 11-3713-3345
Salário = 2300,00
- Classificação dos Atributos
Os atributos são classificados em:
 Simples OU Compostos
 Monovalorados OU Multivalorados
 Obrigatórios OU Opcionais
 Derivados OU Não-Derivados
 Chaves OU Não-Chaves
As definições são como segue:
 Atributo composto: Pode ser dividido em subpartes com significados independentes.
Exemplos: Um endereço pode ser subdividido em Logradouro (rua e número), Cidade, Estado e CEP.
Um telefone pode ser subdividido em DDI, DDD e Número propriamente dito.
É útil decompor um atributo em suas partes quando há a necessidade de se referenciar o mesmo como um
todo, mas algumas vezes, ter acesso a apenas alguns de seus componentes.
 Atributo simples: Em contraposição aos atributos compostos, um atributo simples é aquele cujo valor não
se pode subdividir em partes. Exemplo: O atributo salário.
Representação:
Composto
Simples
Simples
Simples
Simples
 Atributo multivalorado: É aquele que pode assumir múltiplos valores para uma dada instância de uma
entidade.
Exemplos: É comum que uma pessoa tenha vários números de telefone ou vários endereços comerciais.
7
 Atributo monovalorado: Em contraposição aos atributos multivalorados, um atributo monovalorado
assume um único valor para cada instância de uma entidade.
Exemplos: Nome, CPF, data de nascimento são todos exemplos de atributos que, para uma dada pessoa,
assumem um único valor.
Representação:
Mono
Multi
 Atributo opcional: Quando uma entidade não possui valor para determinado atributo ou quando seu valor
é desconhecido, um valor especial chamado null é usado neste caso.
Exemplos: Um valor null é a representação de:
 Um valor não aplicável: Funcionário com endereço sem número de apartamento porque
reside em casa.
 Um valor desconhecido no momento: Funcionário ainda não adquiriu um telefone
residencial.
 Valor indefinido: Funcionário encarregado de várias funções, sem cargo definido.
 Atributo obrigatório: Atributo cujo valor sempre existe e é conhecido para todas as instâncias de uma
entidade.
Exemplos: Todo funcionário possui nome, data de nascimento, CPF, dentre outros.
Representação:
Valor
mínimo
Entidade
Entidade
(1,1)
(0,1)
Opcional
Valor
máximo
Obrigatório
Nesta representação:
- Um atributo opcional tem valor mínimo 0.
- Um atributo obrigatório tem valor mínimo 1.
Observação: Também se pode utilizar esta representação para distinguir atributos monovalorados de
atributos multivalorados.
Representação:
Entidade
Entidade
(1,1)
Mono
(1,N)
Multi
Nesta representação:
- Um atributo monovalorado tem valor máximo 1.
- Um atributo multivalorado tem valor máximo N.
8
 Atributo derivado: Aquele cujos valores que assume podem ser obtidos a partir de outro atributo ou a
partir de relacionamentos entre entidades, através de um processo algébrico. Normalmente não são
armazenados em bancos de dados.
Exemplos: O atributo idade pode ser obtido a partir da data de nascimento do funcionário, fazendo-se uma
conta de subtração entre datas.
O atributo número de funcionários da entidade Departamento pode ser obtido através de um processo de
contagem do número de instâncias do relacionamento Trabalha entre Funcionário e Departamento.
 Atributo não-derivado: Aquele cujos valores que assume não podem ser obtidos a partir de outro atributo
ou a partir de relacionamentos entre entidades.
Exemplo: A data de nascimento do funcionário não pode ser obtida a partir de sua idade.
Representação:
Derivado
Não-Derivado
 Atributo Chave (Identificador): Atributo ou conjunto de atributos que identificam de modo único cada
instância de uma entidade. Não pode haver duas instâncias de uma entidade com o mesmo conteúdo para o
atributo identificador. Uma entidade pode ter várias chaves candidatas (também chamadas chaves
alternativas).
Exemplos: CPF, RG, CNH para pessoas. DDI para países.
 Atributo Não-Chave: Atributo cujo valor pode se repetir entre instâncias de uma mesma entidade.
Exemplos: Na maioria dos contextos o nome de uma pessoa não é um atributo chave, pois existem
homônimos.
Representação:
Chave-Primária
Não-Chave
- Chave-Primária: Deve ser escolhida dentre os atributos chave, devendo satisfazer aos seguintes critérios:
 Unicidade: É a principal característica de uma chave. Seu valor é único para cada instância de uma
entidade, permitindo que, através deste valor, se identifique cada uma destas instâncias.
 Ser atributo obrigatório: Uma chave primária não pode assumir valores nulos. Assim, embora o número
da CNH seja único, nem todos a possuem, de forma que este não é um bom candidato à chave-primária.
 Ser mínima: Poderia se pensar em tomar a dupla de atributos (cpf, nome) como sendo a chave-primária da
entidade Funcionário. No entanto, esta chave não seria mínima, pois o atributo cpf isoladamente já é um
atributo chave.
 Ser estável ao longo do tempo: Embora todo funcionário deva ter um número de conta bancária a si
associado, necessária para que seja efetuado o seu pagamento mensal e, ainda que este atributo possa ser
único e obrigatório, ele pode sofrer alterações ao longo do tempo. Por isso, esta não seria uma boa escolha
para a chave-primária da entidade Funcionário.
9
Relacionamentos
- Relacionamento: Classe de associações entre duas ou mais entidades.
Exemplo: Há um relacionamento “Trabalha-Para” entre a entidade Funcionário e a entidade Departamento.
Departamento
TrabalhaPara
Funcionário
Cpf
Número
- Instância de relacionamento: Ocorrência particular de um relacionamento, envolvendo instâncias específicas de
cada uma das entidades envolvidas.
Exemplo: O Funcionário João Nunes Silva da Silva “trabalha para” o Departamento de Desenvolvimento de
Produtos.
Atributos de Relacionamentos
- Os relacionamentos também podem ter atributos, da mesma forma que as entidades.
Exemplo: Necessidade de se registrar o número de horas que um funcionário dedica a um determinado projeto.
Projeto
TrabalhaEm
Funcionário
Cpf
Número
NumHoras
Grau de um relacionamento
- Relacionamentos classificam-se quanto ao número de entidades envolvidas em:
 Binários: Envolvem duas entidades.
Funcionário
TrabalhaPara
Projeto
10

Binários recursivos: Envolvem a associação entre diferentes instâncias de uma única entidade, as quais
participam do relacionamento assumindo diferentes papeis.
Funcionário

Supervisiona
Ternários: Envolvem três entidades.
Fornecedor
Fornece
Projeto
Peça
Mapeamento de Restrições
- O mundo real pode impor certas restrições que são refletidas nos relacionamentos.
- Estas restrições podem ser decorrentes de:
 Regras de negócio do empreendimento para o qual se modela o banco de dados. Exemplo: Uma regra
segundo a qual um empregado trabalha apenas para um departamento.
 Senso comum, isto é, aquilo que é de conhecimento de todos, sem precisar que seja enunciado. Exemplo:
Toda pessoa tem uma única mãe natural.
- Dois tipos principais de restrições de relacionamentos são a razão de cardinalidade de um relacionamento e a
dependência de existência (restrição de participação).
Razão de Cardinalidade
- A cardinalidade expressa o número de instâncias de uma entidade às quais uma instância de outra entidade pode
estar associada por meio de um relacionamento e é, obviamente, dependente das situações reais que estão sendo
modeladas pelo relacionamento.
- Para os relacionamentos binários entre entidades A e B, bem como para relacionamentos binários recursivos, a
razão de cardinalidade pode ser:
 Um para um (1:1): Uma instância da entidade A está associada a no máximo uma instância da entidade B,
e uma instância da entidade B está associada a no máximo uma instância da entidade A.
11
Exemplos:
Funcionário – Gerencia - Departamento
Funcionário
1
1
Gerencia
João
Nune
Ana
sMaria
Silva
Ivo
Jussara
Leôncio
Pedro
Marcia
Lúcia
Joel
Departamento
Gerencia
Depto Pessoal
Depto Compras
Depto Marketing
Depto Pesquisa
Pessoa – Casada – Pessoa
1
esposo
Pessoa
Casada
1
esposa
Casamento
José
Marta
Juliana
Leonel
Maira
Igor

Um para muitos (1:N): Uma instância da entidade A está associada a várias instâncias da entidade B, e
uma instância da entidade B está associada a, no máximo, uma instância da entidade A.
Exemplo: Funcionário – Trabalha Para – Departamento
Funcionário
N
TrabalhaPara
1
Departamento
12
Trabalha Para
João
Nune
Ana
sMaria
Silva
Ivo
Jussara
Leôncio
Pedro
Marcia
Lúcia
Joel
Depto Pessoal
Depto Compras
Depto Marketing
Depto Pesquisa
Pessoa – É Mãe Natural de – Pessoa
1
mãe
Pessoa
Progenitora
N
filho
Progenitora
Laura
Larissa
a
Mauro
Meire
Murilo
Bia
Ana

Muitos para muitos (N:M): Uma instância da entidade A está associada a várias instâncias da entidade B,
e uma instância da entidade B está associada a várias instâncias da entidade A.
Exemplo: Funcionário – AtuaEm - Projeto
Funcionário
N
AtuaEm
N
Projeto
13
Atuação em Projeto
João
Nune
Ana
sMaria
Silva
Ivo
Jussara
Leôncio
Pedro
Marcia
Lúcia
Joel
Proj ABC
Proj XYZ
Proj XXX
Proj DEF
Peça – Compõe – Peça
N
contida
Peça
Compõe
N
contém
Restrição de Participação
- Esta restrição especifica se a existência de uma instância de uma entidade depende de ela estar relacionada com
uma instância de outra entidade através de um relacionamento.
- Existem dois tipos de restrição de participação:

Total: Também chamada de dependência existencial. Ocorre quando a existência de uma instância de uma
dada entidade depende da participação da mesma em um relacionamento.
Exemplo:
- Se uma companhia estabelece a regra de que todo Departamento deve ter um funcionário que atua como seu
gerente, então uma instância da entidade Departamento só pode existir se participar de um relacionamento
Gerencia com a entidade Funcionario. Por outro lado, nem todo funcionário é gerente de algum departamento.
- A participação de Departamento em Gerencia é total, ao passo que a participação de Funcionario é parcial.
- A entidade Funcionario é chamada de entidade dominante ou forte e a entidade Departamento de entidade
dependente ou subordinada.

Parcial: Ocorre quando a existência das instâncias de uma dada entidade é independente de sua participação
em qualquer relacionamento.
14
Exemplo:
- Não é esperado que todo funcionário gerencie um departamento, assim a participação de Funcionário no
relacionamento Gerencia é parcial.
- Não necessariamente todas as instâncias da entidade Funcionário estarão relacionadas a instâncias da entidade
Departamento via Gerencia.
- Uma possível notação para representar se a participação de uma entidade em um relacionamento é parcial ou
total é através do uso de:

Linha simples ligando a entidade ao relacionamento para participação parcial.

Linha dupla ligando a entidade ao relacionamento para participação total.
Exemplo:
Funcionário
1
1
Gerencia
Departamento
Outras Notações Possíveis
Notação de Peter-Chen
- A notação de cardinalidade mínima e máxima (notação de Peter-Chen) também é muito utilizada.
- As cardinalidades mínima e máxima são expressas entre parênteses da seguinte forma:
(cardinalidade mínima, cardinalidade máxima)
- Os valores que a cardinalidade mínima pode assumir são:

0: Representa Participação Parcial da entidade que está no lado oposto no relacionamento.

1: Representa Participação Total da entidade que está no lado oposto no relacionamento.
- Os valores que a cardinalidade máxima pode assumir são 1 ou N, tendo o mesmo significado já visto
anteriormente.
Exemplos:
1) Um funcionário trabalha para apenas um departamento e todo funcionário tem que estar atrelado a um
departamento. Expressamos isso como (1, 1), isto é, no mínimo 1 e, no máximo, 1.
Todo departamento tem funcionários trabalhando nele. Um departamento pode ter vários funcionários
trabalhando nele. Expressamos isto como (1, N), isto é, no mínimo 1 e, no máximo, N.
Funcionário
(1, N)
TrabalhaPara
(1, 1)
Departamento
2) Todo departamento tem um funcionário que atua como gerente dele. Um departamento pode ter um único
gerente. Expressamos isso como (1, 1).
Um funcionário pode ou não ser gerente de um departamento. Um funcionário só pode gerenciar um único
departamento. Expressamos isso como (0, 1), isto é, no mínimo, 0 e, no máximo, 1.
15
Funcionário
(1, 1)
Gerencia
(0, 1)
Departamento
Notação de James Martin
- As principais diferenças com relação às notações anteriores são:
 Os relacionamentos são representados apenas por uma linha.
 Somente permite a representação de relacionamentos binários.
 A notação de cardinalidade máxima e mínima é gráfica.
 O símbolo mais próximo ao retângulo representa a cardinalidade máxima.
 O símbolo mais distante representa a cardinalidade mínima.
Representações:
Muitos
Um
associados a:
A ocorrência do relacionamento é opcional.
A ocorrência do relacionamento é obrigatória.
Exemplos:
Um funcionário tem que trabalhar para um e apenas um departamento.
Um departamento tem um ou mais funcionários trabalhando nele.
Departamento
Funcionário
Cardinalidade Mínima
Cardinalidade Máxima
Um passageiro pode ocupar, em uma viagem de avião, apenas uma poltrona.
Uma poltrona pode estar ocupada por um ou nenhum passageiro.
Passageiro
Poltrona
16
Entidades Fracas
- Algumas entidades podem não ter quaisquer atributos-chave. Isto implica que podem haver instâncias cuja
combinação dos valores dos atributos são idênticas.
- A identificação destas instâncias ocorre por estarem associadas a instâncias de uma outra entidade, em
combinação com algum ou alguns de seus atributos.
- Esta outra entidade é dita ser proprietária da identificação e o relacionamento que relaciona uma entidade fraca
com a proprietária da identificação é chamado relacionamento de identificação.
- Uma entidade-fraca sempre tem uma restrição de participação total (dependência existencial) com relação ao seu
relacionamento de identificação.
Exemplo: Entidade Dependente, relacionada a Funcionario. Trata-se de um relacionamento 1:N.
Os atributos de Dependente são Nome, DataNasc, Sexo e Relação com o funcionário (esposa, marido,
filho, etc).
Dependentes de funcionários diferentes podem ter os mesmos valores para os atributos, e ainda assim
tratam-se de entidades distintas.
Os dependentes serão identificados como entidades distintas após a determinação da entidade
funcionário com a qual cada um está relacionado.
- Uma entidade fraca possui uma chave parcial, que é um atributo ou conjunto de atributos que pode
univocamente identificar instâncias da entidade fraca relacionadas à mesma instância da entidade proprietária.
Exemplo: Considerando que os dependentes de um mesmo funcionário terão nomes diferentes, então o atributo
Nome de Dependente será a chave parcial.
17
Projeto da Base de Dados Companhia Utilizando o Modelo Entidade-Relacionamento
- Podemos especificar os seguintes tipos de relacionamentos extraídos da descrição sobre a companhia:
Gerencia (1:1) entre Funcionário e Departamento.
A participação de Funcionário é parcial. A participação de Departamento é total.
O atributo DataIni é associado a esse relacionamento.
Trabalha-Para (1:N) entre Departamento e Funcionário.
Ambos têm participação total.
Controla (1:N) entre Departamento e Projeto.
A participação de Projeto é total e de Departamento é parcial.
Supervisiona (1:N) entre Funcionário (no papel de supervisor) e Funcionário (no papel de
supervisionado).
A participação de Funcionário no papel de supervisor é parcial, pois nem todo funcionário é supervisor,
mas a participação de Funcionário no papel de supervisionado é total, pois todo funcionário é
supervisionado.
Trabalha-Em (N:N) entre Funcionário e Projeto.
Ambos têm participação total.
O atributo Horas é associado a este relacionamento.
Dependente-de (1:N) entre Funcionário e Dependente.
É um relacionamento de identificação para a entidade-fraca Dependente.
A participação de Funcionário é parcial e de Dependente é total.
Telefone
18
Mais sobre relacionamentos ternários
- Muitas vezes é difícil decidir se um relacionamento deve ser representado como sendo ternário ou se não pode ser
representado por vários relacionamentos binários entre as entidades participantes. O projetista da base de dados
deve se guiar pelo significado da situação particular que estiver representando para decidir qual alternativa adotar.
Exemplo1:
País
N
Vende
N
N
Companhia
Produto
- Para um dado par (companhia, produto) há vários países para os quais o produto é vendido por aquela companhia.
- Para um dado par (país, produto) há várias companhias exportando aquele produto para aquele país.
- Para um dado par (companhia, país) há vários produtos exportados por aquela companhia para aquele país.
Companhia Produto País
A
abóbora Alemanha
A
abóbora Bélgica
B
abóbora Alemanha
A
pepino
Alemanha
C
pepino
Bélgica
- Deve-se notar que, no nosso exemplo hipotético, A não exporta pepino para a Bélgica.
- Não conseguiríamos representar este fato através do seguinte diagrama ER, a partir do qual a leitura que se faz é
de que uma companhia manufatura vários produtos e exporta todos para um número de diferentes países.
Uma
companhia
produz
muitos
produtos e exporta
todos os produtos
que produz para um
número
de
diferentes países.
N
Exporta
N
País
N
Produz
N
Produto
Companhia
19
Companhia País
Companhia Produto
A
Alemanha
A
abóbora
A
Bélgica
A
pepino
C
Bélgica
C
pepino
B
Alemanha
B
abóbora
- Também não conseguiríamos representar este fato através do DER abaixo:
Exporta
N
N
Companhia
País
N
Produz
M
N
Produto
Companhia País
N
Companhia Produto
País
Compra
Produto
A
Alemanha
A
abóbora
Alemanha abóbora
A
Bélgica
A
Pepino
Alemanha pepino
C
Bélgica
C
Pepino
Bélgica
abóbora
B
Alemanha
B
abóbora
Bélgica
pepino
Exemplo 2: Relacionamento ternário 1:N:N
Gerente
1
Gerencia
N
Engenheiro
N
Projeto
Para um dado par (Engenheiro, Projeto): Há apenas 1 gerente. Isto é, cada engenheiro trabalhando em um projeto
particular tem exatamente um gerente.
Para um dado par (Gerente, Projeto): Há vários engenheiros. Isto é, cada gerente de um projeto pode gerenciar
muitos engenheiros.
Para um dado par (Gerente, Engenheiro): Há vários projetos. Isto é, cada gerente de um engenheiro pode gerenciar
aquele engenheiro em vários projetos.
20
Exemplo 3: Relacionamento ternário 1:1:N
Projeto
1
DesignadoA
1
N
Local
Funcionário
Para um dado par (Funcionário, Projeto): Há apenas um local de trabalho. Isto é, cada funcionário designado para
um projeto trabalha em apenas um local naquele projeto (mas pode estar em diferentes locais para diferentes
projetos).
Para um dado par (Funcionário, Local): Há apenas um projeto. Isto é, em um particular local um funcionário
trabalha apenas em um projeto.
Para um dado par (Projeto, Local): Há vários funcionários. Isto é, em um particular local podem haver muitos
funcionários designados para um projeto.
Atenção: Este DER não implica que um funcionário participe de um só projeto.
Exemplo 4: Relacionamento ternário 1:1:1
Professor
1
Usa
1
Livro
1
Curso
Um professor usa um livro para um dado curso.
Nenhum professor usa o mesmo livro para diferentes cursos.
Mas diferentes professores podem usar o mesmo livro em diferentes cursos.
Extensões do Modelo E-R
- Apesar de ser possível modelar a maioria dos bancos de dados apenas com os conceitos básicos do E-R, alguns
aspectos de um banco de dados podem ser expressos de modo mais conveniente por meio de algumas extensões.
São estas: a Especialização/Generalização e as Entidades Associativas.
21
Especialização/Generalização
- Uma entidade pode conter subgrupos de instâncias que são, de alguma forma, diferentes de outras instâncias do
conjunto.
- O processo de projetar subgrupos de uma entidade é chamado especialização e é representado graficamente por
um triângulo.
Exemplo:
G
E
N
E
R
A
L
I
Z
A
Ç
Ã
O
CPFouCNPJ
Cliente
PessoaFísica
Sexo
E
S
P
E
C
I
A
L
I
Z
A
Ç
Ã
O
Nome
PessoaJurídica
DataInaugura
RazaoSocial
DataNasc
- Estas entidades de nível inferior podem possuir atributos, ou mesmo participar de relacionamentos que não
podem ser aplicados a todas as instâncias da entidade de nível superior.
- O uso do mecanismo de especialização evita que se tenha entidades com muitos atributos opcionais.
Exemplo:
TipoFuncionário
Nome
Funcionário
Código
(0,1)
CREA
(0,1)
(0,1)
DataExpiracaoCarteiraHabilitacao
(0,1)
CRM
NumeroCarteiraHabilitacao
Nome
Esta situação fica melhor modelada assim:
Funcionário
Código
NumeroCarteiraHabilitacao
Motorista
DataExpiracaoCarteiraHabilitacao
Médico
CRM
Engenheiro
CREA
22
- A generalização é simplesmente o inverso da especialização.
- Existem dois tipos de generalização/especialização: Total (representada pela letra T) e Parcial (representada pela
letra P):
• Total: Toda ocorrência da entidade genérica corresponde a uma ocorrência de uma das entidades especializadas.
• Parcial: Nem toda ocorrência da entidade genérica corresponde a uma entidade especializada.
Exemplos:
Cliente
Pessoa
t
PessoaFísica
p
PessoaJurídica
Professor
Aluno
- No primeiro exemplo, todo Cliente é ou uma Pessoa Física ou uma Pessoa Jurídica. Não há outras opções além
destas.
- No segundo exemplo, uma Pessoa pode ser um Professor, um Aluno ou ainda um Funcionário da instituição de
ensino. Os funcionários não estão representados como subentidades porque, neste caso, não haveria outros
atributos (que fossem particulares de funcionários), além daqueles atributos comuns a todas as pessoas.
- Não há limite para o número de níveis hierárquicos no processo de especialização/generalização. Temos um
exemplo a seguir com três níveis.
Exemplo:
Pessoa
Professor
ProfGraduacao
Aluno
ProfPos
AlunoGraduacao
AlunoPos
23
Herança de Atributos e Relacionamentos
- Os atributos das entidades de nível superior são herdados pelas entidades de nível inferior.
- As entidades de nível inferior (ou subentidades) também herdam a participação em relacionamentos dos quais
participam as entidades de nível superior (ou superentidades).
Entidade Associativa
- Um relacionamento é uma associação entre entidades. O Modelo ER original não comporta a possibilidade de se
associar uma entidade com um relacionamento ou então de associar dois relacionamentos entre si.
- No entanto, na prática, eventualmente surge esta necessidade. Vamos ilustrar isto com um exemplo.
Exemplo:
- Suponhamos que, em uma dada instituição de ensino, alunos que estejam tendo dificuldades em alguma disciplina
tenham direito ao acompanhamento de um tutor nesta disciplina.
- A função do tutor é acompanhar o desempenho do aluno na disciplina e auxiliá-lo nas suas dificuldades com a
disciplina.
- Representamos isso como segue:
N
N
Aluno
Matriculado
Matriculado
Disciplina
N
Tutoria
1
Tutor
Refletindo o aspecto temporal
- A modelagem do banco de dados deve refletir o fato de que existem:
 Atributos cujos valores sofrem modificações ao longo do tempo.
Exemplo:
CategoriaFunc
1
CategoriaFunc
Recebe
salário
O banco de dados
contém
apenas
o
salário atual.
N
Salário
data
valor
O banco de dados
contém o histórico dos
salários.
24
 Relacionamentos sofrem modificações ao longo do tempo.
Exemplo:
Funcionário
1
Funcionário
N
Alocação
Alocação
1
N
Mesa
O banco de dados
contém
apenas
a
alocação atual.
data
Mesa
O banco de dados
contém o histórico das
alocações.
Exercício sobre Classificação de Atributos
Atividade envolvendo o cenário: Instituição de Ensino “Aprendendo a Aprender”.
Considere a seguinte situação:
A instituição de Ensino Técnico “Aprendendo a Aprender”, localizada na zona Norte de São Paulo, foi fundada em
1970.
Conta com aproximadamente 800 alunos, 10 professores e os cursos de Tecnologia da Informação e Magistério,
que são oferecidos nos períodos manhã, tarde e noite.
Conta também com 8 funcionários que dão suporte administrativo e financeiro à instituição.
Inicialmente, a instituição controlava as suas informações manualmente por meio de fichas que continham o
histórico dos alunos, os dados cadastrais de alunos, professores e funcionários, informações sobre os cursos, entre
outras informações.
Sabemos que os alunos são matriculados em um curso, que os cursos são compostos por disciplinas e que as
disciplinas são ensinadas por professores.
A seguir são apresentados alguns exemplos de relatórios com as informações que eram preenchidas:
Aluno:
Nome
Curso
Semestre Data de Nascimento RG
Endereço completo
Antonio Ubaldo Processamento de
1
15/08/1984
3789789 R. das Magnólias, 329 - Bela
da Silva
Dados
Vista – CEP:02460-044
São Paulo – SP
Ana Regina
Magistério
4
07/02/1986
1234556 R. Madrigal, 875 - Pinheiros
Domingues
– CEP:42568-144
São Paulo – SP
Curso:
Nome
Duração (horas) Disciplinas
Portaria de aprovação
Processamento de Dados
2000
Cálculo numérico
578/70
Português,
Fundamentos de computação
...
Magistério
1800
Português,
579/70
Literatura,
Pedagogia
...
25
Disciplina:
Nome
Cálculo
Numérico
Pedagogia
Professor:
Nome
Murilo Maciel
Maria Luiza
Passos
Carga Horária
80
80
Semestre
2
Professor
Murilo Maciel
4
Maria Luiza Passos
Data de Nascimento RG
14/10/1970
17172545
27/04/1972
3216548
Turma
1
2
1
2
Curso
Processamento de Dados
Magistério
Endereço completo
R. das Acácias, 41 - Ibirapuera – CEP:12345-544
São Paulo – SP
R. Arquimedes, 85 – Cerqueira Cesar – CEP:74125-632
São Paulo – SP
1. Para cada tabela classifique os atributos quanto a se são:
simples ou compostos, multivalorados ou monovalorados, opcionais ou não, derivados ou não, chaves candidatas
ou não.
2. Para cada tabela, identifique um campo candidato à chave primária. Caso não haja nenhum, sugira o acréscimo
de uma nova coluna à tabela, indicando o nome da coluna e o tipo de dado.
Exercícios sobre Modelo Entidade Relacionamento – Parte 1
1. Represente o modelo Entidade-Relacionamento correspondente aos seguintes enunciados. Coloque pelo menos
três atributos em cada entidade, identificando um como chave-primária. Identifique as cardinalidades e restrições
de participação:
a) Atletas participam de competições. Em uma competição participam vários atletas.
b) Em uma rede de hotelaria, os hotéis possuem quartos. Cada quarto pertence a apensa um hotel.
c) Um país possui estados. Um estado pertence a apenas um país. Atenção: O Vaticano é um país que não
possui estados.
d) Todo soldado, que possui as características: Nome, Registro Militar (RM), data de nascimento, possui
armas. Toda arma, que possui as características de série, registro e calibre, é de um soldado. Uma arma é
limpa por vários soldados. Um soldado limpa várias armas.
2. Represente os diagramas do exercício anterior usando a notação de Peter-Chen (cardinalidade máxima e
mínima).
Exercícios sobre Modelo Entidade Relacionamento – Parte 2
1) Minerais
Solicita-se o projeto de um banco de dados para armazenar informações sobre os países do mundo e suas
reservas de minerais.
Para cada mineral deve-se registrar o nome do mineral e o seu preço corrente em dólares, por grama.
Para cada país, a informação a ser registrada inclui o nome do país, seu produto interno bruto (PIB) e, para cada
mineral encontrado no país, a produção anual (em toneladas) e reserva estimada (em toneladas).
Um país pode ter reservas de muitos minerais e cada mineral pode ser encontrado em muitos países.
2) Colégio
Um professor ministra várias disciplinas.
26
Uma determinada disciplina só é ministrada por um único professor. Por exemplo, apenas um professor é
responsável por ministrar Literatura.
Cada disciplina é identificada por um código e possui um nome e uma carga horária.
Um aluno pode estar matriculado em várias disciplinas.
Sobre o aluno registra-se o nome, endereço (Rua, Número, Cidade, Estado e CEP) e telefone. Todo aluno
tem um código que o identifica de forma única dentro do colégio.
Sobre o professor registra-se o nome, endereço (Rua, Número, Cidade, Estado e CEP), telefone e titulação
máxima. Todo professor também possui um código que o identifica de forma única dentro do colégio.
Para cada disciplina em que o aluno está matriculado são armazenadas, ao final do período letivo a sua
média final e a sua frequência na disciplina.
3) Clínica
Em uma clínica trabalham vários médicos.
Um médico pode ter várias especialidades.
Uma especialidade é identificada por um código e possui um nome que a descreve. Além disso, registra-se
se se trata de uma especialidade reconhecida ou não pelo Conselho de Medicina.
Sobre os médicos registra-se o seu Nome, CRM, CPF, RG, Endereço (Rua, Número, Cidade, Estado e CEP)
e Telefone.
Diariamente pacientes são atendidos na clínica por diferentes médicos.
Para cada consulta armazena-se a data e o valor da consulta.
Para todo paciente atendido na clínica é feito um cadastro aonde consta o seu nome e endereço. Além disso,
cada novo paciente ganha um código de identificação dentro da clínica.
4) Componentes eletrônicos
Uma companhia que produz componentes eletrônicos deseja manter uma base de dados a respeito dos
dispositivos que manufatura e dos componentes de que cada dispositivo necessita para ser manufaturado.
Para cada componente, deve-se armazenar um número de identificação (único), um nome, descrição, o
nome e o endereço do fornecedor.
Cada componente possui apenas um fornecedor, mas um dado fornecedor pode fornecer muitos
componentes diferentes.
Para cada dispositivo, deseja-se registrar um número de identificação único e o seu nome, juntamente com o
preço corrente do dispositivo e a quantidade em estoque.
Deseja-se registrar também a quantidade de cada componente necessária para a manufatura de cada
dispositivo.
5) Aluguel de carros
Uma firma de aluguel de carros deseja manter um banco de dados para registrar detalhes a respeito da sua
frota de carros e vans e sobre os alugueis que são feitos.
Para cada carro ou van os detalhes a serem registrados incluem: o número de registro (único), a marca, o
modelo, número de portas, cor, potência do motor e a data de registro do veículo.
Para cada van uma informação adicional é a sua carga máxima, em toneladas.
Para cada carro, por sua vez, deseja-se armazenar adicionalmente o volume do porta-malas.
A cada vez que um veículo é alugado, o nome, endereço, número de telefone e número da carteira de
motorista do cliente devem ser registrados, juntamente com a identificação do veículo que está sendo alugado.
A data e o horário do início e do final do período de aluguel também são registrados, bem como o número
de quilômetros rodados pelo cliente e o custo total do aluguel.
6) Administradora de condomínios
Construir um diagrama E-R para uma administradora de condomínios, considerando que:
 Um condomínio é formado por diversas unidades habitacionais.
 Cada unidade habitacional pertence a um proprietário, que pode possuir diversas unidades.
27





Cada unidade pode ser alugada.
Toda pessoa (proprietário ou locatário) possui um código, um nome e um endereço. Para o locatário, deseja-se
armazenar o CPF do fiador.
Toda unidade possui um código que a identifica no condomínio e um endereço. Também deseja-se armazenar
qual é a área construída.
Um condomínio é identificado por um código e endereço.
Entre os proprietários de um condomínio, um é síndico.
7) Companhia aérea
Suponha que você tenha sido contratado pela companhia aérea Tomara-Que-Chegue-Lá para projetar um
banco de dados para administrar sua operação.
Atualmente a companhia possui dois aviões B747, cujos números de série são N1001 e N1002, e um avião
MD11, cujo número de série é N2001.
O N1001 foi comprado em 1990, o N1002 em 1995, e o N2001 em 1985.
A capacidade de cada B747 é de 200 passageiros e do MD11 é de 150 passageiros.
Na empresa trabalham três pilotos: Comandante Ventolateral, Comandante Furacão e Comandante
Kamikaze, nascidos, respectivamente, em 1960, 1965 e 1970.
O Comandante Ventolateral pode voar B747s; o Comandante Furacão pode voar B747s e MD11s, e o
Comandante Kamikaze pode voar MD11s.
Três vôos estão programados diariamente: Vôo F001 com partida às 8:00 h e chegada às 10:00 h (usa
N1001); vôo F002 com partida às 9:00 h e chegada às 15:00 h (usa N2001) e o vôo F003 com partida às 14:00 h e
chegada às 17:00 h (usa N1001).
As partidas são canceladas caso não haja nenhum passageiro a transportar.
Os horários de partida e de chegada são os programados.
O Comandante Ventolateral pilotou o vôo F001 em 15/01/03 e em 20/01/03.
O Comandante Furacão comandou o vôo F002 em 20/01/03 e o vôo F003 em 25/01/03.
Cada vôo envolve um piloto e um avião.
Vôos diferentes podem envolver o mesmo piloto e o mesmo avião.
O passageiro com código de cliente C001, que vive em São Paulo, viajou no vôo F001, em 15/01/03 e no
vôo F003 em 25/01/03.
O passageiro com código de cliente C002, que mora em Fortaleza, viajou no vôo F002, em 20/01/03.
O passageiro com código de cliente C003, que vive em Belo Horizonte, viajou no vôo F003 em 25/01/03.
O horário de partida do vôo F001 em 15/01/03 foi às 8:05 h e sua chegada se deu às 10:05 h.
8) Representantes de venda – Versão 1
Um banco de dados deve conter informações relativas a representantes de vendas, áreas de vendas e
produtos.
Cada representante é responsável pelas vendas em uma ou mais áreas; cada área tem um ou mais
representantes responsáveis.
De modo semelhante, cada representante é responsável pelas vendas de um ou mais produtos, e cada
produto tem um ou mais representantes responsáveis.
Cada produto é vendido em diversas áreas, porém dois representantes nunca vendem o mesmo produto na
mesma área.
Projete um DER para este banco de dados.
9) Representantes de venda – Versão 2
Um banco de dados deve conter informações relativas a representantes de vendas, áreas de vendas e
produtos.
Cada representante é responsável pelas vendas em uma ou mais áreas; cada área tem um ou mais
representantes responsáveis.
28
De modo semelhante, cada representante é responsável pelas vendas de um ou mais produtos, e cada
produto tem um ou mais representantes responsáveis.
Finalmente, cada produto é vendido em uma ou mais áreas, e cada área tem um ou mais produtos vendidos
nela.
Ainda mais, se o representante R é responsável pela área A, e o produto P é vendido na área A, e o
representante R é responsável pelo produto P, então R vende P em A.
Projete um DER para este banco de dados.
10) Medicamentos prescritos
Médicos (identificados por seu CRM) que trabalham em uma clínica diariamente atendem pacientes
(identificados por seu CPF) e, para cada consulta, deseja-se armazenar a data e o valor da mesma. Isto é
representado como segue:
Data
Médico
Valor
Consulta
Paciente
Deseja-se agora armazenar os medicamentos prescritos em uma consulta. Medicamentos são identificados
pelo seu nome. Complete o diagrama acima.
11) Museu
Considere o contexto de um museu.
Cada obra no museu possui um código, um título e um ano. Obras ou são pinturas ou são esculturas. No
primeiro caso, são dados importantes o estilo (por exemplo, impressionista). No caso de esculturas, são importantes
o peso e os materiais de que é feita (por exemplo, argila, madeira, etc).
Uma obra pode estar exposta em um único salão, em uma determinada posição neste salão. Um salão, que
geralmente abriga várias obras, é identificado por um número e está em um andar do museu. Certos dados a
respeito dos autores de cada obra também são relevantes: código, nome e nacionalidade.
Uma obra é produzida por apenas um autor, porém, pode existir mais de uma obra de um mesmo autor no
museu. No museu trabalham restauradores, cada um possuindo um ID, CPF, nome e especialidade.
Um restaurador pode estar realizando a manutenção de várias obras. Uma obra, caso esteja em manutenção,
está nas mãos de apenas um restaurador. Para cada manutenção deve-se registrar a data de início e a data prevista
de término do trabalho, uma descrição do serviço a ser feito e um custo previsto para realizar a manutenção.
Uma manutenção pode estar utilizando uma ou mais matérias-primas. Uma matéria-prima possui um
código, um nome e uma quantidade em estoque. Uma matéria-prima pode estar sendo utilizada em várias
manutenções, em uma certa quantidade.
Exercícios sobre Modelo Entidade Relacionamento – Relacionamentos Ternários
1.
Dados os gerentes:
 João Nunes Silva
Paulo
 Ana Cláudia
 Elaine Dias
dados os projetos:
 “Desenvolvimento do produto A”
 “Implantação da plataforma B”
 “Aperfeiçoamento do método C”
dados os engenheiros:
 Leila
 Karina
 Luciano
 Maurício

Considere as situações ilustradas pelas seguintes tabelas e diga se estão de acordo com o DER a seguir. Justifique
suas respostas.
29
Gerente
1
Gerencia
N
N
Engenheiro
Projeto
a)
b)
Projeto
Gerente
Engenheiro
“Desenvolvimento do produto A” João Pedro
Leila
“Implantação da plataforma B”
João Pedro
Luciano
“Aperfeiçoamento do método C” Ana Cláudia Maurício
“Desenvolvimento do produto A” Ana Cláudia
Leila
“Implantação da plataforma B”
João Pedro
Karina
“Implantação da plataforma B”
João Pedro
Leila
2. Dados os locais de trabalho:
 Laboratório X
 Sala Y
 Complexo Z
Projeto
Gerente
Engenheiro
“Desenvolvimento do produto A”
Elaine
Karina
“Implantação da plataforma B”
Elaine
Maurício
“Aperfeiçoamento do método C” Ana Cláudia
Luciano
“Desenvolvimento do produto A” Ana Cláudia Maurício
“Implantação da plataforma B”
Elaine
Leila
“Implantação da plataforma B”
Elaine
Karina
dados os projetos:
 “Desenvolvimento do produto A”
 “Implantação da plataforma B”
 “Aperfeiçoamento do método C”
dados os funcionários:
 Leila
 Karina
 Luciano
 Maurício

Considere as situações ilustradas pelas seguintes tabelas e diga se estão de acordo com o DER a seguir. Justifique
suas respostas.
Projeto
1
Designado
A
N
1
Local
a)
Projeto
“Desenvolvimento do produto A”
“Implantação da plataforma B”
“Aperfeiçoamento do método C”
“Desenvolvimento do produto A”
“Implantação da plataforma B”
“Implantação da plataforma B”
Funcionário
b)
Local Funcionário
Lab X
Leila
Sala Y
Luciano
Lab X Maurício
Sala Y
Leila
Lab X Maurício
Sala Y Maurício
Projeto
“Desenvolvimento do produto A”
“Implantação da plataforma B”
“Aperfeiçoamento do método C”
“Desenvolvimento do produto A”
“Aperfeiçoamento do método C”
“Implantação da plataforma B”
Local Funcionário
Lab X
Leila
Sala Y
Luciano
Lab X Maurício
Lab X
Luciano
Sala Y
Luciano
Sala Y Maurício
30
3.
dados os livros:
 “A Moreninha”
 “O Guarani”
 “Sítio do Pica-Pau Amarelo”
 “Crime do Padre Amaro”

Considere as situações ilustradas pelas seguintes tabelas e diga se estão de acordo com o DER a seguir. Justifique
suas respostas.
a)
b)
Livro
Curso
Professor
Livro
Curso
Professor
“A Moreninha”
Literatura I
Marta
“Crime do Padre Amaro”
Literatura I Laércio
“Crime do Padre Amaro”
Literatura I Laércio
“A Moreninha”
Literatura
II Miriam
“O Guarani”
Lit. Portug. Laércio
“O Guarani”
Lit. Portug. Miriam
“Sítio do Pica-Pau Amarelo” Literatura II Miriam
“Sítio do Pica-Pau Amarelo” Literatura I
Marta
“Crime do Padre Amaro” Literatura II
Marta
“Crime do Padre Amaro” Literatura II Laércio
“Sítio do Pica-Pau Amarelo” Lit. Portug.
Marta
“Sítio do Pica-Pau Amarelo” Lit. Portug. Laércio
Dados os professores:
 Laércio
 Marta
 Miriam
dados os cursos:
 Literatura I
 Literatura II
 Literatura Portuguesa
Professor
1
Usa
1
Livro
1
Curso
Algumas questões de Concursos Públicos
1) (FCC - 2008 - METRÔ-SP - Analista Treinee - Análise de Sistemas) A cardinalidade de um relacionamento
ternário, em um modelo de dados, refere-se à quantidade de ocorrências de
a) todas as três entidades somadas em conjunto.
b) cada entidade, independentemente uma das outras.
c) uma entidade em relação apenas com uma outra entidade.
d) uma entidade em relação às outras duas entidades.
e) de duas entidades somadas em relação à terceira entidade.
2) (CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas – Produção) Com relação a banco de
dados, julgue os itens a seguir.
Os registros armazenados em banco de dados podem conter, ou não, campos com valores nulos.
Certo
Errado
3) (Prova: FUMARC - 2011 - BDMG - Analista de Sistemas)
Em relação aos conceitos do modelo Entidade- Relacionamento, observe o diagrama ER abaixo e analise as
seguintes afirmativas:
31
I. O atributo Num_agencia do tipo de entidade AGENCIA é conhecido como chave primária.
II. De acordo com as restrições de participação definidas, uma entidade de BANCO obrigatoriamente deve estar
relacionada a pelo menos uma entidade de AGENCIA.
III. AGENCIA é um tipo de entidade fraca e POSSUI é um relacionamento identificador, cuja razão de
cardinalidade é 1:N.
Marque a alternativa CORRETA:
a) apenas as afirmativas I e II são verdadeiras.
b) apenas as afirmativas I e III são verdadeiras.
c) apenas as afirmativas II e III são verdadeiras.
d) todas as afirmativas são verdadeiras.
4) (Prova: FGV - 2009 - MEC - Analista de Sistemas – Especialista) O Modelo de dados é representado através de
um modelo entidade-relacionamento - modelo ER, enquanto que o – diagrama entidade-relacionamento (DER)
constitui a representação gráfica do modelo ER. No que diz respeito à simbologia utilizada, para
globalização/especialização e entidade associativa são empregados, respectivamente, os seguintes símbolos:
a)
e
b)
e
c)
d)
e)
e
e
e
5) (FUNIVERSA - 2010 - MPE-GO - Técnico de Informática) Quando se constrói um banco de dados, define-se o
modelo de entidade e relacionamento (MER), que é a representação abstrata das estruturas de dados do banco e
seus relacionamentos. Cada entidade pode se relacionar com uma ou mais entidades diferentes, resultando em
mapeamentos, por exemplo: 1:1, 1:N, N:1 ou N:M. Esses mapeamentos, com base no número de entidades às quais
outra entidade pode ser associada, denominam-se
a) cardinalidade.
b) hierarquia.
32
c) relacionamento.
d) diagrama.
e) agregação.
6) (VUNESP - 2009 - CETESB - Analista de TI - Administração de Dados)
Considere o seguinte trecho de um diagrama entidade-relacionamento, relativo a um banco de dados relacional.
No relacionamento R, a participação de E2 é chamada de
a) fraca.
b) total.
c) parcial.
d) adaptada.
e) derivada.
7) (VUNESP - 2009 - CETESB - Analista de Tecnologia da Informação - Banco de Dados)
Considere o seguinte trecho de um diagrama entidade-relacionamento relativo a um banco de dados relacional:
E1 e E2 representam, respectivamente, conjuntos de entidades
a) constantes e variáveis.
b) fortes e fracas.
c) macros e micros.
d) paralelas e ortogonais.
e) temporárias e permanentes.
33
Parte 3 - Modelo de Dados Relacional
-
O modelo de dados relacional foi introduzido por E. F. Codd, da IBM, em 1970, através de um artigo
publicado com o título “A Relational Model of Data for Large Shared Data Bases” (Communications of the
ACM, 13, no 6, 1970, 377-387).
-
A fundamentação matemática para o modelo proposto é a teoria dos conjuntos.
Conceitos do Modelo Relacional
-
O modelo de dados relacional representa os dados como uma coleção de relações.
-
Uma tabela bidimensional é a estrutura de dados mais adequada para se representar o conceito abstrato de
relação.
-
Quando uma relação é vista como uma tabela de valores, cada linha representa uma coleção de valores
relacionados que podem ser interpretados como um fato que descreve uma instância de entidade ou uma
instância de relacionamento.
Exemplo:
Estudante:
Nome
Maria
João
José
Alfredo
Código
1782
2345
5667
2156
Telefone
Endereço TelComercial CPF
233-5678 R. X, 123
null
125811728-27
432-8900 Av. H., 45
345-2356
225832729-57
345-7867
Al. R, 56
null
322311728-29
3456-9087 R. D, 67
321-7890
765817928-45
-
O nome da tabela e os nomes das colunas são usados para ajudar a interpretar o significado dos valores em
cada linha da tabela.
-
Assim, no exemplo anterior a tabela se chama estudante porque cada linha representa uma particular
entidade estudante. Os nomes das colunas: Nome, Código, Telefone, Endereço, TelComercial, CPF
especificam como devem ser interpretados os valores de cada linha, conforme a coluna em que se
encontram.
-
Na terminologia do modelo relacional:
o Cada linha é chamada de tupla.
o Cada coluna é chamada de atributo.
o A tabela é chamada de relação.
-
O número de atributos de uma relação é chamado grau da relação.
-
Assim, uma relação de grau 1 é dita unária, uma de grau 2 é dita binária, de grau 3, ternária, de grau n nária.
-
O tipo de dado que especifica o tipo dos valores que podem ocorrer para um atributo da relação é chamado
de domínio.
34
Exemplo:
Conjunto de
todos os
possíveis
nomes de pessoas
Nome
Maria
João Nunes Silva
José
Alfredo
Conjunto
de todos
os
possíveis
códigos
de aluno
Conjunto
de todos os
possíveis
números de
telefone
Código
1782
2345
5667
2156
Telefone
Endereço TelComercial CPF
233-5678 R. X, 123
null
125811728-27
432-8900 Av. H., 45
345-2356
225832729-57
345-7867
Al. R, 56
null
322311728-29
3456-9087 R. D, 67
321-7890
765817928-45
Conjunto
de todos os
possíveis
endereços
Conjunto
de todos
possíveis
números
telefone
Conjunto de todos
os os
possíveis
números de CPF
de
Domínios
Tuplas
Atributos
Grau = 6
-
Uma relação-esquema é denotada por R(A1, A2, A3, ..., An) aonde A1, A2, A3, ..., An são os nomes dos
atributos e R o nome da relação. Uma relação esquema é utilizada para descrever uma relação.
Exemplo:
Estudante(Nome, Código, Endereço, Telefone, TelComercial, CPF)
Atributos Chave de uma Relação
-
Uma relação é definida como um conjunto de tuplas.
-
Por definição, todos os elementos de um conjunto são distintos. Assim, todas as tuplas de uma relação
também são distintas.
-
Isto significa que nenhuma tupla pode ter a mesma combinação de valores para todos os seus atributos.
-
Uma super-chave de uma relação é um subconjunto de atributos de uma relação com a propriedade de
que não existam duas tuplas que tenham a mesma combinação de valores para esses atributos.
-
Toda relação tem ao menos uma super-chave que é o conjunto de todos os seus atributos.
-
Uma chave de uma relação R é uma super-chave de R com a propriedade adicional de não se poder
remover qualquer atributo da mesma, sem que ela deixe de ser super-chave de R.
-
Assim, uma chave é uma super-chave mínima.
Exemplo:
- Considerando a relação-esquema:
Estudante(Nome, Código, Endereço, Telefone, TelComercial, CPF)
-
O conjunto de atributos {CPF} é uma super-chave de Estudante, porque sabe-se que nenhum estudante irá
ter o mesmo valor para CPF de outro estudante.
O conjunto de atributos {CPF} é também uma chave, pois não se pode remover nenhum atributo do
conjunto.
35
-
-
-
Qualquer conjunto de atributos que inclua CPF, como por exemplo {Nome, Endereço, CPF} também será
uma super-chave.
No entanto, {Nome, Endereço, CPF} não é uma chave porque removendo Nome ou Endereço, o conjunto
resultante ainda será uma super-chave.
O valor de um atributo-chave pode ser usado para identificar unicamente uma tupla em uma relação. Assim,
o valor 225832729-57 identifica unicamente a tupla correspondente à ‘João Nunes Silva’ na relação
Estudante.
Por outro lado, o atributo Nome na relação Estudante não pode ser tomado como uma chave, pois nada
garante que não existam homônimos.
-
Em geral, uma relação-esquema pode ter mais de uma chave. Nestes casos, cada chave é chamada de
chave-candidata. Por exemplo, na relação-esquema Estudante tanto CPF como Código (número de
identificação do Estudante na Escola) seriam duas chaves-candidatas.
-
Qualquer uma das chaves-candidatas pode ser escolhida como chave-primária da relação.
-
Embora a escolha da chave-primária seja arbitrária, é sempre melhor escolher uma chave-primária com o
menor número de atributos.
Propriedades de Tabelas
1. Não existem tuplas duplicadas:
- Um corolário importante deste fato é que há sempre uma chave-primária: como tuplas são únicas, pelo
menos a combinação de todos os atributos da relação tem a propriedade de unicidade.
2. Não há ordem entre os atributos:
- O rearranjo de colunas não tem nenhum efeito sobre a significação dos dados em uma tabela relacional.
Nome
Maria
João
José
Alfredo
Código
1782
2345
5667
2156
Telefone
Endereço TelComercial CPF
233-5678 R. X, 123
null
125811728-27
432-8900 Av. H., 45
345-2356
225832729-57
345-7867
Al. R, 56
null
322311728-29
3456-9087 R. D, 67
321-7890
765817928-45
é idêntica a :
Código
1782
2345
5667
2156
Nome
Maria
João
José
Alfredo
CPF
TelComercial
125811728-27
Null
225832729-57
345-2356
322311728-29
Null
765817928-45
321-7890
Telefone
Endereço
233-5678
R. X, 123
432-8900 Av. H., 45
345-7867
Al. R, 56
3456-9087
R. D, 67
3. Não há ordem entre tuplas:
- Um rearranjo da posição das tuplas em uma tabela relacional não altera a significação dos dados.
- Trata-se de uma conseqüência do fato de que uma relação é um conjunto matemático e conjuntos não são
ordenados.
Nome Código
Telefone
Endereço TelComercial CPF
Maria
1782
233-5678 R. X, 123
null
125811728-27
João
2345
432-8900 Av. H., 45
345-2356
225832729-57
José
5667
345-7867
Al. R, 56
null
322311728-29
Alfredo
2156
3456-9087 R. D, 67
321-7890
765817928-45
36
é idêntica a:
Nome
João
Maria
Alfredo
José
Código
2345
1782
2156
5667
Telefone
Endereço TelComercial CPF
432-8900 Av. H., 45
345-2356
225832729-57
233-5678 R. X, 123
null
125811728-27
3456-9087 R. D, 67
321-7890
765817928-45
345-7867
Al. R, 56
null
322311728-29
4. Todos os valores dos atributos são atômicos:
- Cada célula (posição linha-coluna) de uma tabela relacional pode conter apenas um valor de dado.
-
Nome
Maria
Código
1782
João
José
Alfredo
2345
5667
2156
Telefone
Endereço TelComercial CPF
233-5678 R. X, 123
null
125811728-27
342-7634
467-9056
432-8900 Av. H., 45
345-2356
225832729-57
345-7867
Al. R, 56
null
322311728-29
3456-9087 R. D, 67
321-7890
765817928-45
Implica em dizer que todas as relações no modelo relacional têm que estar na sua primeira foma normal.
Mapeamento do Modelo Entidade-Relacionamento para o Modelo de Dados Relacional
-
O passo seguinte à modelagem dos dados usando o Modelo Entidade-Relacionamento é o mapeamento do
Diagrama Entidade-Relacionamento para um modelo de dados de implementação. No caso, estaremos
tratando do Modelo de Dados Relacional.
-
As recomendações de mapeamento baseiam-se na análise da cardinalidade dos relacionamentos. Com base
nesta análise, algumas alternativas de mapeamento podem ser adotadas:
1. Entidades relacionadas podem ser fundidas em uma única tabela.
2. Tabelas podem ser criadas para o relacionamento.
3. Chaves estrangeiras podem ser criadas em tabelas a fim de representar adequadamente o relacionamento.
-
Vamos descrever todos os passos necessários para mapear o Diagrama Entidade-Relacionamento de
Companhia para o Modelo de Dados Relacional.
PASSO 1:
- Identificar no DER todas as entidades regulares (não fracas e não subtipos).
- Para cada entidade regular E criar uma relação-esquema R que inclua todos os atributos simples de E e
decidir aqui se serão armazenados ou não, separadamente, os componentes simples dos atributos
compostos. Não considerar aqui os atributos derivados, nem os atributos multivalorados, que serão tratados
em um passo subsequente.
- Escolher um dos atributos chave de E como sendo a chave-primária de R.
- As chaves-primárias das relações devem aparecer grifadas.
No banco de dados Companhia identificamos as entidades regulares: Funcionário,
Departamento e Projeto.
- As relações-esquema correspondentes seriam:
Funcionario(CPF, NSS, Nome, DataNasc, Endereço, Sexo, Salario)
Departamento(DNome, DNumero, DLocalizacao)
Projeto(PNome, PNumero, PLocalizacao)
-
37
- Foram escolhidas as chaves-primárias CPF para Funcionário, DNumero para Departamento e PNumero
para Projeto.
-
Os atributos decorrentes de relacionamentos serão adicionados em passos subsequentes.
PASSO 2:
- Identificar no DER todas as entidades fracas.
- Para cada entidade fraca do DER criar uma relação-esquema R e incluir nela todos os atributos simples e
os componentes simples dos atributos compostos (tomar decisão se vai armazenar separadamente os
componentes) da entidade. Não considerar aqui os atributos derivados, nem os atributos multivalorados,
que serão tratados em um passo subsequente.
- Incluir na relação R a chave-primária da relação que corresponde à entidade proprietária da
identificação.
- A chave-primária de R fica sendo formada pela combinação da chave-primária da entidade proprietária da
identificação com a chave parcial da entidade fraca. Trata-se assim de uma chave-primária composta.
-
No banco de dados Companhia identificamos a entidade fraca Dependente. A
relação-esquema correspondente fica:
Dependente(CPFFunc, NomeDependente, Sexo, DataNasc, Relacao)
-
CPFFunc é chamado, na relação Dependente, de chave-estrangeira, visto que tem
o mesmo domínio da chave-primária CPF da relação Funcionário.
Atenção:
Neste segundo passo, surge pela primeira vez, o conceito de chave-estrangeira.
Quando se inclui na relação R um atributo que referencia a chave-primária da relação que corresponde à
entidade proprietária da identificação, tem-se aí uma chave estrangeira.
Uma chave estrangeira é uma coluna ou uma combinação de colunas, cujos valores aparecem necessariamente
na chave primária de uma outra (ou da mesma) tabela.
A chave estrangeira é o mecanismo que permite a implementação de relacionamentos em um banco de dados
relacional.
A presença de uma chave estrangeira sempre denuncia a existência de um relacionamento entre a tabela onde
ela é inserida e a tabela cuja chave-primária ela referencia.
A integridade referencial é um conceito intimamente associado ao de chave-estrangeira. Trata-se de uma
restrição que define que os valores dos campos que aparecem em uma chave estrangeira devem constar
necessariamente na coluna que é a chave primária da tabela referenciada.
PASSO 3:
- Identificar no DER todos os relacionamentos binários 1:1.
- Para cada relacionamento binário 1:1 do DER, escolher uma das relações que participam do
relacionamento (aquela que possua participação total no relacionamento) e incluir nela como chaveestrangeira, a chave primária da outra relação participante.
- Incluir nesta relação, além disso, todos os atributos simples e os componentes simples de atributos
compostos que estão associados ao relacionamento.
-
No banco de dados Companhia identificamos o relacionamento 1:1 Gerencia entre
as entidades Funcionario e Departamento.
Como a participação de Departamento no relacionamento é total (pois todo
departamento tem um gerente), inclui-se na relação-esquema Departamento como
38
-
chave-estrangeira, a chave-primária da relação-esquema Funcionario. Na relação
Departamento este atributo recebe o nome de CPFGer.
Além disso, inclui-se também na relação Departamento o atributo simples
DataInicio, renomeando-o para DataInicGer.
Departamento(DNome, DNumero, DLocalizacao, CPFGer, DataInicGer)
-
Uma outra alternativa para o mapeamento de um relacionamento 1:1 seria unir as duas entidades e o
relacionamento em uma única relação. Isto é particularmente apropriado quando ambas as entidades
possuem participação total e quando as entidades não participam em quaisquer outros relacionamentos.
Vejamos exemplo a seguir:
1
Conferência
Sigla
1
Organização
Nome
ComissaoOrganizadora
E-Mail
Codigo
DataInic
Conferencia(Sigla, Nome, DataIniOrg, CodComissao, EMailComissao)
-
Por outro lado, quando ambas as entidades possuem participação parcial e participam em outros
relacionamentos, deve-se criar uma relação à parte para representar o relacionamento. Nesta relaçãoesquema devem ser inclusas as chaves primárias de cada uma das relações que representam as entidades
participantes, bem como quaisquer atributos simples e componentes simples dos atributos compostos
associados ao relacionamento. A chave primária desta nova relação poderá ser a chave de qualquer uma
das relações que representam as entidades participantes. Vejamos um exemplo:
Homem
CPF
1
Nome
Casamento
1
Mulher
CPF
Data
Nome
Homem(CPF, Nome)
Mulher(CPF, Nome)
Casamento(CPFH, CPFM, Data)
PASSO 4:
- Identificar no DER todos os relacionamentos binários 1:N.
- Para cada relacionamento 1:N, identificar a entidade que participa do lado N no relacionamento.
- Se a participação desta entidade no relacionamento for total, incluir na relação-esquema que representa
esta entidade, como chave-estrangeira, a chave-primária da entidade que participa do lado 1 no
relacionamento.
- Incluir também nesta relação quaisquer atributos simples e os componentes simples de atributos compostos
que estejam associados ao relacionamento.
-
No banco de dados Companhia,
Funcionário e Departamento.
temos
o
relacionamento
Trabalha-Para
entre
-
Neste relacionamento, cada funcionário está relacionado a apenas um
Departamento e a participação de Funcionario no relacionamento é total. Sendo
assim, incluímos na relação-esquema Funcionario como chave-estrangeira, a
chave-primária de Departamento, com o nome NDepto.
39
-
O relacionamento Trabalha-Para não possui nenhum atributo a si associado.
Funcionario(CPF, NSS, Nome, DataNasc, Endereco, Sexo, Salario, NDpto)
-
-
No banco de dados Companhia, temos ainda o relacionamento Supervisiona do qual
participa a entidade Funcionário ora no papel de supervisor, ora no papel de
supervisionado.
Inclui-se, então, na relação-esquema Funcionario como chave estrangeira, a
chave-primária de Funcionario, com o nome de CPFSuper.
Funcionario(CPF, NSS, Nome, DataNasc, Endereco, Sexo, Salario, NDpto, CPFSuper)
- Temos ainda o relacionamento Controla entre Departamento e Projeto. Neste
relacionamento, cada Projeto está relacionado a apenas um Departamento. Desta
forma, incluímos na relação-esquema Projeto como chave-estrangeira, a chaveprimária de Departamento, com o nome de NDpto.
- O relacionamento Controla não possui nenhum atributo a si associado.
Projeto(PNome, PNumero, PLocalizacao, NDpto)
- Por outro lado, se a entidade que participa do lado N do relacionamento tiver participação parcial, então o
relacionamento deve ser representado por uma relação-esquema à parte, contendo as chaves primárias das
relações que representam ambas as entidades participantes, bem como quaisquer atributos simples e os
componentes simples de atributos compostos que estejam associados ao relacionamento. A chave primária desta
nova relação será a chave primária da relação que representa a entidade que participa do lado N do
relacionamento. Vejamos exemplo a seguir:
Ano
Automovel
Chassi
N
Modelo
Posse
DataCompra
1
Cliente
CPF
Nome
Cliente(CPF, Nome)
Automovel(Chassi, Modelo, Ano)
Posse(Chassi,CPF, DataCompra)
PASSO 5:
- Identificar no DER todos os relacionamentos binários N:N.
- Para cada relacionamento binário N:N, criar uma relação-esquema para representar o relacionamento.
- Incluir como chaves estrangeiras nesta relação as chaves primárias das duas entidades participantes do
relacionamento. A combinação destas formará a chave-primária da relação que representa o
relacionamento.
- Incluir na relação também quaisquer atributos simples e os componentes simples dos atributos
compostos que estejam associados ao relacionamento.
-
-
No banco de dados Companhia identificamos o relacionamento Trabalha-Em entre
Funcionario e Projeto.
Criamos então, a relação TrabalhaEm, aonde são incluídas a chave primária de
Funcionario, com o nome CPFFunc e a chave primária de Projeto com o nome
ProjNum.
Também incluímos o atributo Horas, pertencente ao relacionamento TrabalhaEm.
TrabalhaEm(CPFFunc, ProjNum, Horas)
40
-
Note-se que a chave-primária da relação TrabalhaEm é a combinação das chavesestrangeiras CPFFunc e ProjNum.
PASSO 6:
- Identificar no DER os atributos multivalorados com as respectivas entidades (ou relacionamentos) a que
pertencem.
- Para cada atributo multivalorado, criar uma nova relação-esquema, a qual deve incluir a chave primária K
da relação que representa a entidade (ou relacionamento) que tem A como atributo. Incluir também o
próprio atributo, se simples, ou os componentes simples do atributo, se composto.
- A chave primária desta relação será a combinação de K e A.
-
Suponhamos que, no banco de dados Companhia, Funcionario possua o atributo
Telefone, considerado como multivalorado.
Criamos então, a relação-esquema Telefone, aonde são incluídas a chave
primária de Funcionario, e o atributo Fone.
Telefone(CPF, Fone)
PASSO 7:
- Identificar no DER as entidades que sejam subtipos.
- Neste caso, há três alternativas:
1. Criar apenas uma relação-esquema para o supertipo, com a sua chave-primária e todos os atributos
que são comuns a todos os subtipos, bem como todos os atributos específicos de cada um dos subtipos.
2. Criar uma relação-esquema para o supertipo, com a sua chave-primária e todos os atributos que são
comuns a todos os subtipos.
Criar uma relação-esquema para cada um dos subtipos, contendo a mesma chave primária do
supertipo, juntamente com quaisquer atributos específicos de cada um dos subtipos.
3. Criar relações-esquema separadas para cada um dos subtipos, todas com a mesma chave primária e
contendo os atributos que lhe são específicos, bem como os atributos que são comuns a todos.
-
No banco de dados Companhia não há nenhum exemplo de ocorrência de subtipos.
Assim, para ilustrar, consideremos o caso a seguir:
Servidor
CPF
Nome
Titulação
Função
Funcionário
Professor
Categoria
- Na alternativa 1, as entidades seriam mapeadas para:
Servidor(CPF, Nome, Tipo, Funcao, Titulacao, Categoria)
- Na alternativa 2, as entidades seriam mapeadas para:
Servidor(CPF, Nome)
Funcionario(CPF, Funcao), CPF FK referência Servidor
Professor(CPF, Titulacao, Categoria) , CPF FK referência Servidor
41
- Na alternativa 3, as entidades seriam mapeadas para:
Funcionario(CPF, Nome, Funcao)
Professor(CPF, Nome, Titulacao, Categoria)
Deve-se notar que a alternativa 3 não se aplica a especializações parciais.
PASSO 8:
- Identificar no DER todos os relacionamentos ternários.
- Para cada relacionamento ternário, criar uma nova relação para representá-lo.
- Incluir como chaves-estrangeiras nesta relação, as chaves-primárias das relações que representam as
entidades participantes.
- Incluir, também, quaisquer atributos simples e componentes simples de atributos compostos que
pertençam ao relacionamento.
- A chave-primária da relação depende da razão de cardinalidade do relacionamento:
 Se N:N:N - A chave-primária consiste na combinação das chaves-primárias das relações que
representam as três entidades participantes.
 Se 1:1:1 – A chave-primária pode ser tomada dentre qualquer combinação de duas das três
chaves-primárias das relações que representam as entidades participantes.
 Se 1:N:N – A chave-primária será dada pela combinação das chaves-primárias das relações que
representam as entidades que participam dos dois lados “muitos”.
 Se 1:1:N – A chave-primária pode ser tomada como sendo a combinação da chave da relação que
representa a entidade que participa do lado “muitos” com qualquer uma das chaves das relações
que representam as entidades que participam do lado 1.
-
As situações descritas acima estão ilustradas a seguir:
Relacionamento N:N:N
CP1
E1
Este relacionamento deve ser mapeado
para a relação R, onde a chave-primária
é a combinação das 3 chaves
estrangeiras CP1, CP2 e CP3:
E1(CP1, ...)
E2(CP2, ...)
E3(CP3, ...)
R(CP1, CP2, CP3, Atrib)
N
Atrib
R
N
E2
CP2
N
E3
CP3
42
Relacionamento 1:N:N
CP1
E1
Este relacionamento deve ser mapeado
para a relação R, onde a chave-primária
é a combinação das 2 chaves
estrangeiras CP2 e CP3:
E1(CP1, ...)
E2(CP2, ...)
E3(CP3, ...)
R(CP1, CP2, CP3, Atrib)
1
Atrib
R
N
N
E2
E3
CP3
CP2
Relacionamento 1:1:N
CP1
Este relacionamento deve ser mapeado
para a relação R, onde a chave-primária
pode ser formada pela combinação das
chaves estrangeiras CP1 e CP2 ou CP1
e CP3:
E1(CP1, ...)
E2(CP2, ...)
E3(CP3, ...)
R(CP1, CP2, CP3, Atrib) ou
R(CP1, CP2, CP3, Atrib)
E1
N
Atrib
R
1
1
E2
E3
CP3
CP2
Relacionamento 1:1:1
CP1
E1
1
Atrib
R
1
E2
CP2
1
E3
CP3
Este relacionamento deve ser mapeado
para a relação R, onde a chave-primária
pode ser formada pela combinação das
chaves estrangeiras CP1 e CP2 ou CP1
e CP3 ou CP2 e CP3:
E1(CP1, ...)
E2(CP2, ...)
E3(CP3, ...)
R(CP1, CP2, CP3, Atrib) ou
R(CP1, CP2, CP3, Atrib) ou
R(CP1, CP2, CP3, Atrib)
43
PASSO 9:
- Identificar no DER todos os entidades associativas.
- Fazer o mapeamento do relacionamento entre a entidade associativa e uma outra entidade qualquer,
seguindo as mesmas recomendações já vistas anteriormente para os relacionamentos em função de sua
cardinalidade.
No banco de dados Companhia não há nenhum exemplo de ocorrência de entidades
associativas. Assim, para ilustrar, consideremos o caso a seguir em que há
sempre um tutor acompanhando o desempenho de cada aluno em cada disciplina que
ele cursa.
RA
Aluno
Nome
N
N
Matriculado
Matriculado
Codigo
Disciplina
Nome
N
Media
Freq
Tutoria
1
Codigo
Tutor
Aluno(RA, Nome)
Nome
Disciplina(Codigo, NomeDisc)
Tutor(Codigo, NomeTutor)
Matricula(RA,
CodDisc,
Media,
Freq,
Tutor(Codigo)
CodTutor),
CodTutor
FK
referência
Relações-Esquema da Base de Dados Companhia
Funcionario(CPF, NSS, Nome, DataNasc, Endereco, Sexo, Salario, NDpto, CPFSuper)
Departamento(DNome, DNumero, DLocalizacao, CPFGer, DataInicGer)
Projeto(PNome, PNumero, PLocalizacao, NDpto)
Dependente(CPFFunc, NomeDependente, Sexo, DataNasc, Relacao)
TrabalhaEm(CPFFunc, ProjNum, Horas)
-
Note-se que o atributo DNumero em Departamento e NDpto em Funcionario referem-se ao mesmo conceito
do mundo real, que é o número dado a um departamento.
Isto significa que é possível dar nomes distintos a atributos que representam um mesmo conceito do mundo
real.
44
-
Da mesma forma, é possível que atributos que representam conceitos diferentes tenham o mesmo nome,
desde que pertençam a relações diferentes. Por exemplo, poderíamos ter usado Nome, ao invés de PNome e
DNome nas relações-esquema Projeto e Departamento, respectivamente.
Uma possível convenção para dar nomes a tabelas e campos em bancos de dados:
Tabela => TB_<NOME_TABELA>
Chaves Primarias => <NOME_ABREVIADO>_PK
Chaves Unicas => <NOME_ABREVIADO>_UK
Chaves Estrangeiras => <NOME_CAMPO_TABELA_PAI>_FK
Exercícios sobre Modelo Relacional
1. Fazer o mapeamento para o Modelo Relacional dos DER desenvolvidos no grupo de exercícios intitulado
Exercícios sobre Modelo Entidade Relacionamento – Parte 2.
2. Faça o mapeamento do DER abaixo para o modelo relacional.
(0,n)
Música
Criação
(0,n)
(1,n)
Artista
DataNasc
(0,n)
NomeArtistico
Titulo
Duração
Gravação
Data
(1,n)
Compõe
Faixa
(0,n)
Codigo
CD
Titulo
Algumas Questões de Concursos Públicos
1) (FUNIVERSA - 2010 - MPE-GO - Técnico de Informática) Um banco de dados relacional é baseado em tabelas
nas quais é possível armazenar, manipular e recuperar dados. Para se recuperarem informações de uma linha de
uma tabela, bem como para inter-relacionar informações entre tabelas diferentes em um banco de dados relacional,
utilizam-se as chaves. Assinale a alternativa que apresenta o nome de três tipos de chaves utilizadas em um banco
de dados relacional.
a) primária, secundária e terciária.
b) pública, privada e simétrica.
c) simétrica, assimétrica e distribuída.
d) primária, alternativa e estrangeira.
e) global, local e universal.
45
2) (CESGRANRIO - 2011 - TRANSPETRO - Analista de Sistemas Júnior) Considere o diagrama entidaderelacionamento a seguir, que expressa um modelo conceitual de dados. Nesse modelo, pode-se ler que projetos
produzem peças, que pessoas trabalham em projetos e que pessoas coordenam outras pessoas. As participações e
cardinalidades correspondentes a cada relacionamento estão indicadas no próprio diagrama.
Suponha que, durante o mapeamento do modelo conceitual acima para o modelo relacional, o projetista de banco
de dados responsável pela tarefa decidiu mapear cada entidade para uma relação distinta. Ele também decidiu criar
o mínimo necessário de relações nesse mapeamento. Sendo assim, as quantidades de chaves primárias e de chaves
estrangeiras criadas nesse mapeamento são, respectivamente,
a) 3 e 4
b) 5 e 5
c) 4 e 4
d) 3 e 5
e) 5 e 4
3) (FCC - 2010 - TRE-AM - Analista Judiciário - Tecnologia da Informação) Na modelagem de dados, o conjunto
de valores possíveis de um atributo de dados é chamado de
a) cardinalidade.
b) tupla.
c) domínio.
d) entidade.
e) instância.
4) (FUMARC - 2011 - BDMG - Analista de Sistemas) De acordo com o diagrama do esquema do banco de dados
relacional abaixo, responda a questão.
De acordo com o diagrama do esquema de banco de dados relacional, analise as seguintes afirmativas.
I. Na relação DEPOSITANTE, o atributo id_cliente é chave estrangeira e faz parte da chave primária juntamente
com o atributo num_conta.
II. Na relação EMPRESTIMO, o atributo num_conta é chave primária.
III. Na relação AGENCIA, o atributo id_agencia é chave primária.
Marque a alternativa CORRETA:
46
a) apenas as afirmativas I e II são verdadeiras.
b) apenas as afirmativas I e III são verdadeiras.
c) apenas as afirmativas II e III são verdadeiras.
d) todas as afirmativas são verdadeiras.
5) (FCC - 2011 - NOSSA CAIXA DESENVOLVIMENTO - Analista de Sistemas)
Cada analista trabalhando em um projeto tem um e somente um gerente, mas cada gerente de um projeto pode
gerenciar muitos analistas e cada gerente de um analista pode gerenciar esse analista em mais de um projeto.
A passagem do modelo de dados conceitual para o modelo lógico relacional normalizado derivará em
a) duas tabelas representando: Gerente-Gerencia e Analista-Projeto.
b) duas tabelas representando: Gerente-Analista e Analista-Projeto.
c) três tabelas representando: Gerente-Analista, Gerente-Gerencia e Analista-Projeto.
d) três tabelas representando: Gerente-Projeto, Analista-Projeto e Gerente-Analista.
e) quatro tabelas representando: Gerente, Gerencia, Analista e Projeto.
6) (FCC - 2009 - TJ-PA - Analista Judiciário - Análise de Sistemas – Desenvolvimento) Considere o
relacionamento Funcionário é gerente de Projeto (N:M). Sem a necessidade de manutenção de dados históricos, a
condição de que projetos iniciam em datas diferentes e que gerentes nem sempre começam a gerenciar o projeto a
partir de sua data de início, a indicação da data a partir da qual funcionários assumem a função de gerente deverá
ser
a) um atributo não chave de Funcionário.
b) um atributo não chave de Projeto.
c) a chave primária de Funcionário.
d) a chave primária de Projeto e uma estrangeira do relacionamento.
e) um atributo do relacionamento.
47
Parte 4 - Normalização
- Motivação: Ainda há muitos sistemas que funcionam à moda antiga, isto é, são sistemas de processamento de
arquivos. Foram desenvolvidos ao longo dos últimos 40 anos e não utilizam bancos de dados relacionais. São
conhecidos como sistemas legados. Podemos nos deparar com o desafio de ter que adaptá-los à abordagem de
banco de dados relacionais.
- Assim, a motivação do estudo dos processos de normalização é a engenharia reversa de arquivos, ou seja, obter
um modelo lógico relacional a partir de um banco de dados não relacional.
- A normalização é a base teórica para este processo. Trata-se de uma técnica que objetiva eliminar redundância
de dados de arquivos.
- A redundância de dados é responsável por várias anomalias, as chamadas anomalias de inclusão, de exclusão e de
deleção. A normalização dos dados elimina tais anomalias.
Documento Exemplo:
Relatório de Alocação de Projeto
Código do Projeto: LSC001
Tipo: Novo Desenvolvimento
Descrição: Sistema de Estoque
Código do Empregado
Nome
2146
3145
6126
1214
8191
João
Sílvio
José
Carlos
Mário
Código do Projeto: PAG02
Tipo: Manutenção
Descrição: Sistema de RH
Código do Empregado
Nome
8191
4112
6126
Mário
João
José
Categoria Funcional
Salário
A1
A2
B1
A2
A1
4
6
9
6
4
Categoria Funcional
Salário
A1
A2
B1
4
6
9
Data de Início do
Projeto
01-11-1991
02-10-1991
03-10-1992
01-11-1991
01-11-1992
Tempo Alocado ao
Projeto
24
24
18
18
12
Data de Início do
Projeto
01-05-1993
04-01-1991
01-11-1992
Tempo Alocado ao
Projeto
12
24
12
Representação na forma de tabela não normalizada:
Emp
CodProj
Tipo
Descr
CodEmp
Nome
Cat
Sal
LSC001
Novo
Sistema de
2146
João
A1
4
Desenv.
Estoque
3145
Sílvio
A2
6
6126
José
B1
9
1214
Carlos
A2
6
8191
Mário
A1
4
PAG02
Manutenção
Sistema de
8191
Mário
A1
4
RH
4112
João
A2
6
6126
José
B1
9
Esquema não normalizado:
Proj(CodProj, Tipo, Descr,
(CodEmp, Nome, Cat, Sal, DataIni, TempAl) )
DataIni
01-11-1991
02-10-1991
03-10-1992
01-11-1991
01-11-1992
01-05-1993
04-01-1991
01-11-1992
TempAl
24
24
18
18
12
12
24
12
48
Primeira Forma Normal
Primeira Forma Normal – 1FN
Uma tabela está na primeira forma normal quando ela não contém
tabelas aninhadas
- Transformação de um esquema NN em um esquema na 1FN:
Constrói-se uma tabela para cada tabela aninhada (Decomposição em tabelas).
Cria-se uma tabela referente a própria tabela que está sendo normalizada e uma tabela para cada tabela
aninhada.
No exemplo “Alocação de Projeto” o esquema resultante seria o seguinte:
Proj(CodProj, Tipo, Descr)
ProjEmp(CodProj, CodEmp, Nome, Cat, Sal, DataIni, TempAl)
Na decomposição de tabelas, a passagem à 1FN segue os seguintes passos:
i. É criada uma tabela na 1FN referente à tabela NN que contenha apenas as colunas que não pertençam à
tabelas aninhadas.
A chave primária desta tabela é idêntica à da tabela não normalizada.
ii. Para cada tabela aninhada, é criada uma tabela na 1FN composta pelas seguintes colunas:
 Chave primária de cada uma das tabelas na qual a tabela em questão está aninhada.
 As colunas da própria tabela aninhada.
iii. São definidas as chaves primárias das tabelas na 1FN correspondentes às tabelas aninhadas.
Para melhor entender como se definem as chaves, vemos a seguir o conteúdo das tabelas na 1FN do
exemplo “Alocação de Projeto”:
Proj:
CodProj
LSC001
PAG02
Tipo
Novo Desenv.
Manutenção
Descr
Sistema de Estoque
Sistema de RH
ProjEmp:
CodProj
LSC001
LSC001
LSC001
LSC001
LSC001
PAG02
PAG02
PAG02
CodEmp
2146
3145
6126
1214
8191
8191
4112
6126
Nome
João
Sílvio
José
Carlos
Mário
Mário
João
José
Cat
A1
A2
B1
A2
A1
A1
A2
B1
Sal
4
6
9
6
4
4
6
9
DataIni
01-11-1991
02-10-1991
03-10-1992
01-11-1991
01-11-1992
01-05-1993
04-01-1991
01-11-1992
TempAl
24
24
18
18
12
12
24
12
- Note-se que a chave primária da tabela ProjEmp precisa ser composta pelas colunas CodProj e CodEmp, porque o
mesmo empregado pode trabalhar em múltiplos projetos. Assim, é preciso utilizar o código do projeto para se fazer
distinção entre as múltiplas linhas em que consta o mesmo empregado.
Agora, com as chaves primárias definidas, temos:
Proj(CodProj, Tipo, Descr)
ProjEmp(CodProj, CodEmp, Nome, Cat, Sal, DataIni, TempAl)
49
Atenção: A chave primária de uma tabela na 1FN nem sempre é a concatenação das chaves primárias das colunas
chaves primárias na forma NN.
Exemplo:
A tabela não normalizada cujo esquema é exibido a seguir:
Arq-Candidatos(Cod_Curso, Nome_Curso, Numero_Vagas_Curso,
(Cod_Cand, Nome_Cand, Nota_Cand))
representa um arquivo que armazena informações sobre um concurso vestibular. O arquivo contém um registro
para cada curso, com código, nome e número de vagas do curso. Além disso, para cada curso há uma lista dos
candidatos aprovados no mesmo. Supõe-se que cada candidato tenha sido aprovado em um curso somente.
A passagem à 1FN gera as tabelas abaixo:
Cursos(Cod_Curso, Nome_Curso, Numero_Vagas_Curso)
Candidatos(Cod_Curso, Cod_Cand, Nome_Cand, Nota_Cand)
Dependência Funcional
- Em uma tabela relacional, diz-se que uma coluna C2 depende funcionalmente de uma coluna C1 (ou que a coluna
C1 determina a coluna C2) quando, em todas as linhas da tabela, para cada valor de C1 que aparece na tabela,
aparece sempre o mesmo valor de C2.
Exemplo:
...
Código
E1
E3
E1
E2
E3
E2
E1
...
Salário
1000,00
1500,00
1000,00
800,00
1500,00
800,00
1000,00
...
Observa-se que a coluna Salário depende funcionalmente da coluna Código, ou a coluna Código determina a
coluna Salário.
Para denotar esta dependência funcional usamos:
Código  Salário
Exemplo:
Dependências Funcionais:
A
Y
Z
Y
Y
Z
Z
X
X
X
Y
Z
X
Z
B
5
2
6
5
2
4
10
12
10
6
4
12
2
(A,B)  C;
AD
C
1
6
7
1
6
2
5
3
5
7
2
3
6
D
20
15
20
20
15
15
18
18
18
20
15
18
15
Segunda Forma Normal
Segunda Forma Normal – 2FN
Uma tabela está na segunda forma normal quando, além de estar na
1FN, não contém dependências parciais.
50
Dependência Parcial
Uma dependência funcional parcial ocorre quando uma coluna
depende apenas de parte de uma chave primária composta.
-
A passagem para a 2FN visa eliminar um certo tipo de redundância de dados.
Para exemplificar, na tabela ProjEmp os dados referentes a empregados (Nome, Cat e Sal) aparecem várias
vezes repetidos para os empregados que trabalham em mais de um projeto.
-
Uma tabela que não se encontre na 2FN possui dependências funcionais parciais, ou seja, contém colunas não
chave que dependem apenas de uma parte da chave primária.
-
Obviamente que se uma tabela está na 1FN e possui apenas uma coluna como chave primária (chave primária
simples), então ela não conterá dependências parciais. Sendo assim, ela também já está na 2FN. É o caso da
tabela Proj.
-
A tabela ProjEmp possui chave primária composta. Abaixo, ilustra-se suas dependências funcionais:
ProjEmp( CodProj, CodEmp, Nome, Cat, Sal, DataIni, TempAl)
- Para passar a tabela ProjEmp para a 2FN (ou seja, eliminar as dependências parciais) é necessário dividir a
mesma em duas tabelas com o seguinte esquema:
ProjEmp(CodProj, CodEmp, DataIni, TempAl)
Emp(CodEmp, Nome, Cat, Sal)
-
Assim, o modelo relacional correspondente ao arquivo em questão, na 2FN fica:
Proj(CodProj, Tipo, Descr)
ProjEmp(CodProj, CodEmp, DataIni, TempAl)
Emp(CodEmp, Nome, Cat, Sal)
- O conteúdo das tabelas é exibido a seguir:
Proj:
CodProj
LSC001
PAG02
Tipo
Novo Desenv.
Manutenção
Descr
Sistema de Estoque
Sistema de RH
ProjEmp:
CodProj
LSC001
LSC001
LSC001
LSC001
LSC001
CodEmp
2146
3145
6126
1214
8191
DataIni
01-11-1991
02-10-1991
03-10-1992
01-11-1991
01-11-1992
TempAl
24
24
18
18
12
51
PAG02
PAG02
PAG02
8191
4112
6126
01-05-1993
04-01-1991
01-11-1992
12
24
12
Emp:
CodEmp
2146
3145
6126
1214
8191
4112
Nome
João
Sílvio
José
Carlos
Mário
João
Cat
A1
A2
B1
A2
A1
A2
Sal
4
6
9
6
4
6
- Passos a serem seguidos no processo de passagem da 1FN para a 2FN:
1. Copiar para a 2FN as tabelas que tenham chave primária simples ou que não tenham colunas além da chave.
Ex: Tabela Proj.
2. Para cada tabela com chave primária composta e com pelo menos uma coluna não chave (Ex: Tabela
ProjEmp):
 Criar na 2FN uma tabela com as chaves primárias da tabela na 1FN (trata-se da tabela ProjEmp na 2FN);
 Para cada coluna não chave questionar: A coluna depende de toda a chave ou de apenas parte dela?
 SIM: Depende de toda a chave (Caso das colunas DataIni e TempAl):
 Criar a coluna correspondente na tabela com a chave completa na 2FN (Colunas DataIni e TempAl
da tabela ProjEmp na 2FN).
 NÃO: Depende apenas de parte da chave (Caso das colunas Nome, Sal e Cat):
 Criar, caso não exista ainda, uma tabela na 2FN que tenha como chave primária a parte da chave que
é determinante da coluna em questão (A tabela Emp na 2FN).
 Criar a coluna dependente dentro da tabela na 2FN (As colunas Nome, Sal e Cat da tabela Emp na
2FN).
Terceira Forma Normal
-
A passagem para a 3FN visa eliminar um outro tipo de redundância de dados.
Para exemplificar, vamos supor que na tabela Emp o salário de um empregado (coluna Sal) seja determinado
pela sua categoria funcional (coluna Cat).
Sendo assim, a informação de que um dado salário é pago para uma determinada categoria vai se repetir na
tabela tantas vezes quantos forem os empregados que possuírem aquela categoria.
Terceira Forma Normal – 2FN
Uma tabela está na terceira forma normal quando, além de estar na
2FN, não contém dependências transitivas.
Dependência Transitiva
Uma dependência funcional transitiva ocorre quando uma coluna,
além de depender da chave primária da tabela, depende de outra
coluna ou conjunto de colunas da tabela.
- A passagem para a 3FN consiste em dividir tabelas de forma a eliminar as dependências transitivas.
- A seguir ilustra-se as dependências funcionais da tabela Emp:
52
Emp( CodEmp,
Nome, Cat, Sal)
- Para passar a tabela Emp para a 3FN (ou seja, eliminar as dependências transitivas) é necessário dividir a mesma
em duas tabelas com o seguinte esquema:
Emp(CodEmp, Nome, Cat)
Cat(Cat, Sal)
-
Assim, o modelo relacional correspondente ao arquivo em questão, na 3FN fica:
Proj(CodProj, Tipo, Descr)
ProjEmp(CodProj, CodEmp, DataIni, TempAl)
Emp(CodEmp, Nome, Cat)
Cat(Cat, Sal)
- O conteúdo das tabelas é exibido a seguir:
Proj:
CodProj
LSC001
PAG02
Tipo
Novo Desenv.
Manutenção
Descr
Sistema de Estoque
Sistema de RH
ProjEmp:
CodProj
LSC001
LSC001
LSC001
LSC001
LSC001
PAG02
PAG02
PAG02
CodEmp
2146
3145
6126
1214
8191
8191
4112
6126
DataIni
01-11-1991
02-10-1991
03-10-1992
01-11-1991
01-11-1992
01-05-1993
04-01-1991
01-11-1992
TempAl
24
24
18
18
12
12
24
12
Emp:
CodEmp
2146
3145
6126
1214
8191
4112
Nome
João
Sílvio
José
Carlos
Mário
João
Cat
A1
A2
B1
A2
A1
A2
Cat:
Cat
A1
A2
B1
Sal
4
6
9
Passos a serem seguidos no processo de passagem da 1FN para a 2FN:
1. Copiar para a 3FN as tabelas que tenham menos que duas colunas não chave, pois neste caso não há como se
ter dependências transitivas.
2. Para cada tabela com duas ou mais colunas não chave:
 Criar na 3FN uma tabela com a chave primária da tabela em questão;
 Para cada coluna não chave questionar: A coluna depende de alguma outra coluna não chave?
 NÃO: Depende apenas da chave:
 Copiar a coluna para a tabela na 3FN (Colunas Nome e Cat da tabela Emp).
 SIM: Depende de outra coluna (Caso da coluna Sal):
 Criar, caso não exista ainda, uma tabela na 3FN que tenha como chave primária a coluna da qual há a
dependência indireta (A tabela Cat na 3FN).
 Copiar a coluna dependente para a tabela criada (A coluna Sal).
53
 A coluna determinante deve permanecer também na tabela original.
Exercícios sobre Normalização
1) Normalize os dados abaixo e represente o diagrama entidade-relacionamento correspondente:
a) codProfessor, nomeProfessor, dataAdmissao, codCategoria, descrCategoria, valorAulaCategoria, numeroAulas,
nomeDependente (ocorre n vezes), dtNascDependente (ocorre n vezes), totalDependentes, dtNascProfessor,
codDepartamento, nomeDepartamento, codDisciplina (ocorre n vezes), nomeDisciplina (ocorre n vezes)
b) codAluno, codDisciplina (ocorre n vezes), nomeDisciplina (ocorre n vezes), cargaHorariaDisciplina (ocorre n
vezes), nomeAluno, codLocalNascAluno, nomeLocalNascAluno
2) Identifique nas relações abaixo as dependências funcionais e se há violação de alguma forma normal (1, 2 ou 3).
Se houver violação, normalize-as. Os campos entre parênteses indicam campos multivalorados:
a) Salario(RgFunc, NomeFunc, (DataSalario, ValorSalario))
b) Gerencia(CodDepartamento, RgGerente, DescrDepartamento)
3) Aplique as formas normais cabíveis, nos itens abaixo. Você deve transformar as relações abaixo em conjuntos
de relações que estejam na 2FN, 3FN e, justificar sua normalização de acordo com as dependências funcionais:
a) Funcionario(NumeroFuncionario, NomeFuncionario, NumeroDepto, NomeDepto, NumeroSupervisor,
NomeSupervisor, (NumeroProjeto, NomeProjeto, DataInicioProjeto, NumHorasTrabalhadasProjeto))
b) Paciente (NumPaciente, NomePaciente, NumQuarto, DescrQuarto, NumComodosQuarto, (CodMedico,
NomeMedico, FoneMedico))
4) A Vídeo Center of America Ltda. é uma cadeia de locadoras de DVDs. Ela precisa manter dados sobre os
DVDs, seus clientes e locações. Cada DVD para locação tem um número de série único. Os títulos de filme e
números de cliente também são identificadores únicos. Suponha que cada filme tenha exatamente uma “estrela”.
Observe a diferença no ano em que cada filme foi originalmente filmado em oposição à data em que o DVD – o
disco real – foi fabricado. Alguns dos atributos e dependências funcionais neste ambiente são os seguintes:
Atributos: Número do DVD, Data de Fabricação, Título do Filme, Estrela, Ano de Filmagem, Duração (em
minutos), Número do Cliente, Nome do Cliente, Endereço do Cliente, Data da Locação, Data da Devolução, Valor
Pago.
Dependências Funcionais:
Número do DVD  Título do Filme
Número do DVD  Estrela
Número do DVD  Data de Fabricação
Título do Filme  Estrela
Título do Filme  Duração
Título do Filme  Ano de Filmagem
Número do Cliente  Nome do Cliente
Número do Cliente  Endereço do Cliente
Número do DVD, Número do Cliente, Data de Locação  Data de Devolução, Valor Pago
Para cada uma das tabelas a seguir, escreva primeiro a forma normal da tabela (como 1FN, 2FN ou 3FN). A seguir,
para aquelas tabelas que estejam atualmente na 1FN ou 2FN, reconstrua-as como tabelas bem estruturadas na 3FN.
Os atributos que são as chaves primárias estão sublinhados. Não suponha qualquer outra dependência funcional
além das mostradas.
a) Título do Filme, Estrela, Duração, Ano de Filmagem.
54
b)
c)
d)
e)
Número do DVD, Número do Cliente, Data de Locação, Nome do Cliente, Data da Devolução, Valor Pago.
Número do DVD, Data da Fabricação, Título do Filme, Estrela.
Título do Filme, Número do Cliente, Estrela, Duração, Nome do Cliente, Endereço do Cliente.
Número do DVD, Número do Ciente, Data de Locação, Data da Devolução, Valor Pago.
5) Apresente um conjunto de dependências funcionais para o esquema de relação R(A,B,C,D) com AB sendo
chave primaria tal que R está em 1FN, mas não está em 2FN.
6) Apresente um conjunto de dependências funcionais para o esquema de relação R(A,B,C,D) com AB sendo
chave primaria tal que R está em 2FN, mas não está em 3FN.
55
Parte 5 - SQL (Structured Query Language)
- SQL (“Structured Query Language”): Evolução do sistema protótipo Sistema R, desenvolvido inicialmente por
Chamberlin no IBM Research Laboratory (1974-1977), em San Diego (Califórnia).
- Linguagem de interface concebida para o sistema: SEQUEL (“Structured English Query Language”).
Posteriormente, passou-se a chamar SEQUEL II. Finalmente, o nome foi abreviado para SQL.
- 1986: O “American National Standards Institute” (ANSI) e a “International Organization for Standardization”
(ISO) padronizaram um dialeto do SQL como interface oficial para sistemas relacionais.
- 1989: Revisão com adição de algumas extensões.
- 1992: Revisão mais recente. Por esta razão, a linguagem é atualmente conhecida informalmente como SQL/92.
- Linguagens como a SQL são denominadas não procedurais: especifica-se o que se quer e não o como.
- Os comandos existentes na linguagem SQL utilizados na interação com bancos de dados são subdivididos em
cinco grupos:
Linguagem de Definição de Dados (DDL - Data Definition Language)
- A DDL possui comandos para especificar a estrutura de uma tabela, alterar esta estrutura ou excluí-la que são,
respectivamente, os comandos create table, alter table e drop table.
- Também possui comandos para gerenciar índices e visões (views): create index, drop index, create view e drop
view.
Linguagem de Manipulação de Dados (DML - Data Manipulation Language)
- A DML possui um conjunto de comandos que permitem a manipulação dos dados de um banco de dados.
- A manipulação de dados envolve:
 Inserção de novos dados no banco de dados;
 Exclusão de dados do banco de dados;
 Alteração de dados armazenados no banco de dados.
Linguagem de Consulta aos Dados (DQL - Data Query Language)
- A DQL é a parte da SQL mais utilizada.
- Contém apenas o comando SELECT, com suas várias cláusulas e opções. Este comando permite que se
especifique uma consulta ("query") como uma descrição do resultado desejado.
Linguagem de Controle de Dados (DCL - Data Control Language)
- Esta parte da linguagem está relacionada ao controle do acesso aos dados, afetando, portanto, diretamente a
segurança dos mesmos.
- Duas palavras chave da DCL são:
 Grant: Autoriza ao usuário executar ou setar operações.
 Revoke: Remove ou restringe a capacidade de um usuário de executar operações.
Exemplo:
GRANT SELECT, INSERT, UPDATE ON Fornecedor
TO [ORGANIZACAO\alexandre.araujo]
56
Linguagem de Transação de Dados (DTL - Data Transaction Language)
- Esta parte da linguagem está relacionada ao controle de transações, possuindo os comandos:
 START TRANSACTION: Pode ser usado para marcar o começo de uma transação de banco de dados que
pode ser completada ou não.
 COMMIT: Envia todos os dados das mudanças permanentemente.
 ROLLBACK: Faz com que as mudanças nos dados existentes desde o último COMMIT ou ROLLBACK
sejam descartadas.
Tabela - Comandos da Linguagem SQL
Tipo de Comando
Definição de Dados (DDL)
Manipulação de Dados (DML)
Exemplos de Comandos
create table/alter table/drop table
create index/ drop index
insert
update
delete
Consulta aos Dados (DQL)
select
Transação (DTL)
commit
rollback
savepoint
grant
revoke
Controle (DCL)
- Numerosos produtos suportam a linguagem SQL. Embora as versões de SQL implementadas em cada
produto difiram em diversos detalhes de linguagem, as diferenças são, em sua maioria, secundárias.
Definição de Dados (DDL)
- Comandos usados para definir (CREATE), alterar (ALTER) e deletar (DROP) estruturas de dado e de acesso:
Tabelas e Índices.
Criando Tabelas – Create Table
- Objetivo: Criar a estrutura de uma tabela definido as colunas (campos) e as chaves primárias e estrangeiras
existentes.
Sintaxe:
CREATE TABLE <nome-tabela> (<campo1> <tipo-do-dado [(tamanho)]> [NOT NULL] [UNIQUE]
[NOT NULL WITH DEFAULT]
[,<campo2> <tipo-do-dado [(tamanho)]> [NOT NULL] [UNIQUE]
[NOT NULL WITH DEFAULT]] [,...]
[, definição-de-chave-primária ] [, definição-de-chave-estrangeira1][, definição-de-chave-estrangeira2 ] [,...] );
sendo a sintaxe para definição-de-chave-primária:
PRIMARY KEY (campo1 [, campo2] [,...])
e a sintaxe para definição-de-chave-estrangeira é:
57
FOREIGN KEY (campo1 [, campo2] [,...])
REFERENCES <nome-tabela-estrangeira> (campo_estrangeiro1 [, campo_estrangeiro2] [,...])
[ ON DELETE [RESTRICT] [CASCADE] [SET NULL] ]
onde:
a) nome-tabela - Representa o nome da tabela que será criada.
b) campo1, campo2, etc - Representa os nomes das colunas da tabela. A definição das colunas de uma tabela é feita
relacionando-as uma após a outra.
c) tipo-do-dado [(tamanho)] - Define o tipo e tamanho dos campos definidos para a tabela.
d) NOT NULL – A presença desta cláusula exige o preenchimento do campo, ou seja, torna obrigatório, no momento
da inclusão, que o mesmo possua um conteúdo.
e) NOT NULL WITH DEFAULT - Preenche o campo com valores pré-definidos, de acordo com o tipo do campo,
caso não seja especificado o seu conteúdo no momento da inclusão do registro. Os valores pré-definidos são:
e.1) Campos numéricos - Valor zero.
e.2 ) Campos alfanuméricos - Caracter branco.
e.3) Campo formato Date - Data corrente.
e.4) Campo formato Time - Horário no momento da operação.
f) UNIQUE - Especifica que não pode haver dois registros na tabela especificada que tenham o mesmo valor para o
campo em um mesmo instante.
g) PRIMARY KEY (campo1 [, campo2] [,...]) - Define o(s) campo(s) que compõe(m) a chave primária da tabela.
Caso a chave primária seja composta por mais de um campo, os nomes dos campos devem ser listados separados
por vírgulas entre os parênteses.
h) FOREIGN KEY (campo1 [, campo2] [,...]) REFERENCES nome-tabela-estrangeira (campo_estrangeiro1 [,
campo_estrangeiro2] [,...]) - Define os campos que são chaves estrangeiras na tabela, ou seja, os campos que são
chaves primárias de outras tabelas. Na cláusula REFERENCES deve ser especificada a tabela na qual o(s)
campo(s) compõe(m) a chave primária, seguida do(s) nome(s) do(s) campo(s) correspondente(s) na referida tabela
entre parênteses.
i) ON DELETE - Esta cláusula especifica os procedimentos que devem ser feitos pelo SGBD quando houver uma
exclusão de um registro na tabela pai quando existe um registro correspondente nas tabelas filhas. As opções
disponíveis são:
i.1) RESTRICT - Opção default. Esta opção não permite a exclusão na tabela pai de um registro cuja chave
primária exista em alguma tabela filha.
i.2) CASCADE - Esta opção realiza a exclusão em todas as tabelas filhas que possua o valor da chave que
será excluída na tabela pai.
i.3) SET NULL - Esta opção atribui o valor NULO nas colunas das tabelas filhas que contenha o valor da
chave que será excluída na tabela pai.
- Os tipos de dados mais comuns são:
1) Numéricos:
- Smallint - Armazena valores numéricos, em dois bytes, compreendidos no intervalo -32768 a +32767.
- Integer - Armazena valores numéricos, em quatro bytes, compreendidos no intervalo -2147483648 a
+2147483647
- Decimal(n,m) - Armazena valores numéricos com no máximo 15 dígitos. Nesta opção deve ser definida a
quantidade de dígitos inteiros (n) e casas decimais (m) existentes no campo.
2) Alfanuméricos:
- Character (n) - Armazena um campo alfanumérico de n caracteres, onde n deve estar entre 0 e 255.
58
3) Campo Date – Armazena data.
4) Campo Time - Armazena horário.
Tipos de Dados: SQL Server
Abaixo segue uma relação dos tipos de dados básicos do SQL Server, sendo que os tipos que estiverem marcados
com * somente funcionam a partir do SQL Server 2000
TINYINT: Valores numéricos inteiros variando de 0 até 256
SMALLINT: Valores numéricos inteiros variando de –32.768 até 32.767
INT: Valores numéricos inteiros variando de -2.147.483.648 até 2.147.483.647
* BIGINT: Valores numéricos inteiros variando de –92.23.372.036.854.775.808 até 9.223.372.036.854.775.807
BIT: Somente pode assumir os valores 0 ou 1. Utilizado para armazenar valores lógicos.
DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos inteiros com casas decimais utilizando
precisão. I deve ser substituído pela quantidade de dígitos total do número e D deve ser substituído pela quantidade
de dígitos da parte decimal (após a vírgula). DECIMAL e NUMERIC possuem a mesma funcionalidade, porém
DECIMAL faz parte do padrão ANSI e NUMERIC é mantido por compatibilidade. Por exemplo, DECIMAL(8,2)
armazena valores numéricos decimais variando de – 999999,99 até 999999,99
Lembrando sempre que o SQL Server internamente armazena o separador decimal como ponto (.) e o separador de
milhar como vírgula (,). Essas configurações INDEPENDEM de como o Windows está configurado no painel de
controle e para DECIMAL E NUMERIC, somente o separador decimal (.) é armazenado
SMALLMONEY: Valores numéricos decimais variando de -214.748,3648 até 214.748,3647
MONEY: Valores numéricos decimais variando de -922.337.203.685.477,5808 até 922.337.203.685.477,5807
REAL: Valores numéricos aproximados com precisão de ponto flutuante, indo de -3.40E + 38 até 3.40E + 38
FLOAT: Valores numéricos aproximados com precisão de ponto flutuante, indo de -1.79E + 308 até 1.79E + 308
SMALLDATETIME: Armazena hora e data variando de 1 de janeiro de 1900 até 6 de junho de 2079. A precisão
de hora é armazenada até os segundos.
DATETIME: Armazena hora e data variando de 1 de janeiro de 1753 até 31 de Dezembro de 9999. A precisão de
hora é armazenada até os centésimos de segundos.
CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres
armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com
espaços em branco.
VARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres
armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.
TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres
armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este
tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.
59
NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres
armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com
espaços em branco.
NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres
armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.
NTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada
no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado
diretamente, pois existem funções específicas para trabalhar com este tipo de dado.
Exemplo:
- Criar as tabelas Funcionario, Departamento, Projeto, TrabalhaEm e Dependente do banco de dados Companhia.
Tabela Funcionario:
create table Funcionario(Nome text(60), CPF long, DataNasc date, Endereco text(80), Sexo char, Salario single,
CPFSuper long, NDep byte, primary key (CPF));
Tabela Departamento:
create table Departamento(DNome text(20), DNumero byte, DLocalizacao text(20), CPFGer long, DataIniGer
date, primary key (DNumero), foreign key (CPFGer) references Funcionario (CPF));
Tabela Projeto:
create table Projeto(PNome text(20), PNumero byte, PLocalizacao text(20), DNum byte, primary key (PNumero),
foreign key (DNum) references Departamento(DNumero));
Tabela TrabalhaEm:
create table TrabalhaEm(CPFFunc long, ProjNum byte, Horas byte, primary key (CPFFunc, ProjNum), foreign
key (CPFFunc) references Funcionario(CPF), foreign key (ProjNum) references Projeto(PNumero));
Tabela Dependente:
create table Dependente(CPFFunc long, NomeDependente text(60) not null, Sexo char, DataNasc date, Relacao
text(20), primary key (CPFFunc, NomeDependente), foreign key (CPFFunc) references Funcionario(CPF));
Alterando Tabelas – Alter Table
- Objetivo: Alterar a estrutura de uma tabela acrescentando, alterando e excluindo campos ou alterando nomes e
formatos dos campos, ou ainda alterando a integridade referencial definida para a tabela.
Sintaxe:
ALTER TABLE <nome-tabela>
DROP <nome-campo>
ADD <nome-campo> <tipo-do-dado> [NOT NULL] [UNIQUE]
[NOT NULL WITH DEFAULT]
RENAME <nome-campo> <novo-nome-campo>
RENAME TABLE <novo-nome-tabela>
MODIFY <nome-campo> <novo-nome-campo> <tipo-do-dado> [NULL] [UNIQUE]
60
[NOT NULL]
[NOT NULL WITH DEFAULT]
ADD PRIMARY KEY (<nome-campo> [,<nome-campo>] [,...])
DROP PRIMARY KEY (<nome-campo> [,<nome-campo>] [,...])
ADD FOREIGN KEY (<nome-campo> [,<nome-campo>] [,...]) REFERENCES
<nome-tabela-estrangeira> (<nome-campo-estrangeiro> [,<nome-campo-estrangeiro>] [,...])
[ON DELETE [RESTRICT] [CASCADE] [SET NULL]]
DROP FOREIGN KEY (nome-campo-chave-estrangeira)
onde:
a) nome-tabela - Representa o nome da tabela que será alterada.
b) nome-campo - Representa o nome do campo que será alterado, deletado ou incluído.
c) tipo-do-dado - Define o tipo e tamanho do campo a ser incluído ou modificado.
d) DROP <nome-campo> - Efetua a exclusão do campo especificado da estrutura da tabela.
e) ADD <nome-campo> <tipo-do-dado> - Efetua a inclusão do campo especificado na estrutura da tabela. As
definições NOT NULL e NOT NULL WITH DEFAULT são semelhantes às do comando CREATE TABLE.
f) RENAME <nome- campo > <novo-nome- campo > - Efetua a troca do nome do campo especificado.
g) RENAME TABLE <novo-nome-tabela> - Efetua a troca do nome da tabela especificada.
h) MODIFY <nome-campo> <novo-nome-campo> <tipo-do-dado> - Efetua a alteração no nome e tipo do campo
especificado.
Opções: - Além das existentes na opção ADD (NOT NULL e NOT NULL WITH DEFAULT), temos a opção
NULL que altera a característica do campo passando a permitir o preenchimento com o valor Nulo.
i) ADD PRIMARY KEY - Esta opção é utilizada quando se quer acrescentar um novo campo como chave
primária da tabela.
j) DROP PRIMARY KEY - Esta opção é utilizada quando se quer retirar um campo como chave primária da
tabela.
l) ADD FOREIGN KEY - Esta opção é utilizada quando um campo deve ser especificado como sendo uma chave
estrangeira.
l) DROP FOREIGN KEY - Esta opção é utilizada quando se quer retirar uma chave estrangeira da estrutura da
tabela.
Exemplo: - Considerando que a tabela Funcionario tenha sido criada com o comando sql abaixo:
create table Funcionario(Nome text(60), CPF long, DataNasc date, Endereco text(80), Sexo char, Salario single,
CPFSuper long, NDep byte, primary key (CPF));
aonde faltou especificar que NDep é uma chave estrangeira que faz referência ao campo DNumero da tabela
Departamento, acrescentar esta informação, na tabela Funcionario:
alter table funcionario add foreign key (NDep) references Departamento (DNumero);
61
Também acrescentar que CPFSuper é uma chave estrangeira que faz referência ao CPF da própria tabela
Funcionario
alter table funcionario add foreign key (CPFSuper) references Funcionario (CPF)
Excluindo Tabelas – Drop Table
- Objetivo: Excluir a estrutura e os dados existentes em uma tabela. Após a execução deste comando estarão
deletados todos os dados, a estrutura e os índices de acessos que estejam a ela associados.
Sintaxe:
DROP TABLE <nome-tabela>
onde:
a) nome-tabela - Representa o nome da tabela que será deletada.
Criando Índices – Create Index
- Objetivo: Criar uma estrutura de índice de acesso para uma determinada coluna em uma tabela. Um índice de
acesso permite um acesso mais rápido aos dados em uma operação de recuperação. Os índices podem ser criados a
partir de um ou mais campos de uma tabela. Devem ser criados para os campos que são frequentemente
pesquisados.
- A criação de índices para chaves estrangeiras aumenta a velocidade na execução das junções. A criação de
índices facilita também a realização dos comandos ORDER BY e GROUP BY.
- Logicamente, criar índices pode também trazer algumas desvantagens, como por exemplo: o tempo para a
construção do índice, o espaço em disco utilizado para armazenar os índices e o maior tempo levado nas operações
de modificação no banco de dados, pois todas as mudanças têm que ser realizadas nos dados e nos índices.
- As diretrizes abaixo descrevem que tipo de dado deve ou não ser indexado:
1. Campos que devem ser indexados:




Chave primária.
Campos freqüentemente utilizados em operações de junção (chaves estrangeiras).
Campos freqüentemente pesquisados em faixas de valores.
Campos freqüentemente recuperados de forma classificada.
2. Campos que não devem ser indexados:




Campos que raramente são referenciados em uma consulta.
Campos que contém poucos valores únicos.
Campos definidos com os tipos de dados text, image ou bit
Quando o desempenho das atualizações é mais importante que o desempenho das consultas.
Sintaxe:
CREATE [UNIQUE] INDEX <nome-índice>
ON <nome-tabela> (<nome-campo> [ASC ] [,<nome-campo> [ASC ] ] [,...])
[DESC]
[DESC]
62
onde:
a) nome-índice - Representa o nome da estrutura de índice que será criada.
b) nome-tabela - Representa o nome da tabela que contem a coluna na qual será criado o índice de acesso.
c) nome-campo - Representa o nome do campo a ser indexado.
d) Opção ASC/DESC - Representa a criação do índice com ordenação ascendente (crescente) (ASC) ou
decrescente (DESC). ASC é o default.
e) Opção UNIQUE - Especifica que não pode haver dois registros na tabela base especificada que tenham o mesmo
valor para o campo indexado ou combinação de campos em um mesmo instante.
- Os campos especificados para compor o índice não precisam ser contíguos e nem ser todos do mesmo tipo de
dado.
Exemplo: - Indexar o campo Nome da tabela Funcionario em ordem ascendente.
create index NomeFunc on Funcionario (Nome);
- O índice criado será automaticamente atualizado para refletir atualizações na tabela.
Deletando Índices – Drop Index
- Objetivo: Deletar uma estrutura de índice de acesso para uma determinada coluna em uma tabela.
Sintaxe:
DROP INDEX <nome-índice>
onde:
a) nome-índice - Representa o nome da estrutura de índice que será deletada.
- O índice especificado é destruído.
Manipulação de Dados (DML)
Inserindo Dados - Insert
- Objetivo: Incluir um novo registro em uma tabela do Banco de Dados.
Sintaxe:
INSERT INTO <nome-tabela> [(<nome-campo> [,<nome- campo>] [,...])]
VALUES (<literal1 [, literal2] [,...] >)
onde:
a) nome-tabela - Representa o nome da tabela onde será incluído o novo registro.
b) nome-campo - Representa o nome da(s) coluna(s) que terão conteúdo após a operação de inclusão.
c) literal – Representa os valores a serem incluídos para cada um dos campos listados, segundo a ordem em que são
listados.
63
Obs.: Este comando pode ser executado de duas maneiras:
1) Quando todos os campos da tabela terão conteúdo para o novo registro - Neste caso não é necessário especificar
os nomes dos campos, entretanto a relação dos valores a serem incluídos deverá obedecer a mesma seqüência da
definição da tabela.
2) Quando apenas parte dos campos da tabela terão conteúdo - Neste caso devem ser especificados todos os nomes
dos campos que terão conteúdo e os valores relacionados deverão obedecer esta seqüência. Os campos para os
quais não houver conteúdo especificado serão preenchidos com o valor NULL.
Exemplo: - Inserir um registro na tabela Funcionário com os seguintes valores para os campos (Nome, CPF,
DataNasc, Endereco, Sexo, Salario, CPFSuper, NDep):
João Nunes Silva, 123456789, 08-DEZ-57, R. A., 1, M, 3000,00, null, null
insert into Funcionario values('João Nunes Silva', 123456789, '08-DEZ-57', 'R. A, 1', 'M', 3000, null, null);
- Atenção para o fato de que dados do tipo caracter ou data devem ser delimitados por aspas simples.
- Os registros a serem inseridos em uma tabela também podem ser especificados como o resultado de uma
consulta.
Sintaxe:
INSERT INTO <nome-tabela> [(<nome-campo> [,<nome- campo>] [,...])]
subconsulta;
- Neste segundo formato uma subconsulta é avaliada e uma cópia do resultado é inserida na tabela: a i-ésima
coluna do resultado desta consulta corresponde ao i-ésimo campo na lista de campos.
Exemplo:
- Criar uma tabela chamada Temporaria e inserir nela o primeiro nome, o sexo, o CPF e o endereço de todos os
funcionários.
CREATE TABLE Temporaria
(Nome text(60) , SexoFunc text(1), CPFFunc long, End text(80),
PRIMARY KEY ( CPFFunc) );
INSERT INTO Temporaria(Nome, SexoFunc, CPFFunc, End)
SELECT Nome, Sexo, CPF, Endereco
FROM Funcionario;
Atualizando Dados - Update
- Objetivo: Atualizar os dados de um ou um grupo de registros em uma tabela do Banco de Dados.
Sintaxe:
UPDATE <nome-tabela>
SET <nome-campo> = <novo conteúdo para o campo>
[,<nome-campo> = <novo conteúdo para o campo>]
[WHERE <condição>]
onde:
a) nome-tabela - Representa o nome da tabela cujo conteúdo será alterado.
64
b) nome-campo - Representa o nome da(s) coluna(s) que terão seus conteúdos alterados com o(s) novo(s) valor(es)
especificado(s).
c) condição - Representa a condição para a seleção dos registros que serão atualizados. Esta seleção poderá resultar
em um ou vários registros. Neste caso a alteração irá ocorrer em todos os registros selecionados.
Exemplo: - Atualizando um único registro:
- Alterar o endereço e o salário do funcionário cujo CPF é 123456789:
UPDATE Funcionario
SET Endereco = 'R. X., 65 ',
Salario = 3200
WHERE CPF = 123456789 ;
Exemplo: - Atualizando múltiplos registros:
- Conceder um aumento de 6% a todos os funcionários do sexo feminino:
UPDATE Funcionario
SET Salario = Salario * 1.06
WHERE Sexo = 'F' ;
- Na omissão da cláusula WHERE a atualização é feita para todos os registros da tabela.
Exemplo: - Atualizando múltiplos registros:
- Conceder um aumento de 2% a todos os funcionários:
UPDATE Funcionario
SET Salario = Salario * 1.02;
- A condição da cláusula WHERE pode ser uma subconsulta.
Exemplo: - Usando subconsultas para atualizar:
- Conceder um aumento de 3% nos salários de todos os funcionários que sejam gerentes de algum
departamento:
UPDATE Funcionario
SET Salario = Salario * 1.03
WHERE CPF IN
(SELECT DISTINCT CPFGer
FROM Departamento);
Deletando Dados - Delete
- Objetivo: Deletar um ou um grupo de registros de uma tabela do Banco de Dados.
Sintaxe:
DELETE FROM <nome-tabela>
[WHERE <condição>];
onde:
a) nome-tabela - Representa o nome da tabela cujos registros serão deletados.
b) condição - Representa a condição para a deleção dos registros. Este seleção poderá resultar em um ou vários
registros. Neste caso a operação irá ocorrer em todos os registros selecionados.
65
Ex:
Ex:
- Deletando um único registro:
- Deletar da tabela Temporaria o registro referente ao funcionário cujo CPF é 999887777:
DELETE
FROM Temporaria
WHERE CPFFunc = 999887777 ;
- Deletando múltiplos registros:
- Deletar da tabela Temporaria os registros referentes a todos os funcionários de sexo Feminino.
DELETE
FROM Temporaria
WHERE Sexo = 'F';
- A condição da cláusula WHERE pode ser uma subconsulta.
Exemplo: - Usando subconsultas para deletar:
- Deletar da tabela Temporaria todos os funcionarios que possuem algum dependente.
DELETE
FROM Temporaria
WHERE CPFFunc IN
(SELECT DISTINCT CPFFunc
FROM Dependente);
- Cuidado: A omissão da cláusula WHERE faz com que todos os registros da tabela sejam deletados!!!!!
Extração de Dados – Comando Select
Sintaxe do comando SELECT:
SELECT campo [,campo]...
FROM tabela [,tabela]...
[ WHERE condição]
[ GROUP BY campo [, campo ]...]
[ HAVING condição]
[ ORDER BY campo [, campo ]...];
- O SELECT é o mais complexo dentre os comandos SQL, possibilitando a realização de um grande número de
tarefas, como:
 Consultas simples;
 Consultas com subconsultas;
 Ligações;
 Consultas com resultados ordenados.
- Forma mais comum do comando SELECT: SELECT... FROM...WHERE...
Exemplo:
SELECT Nome, Salario
FROM Funcionario
WHERE Salario > 2500 ;
Tabela resultante:
Nome
Salario
João Nunes Silva
3000,00
Francisco Teles Natti
4000,00
Jenifer Souza Lopes
4300,00
Ramesh Kaj Narayan
3800,00
Thiago Carvalho Pinto
5500,00
66
Correspondente na A.Relacional:
 Nome, Salario( Salario > 2500 (Funcionario))
- Nome de campo qualificado consiste no nome da tabela ao qual pertence seguido do nome do campo, separados
por um ponto: sempre se pode usar campos qualificados.
Exemplo:
SELECT Funcionario.Nome, Funcionario.Salario
FROM Funcionario
WHERE Salario > 2500 ;
Omitindo a cláusula WHERE
- Na omissão da cláusula WHERE a condição é considerada verdadeira: o valor dos campos selecionados pela
cláusula SELECT é listado para todas as tuplas da tabela selecionada.
Exemplo:
SELECT Salario
FROM Funcionario;
Tabela resultante:
Salario
3000,00
4000,00
2500,00
4300,00
3800,00
2500,00
2500,00
5500,00
Usando a palavra-chave DISTINCT
- O SQL não elimina linhas duplicadas do resultado de um SELECT, a menos que se indique explicitamente.
Exemplo:
SELECT DISTINCT Salario
FROM Funcionario;
Tabela resultante:
Salario
3000,00
4000,00
2500,00
4300,00
3800,00
5500,00
Correspondente na Álgebra Relacional:
 Salario (Funcionario)
67
Extraindo valores calculados
- A cláusula SELECT pode incluir também expressões envolvendo operadores escalares.
Exemplo:
SELECT Nome, ‘Salario em dólares:’, Salario/3 AS Salario em Dólares
FROM Funcionario;
Tabela resultante:
Nome
Salário em Dólares
João Nunes Silva
Saldo em Dólares:
1000,00
Francisco Teles Natti Saldo em Dólares:
1333,33
Alícia Jamil Zelaya
Saldo em Dólares:
833,33
Jenifer Souza Lopes Saldo em Dólares:
1433,33
Ramesh Kaj Narayan Saldo em Dólares:
1266,67
Joyce Abreu Elias
Saldo em Dólares:
833,33
Ahmad Veri Jabbar
Saldo em Dólares:
833,33
Thiago Carvalho Pinto Saldo em Dólares:
1833,33
Selecionando todos os campos
- O uso de um asterisco após a cláusula SELECT implica na seleção de todos os campos da tabela especificada na
cláusula FROM.
Exemplo:
SELECT *
FROM Funcionario;
é equivalente à:
SELECT Nome, CPF, DataNasc, Endereço, Sexo, Salario, CPFSuper, NDep
FROM Funcionario;
Correspondente na Álgebra Relacional:
 Nome, CPF, DataNasc, Endereço, Sexo, Salario, CPFSuper, NDep (Funcionario)
Condição da cláusula WHERE envolvendo operadores relacionais e lógicos
- A condição que se segue à cláusula WHERE pode incluir os operadores de comparação: =, <>, >, >=, <, <= e
operadores booleanos: AND, OR e NOT
Exemplo: - Obter o primeiro nome de todos os funcionários que trabalham no departamento 5 e
ganham mais que R$3000,00.
SELECT Funcionario.Nome
FROM Funcionario
WHERE Funcionario.NDep = 5 AND Funcionario.Salario > 3000,00;
Tabela resultante:
Nome
Francisco Teles Natti
Ramesh Kaj Narayan
Extraindo dados ordenados
- A tabela resultante de uma consulta não é apresentada, em geral, em nenhuma ordem particular.
68
- A cláusula ORDER BY é usada para se obter a tabela resultante ordenada, devendo-se especificar os nomes dos
campos em termos dos quais o ordenamento deve ser feito e a ordem desejada.
- A ordem pode ser ASC (Ascendente), que é o default, ou DESC (Descendente).
Exemplo: - Obter o nome, CPF e Salário dos funcionários do sexo masculino, em ordem
alfabética descendente de seus primeiros nomes.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Sexo = “M”
ORDER BY Funcionario.Nome DESC;
Tabela resultante:
Nome
Thiago Carvalho Pinto
Ramesh Kaj Narayan
João Nunes Silva
Francisco Teles Natti
Ahmad Veri Jabbar
CPF
Salario
888665555 5500
666884444 3800
123456789 3000
333445555 4000
987987987 2500
Consultas envolvendo ligações entre tabelas
- Consultas podem envolver a extração de dados de mais de uma tabela.
- O resultado de uma tal consulta é a ligação de duas ou mais tabelas sob a condição de existência de algum tipo de
relação entre valores de um determinado campo comum às tabelas envolvidas.
- Quando o operador de comparação usado na condição de ligação é o operador de igualdade e são eliminados os
campos repetidos, diz-se que o resultado da operação é uma ligação natural.
Exemplo: - Obter informações sobre departamentos e o nome dos gerentes de cada departamento.
SELECT Departamento.*, Funcionario.Nome
FROM Departamento, Funcionario
WHERE Departamento.CPFGer = Funcionario.CPF;
Tabela resultante:
DNome
DNumero DLocalizacao CPFGer DataIniGer
Nome
Pesquisa
5
Prédio A
333445555
22/05/78
Francisco Teles Natti
Administrativo
4
Prédio B
987654321
01/01/85
Jenifer Souza Lopes
Gerencial
1
Prédio C
888665555
19/06/71
Thiago Carvalho Pinto
Correspondente na A.Relacional:
 Departamento.DNome, Departamento.DNumero, Departamento.DLocalizacao, Departamento.CPFGer,
Departamento.DataIniGer, Funcionario.Nome
(Departamento* Funcionario) Departamento.CPFGer = Funcionario.CPF
- O operador de comparação usado na condição de ligação pode ser qualquer um dos operadores, além do de
igualdade: <>, >, >=, <. <=.
- A cláusula WHERE em uma ligação pode incluir outras condições além da condição de ligação.
Exemplo: - Obter informações sobre departamentos e o primeiro nome dos gerentes de cada
departamento, considerando apenas os gerentes que ganham mais do que R$4000,00
69
SELECT Departamento.*, Funcionario.Nome
FROM Departamento, Funcionario
WHERE Departamento.CPFGer = Funcionario.CPF AND Funcionario.Salario > 4000,00;
Tabela resultante:
DNome
DNumero DLocalizacao CPFGer DataIniGer
Nome
DNome
Gerencial
1
Prédio C
888665555
19/06/71
Thiago Carvalho Pinto
Gerencial
Administrativo
4
Prédio B
987654321
01/01/85
Jenifer Souza Lopes Administrativo
- Não há nenhum limite intrínseco para o número de tabelas que podem participar de uma consulta envolvendo
ligações.
Exemplo: - Obter informações sobre departamentos e o primeiro nome dos gerentes de cada
departamento, para aqueles gerentes que possuem dependentes.
SELECT Departamento.*, Funcionario.Nome
FROM Departamento, Funcionario, Dependente
WHERE Departamento.CPFGer = Funcionario.CPF AND
Funcionario.CPF = Dependente.CPFFunc;
Tabela resultante:
DNome
DNumero DLocalizacao CPFGer DataIniGer
Nome
Pesquisa
5
Prédio A
333445555
22/05/78
Francisco Teles Natti
Pesquisa
5
Prédio A
333445555
22/05/78
Francisco Teles Natti
Pesquisa
5
Prédio A
333445555
22/05/78
Francisco Teles Natti
Administrativo
4
Prédio B
987654321
01/01/85
Jenifer Souza Lopes
- Para eliminar linhas repetidas, utilizar a cláusula DISTINCT:
Exemplo:
SELECT DISTINCT Departamento.*, Funcionario.Nome
FROM Departamento, Funcionario, Dependente
WHERE Departamento.CPFGer = Funcionario.CPF AND
Funcionario.CPF = Dependente.CPFFunc;
Tabela resultante:
DNome
DNumero DLocalizacao CPFGer DataIniGer
Nome
Pesquisa
5
Prédio A
333445555
22/05/78
Francisco Teles Natti
Administrativo
4
Prédio B
987654321
01/01/85
Jenifer Souza Lopes
Correspondente na A.Relacional:
 Departamento.DNome, Departamento.DNumero, Departamento.DLocalizacao, Departamento.CPFGer,
Departamento.DataIniGer, Funcionario.Nome
(Departamento * (Funcionario * Dependente))
Funcionario.CPF = Dependente.CPFGer
Departamento.CPFGer = Funcionario.CPF
Consultas envolvendo ligações de uma tabela consigo própria
- Tendo-se duas cópias de uma mesma tabela, é possível fazer comparações entre valores de campos de diferentes
tuplas da mesma tabela.
- Para fazer distinção entre duas referências a uma mesma tabela, introduz-se variáveis com nomes arbitrários,
sendo que cada uma delas varre uma cópia da tabela, estando a cada instante representando alguma linha da cópia
correspondente.
Exemplo: - Obter o nome dos funcionários que têm salário superior a algum outro funcionário,
bem como o nome dos funcionários cujo salário é inferior e os salários correspondentes.
70
SELECT Primeiro.Nome, Primeiro.Salario, Segundo.Nome, Segundo.Salario
FROM Funcionario AS Primeiro, Funcionario AS Segundo
WHERE Primeiro.Salario > Segundo.Salario
ORDER BY Primeiro.Salario, Segundo.Nome
Tabela resultante:
Primeiro.Nome
João Nunes Silva
João Nunes Silva
João Nunes Silva
Ramesh Kaj Narayan
Ramesh Kaj Narayan
Ramesh Kaj Narayan
Ramesh Kaj Narayan
Francisco Teles Natti
Francisco Teles Natti
Francisco Teles Natti
Francisco Teles Natti
Francisco Teles Natti
Jenifer Souza Lopes
Jenifer Souza Lopes
Jenifer Souza Lopes
Jenifer Souza Lopes
Jenifer Souza Lopes
Jenifer Souza Lopes
Thiago Carvalho Pinto
Thiago Carvalho Pinto
Thiago Carvalho Pinto
Thiago Carvalho Pinto
Thiago Carvalho Pinto
Thiago Carvalho Pinto
Thiago Carvalho Pinto
Primeiro.Salario
3000
3000
3000
3800
3800
3800
3800
4000
4000
4000
4000
4000
4300
4300
4300
4300
4300
4300
5500
5500
5500
5500
5500
5500
5500
Segundo.Nome
Ahmad Veri Jabbar
Alícia Jamil Zelaya
Joyce Abreu Elias
Ahmad Veri Jabbar
Alícia Jamil Zelaya
João Nunes Silva
Joyce Abreu Elias
Ahmad Veri Jabbar
Alícia Jamil Zelaya
João Nunes Silva
Joyce Abreu Elias
Ramesh Kaj Narayan
Ahmad Veri Jabbar
Alícia Jamil Zelaya
Francisco Teles Natti
João Nunes Silva
Joyce Abreu Elias
Ramesh Kaj Narayan
Ahmad Veri Jabbar
Alícia Jamil Zelaya
Francisco Teles Natti
Jenifer Souza Lopes
João Nunes Silva
Joyce Abreu Elias
Ramesh Kaj Narayan
Segundo.Salario
2500
2500
2500
2500
2500
3000
2500
2500
2500
3000
2500
3800
2500
2500
4000
3000
2500
3800
2500
2500
4000
4300
3000
2500
3800
Correspondente na A.Relacional:
(  Nome ( Primeiro ( Funcionario) )  (  Nome (  Segundo ( Funcionario ) ) )
Primeiro.Salario > Segundo.Salario
Usando funções de agregação
- A SQL fornece as seguintes funções de agregação:
 COUNT: Conta o número de valores presentes em colunas/tabelas;
 SUM: Soma os valores de uma coluna. Válido apenas sobre valores numéricos;
 AVG: Calcula a média dos valores de uma coluna. Válido apenas para valores numéricos;
 MAX: Retorna o maior valor que ocorre em uma coluna;
 MIN: Retorna o menor valor de uma coluna;
- Quaisquer valores nulos que ocorram na coluna argumento são ignorados na aplicação das funções, exceto no
caso do COUNT(*), onde nulls são considerados como quaisquer outros valores.
- Se o argumento da função for um conjunto vazio, COUNT retorna um valor igual a 0, enquanto as outras funções
retornam null.
Exemplo: - Obter o número total de linhas na tabela Funcionario.
SELECT COUNT(*) AS TotalFuncionarios
FROM Funcionario;
71
Exemplo: - Obter o número total de funcionários com salários superiores a R$2500,00.
SELECT COUNT( *) AS BomSalarios
FROM Funcionario
WHERE Funcionario.Salario > 2500,00;
Exemplo:
- Obter a soma dos salarios de todos os funcionários.
SELECT SUM(Salario) AS Total
FROM Funcionario;
Tabela resultante:
Total
28100
Usando a cláusula GROUP BY
- A cláusula GROUP BY rearranja logicamente a tabela especificada na cláusula FROM em grupos, tal que dentro
de cada um dos grupos todas as linhas tenham o mesmo valor no campo especificado em GROUP BY.
Exemplo: - Obter uma tabela com o CPF e o número de horas de trabalho de cada funcionário,
levando em consideração todos os projetos em que o funcionário trabalha.
SELECT CPFFunc, SUM(Horas) AS Total
FROM TrabalhaEm
GROUP BY CPFFunc;
Tabela resultante:
CPFFunc
Total
123456789
40
333445555
40
453453453
40
666884444
40
888665555
987654321
35
987987987
40
999887777
40
- Uma tabela pode ser agrupada por qualquer combinação de seus campos.
Usando a cláusula HAVING
- A cláusula HAVING é usada para eliminar grupos, da mesma forma que WHERE é usada para eliminar linhas
de uma tabela.
- A cláusula HAVING deve ser especificada após a especificação de uma cláusula GROUP BY.
Exemplo: - Obter o CPF de todos os funcionários que trabalham em mais de um projeto.
SELECT CPFFunc
FROM TrabalhaEm
GROUP BY CPFFunc
HAVING COUNT(*) > 1;
72
Tabela resultante:
CPFFunc
123456789
333445555
453453453
987654321
987987987
999887777
Usando LIKE e NOT LIKE
- O uso do LIKE na condição de uma cláusula WHERE tem a forma:
campo LIKE cadeia
onde campo deve designar um campo do tipo cadeia de caracteres.
- Para um dado registro a condição é avaliada como verdadeira se o valor do campo estiver em conformação com o
padrão especificado em cadeia.
- Os caracteres em cadeia são interpretados como:
 No SQL ANSI: ‘_’ representa qualquer caracter único. Em Access usa-se o ‘?’;
 No SQL ANSI: ‘%’ representa qualquer seqüência de n caracteres. Em Access usa-se o ‘*’.
Exemplo: - Obter nome, CPF e salário dos funcionários cujo nome se inicia com a letra J.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Nome LIKE ‘J%’;
Tabela resultante:
Nome
CPF
Salario
Jenifer Souza Lopes 987654321 4300
João Nunes Silva 123456789 3000
Joyce Abreu Elias 453453453 2500
Exemplo: - Obter nome, CPF e salário dos funcionários que têm a letra i no seu nome.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Nome LIKE '*i*';
Exemplo: - Obter nome, CPF e salário dos funcionários que NÃO têm a letra i no seu nome.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Nome NOT LIKE '*i*';
Exemplo: - Obter nome, CPF e salário dos funcionários com, no mínimo, 5 letras no nome e cuja
segunda letra é h.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Nome LIKE ‘?h???*”;
73
Tabela resultante:
Nome
CPF
Salario
Ahmad Veri Jabbar
987987987 2500
Thiago Carvalho Pinto 888665555 5500
Extração de dados envolvendo valores NULL
- Quando um nulo é comparado a algum outro valor na avaliação de uma condição, qualquer que seja o operador
de comparação envolvido, o resultado é sempre um falso.
- Para testar a presença ou ausência de nulos dispõe-se de uma condição especial que tem a forma:
nome-campo IS [NOT] NULL
Exemplo: - Obter o nome de todos os funcionárioss sobre os quais se desconhece o CPF do
funcionário supervisor.
SELECT Nome
FROM Funcionario
WHERE CPFSuper IS NULL;
Tabela resultante:
Nome
Thiago Carvalho Pinto
Subconsultas
- Uma subconsulta é uma expressão SELECT-FROM-WHERE-GROUP BY-HAVING que é aninhada dentro
de uma outra expressão.
- Subconsultas são usadas tipicamente para representar o conjunto de valores a serem procurados via uma condição
IN.
Subconsultas usando IN e NOT IN
- O sistema avalia a consulta total avaliando primeiro a subconsulta aninhada.
Exemplo: - Obter nome, CPF e salário dos funcionários que tenham dependentes.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Funcionario.CPF IN
( SELECT CPFFunc
FROM Dependente);
Tabela resultante:
Nome
CPF
Salario
João Nunes Silva
123456789 3000
Francisco Teles Natti 333445555 4000
Jenifer Souza Lopes 987654321 4300
Exemplo: - Obter nome, CPF e salário dos funcionários que não tenham dependentes.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Funcionario.CPF NOT IN
( SELECT CPFFunc
FROM Dependente);
74
Tabela resultante:
Nome
Ahmad Veri Jabbar
Thiago Carvalho Pinto
Alícia Jamil Zelaya
Ramesh Kaj Narayan
Joyce Abreu Elias
CPF
Salario
987987987 2500
888665555 5500
999887777 2500
666884444 3800
453453453 2500
Subconsultas com múltiplos níveis de aninhamento
- Subconsultas podem ser aninhadas em qualquer nível de profundidade.
Exemplo: - Obter o nome de todos os funcionários do sexo masculino que são gerentes de algum
departamento que tenha algum projeto que seja executado no Prédio A.
SELECT Nome
FROM Funcionario
WHERE Sexo = 'M'
AND CPF IN
( SELECT CPFGer
FROM Departamento
WHERE DNumero IN
( SELECT DNum
FROM Projeto
WHERE Plocalizacao = 'Prédio A'));
Tabela resultante:
Nome
Francisco Teles Natti
Subconsultas com outros operadores de comparação além do IN
- Se é sabido que uma subconsulta particular deve retornar exatamente um valor, um operador de comparação
escalar simples, tal como: =, >, >=, <, <= pode ser usado no lugar do IN.
Exemplo: - Obter nome, CPF e salário de todos os funcionários cujo salário seja superior ao
do funcionário cujo CPF é 333445555.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Salario >
(SELECT Salario
FROM Funcionario
WHERE CPF = 333445555);
Tabela resultante:
Nome
CPF
Salario
Thiago Carvalho Pinto 888665555 5500
Jenifer Souza Lopes 987654321 4300
Subconsultas usando SOME e ANY
Exemplo: - Obter nome, CPF e salário de todos os funcionários do sexo feminino cujo salário
seja superior ao de algum funcionário do sexo masculino.
75
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Sexo = ‘F’ and
Salario > SOME
(SELECT Salario
FROM Funcionario
WHERE Sexo = ‘M’);
Tabela resultante:
Nome
CPF
Salario
Jenifer Souza Lopes 987654321 4300
- A palavra-chave ANY é sinônimo de SOME.
- São permitidas quaisquer comparações: < SOME, <= SOME, > SOME, >= SOME, = SOME, <> SOME.
- = SOME é equivalente a IN.
Subconsultas usando ALL
Exemplo: - Obter nome, CPF e salário dos funcionários que possuem salário menor do que todos
os funcionários que são gerentes de algum departamento.
SELECT Nome, CPF, Salario
FROM Funcionario
WHERE Salario < ALL
( SELECT Salario
FROM Funcionario
WHERE CPF IN
(SELECT CPFGer
FROM Departamento));
- São permitidas quaisquer comparações: < ALL, <= ALL, > ALL, >= ALL, = ALL, <> ALL.
Usando o EXISTS
- A expressão “EXISTS (SELECT... FROM... WHERE...)” é avaliada como verdadeira se o resultado da
avaliação do “SELECT... FROM... WHERE...” não for vazio, ou seja, se existir um registro na tabela
especificada na cláusula FROM que satisfaça a condição WHERE da subconsulta.
Exemplo: - Obter nome e CPF de todos os funcionários que possuem mais do que um dependente.
SELECT Nome, CPF
FROM Funcionario
WHERE EXISTS
(SELECT Dependente.CPFFunc
FROM Dependente
WHERE Dependente.CPFFunc = Funcionario.CPF
GROUP BY Dependente.CPFFunc
HAVING COUNT(*) > 1)
76
Tabela resultante:
Nome
CPF
João Nunes Silva
123456789
Francisco Teles Natti 333445555
Usando o NOT EXISTS
Exemplo: - Obter nome e CPF de todos os funcionários que não possuem mais do que um
dependente.
SELECT Nome, CPF
FROM Funcionario
WHERE NOT EXISTS
(SELECT Dependente.CPFFunc
FROM Dependente
WHERE Dependente.CPFFunc = Funcionario.CPF
GROUP BY Dependente.CPFFunc
HAVING COUNT(*) > 1)
Tabela resultante:
Nome
Ahmad Veri Jabbar
Thiago Carvalho Pinto
Alícia Jamil Zelaya
Jenifer Souza Lopes
Ramesh Kaj Narayan
Joyce Abreu Elias
CPF
987987987
888665555
999887777
987654321
666884444
453453453
Consultas envolvendo UNION
- UNION é o operador união tradicional da teoria de conjuntos.
- Linhas duplicadas redundantes são sempre eliminadas do resultado de uma UNION.
Exemplo: - Obter nome, salário e número do departamento daqueles funcionários que trabalhem
para o departamento de número 4 ou que tenham salário superior a 4000.
SELECT Nome, Salario, NDep
FROM Funcionario
WHERE NDep = 4
UNION
SELECT Nome, Salario, NDep
FROM Funcionario
WHERE Salario > 4000;
Tabela resultante:
Nome
Salario NDep
Ahmad Veri Jabbar
2500
4
Alícia Jamil Zelaya
2500
4
Jenifer Souza Lopes
4300
4
Thiago Carvalho Pinto 5500
1
77
Exercícios sobre SQL
Exercícios 1 – Comando CREATE TABLE e INSERT
1) Criar as tabelas Mineral, Pais e PaisMineral, conforme especificação a seguir no banco de dados
ProducaoMinerais.
Pais (nome, pib)
Mineral(nome, valor)
PaisMineral (nomePais, nomeMineral, reserva, producao)
CE(Pais) CE(Mineral)
Digitar: Use ProducaoMinerais
2) Em seguida, inserir os seguintes dados:
Pais
Nome
Brasil
Argentina
Chile
Peru
Bolívia
México
Estados Unidos
pib
756.2
377.5
223.7
232.4
223.7
613.6
14300
Mineral
nome
valor
Ouro
43600
Prata
500
Bronze 250.35
Paladio 24200
Platina 86500
Cobre
12.5
Estanho 31.53
PaisMineral
nomePais
nomeMineral reserva producao
Estados Unidos
Ouro
1000000
240
Peru
Ouro
500000
170
Argentina
Ouro
30000
40
Brasil
Ouro
20000
37
México
Prata
2800000
2748
Peru
Prata
2000000
2200
Argentina
Prata
450000
300
Estados Unidos
Platina
1200
4.39
Estados Unidos
Paladio
2300
12.26
Chile
Cobre
2800000
5360.8
Peru
Cobre
750000
980.6
Brasil
Estanho
42300
15
Argentina
Estanho
5200
5
78
3) Para visualizar o conteúdo das tabelas digite:
select * from Pais
e faça o mesmo para as outras duas tabelas.
4) Tente deletar uma linha da tabela Pais, digitando, por exemplo:
delete from Pais where nome = ‘Brasil’
e anote o que acontece. Explique.
5) Explique o conceito de integridade referencial.
Exercícios 2 – ALTER TABLE, INSERT, DELETE, UPDATE
Para as questões a seguir, escreva os comandos SQL solicitados e responda às perguntas:
1. a) Crie uma tabela cliente com o comando a seguir:
create table cliente(id int identity, nome varchar(40))
b) Pesquise:
O que significa a palavra identity após a definição de tipo int do campo id? Para que serve?
Trata-se de um termo específico do MS SQL-Server ou é utilizado também em outros SGBDs?
2.
a) Altere a tabela cliente, adicionando uma nova coluna chamada cpf , que deve ser varchar(13) not null default '':
b) Explique qual é a função da restrição default ''.
3. Altere a tabela cliente, adicionando uma nova coluna chamada endereco, que deve ser do tipo varchar(50).
4. Altere a tabela cliente excluindo o campo nome.
5.
a) Altere a tabela cliente adicionando de volta o campo nome, agora como varchar(30).
b) Ao invés de excluir o campo nome e, em seguida, adicioná-lo de novo à tabela com uma outra definição de tipo,
que outra alternativa de comando você poderia usar para efetuar esta alteração?
6. Altere a tabela cliente adicionando o campo numFilhos, do tipo int.
7.
a) Insira na tabela cliente um registro com nome=’Marta’, CPF=’12345678911’ e numFilhos = -1.
b) Qual é o valor que o campo id assume para a cliente Marta?
8.
a) Altere a tabela, impondo uma restrição no campo numFilhos, de tal forma que ele só possa aceitar valores
maiores ou iguais a zero. Para isso você terá que utilizar a palavra reservada CHECK.
b) Você consegue executar este comando? Escreva o que acontece e explique o por quê.
9.
a) Tente novamente, agora incluindo a cláusula WITH NOCHECK. Ou seja, altere a tabela, impondo uma restrição
sobre o campo numFilhos, de tal forma que ele só possa aceitar valores maiores ou iguais a zero, com o seguinte
comando:
alter table cliente WITH NOCHECK add constraint restr1 check(numFilhos >= 0)
b) Explique qual é a função da cláusula WITH NOCHECK.
79
10.
a) Insira na tabela cliente um registro com nome=’Pedro’, CPF=’22335578911’ e numFilhos = -1.
b) O que acontece ao tentar executar este comando de inserção? Explique o por quê.
11. Insira na tabela cliente um registro com nome=’Pedro’, CPF=’22335578911’ e numFilhos = 0.
12. Insira 10 registros válidos na tabela, com números de filhos entre 0 e 10.
13. Delete da tabela o registro correspondente ao cliente cujo id seja igual a 5.
14.
a) Delete da tabela todos os registros correspondentes a pessoas com numFilhos igual a 10. Mesmo que não exista
nenhum cliente nesta situação, escreva qual seria o comando necessário para efetuar esta operação.
b) No seu caso, quantas linhas da tabela foram afetadas por este comando?
15. Suponha que, por uma grande coincidência, todos os clientes tenham tido um filho no último ano. Escreva o
comando necessário para fazer a atualização do número de filhos de todos os clientes a uma só vez.
16. Explique e exemplifique:
a) O que é integridade referencial?
b) O que é integridade de domínio?
Exercícios 3 – Comando SELECT
Caso ainda não tenham sido criadas, criar as tabelas Mineral, Pais e PaisMineral, conforme especificação a seguir
no banco de dados ProducaoMinerais.
Pais (nome, pib)
Mineral(nome, valor)
PaisMineral (nomePais, nomeMineral, reserva, producao)
CE(Pais) CE(Mineral)
Utilize os seguintes comandos:
create database ProducaoMinerais
use ProducaoMinerais
create table Mineral(nome varchar(15) primary key, preco real)
create table Pais(nome varchar(30) primary key, PIB real)
create table PaisMineral(nomePais varchar(30) not null, nomeMineral varchar(15) not null,
reserva real, producao real, primary key(nomePais, nomeMineral),
foreign key(nomePais) references Pais(nome), foreign key(nomeMineral) references Mineral(nome))
Em seguida, copiar e executar as seguintes instruções de inserção:
insert into Pais values('Brasil', 756.2)
insert into Pais values('Argentina', 377.5)
insert into Pais values('Chile', 223.7)
insert into Pais values('Peru', 232.4)
insert into Pais values('Bolívia', 223.7)
insert into Pais values('México', 613.6)
80
insert into Pais values('Estados Unidos', 14300)
insert into Mineral values('Ouro', 43600)
insert into Mineral values('Prata', 500)
insert into Mineral values('Bronze', 250.35)
insert into Mineral values('Paladio', 24200)
insert into Mineral values('Platina', 86500)
insert into Mineral values('Cobre', 12.5)
insert into Mineral values('Estanho', 31.53)
insert into PaisMineral values('Estados Unidos', 'Ouro', 1000000, 240)
insert into PaisMineral values('Peru', 'Ouro', 500000, 170)
insert into PaisMineral values('Argentina', 'Ouro', 30000, 40)
insert into PaisMineral values('Brasil', 'Ouro', 20000, 37)
insert into PaisMineral values('México', 'Prata', 2800000, 2748)
insert into PaisMineral values('Peru', 'Prata', 2000000, 2200)
insert into PaisMineral values('Argentina', 'Prata', 450000, 300)
insert into PaisMineral values('Estados Unidos', 'Platina', 1200, 4.39)
insert into PaisMineral values('Estados Unidos', 'Paladio', 2300, 12.26)
insert into PaisMineral values('Chile', 'Cobre', 2800000, 5360.8)
insert into PaisMineral values('Peru', 'Cobre', 750000, 980.6)
insert into PaisMineral values('Brasil', 'Estanho', 42300, 15)
insert into PaisMineral values('Argentina', 'Estanho', 5200, 5)
1) Forma mais comum do comando select (select-from-where). Selecionar os nomes de todos os países que
tenham um pib maior que 300.
2) Omitindo a cláusula where no comando select (select-from). Selecionar os pibs de todos os países.
3) Palavra-chave distinct (select-from). Obter apenas os pibs distintos entre si.
4)Extraindo valores calculados. O PIB está expresso em unidades de bilhões de dólares. Obtenha o nome do país
e o pib expresso em bilhões de reais, sabendo que a taxa de conversão de dólar para real é: 1 dolar = 1,8 reais
5) Selecionando todos os campos de uma tabela. Obter todos os dados da tabela PaisMineral.
6)Condição composta na cláusula where. Obter todos os campos da tabela PaisMineral apenas para os casos em
que a reserva é maior que 400000 e a producao é maior que 200.
7) Extraindo dados ordenados. Obter todos os dados da tabela PaisMineral:
a) Ordenados em ordem crescente do nome do mineral.
b) Ordenados em ordem decrescente do nome do país.
8) Consultas envolvendo mais que uma tabela (inner join). Obter uma listagem dos nomes dos países e dos
minerais que produzem, com o valor de cada mineral.
/* Em uma consulta do tipo inner join somente registros das duas tabelas que possuírem o mesmo valor para um
determinado campo (FK-PK) são retornados. */
81
9) Consultas envolvendo mais que uma tabela (right join). Obter uma listagem dos nomes dos países e dos
minerais que produzem, com o valor de cada mineral. Listar inclusive aqueles minerais que não são produzidos por
nenhum país.
10) Outras condições, além da condição de ligação na cláusula where. Obter uma listagem dos nomes dos
países e dos minerais que produzem, com o valor de cada mineral, apenas para aqueles minerais cujo quilo vale
mais do que 100 dólares.
11) Ligação de uma tabela consigo própria. Obter o nome e o valor dos minerais que têm valor superior ao de
algum outro mineral, bem como o nome e o valor do mineral cujo valor é inferior. Ordenar, em primeiro lugar,
pelos minerais de valor superior em ordem decrescente e, em segundo lugar, pelos minerais de valor inferior, em
ordem decrescente.
12) Ligação de três tabelas. Obter os nomes dos países e dos minerais que eles produzem, bem como os pibs dos
países e os valores dos minerais.
13) Ligação de três tabelas. Obter os nomes dos países e dos minerais que eles produzem, bem como os pibs dos
países e os valores dos minerais. Listar também tanto aqueles minerais para os quais não consta nenhum país que
os produza e aqueles países para os quais não consta nenhum mineral que eles produzam.
14) Função count. Contar o número de Países que produzem Ouro.
15) Função avg. Obter a média do pib dos países cadastrados.
16) Função max. Obter o maior pib dentre os países cadastrados.
17) Função min. Obter o menor valor dentre os minerais cadastrados.
18) Função soma. Obter a soma dos valores de todos os minerais cadastrados.
19) Cláusula GROUP BY. Obter o nome de todos os países que produzem minerais e a quantidade de minerais
que eles produzem.
Obter o nome de todos os minerais produzidos por algum país e a reserva total destes minerais considerando todos
os países que os produzem.
20) Cláusula GROUP BY com HAVING. Obter o nome de todos os países que produzem minerais e a
quantidade de minerais que eles produzem apenas para aqueles países que produzem mais de um mineral.
21) Usando o LIKE e o NOT LIKE. Obter o nome dos minerais que se iniciam com a letra P.
Obter o nome dos países que não possuem a letra a no seu nome.
Obter o nome dos países que possuem exatamente 5 letras no seu nome.
22) Extração de dados envolvendo valores NULL. Após executar a seguinte inserção:
insert into Mineral(Nome) values('Manganês')
obtenha uma listagem dos minerais cujo valor é NULL.
23) Subconsultas usando IN e NOT IN. Obter os nomes dos minerais e seus valores apenas para aqueles que
constam serem produzidos por algum país:
82
Obter os nomes dos minerais e seus valores apenas para aqueles que não constam serem produzidos por algum
país:
24) Subconsultas com outros operadores de comparação além do IN. Obter os nomes dos minerais e seus
valores apenas para aqueles que possuem um valor superior ao do Ouro:
25) Subconsultas usando SOME ou ANY. Obter os nomes dos minerais apenas para aqueles que possuem uma
reserva maior ou igual ao de algum dos minerais produzidos no Chile (e depois Peru):
26) Subconsultas usando ALL. Obter os nomes dos minerais apenas para aqueles que possuem uma reserva
superior ao de todos os minerais produzidos nos Estados Unidos:
27) Subconsultas com múltiplos níveis de aninhamento. Obter os nomes dos países e seus pibs apenas para
aqueles que possuem um pib maior do que algum dentre os países que produzem Ouro:
28) Subconsultas usando EXISTS e NOT EXISTS. Obter os nomes dos minerais e seus valores apenas para
aqueles que constam serem produzidos por algum país:
Obter os nomes dos minerais e seus valores apenas para aqueles que não constam serem produzidos por algum
país:
29) Subconsultas com UNION. Obter uma listagem dos minerais que são produzidos pelos Estados Unidos ou
pelo Brasil:
Algumas Questões de Concursos Públicos
1) (FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da Informação)
No Modelo Relacional de Dados, o mecanismo fundamental para manter a consistência dos dados e evitar registros
órfãos é denominado
a) Integridade Relacional.
b) Normalização.
c) Integridade Referencial.
d) Dependência Funcional.
e) Integridade de Chave.
2) (FGV - 2009 - MEC - Administrador de Banco de Dados) As restrições de integridade resguardam o Banco de
Dados contra danos acidentais, assegurando que mudanças feitas por usuários autorizados não resultem na perda de
consistência de dados.
A restrição de integridade, na qual um valor que aparece em uma relação para um determinado conjunto de
atributos aparece também em outro conjunto de atributos em outra relação (tabela), é conhecida por:
a) Integridade de Duplicação.
b) Integridade de Domínio.
c) Integridade Referencial.
d) Integridade de Chave.
e) Integridade de Vazio.
3)(FCC - 2010 - MPE-RN - Analista de Tecnologia da Informação - Banco de Dados)
NÃO se trata de uma operação executada com a linguagem de manipulação de dados:
a) Especificação do esquema do banco de dados.
b) Recuperação da informação armazenada.
c) Inserção de novas informações.
83
d) Exclusão de informações.
e) Modificação de dados armazenados.
4) (FGV - 2008 - Senado Federal - Analista de Suporte de Sistemas)
No banco de dados do Senado Federal, que contém as tabelas FUNCIONARIOS e ANALISTAS, ao se cadastrar
um Analista é feita a verificação se a matrícula do funcionário que foi digitada já existe na tabela
FUNCIONARIOS. Se não existir, o cadastro do Analista não será aceito. Entretanto, existe um recurso que garante
a execução das seguintes tarefas:
I. Quando a matrícula do funcionário for alterada na tabela FUNCIONARIOS, pode-se configurar para o banco de
dados atualizar, automaticamente, todos as tuplas de matrículas dos funcionários na tabela ANALISTAS, de tal
forma que não fiquem registros órfãos, isto é, registros de ANALISTAS com uma matrícula do funcionário para o
qual não existe mais um correspondente na tabela FUNCIONARIOS. Esse procedimento é conhecido como
"Propagar atualização dos campos relacionados".
II. Quando uma matrícula do funcionário for excluída da tabela FUNCIONARIOS, pode-se configurar para que o
banco de dados exclua, automaticamente, na tabela ANALISTAS, toda tupla de Analista para o funcionário que
está sendo excluído. Esse procedimento é conhecido como "Propagar exclusão dos registros relacionados".
O recurso acima mencionado é denominado Integridade:
a) referencial.
b) globalizada.
c) consistente.
d) particionada.
e) segmentada.
5) (FCC - 2009 - TJ-PA - Analista Judiciário - Análise de Sistemas – Desenvolvimento) A proposição "um banco
de dados não pode conter valores de chaves estrangeiras sem correspondentes" remete ao conceito de
a) restrição de atributo.
b) restrição de tipo.
c) unicidade.
d) irredutibilidade.
e) integridade referencial.
6) (Prova: CESGRANRIO - 2010 - Petrobrás - Analista de Sistemas Júnior - Infra-Estrutura) Seja o seguinte
esquema de banco de dados.
Cliente(IdCliente: Integer, Nome: Varchar(120));
Pedido(IdPedido: Integer, Dia: Integer, Mes: Integer, Ano: Integer);
Cliente_Pedido(IdCliente: Integer referencia Cliente(IdCliente), IdPedido: Integer referencia Pedido(IdPedido));
Item(IdProduto: Integer referencia Produto(IdProduto), IdPedido: Integer, Quantidade: Integer);
Produto(IdProduto: Integer, Nome: Varchar(100));
Considere que os atributos sublinhados correspondam à chave primária da respectiva relação e os atributos que são
seguidos da palavra "referencia" sejam chaves estrangeiras. Considere ainda que existam as seguintes tuplas no
banco de dados:
Cliente_Pedido(30, 2);
Cliente_Pedido(15, 3);
Produto(2, "Caneta");
Produto(4, "Caderno");
Qual opção apresenta somente tuplas válidas para o esquema apresentado?
84
a) Pedido (30, 2, 2, 2010);
Item (30, 4, 2);
b) Pedido (2, 1, 3, 2010);
Cliente (4, "Marcelo de Almeida");
c) Cliente (30, "Simone Cunha");
Item (2, 2, 15);
d) Cliente (2, "Pedro Santos");
Cliente (3, "Marta Ramos");
e) Item (2, 3, 5);
Item (3, 4, 10);
7) (UFPR - 2010 - UFPR - Analista de Tecnologia da Informação) No modelo relacional de administração de
dados, uma relação pode ter um conjunto de atributos que contém valores com mesmo domínio de um conjunto de
atributos que forma a chave primária de uma outra relação. Esse conceito refere-se à:
a) integridade de chave.
b) integridade de atributo.
c) integridade de entidades.
d) integridade referencial.
e) integridade de tuplas
85
Download