Professional Documents
Culture Documents
Banco de Dados
AULA 00
▪
▪
▪
▪
2.
3.
4.
5.
7.
8.
9.
10.
AULA 01
▪
»
▪
»
»
▪
»
»
▪
»
»
»
▪
»
»
▪
»
▪
»
−
»
−
▪
»
−
14 Edmilson Campos (edmilson.campos@ifrn.edu.br)
Modelo Modelo Modelo
conceitual lógico físico
▪
▪
▪
»
»
▪
TipoDeProduto(CodTipoProd,DescrTipoProd)
Produto(CodProd,DescrProd,PrecoProd,CodTipoProd)
CodTipoProd referencia TipoDeProduto
»
−
−
▪
AULA 02
Abordagem
Modelo Conceitual
▪
▪
▪
»
▪
»
▪
»
−
»
−
▪
»
−
»
−
PESSOA
Nome da
entidade
»
»
»
PESSOA
CASAMENTO
PESSOA
marido esposa
CASAMENTO papel no
relacionamento
10
10 ©Carlos A. Heuser
Auto-relacionamento diagrama de ocorrências
p3 p7
p1
PESSOA p6 p8
p2 p4 p5
marido
marido
marido esposa esposa
esposa
CASAMENTO
p1,p3
p6,p8
▪
»
»
▪
»
»
expressa
expressa queque
a umanão há um limite
ocorrência superior para
de EMPREGADO
o número
(entidade de ocorrências
do lado oposto de
da anotação)
pode estar associada no
EMPREGADO máximo uma
associadas a
(“1”) ocorrência
uma de DEPARTAMENTO
ocorrência de
DEPARTAMENTO
▪
»
▪
»
»
»
EMPREGADO
PESSOA 1
1 1
marido esposa ALOCAÇÃO
CASAMENTO
1
MESA
EMPREGADO 1 n DEPENDENTE
Nomenclatura:
• uso de verbos
• entidades dão o nome
EMPREGADO
supervisor supervisionado
1 n
SUPERVISÃO
n n
PEÇA CAPACIDADE FORNECEDOR
PRODUTO
composto componente
n n
COMPOSIÇÃO
CIDADE DISTRIBUIDOR
n 1
A cardinalidade “1”
DISTRIBUIÇÃO refere-se a um par
(cidade, fornecedor)
n
PRODUTO
»
»
▪
»
»
(0,1)
m1 m4 m6
MESA
m3 m5
m2
liberada liberadora
(0,n) (0,n)
DEPARTAMENTO RESPONSÁVEL DISCIPLINA
(1,1) (0,n)
(0,n)
DISCIPLINA
-CURSO
(0,n)
(0,n) (1,1)
ALUNO INSCRIÇÃO CURSO
PROJETO
tipo
código
nome
▪
»
−
»
CLIENTE CLIENTE
nº de parcelas
(0,1) (0,n)
FINANCEIRA FINANCIAMENTO VENDA
taxa de juros
código capacidade
PESSOA nome PRATELEIRA número do corredor
endereço número da prateleira
número de
código nome sequência nome
(1,1) (0,n)
EMPREGADO DEPENDENTE
Observar a linha
entidade fraca
mais densa
(1,1)
(0,n)
EMPRESA número da
empresa
(1,1)
(0,n)
FILIAL número da
filial
n n
ENGENHEIRO ALOCAÇÃO PROJETO
(1,n) (0,n)
MÉDICO CONSULTA PACIENTE
data/hora
Entidade
especializada
PESSOA PESSOA CGC
Herda as sexo
FÍSICA JURÍDICA tipo de
propriedades da CIC organização
entidade genérica
VEÍCULO Identificador de
veículo definido aqui
VEÍCULO VEÍCULO
TERRESTRE AQUÁTICO
Herança
múltipla
VEÍCULO VEÍCULO
TERRESTRE AQUÁTICO
Qual seria o
identificador desta
entidade?
nome
CLIENTE
código
PESSOA PESSOA
FÍSICA JURÍDICA
necessário em
especialização FUNCIONÁRIO
parcial
tipo de indica que nem todo
funcionário p FUNCIONÁRIO é
MOTORISTA ou
SECRETÁRIA
MOTORISTA SECRETÁRIA
Uma instância de
PESSOA pode aparecer
PESSOA em mais de uma de suas
especializações
n n
MÉDICO CONSULTA PACIENTE
PRESCRIÇÃO liga
com quem?
n
PRESCRIÇÃO
MEDICAMENTO
(1,1) (1,1)
n n
CONSULTA
n
PRESCRIÇÃO
MEDICAMENTO
n n
MÉDICO CONSULTA PACIENTE
entidade
n associativa
PRESCRIÇÃO
MEDICAMENTO
AULA 03
Abordagem
Modelo Lógico
▪
▪
»
» tabela ou relação
coluna ou atributo
▪
−
»
»
▪
»
»
»
Chave primária
13 Edmilson Campos (edmilson.campos@ifrn.edu.br)
Chave estrangeira: Validação pelo SGBD
1.
2.
»
3.
chave estrangeira
referencia a chave
primária da própria
tabela
▪
»
▪
»
▪
»
»
»
»
AULA 04
Engenharia Ciclo de
reversa de Projeto lógico
reengenharia de BD relacional
BD relacional de BD
Modelo relacional
(lógico)
Transformação
Conhecimento
sobre a aplicação
ER para
relacional
▪
▪
»
Cliente (CodCliente,Nome,NomeContato)
ClienteEnder (CodCliente,Endereço,Telefone)
CodCliente referencia Cliente
▪
»
Pessoa (CodigoPess,Nome,Endereço,DataNasc,DataAdm)
número
código nome sequência nome
(1,1) (0,n)
EMPREGADO DEPENDENTE
Dependente (CodigoEmp,NoSeq,Nome)
(0,n)
número do
empregado
EMPREGADO DEPENDENTE
(1,1) (0,n)
nome
número de nome
sequência
▪
»
▪
»
»
−
»
▪
»
−
»
−
AULA 05
Implementação de relacionamentos
Tradução de relacionamentos do modelo conceitual para o lógico
▪
»
»
»
▪
Tradução
Traduçãodas
do
Engenheiro (CodEng, Nome) Projeto (CodProj, Título)
relacionamento
entidades
Atuação (CodEng,CodProj,Função)
CodEng referencia Engenheiro
CodProj referencia Projeto
(1,1) (0,n)
DEPARTAMENTO LOTAÇÃO EMPREGADO
Data da
lotação
Código Nome Código Nome
Tradução do
relacionamento
Tradução das
Departamento (CodDept,Nome) Empregado (CodEmp,Empregado
Nome, CodDept,
(CodEmp,Nome)
DataLota)
entidades
CodDept referencia Departamento
Data
Código Nome Instalação Ender
(0,1) (0,1)
±
(0,1) (1,1)
±
±
(1,1) (1,1) ± ±
Convenção:
- Alternativa preferida
± - Pode ser usada – 1ª opção
Pode ser usada – 2ª opção
±
-
- Não cabe
(0,1) (0,1)
HOMEM CASAMENTO MULHER
Tradução do
relacionamento
(0,1) (0,1)
HOMEM CASAMENTO MULHER
Tradução do
Tradução das
Homem (IdentH,Nome) relacionamento Mulher (IdentM,Nome)
entidades
▪
»
▪
»
»
▪
Tradução do
relacionamento
CartãoCorrentista(CodCartão,CodCorrent)
CodCorrent referencia Correntista
CodCartão referencia Cartão
»
»
»
▪
»
»
»
Data
Nome Instalação Ender
Código
▪
»
»
»
(0,1) (_,n)
±
(1,1) (_,n)
Convenção:
- Alternativa preferida
± - Pode ser usada – 1ª opção
- Não cabe
(1,1) (_,n)
DEPARTAMENTO LOTAÇÃO EMPREGADO
Data
lotação
Código Nome Código Nome
(1,1) (_,n)
DEPARTAMENTO LOTAÇÃO EMPREGADO
Data
lotação
Código Nome Código Nome
Tradução do
relacionamento
taxa de juros
Código Nome Id Data
taxa de juros
Código Nome Id Data
Tradução do
relacionamento
taxa de juros
Código Nome Id Data
Tradução do
Tradução das
relacionamento
Financeira (CodFin, Nome) Venda (IdVend, Data)
entidades
Fianciam (IdVend,CodFin,NoParc,TxJuros)
IdVend referencia Venda
CodFin referencia Financeira
(_n) (_,n)
Convenção:
- Alternativa preferida
- Não cabe
(0,n) (0,n)
ENGENHEIRO ATUAÇÃO PROJETO
AULA 06
Implementação de generalização/especialização
Tradução da relações de generalização/especialização do
modelo conceitual para o lógico
▪
»
»
▪
»
código
px código nome
CREA
SECRETÁRIA MOTORISTA
ENGENHEIRO
(1,n) carteira de
habilitação (0,n) (0,n)
DOMÍNIO
PARTICIPAÇÃO
(0,n) (1,1)
(0,n)
PROCESSADOR RAMO DA
DE TEXTOS ENGENHARIA PROJETO
▪
»
»
»
»
»
»
código
px código nome
CREA
SECRETÁRIA MOTORISTA
ENGENHEIRO
(1,n) carteira de
habilitação (0,n) (0,n)
DOMÍNIO
PARTICIPAÇÃO
(0,n) (1,1)
PROCESSADOR RAMO DA (0,n)
DE TEXTOS ENGENHARIA PROJETO
CREA
SECRETÁRIA MOTORISTA
ENGENHEIRO
(1,n) carteira de
habilitação (0,n) (0,n)
DOMÍNIO
PARTICIPAÇÃO
(0,n) (1,1)
PROCESSADOR RAMO DA (0,n) Depto (CodigoDept, Nome)
DE TEXTOS ENGENHARIA PROJETO ProcessTexto (CodigoProc, Nome)
Ramo (CodigoRamo, Nome)
código nome código nome código nome Projeto (CodigoProj, Nome)
Domínio (CodigoEmp,CodigoProc)
CREA CodigoEmp referencia Emp
SECRETÁRIA MOTORISTA CódigoProc referencia ProcessTexto
ENGENHEIRO
(1,n) carteira de Participação (CodigoEmp,CodigoProj)
habilitação (0,n) (0,n)
CodigoEmp referencia Emp
DOMÍNIO CodigoProj referencia Projeto
PARTICIPAÇÃO
(0,n) (1,1)
PROCESSADOR RAMO DA (0,n) Depto (CodigoDept, Nome)
DE TEXTOS ENGENHARIA PROJETO ProcessTexto (CodigoProc, Nome)
Ramo (CodigoRamo, Nome)
código nome código nome código nome Projeto (CodigoProj, Nome)
»
»
▪
»
−
▪
»
»
código Engenheiro(CodigoEmp,Nome,CPF,CodigoDept,
px Tabela com todos os
código nome CREA,CodigoRamo)
dados dos engenheiros CodigoDept referencia Depto
CodigoRamo referencia Ramo
CREA
SECRETÁRIA Domínio (CodigoEmp,CodigoProc)
MOTORISTA
ENGENHEIRO CodigoEmp referencia Emp
(1,n) carteira de CodigoProc referencia ProcessTexto
habilitação (0,n) (0,n)
DOMÍNIO Participação (CodigoEmp,CodigoProj)
PARTICIPAÇÃO CodigoEmp referencia Emp
(0,n) (1,1) CodigoProj referencia Projeto
PROCESSADOR RAMO DA (0,n)
DE TEXTOS PROJETO Depto (CodigoDept, Nome)
ENGENHARIA
ProcessTexto (CodigoProc, Nome)
nome Ramo (CodigoRamo, Nome)
código nome código código nome
Projeto (CodigoProj, Nome)
AULA 08
▪
»
−
»
−
»
−
▪
»
»
−
»
−
»
−
»
−
▪
▪
▪
AULA 09
▪
»
»
»
UPDATE tabela
SET coluna = conteúdo [, coluna = conteúdo, ... ]
[ WHERE condição ]
Todas as músicas
serão excluídas DELETE FROM Musica;
AULA 10
▪
»
»
»
»
▪
Nome da tabela em que Indica que devem ser Lista de colunas que
será realizada a busca mostradas todas as devem ser mostradas
colunas da tabela
Ordenando resultados
primeiramente pelo
SELECT Codigo_CD, Nome_CD código da gravadora e
FROM CD em seguida pelo nome
ORDER BY Codigo_Gravadora, Nome_CD do CD
▪
»
»
»
»
SELECT Nome_CD, Preco_Venda, Codigo_Gravadora
FROM CD
WHERE Preco_Venda > 10 AND Codigo_Gravadora = 2
»
SELECT Nome_CD, Preco_Venda, Codigo_Gravadora
FROM CD
WHERE Preco_Venda > 11 OR Codigo_Gravadora = 3
»
SELECT Nome_CD, Preco_Venda
FROM CD
WHERE NOT ( Preco_Venda < 15)
»
SELECT Nome_Gravadora, Endereco SELECT Nome_Gravadora, Endereco
FROM Gravadora FROM Gravadora
WHERE Endereco IS NULL WHERE Endereco IS NOT NULL
»
SELECT * FROM Autor
WHERE Codigo_Autor IN (1,10,20)
AULA 11
▪
▪
▪
»
»
»
»
»
2 Edmilson Campos (edmilson.campos@ifrn.edu.br)
▪
»
SELECT COUNT(*) FROM Gravadora Utilização da palavra-
chave “AS” serve para
nomear coluna de
SELECT COUNT(*) AS QUANTIDADE
resultado
FROM Gravadora
»
SELECT MIN(Preco_Venda)
FROM Cd
»
SELECT MAX(Preco_Venda)
FROM Cd
» Listagem de quantas
música há em cada
CD, agrupadas pelo
SELECT Codigo_CD, COUNT(*) AS Quantidade código do CD
FROM FAIXA
GROUP BY Codigo_CD
Listagem com preço
médio de venda de
cada CD agrupado
por Gravadora
»
SELECT Codigo_Gravadora, AVG(Preco_Venda) AS Média, COUNT(*) AS Quantidade FROM Cd
GROUP BY Codigo_Gravadora
Listagem com a
quantidade CDs e média
O comando “GROUP
de preço dos CDs de
BY” vem antes do
cada gravadora
comando “ORDER BY”
»
SELECT Codigo_Musica, COUNT(*) AS Quantidade
FROM MUSICA_AUTOR
WHERE Codigo_Musica < 15
GROUP BY Codigo_Musica
»
SELECT Codigo_Musica, COUNT(*) AS Quantidade
FROM MUSICA_AUTOR
GROUP BY Codigo_Musica
HAVING Codigo_Musica < 15
AULA 12
»
»
Tabela Funcionário
Cod_Func Nome_Func Sexo_Func Sal_Func Data_CadFunc
1 Salvador M 7000.00 03/01/1995
2 Antônio M 6000.00 06/05/1998
3 Antonieta F 6500.00 07/08/1998
4 Eduardo M 4000.00 06/08/2000
5 Leny F 3000.00 06/08/2001
▪
•
•
•
•
▪
»
»
▪
» SELECT *
FROM Pai INNER JOIN Filho
ON Pai.Cod_Pai = Filho.Cod_Pai
▪
SELECT Pai.Nome_Pai AS ‘Nome do Pai’,
Esse consulta retorna
Filho.Nome_Filho AS ‘Nome do Filho’, todos os filhos com
Filho.Sexo_Filho AS Sexo pais registrados ou
FROM Pai RIGHT OUTER JOIN Filho não no sistema
ON (Pai.Cod_Pai = Filho.Cod_Pai)
▪
SELECT Pai.Nome_Pai AS ‘Nome do Pai’,
Filho.Nome_Filho AS ‘Nome do Filho’,
Filho.Sexo_Filho AS Sexo
FROM Pai FULL OUTER JOIN Filho
ON (Pai.Cod_Pai = Filho.Cod_Pai)
▪
Tabela Pedido Tabela Material
Num_Ped Data_Ped Cod_Mat Nome_Mat
1 24/06/2002 1 Caderno
2 06/08/2002 2 Lápis
3 Borracha
4 Caneta
Select Pedido.Num_Ped,
Material.Nome_Mat
FROM Pedido CROSS JOIN Material
AULA 13
▪
▪
»
−
»
−
»
−
SELECT secundário
ou interno
▪
SELECT NOME_CD AS ‘Nome do CD’,
PRECO_VENDA AS Preço
FROM CD
WHERE PRECO_VENDA > (SELECT AVG(PRECO_VENDA) FROM CD)
▪
SELECT CODIGO_GRAVADORA AS ‘Código da Gravadora’,
NOME_CD AS ‘Nome do CD’,
PRECO_VENDA AS Preço
FROM CD a
WHERE PRECO_VENDA > (SELECT AVG(PRECO_VENDA) FROM CD
WHERE CODIGO_GRAVADORA = a.CODIGO_GRAVADORA)
▪
SELECT CODIGO_GRAVADORA AS ‘Código da Gravadora’,
MIN(PRECO_VENDA) AS ‘Menor Preço’
FROM CD
GROUP BY CODIGO_GRAVADORA
HAVING MIN(PRECO_VENDA) > (SELECT PRECO_VENDA FROM CD
WHERE CODIGO_CD = 6)
▪
SELECT CODIGO_GRAVADORA AS ‘Código da Gravadora’,
MAX(PRECO_VENDA) AS ‘Preço máximo’
FROM CD a
GROUP BY CODIGO_GRAVADORA
HAVING MIN(PRECO_VENDA) > (SELECT AVG(PRECO_VENDA) FROM CD
WHERE CODIGO_GRAVADORA = CODIGO_GRAVADORA)
▪
SELECT CODIGO_GRAVADORA AS Código,
NOME_GRAVADORA AS Gravadora
FROM GRAVADORA
WHERE EXISTS (SELECT * FROM CD
WHERE CD.CODIGO_GRAVADORA = GRAVADORA.CODIGO_GRAVADORA)
»
»
»
▪
Exibir os CDs que têm preço inferior a
qualquer outro da gravadora, mas que
SELECT CODIGO_CD AS Código,
não sejam da gravadora 2
NOME_CD AS Nome,
PRECO_VENDA AS Preço
FROM CD
WHERE PRECO_VENDA < ANY (SELECT PRECO_VENDA FROM CD
WHERE CODIGO_GRAVADORA = 2)
AND CODIGO_GRAVADORA !=2
▪
Exibir os nomes dos CDs com seus
respectivos preços de venda e o preço
SELECT a.NOME_CD AS 'Nome do CD',
médio da Gravadora de cada CD
a.Preco_Venda AS 'Preço de Venda',
b.Preco_Medio AS 'Preço Médio'
FROM CD a, (SELECT CODIGO_GRAVADORA,
AVG(PRECO_VENDA) AS PRECO_MEDIO
FROM CD
GROUP BY CODIGO_GRAVADORA) b
WHERE a.CODIGO_GRAVADORA = b.CODIGO_GRAVADORA
AND a.PRECO_VENDA > b.PRECO_MEDIO