Upload
internet
View
111
Download
2
Embed Size (px)
Citation preview
Banco de Dados Geográficos
Modelo Relacional, SQL, Mapeamento ER-Relacional e Normalização
Disponível em http://www.dpi.inpe.br/cursos/ser303
Junho, 2005
Karine Reis Ferreira – [email protected] Câmara – [email protected] Ribeiro de Queiroz – [email protected]
Modelo Orientado a Objetos
Características (conceitos OO ) Coleção de objetos Objetos contêm atributos e métodos Objetos de mesmo tipo são agrupados em classes Relacionamentos entre classes:
Generalização e especialização Agregação Composição
Modelo Orientado a Objetos
Diagrama UML
Modelo Relacional
Representa bancos de dados relacionais Dados são armazenados em tabelas compostas por
colunas e linhas
PROPRIETARIO
CPF NOME RUA NUMERO BAIRRO
08940256 JOÃO DA SILVA SAO JOAO 180
03727298 HENRIQUE CARDOSO IMIGRANTE 1700 VILA 12
97260089 JOSÉ DE SOUZA SAO JOAO 35
CENTRO
CENTRO
NUMERO PROPRIETARIO_CPF AREA_TOTAL AREA_CONST
00001 08940256 400.000 0
00003 03727298 150.000 75.00
00039 03727298 500.000 0
LOTE
Modelo Relacional
Características: Consiste em um conjunto de tabelas ou relações
formadas por linhas e colunas
Cada coluna (campo): Representa um atributo Está associada a um domínio
Cada linha (registro ou tupla): Representa um relacionamento entre um conjunto
de valores para cada atributo
Modelo Relacional
Conceito de relação Define uma tabela do banco de dados Domínio de um atributo: conjunto de possíveis valores
Ex.: D1 = { x | x -5 e x 5 }
D2 = { y | y 0 }
Modelo Relacional
Conceito de relação Dados os domínios D1, D2, ..., Dn não necessariamente
distintos, uma relação é definida como:
R = { (d1, d2,..., dn) | d1 D1, d2 D2,..., dn Dn }
O conjunto (d1, d2,..., dn) de valores ordenados define uma tupla
Uma relação é o conjunto de n-tuplas ordenadas, onde n define o grau da relação
Atributo Domíniocpf inteiro longo positivonome conjunto de caracteresrua conjunto de caracteresnumero inteiro positivobairro conjunto de caracteres
Modelo Relacional
PROPRIETARIO
CPF NOME RUA NUMERO BAIRRO
08940256 JOÃO DA SILVA SAO JOAO 180
03727298 HENRIQUE CARDOSO IMIGRANTE 1700 VILA 12
97260089 JOSÉ DE SOUZA SAO JOAO 35
CENTRO
CENTRO
Exemplo de relação
Modelo Relacional
Super-chave: um ou mais atributos que permitem identificar cada
registro da tabela como único. Chave candidata:
corresponde a super-chave mínima, ou seja não existe sub-conjunto da super-chave.
{ cpf } chave candidata? { cpf, nome } chave candidata?
Chave primária: chave candidata escolhida no projeto da tabela do
banco
Chave primária: Coluna ou combinação de colunas cujos valores
distinguem uma linha das demais dentro de uma tabela
Modelo Relacional
CPF NOME RUA NUMERO BAIRRO
08940256 JOÃO DA SILVA SAO JOAO 180
03727298 HENRIQUE CARDOSO IMIGRANTE 1700 VILA 12
97260089 JOSÉ DE SOUZA SAO JOAO 35
CENTRO
CENTRO
chave primária
PROPRIETARIO
Chave primária: Coluna ou combinação de colunas cujos valores
distinguem uma linha das demais dentro de uma tabela
Modelo Relacional
RUA TRECHO NUM_INICIAL NUM_FINAL BAIRRO
SAO JOAO TRC01 0 180
SAO JOAO TRC02 190 1700 CENTRO
IMIGRANTES TRC01 0 500
CENTRO
VILA 1
chave primária composta
RUA
Modelo Relacional
Chave estrangeira Coluna ou combinação de colunas, cujos valores
aparecem necessariamente na chave primária de uma outra tabela.
Mecanismo que permite a implementação de relacionamentos em um banco de dados relacional.
Modelo Relacional
Chave estrangeira
MATRICULA NOME CURSO
98765 João MAT
67765 José BIO
84562 Maria ENG
34256 Luis INFO
3452672 Ana MAT
34529 Luana MAT
CURSOID TITULO DURAÇÃO
INFO Informática Indust. 4
BIO Biologia 4
ENG Engenharia Civil 5
MAT Licenciatura Mat. 4
Curso
Aluno
Obs.: Através do relacionamento, evitamos a repetição de informações.
relacionamento
Modelo Relacional
Chave estrangeira Uma chave estrangeira não precisa ser uma chave
primária na sua relação.
Uma chave estrangeira não precisa ter o mesmo nome do que a chave primária correspondente na outra tabela (apenas o mesmo domínio).
Modelo Relacional Chave estrangeira impõe restrições que devem ser
garantidas ao serem executadas no BD: Inclusão de uma linha na tabela que contém a chave
estrangeira: Garantir que o valor da chave estrangeira exista na
chave primária da outra tabela.
Alteração do valor da chave estrangeira: O novo valor deve aparecer na coluna da chave
primária referenciada.
Modelo Relacional Chave estrangeira impõe restrições que devem ser
garantidas ao serem executadas no BD: Exclusão de uma linha da tabela que contém a chave
primária referenciada por uma chave estrangeira: Não se exclui a linha caso exista um valor na tabela
com a chave estrangeira. Remove-se também a linha com o valor de chave
estrangeira. Valor da chave estrangeira é ajustado como NULL.
Modelo Relacional Chave estrangeira impõe restrições que devem ser
garantidas ao serem executadas no BD: Alteração do valor da chave primária referenciada por
alguma chave estrangeira: Propagar a modificação Não deixar que seja feita a modificação
Restrições de integridade Uma das funcionalidades básicas que todo SGBD deve
oferecer.
É uma regra de consistência de dados que é garantida pelo SGBD.
Tipos de Restrições: Restrição de domínio Integridade de chave Integridade Referencial
Modelo Relacional
Álgebra Relacional
Conjunto de operações que usam uma ou duas relações como entrada e geram uma relação de saída operação (REL1) REL2
operação (REL1,REL2) REL3
Operações básicas: Operações unárias:
seleção, projeção, renomeação
Operações binárias: produto cartesiano, união e diferença
Operadores da Álgebra Relacional
Seleção: seleciona tuplas que satisfazem um certo predicado ou
condição
Clientes
a) selecionar tuplas cujo nome = Joãonome=“João” (Clientes)
Nome Registro João 1
Maria 2
José 3
Nome Registro João 1
Operadores da Álgebra Relacional
b) selecionar as tuplas de Clientes cujo registro > 1
registro>1 (Clientes)
c) selecionar as tuplas de Clientes com registro > 1 e registro < 3
registro>1 registro < 3 (Clientes)
Nome Registro Maria 2
José 3
Nome Registro Maria 2
Operadores da Álgebra Relacional
Projeção: gera novas relações excluindo alguns atributos exemplo: projete o atributo nome sobre a relação
Clientes
nome (Clientes)
Clientes
Nome Registro João 1
Maria 2
José 3
Nome João
Maria
José
Operadores da Álgebra Relacional
União: união de atributos do mesmo domínio que estão em
relações diferentes as relações devem possuir o mesmo número de
atributos
exemplo: encontre todos os clientes da agência que possuem conta corrente ou empréstimo.
Relações existentes na agência: ContaCorrente e Emprestimo
Operadores da Álgebra Relacional
União: nome (ContaCorrente) U nome (Emprestimo)
Nome Empréstimo Paulo 100
Maria 200
Carlos 300
Nome Conta João 1
Maria 2
José 3
Nome João
Maria
José
Paulo
Carlos
=
ContaCorrente
Emprestimo
Resultado da união
Operadores da Álgebra Relacional
Diferença: tuplas que se encontram em uma relação, mas
não em outra exemplo: encontre todos clientes sem empréstimo
Nome Conta João 1
Maria 2
José 3
Nome Empréstimo Paulo 100
Maria 200
Carlos 300
Nome João
José
Resultado da diferença
=
-
ContaCorrente
Emprestimo
nome (ContaCorrente) - nome (Emprestimo)
Operadores da Álgebra Relacional
Produto Cartesiano Faz todas as combinações entre as tuplas de duas relações Gera uma nova relação formada pela união dessas
combinações Exemplo: produto cartesiano entre os clientes e os
empréstimos de Maria
Nomecc Conta Nomeemp Empréstimo João 1 Maria 200
Maria 2 Maria 200
José 3 Maria 200
emprestimo.nome = “Maria” (ContaCorrente X Emprestimo)
Operadores da Álgebra Relacional
Operadores derivados: Intersecção
Seleciona tudo que está em ambas relações Exemplo: todos os clientes que possuem
empréstimo
Nome Conta João 1
Maria 2
José 3
Nome Empréstimo Paulo 100
Maria 200
Carlos 300
Nome Maria
Emprestimo
ContaCorrente
=
Resultado da intersecção
nome (ContaCorrente) nome (Emprestimo) U
Operadores da Álgebra Relacional
Operadores derivados Junção
Inclui um produto cartesiano, seguido de uma seleção (pode ter projeção ao final)
Exemplo: nomes dos clientes com conta corrente e número de empréstimo:
contacorrente.nome, emprestimo.emprestimo
( contacorrente.nome = emprestimo.nome (ContaCorrente X Emprestimo))
contacorrente.nome, emprestimo.emprestimo
(ContaCorrente Emprestimo))
Álgebra Relacional - Resumo
SQL - Structured Query Language
Linguagem de consulta usada pela maioria de SGBD-R e SGBD-OR
Baseada na álgebra relacional É divida em:
Linguagem de definição de dados (DDL) Linguagem de manipulação de dados (DML) Definição de vistas Especificação de autorização Especificação de integridade Controle de transação
SQL - Structured Query Language
Alguns comandos em SQL
Comandos Usado para Tipo
select Consultar dados DML
insert, update, delete
Incluir, alterar e remover dados
DML
commit, rollback Controlar transações DML
create, alter, drop
Definir, alterar e remover esquemas
DDL
SQL - Structured Query Language
Definição de esquema: Comando create table
cria uma nova tabela
create table r (A1D1, A2D2, ...., AnDn,
<restrição de integridade1>,
...., <restrição de integridadek>)
A: nome do atributoD: domínio
SQL - Structured Query Language
Domínio Descrição
char(n) conjunto de n caracteres de tamanho definido
varchar(n) conjunto de n caracteres de tamanho variável
Int Inteiro
SmallInt Inteiro
numeric(p, d) real com precisão definida
real real com precisão dupla
float(n) real com precisão de pelo menos n dígitos
date data com 4 dígitos para ano e 2 dígitos para mês e dia
time hora do dia em horas, minutos e segundos
SQL - Structured Query Language
Restrições de integridade: primary key (Aj1, Aj2, ..., Ajm)
unique key (A1) foreign key (A) references T not null null check (P)
SQL - Structured Query Language
Exemplos:create table cliente
(nome char(20) not null,
endereço char(30),
cidade char(30),
primary key (nome))
create table contacorrente
(número char(10) not null,
banco char(30),
saldo real,
primary key (número),
check (saldo > 0))
SQL - Structured Query Language
Definição de esquema : comando drop table
Elimina uma tabela do banco
comando alter table Altera o esquema de uma tabela do banco
SQL - Structured Query Language
Exemplos Remover uma tabela
drop table clientes Adicionar uma nova coluna
alter table cliente add RG char(10) Alterar o tipo de uma coluna
alter table cliente modify RG char(20) Remover uma coluna
alter table cliente drop column RG
SQL - Structured Query Language
Consulta: Sintaxe do comando select :
select [distinct] {*, coluna [alias], expressões [alias], funções
[alias], ...}from {tabelas [alias],} [where condição][group by colunas][having condição][order by colunas [asc | desc]]
[ ]: opcional
{ }: pode aparecer várias vezes
| : mutuamente exclusivas (ou uma ou outra).
SQL - Structured Query Language
Opções Descrição
distinct Indica que as linhas duplicadas devem ser eliminadas do resultado
* Indica que todas as colunas de todas as tabelas da cláusula from devem ser incluídas no resultado
coluna Coluna de uma tabela listada na cláusula from que deve ser incluída no resultado
expressões Expressões aritméticas envolvendo uma ou mais colunas das tabelas listadas na cláusula from
funçõesFunções definidas em SQL como, por exemplo, funções de agregação, que calculam estatísticas sobre colunas (avg, min, max, count, etc)
SQL - Structured Query Language
Opções Descrição
alias Nome alternativo para uma coluna, expressão ou tabela
tabelas Uma ou mais tabelas envolvidas na consulta
condição(where)
Especifica um condição à qual as linhas das tabelas da cláusula from devem satisfazer para gerar uma linha do resultado
group by colunas
Indica que o resultado deve ser agrupado pelas colunas especificadas
condição(having)
Limita os grupos a serem mostrados àqueles satisfazendo a condição
order by Ordenação do resultado, podendo ser crescente (asc) ou descescente(desc)
SQL - Structured Query Language
Comando select e álgebra relacional: cláusula select
implementa o operador projeção cláusula from
implementa o produto cartesiano cláusula where
implementa o operador de seleção
SQL - Structured Query Language
Exemplos:
aluno disciplina nota
001 Banco de Dados 6.0
001 Estatística 8.0
002 Estatística 3.0
002 Metodologia 5.0
003 Banco de Dados 9.0
005 Metodologia 7.5
005 Física 4.5
Alunos
id nome
001 João
002 Maria
003 Pedro
004 Fabio
005 José
Matricula
SQL - Structured Query Language
Exemplos – consulta simples:1) Liste todos os alunos:
SELECT *FROM alunos
2) Liste em ordem alfabética quais as disciplinas oferecidas:SELECT DISTINCT m.disciplina
FROM matricula AS m
ORDER BY m.disciplina ASC
SQL - Structured Query Language
Resultado:1) Liste todos os alunos:
ID NOME---------- ------------------------ 1 João 2 Maria 3 Pedro 4 Fabio 5 Jose
2) Liste em ordem alfabética quais as disciplinas oferecidas:DISCIPLINA---------------Banco de DadosEstatísticaFísicaMetodologia
OBS: O Oracle não aceita a palavra AS nem ALIAS.
SQL - Structured Query Language
Exemplos – consulta simples:3) Selecione os códigos dos alunos que tiveram alguma nota
maior do que 1 e menor do que 4:SELECT aluno FROM matricula
WHERE nota BETWEEN 1 AND 4
SELECT aluno FROM matricula
WHERE nota >= 1 AND nota <= 4
4) Selecione os nomes dos alunos que começam com a letra “J” e que tem a letra “S”:
SELECT nome FROM alunos
WHERE nome LIKE ‘J%’
AND nome LIKE ‘%s%’
SQL - Structured Query Language
Resultado:3) Selecione os códigos dos alunos que tiveram alguma nota
maior do que 1 e menor do que 4: ALUNO
----------
2
4) Selecione os nomes dos alunos que começam com a letra “J” e que tem a letra “s”:
NOME
--------
Jose
SQL - Structured Query Language
Exemplos – operador de agregação: AVG(…): média dos valores da coluna SUM(…): soma dos valores da coluna COUNT(…): número de valores na coluna MAX(…): maior valor na coluna MIN(…): menor valor na coluna
Podem ser aplicados pra todos os registros de uma coluna ou para grupos de registros (usando o group by)
SQL - Structured Query Language
Exemplos – operador de agregação:5) Quantos alunos estão cadastrados no banco:
SELECT COUNT(*) AS num FROM alunos
6) Quantos alunos estão matriculados em cada disciplina:SELECT disciplina, COUNT(*) AS num
FROM matricula
GROUP BY disciplina
7) Qual a média das notas de cada aluno:SELECT aluno, AVG(nota) AS media
FROM matricula
GROUP BY aluno
SQL - Structured Query Language
Resultado:5) Quantos alunos estão cadastrados no banco:
NUM---------- 5
6) Quantos alunos estão matriculados em cada disciplina:DISCIPLINA NUM------------------------------------- ----------Banco de Dados 2Estatística 2Física 1Metodologia 2
7) Qual a média das notas de cada aluno: ALUNO MEDIA
---------- ---------- 1 7 2 4 3 9 5 6
SQL - Structured Query Language
Exemplos - junção: Usada quando precisamos de informações de mais de
uma tabela A cláusula from define um produto cartesiano entre as
relações
T1 INNER JOIN T2: Só retornam as linhas que ocorrem em T1 e em T2.
T1 LEFT JOIN T2: retornam todas as linhas que ocorrem em T1 e, se tiver ocorrência em T2, as linhas correspondentes de T2.
T1 RIGTH JOIN T2: retornam todas as linhas que ocorrem em T2 e, se tiver ocorrência em T1, as linhas correspondentes de T1.
SQL - Structured Query Language
Exemplos - junção:8) Liste todos os alunos e quais disciplinas eles estão
matriculados:SELECT nome, disciplina
FROM alunos INNER JOIN matricula
ON alunos.id = matricula.aluno
9) Selecione quais alunos tiveram nota menor do que 6.0:SELECT DISTINCT nome
FROM alunos RIGHT JOIN matricula
ON alunos.id = matricula.aluno
WHERE nota < 6.0
SQL - Structured Query Language
Resultado:8) Liste todos os alunos e quais disciplinas eles estão
matriculados:NOME DISCIPLINA
---------------------------------------
João Banco de Dados
João Estatística
Maria Estatística
Maria Metodologia
Pedro Banco de Dados
Jose Metodologia
Jose Física
9) Selecione quais alunos tiveram nota menor do que 6.0:NOME
--------
Maria
Jose
SQL - Structured Query Language
Exemplos - junção:10) Selecione todos os alunos e as disciplinas se o aluno
tiver matriculado:SELECT id, disciplina
FROM alunos LEFT JOIN matricula
ON alunos.id = matricula.aluno
11) Para cada aluno selecione sua maior nota e armazene essa consulta em uma nova tabela:
SELECT aluno, MAX(nota) AS notaMaxima
INTO NovaTabela
FROM alunos INNER JOIN matricula
ON alunos.id = matricula.aluno
GROUP BY aluno
SQL - Structured Query Language
Resultado:10) Selecione todos os alunos e as disciplinas se o aluno
tiver matriculado:ID DISCIPLINA
--------- -----------------
1 Banco de Dados
1 Estatística
2 Estatística
2 Metodologia
3 Banco de Dados
5 Metodologia
5 Física
4 null
11) Para cada aluno selecione sua maior nota e armazene essa consulta em uma nova tabela:
OBS: O comando INTO só funciona no Access, não funciona no Oracle nem no MySQL.
SQL - Structured Query Language
Exemplos - subconsulta:12) Selecione as disciplinas que os alunos João, Pedro e
Fábio estão fazendo:SELECT nome, disciplina
FROM alunos INNER JOIN matricula
ON alunos.id = matricula.aluno
WHERE nome IN (‘João’, ‘Pedro’, ‘Fabio’)
13) Selecione quais alunos tiveram nota menor do que 6.0:SELECT nome FROM alunos
WHERE id IN
(SELECT DISTINCT aluno
FROM matricula WHERE nota<6.0)
SQL - Structured Query Language
Resultado:12) Selecione as disciplinas que os alunos João, Pedro e
Fábio estão fazendo:NOME DISCIPLINA
-------------------------------
João Banco de Dados
João Estatística
Pedro Banco de Dados
13) Selecione quais alunos tiveram nota menor do que 6.0:NOME
--------
Maria
Jose
SQL - Structured Query Language
Exemplos – operadores de conjunto (União):14) Selecione os alunos:
(SELECT id FROM alunos)UNION
(SELECT aluno FROM matricula)
15) Selecione os alunos (mantendo os alunos repetidos): (SELECT id FROM alunos)
UNION ALL
(SELECT aluno FROM matricula)
OBS: O comando UNION e UNION ALL não funciona no MySQL.
SQL - Structured Query Language
Resultado:14) Selecione os alunos: ID---------- 1 2 3 4 5
15) Selecione os alunos (mantendo os alunos repetidos): ID ID
-------------------------- 1 2 3 4 5 1 1 2 2 3 5 5
SQL - Structured Query Language
Exemplos – operadores de conjunto (Interseção):16) Selecione somente os alunos que estão matriculados, ou
seja, que aparecem na tabela alunos e matricula:(SELECT id FROM alunos)
INTERSECT
(SELECT aluno FROM matricula)
17) Selecione somente os alunos que estão matriculados, ou seja, que aparecem na tabela alunos e matricula (mantendo os alunos repetidos): (SELECT id FROM alunos)
INTERSECT ALL
(SELECT aluno FROM matricula)
SQL - Structured Query Language
Resultado:16) Selecione somente os alunos que estão matriculados, ou
seja, que aparecem na tabela alunos e matricula: ID
---------
1
2
3
5
17) Selecione somente os alunos que estão matriculados, ou seja, que aparecem na tabela alunos e matricula (mantendo os alunos repetidos):
OBS: O comando INTERSECT não funciona no MySQL e no Access
OBS: O comando INTERSECT ALL não funciona no MySQL, no Access e no Oracle
SQL - Structured Query Language
Exemplos – having:18) Selecione os alunos que tiveram nota máxima maior que 8:
SELECT aluno, MAX(nota)
FROM matricula GROUP BY aluno
HAVING MAX(nota) > 8
19) Selecione os alunos que estão matriculados em mais de 1 disciplinas:SELECT nome, count(*)
FROM alunos AS a INNER JOIN matricul AS m
ON a.id = m.aluno
GROUP BY nome
HAVING count(*) > 1
SQL - Structured Query Language
Resultado:18) Selecione os alunos que tiveram nota máxima maior que 8:ALUNO MAX(NOTA)
---------- ----------
3 9
19) Selecione os alunos que estão matriculados em mais de 1 disciplinas:
NOME COUNT(*)
----------------------
Jose 2
João 2
Maria 2
SQL - Structured Query Language
Inserção: INSERT INTO alunos VALUES (001, 'João');INSERT INTO alunos (id, nome) VALUES (002, 'Maria');
Remoção: DELETE FROM alunos; DELETE FROM matricula WHERE disciplina = ‘Estatistica’
Alteração: UPDATE matricula SET disciplina = ‘Estatistica I’WHERE disciplina = ‘Estatistica’;
UPDATE matricula SET nota = nota + 1.5WHERE aluno = 001 AND disciplina = ‘Banco de Dados’;
SQL - Structured Query Language
Controle de transação:begin transaction
commit transaction
rollback transaction
Criação de índice:CREATE INDEX nome_idx ON alunos(nome);
CREATE INDEX discip_idx ON matricula(disciplina);
SQL - Structured Query Language
Restrições de integridade
CREATE TABLE matricula
( aluno INTEGER NOT NULL,
disciplina VARCHAR(50) NOT NULL,
nota REAL NULL
CHECK (nota => 0 AND nota <= 10),
PRIMARY KEY (aluno, disciplina),
CONSTRAINT fk_aluno FOREIGN KEY (aluno)
REFERENCES alunos(id) );
nulidade
chave primária composta
chave estrangeira
Integridade semântica
Conversão E-R Modelo Relacional
Entidades com atributos chaves bem definidos geram uma relação.
Relacionamentos podem gerar uma relação adicionando-se os atributos chaves das entidades relacionadas e os atributos do relacionamento.
Entidades com atributos chaves não bem definidos geram uma relação adicionando-se a chave da relação que dependem
Conversão E-R Modelo Relacional
Exemplo:
lote
idarea_total
possui
area_const
proprietário
nomecpf
data
1n
DER
Relações
Lote (id_lote, area_total, area_const)
Lote_proprietario (id_lote, cpf, data)
Proprietario (cpf, nome)
Conversão E-R Modelo Relacional
Modelo ER Modelo Relacional
Classe de Entidades Tabela (Relação)
Entidade Linha (Tupla)
Atributo Coluna (Atributo)
Atributo Multivalorado Tabela Auxiliar
Atributo Identificador Chave
Atributo Composto Várias Colunas
Relacionamento Ligações
Conversão E-R Modelo Relacional
Cada entidade é traduzida para uma tabela. Cada atributo (simples) da entidade define uma
coluna da tabela. A coluna correspondente ao atributo identificador é
chave primária Ex:
lote
idarea_total
area_const
Lote(id_lote, area_total, area_const)
Conversão E-R Modelo Relacional
Relacionamento A tradução do relacionamento depende da
cardinalidade das entidades que participam do relacionamento.
Formas básicas de tradução: Tabela própria Colunas adicionais dentro da tabela de
entidade
Conversão E-R Modelo Relacional
Relacionamento 1:N ou N:1
1nlote
idarea_total
pertence
area_const
quadra
areanum
Lote(id_lote, area_total, area_const, num_quadra)
Quadra(num_quadra, area)
Conversão E-R Modelo Relacional
Relacionamento N:N
Lote(id_lote, area_total, area_const)
Fronteira(id_lote, id_rua, num_inicial, num_final)
Rua(id_rua, nome)
nnlote
idarea_total
faz fronteira
area_const
rua
nomeidnum_inicial
num_final
Conversão E-R Modelo Relacional
Auto relacionamento
Lote(id_lote, area_total, area_const)
Composição(id_lote, id_lote_comp, quantidade)
lote
composto
1 N
quantidade
Conversão E-R Modelo Relacional
Relacionamento múltiplo
Lote(id_lote, area_total, area_const)
Proprietario(cpf, nome)
Contrato(id_contrato, documento)
Lote_Prop_Contr(id_lote, cpf, id_contrato, data)
lote possui proprietário
contrato_compra_venda
1n
n
Conversão E-R Modelo Relacional
EspecializaçãoSolução 1
Quadra comercial (num_quadra, area, imposto_servico)
Quadra_residencial (num_quadra, area, num_residencias)
numeroarea
quadra comercial quadra residencial
valor_imposto_servico num_residencias
quadra
e uma
Conversão E-R Modelo Relacional
EspecializaçãoSolução 2
Quadra(num_quadra, area)
Quadra comercial (num_quadra, imposto_servico)
Quadra_residencial (num_quadra, num_residencias)
numeroarea
quadra comercial quadra residencial
valor_imposto_servico num_residencias
quadra
e uma
Passos na Modelagem de BD
Requisitos: identificação dos dados
Modelagem conceitual: mapear visão do usuário em um conjunto de dados descreve entidades, atributos e relacionamentos
Implementação: esquema de banco de dados
Projeto físico: estruturas de dados, métodos de acesso, segurança
Identificação de Requisitos
Modelo Conceitual
Implementação
Projeto Físico
Projeto Lógico de BD
Normalização Processo pelo qual um esquema de tabelas (relações)
insatisfatório é quebrado de forma que seus atributos formem relações menores que sejam mais adequadas:
Sem redundância de informações Maior facilidade de manutenção
Baseado em varias regras de normalização: 1a forma normal 2a forma normal 3a forma normal
Normalização
Ex. tabela não normalizada:
num_solic data_solic cod_func nome_func cod_prod desc_prod quant_prod
001 12/06/03 func01 Joao Silva 2345 papel 3
001 12/06/03 func01 Joao Silva 2398 tinta 2
001 12/06/03 func01 Joao Silva 4300 impressora 1
solicitacao_compra
Problemas em uma tabela não normalizada: Redundância dos dados
Possui vários grupos repetidos Anomalias de inserção
Inserir um novo funcionário Inserir um novo produto
Anomalias de atualização Alterar o nome de um funcionário
Anomalias de remoção Remover um produto
Normalização
Normalização
1a Forma normal: Uma relação esta na 1FN se, e somente se, todos os
domínios contiverem apenas valores atômicos. Ou seja, uma relação está na 1FN quando seus
atributos não contém grupos de repetição
Normalização
1a Forma normal:
num_solic cod_prod desc_prod quant_prod
001 2345 papel 3
001 2398 tinta 2
001 4300 impressora 1
solicitacao_compra
num_solic data_solic cod_func nome_func
001 12/06/03 func01 Joao Silva
solicitacao_produtos
num_solic data_solic cod_func nome_func cod_prod desc_prod quant_prod
001 12/06/03 func01 Joao Silva 2345 papel 3
001 12/06/03 func01 Joao Silva 2398 tinta 2
001 12/06/03 func01 Joao Silva 4300 impressora 1
solicitacao_compra
1FN
Dependência funcional Dada uma relação R, o atributo Y de R e funcionalmente
dependente do atributo X de R (R.X R.Y)
se, e somente se, cada valor X em R for associado ao mesmo precisamente um valor Y em R ( a qualquer momento).
Ex.
cod_func nome_func
cod_prod desc_prod
num_solic, cod_prod quant_prod
Normalização
2a Forma normal: Uma relação está na segunda forma normal se, e apenas
se, estiver na 1FN, e cada atributo não-chave for totalmente dependente da chave primária.
Ocorre quando a chave primária é composta por mais de um campo.
verificar se todos os campos que não fazem parte da chave dependem de todos os campos que compõem a chave. Se algum campo depender somente de parte da chave composta, então este campo deve pertencer a outra tabela.
Normalização
2a Forma normal:
Normalização
num_solic cod_prod quant_prod
001 2345 3
001 2398 2
001 4300 1
solicitacao_produtos
cod_prod desc_prod
2345 papel
2398 tinta
4300 impressora
produtos
num_solic cod_prod desc_prod quant_prod
001 2345 papel 3
001 2398 tinta 2
001 4300 impressora 1
solicitacao_produtos
2FN
2a Forma normal - resultado:
Normalização
num_solic cod_prod quant_prod
001 2345 3
001 2398 2
001 4300 1
solicitacao_compra
num_solic data_solic cod_func nome_func
001 12/06/03 func01 Joao Silva
solicitacao_produtoscod_prod desc_prod
2345 papel
2398 tinta
4300 impressora
produtos
3a Forma normal: Um relação está na terceira forma normal se e
apenas se, estiver na 2FN, e não tiver dependências transitivas
Dependência transitiva: ocorre quando um atributo não-chave, além de depender da chave primária da tabela, depende funcionalmente de outro atributo ou combinação de atributos não-chave.
Em uma tabela na 3FN não existem atributos não-chave que tenham dependência de outros atributos não chave.
Normalização
3a Forma normal:
Normalização
solicitacao_compra
num_solic data_solic cod_func
001 12/06/03 func01
cod_func nome_func
func01 Joao Silva
funcionarios
solicitacao_compra
num_solic data_solic cod_func nome_func
001 12/06/03 func01 Joao Silva
3FN
3a Forma normal - resultado:
Normalização
num_solic cod_prod quant_prod
001 2345 3
001 2398 2
001 4300 1
solicitacao_compra
num_solic data_solic cod_func
001 12/06/03 func01
solicitacao_produtoscod_prod desc_prod
2345 papel
2398 tinta
4300 impressora
produtos
cod_func nome_func
func01 Joao Silva
funcionarios