Buscar

7 - Banco de Dados: Modelo Lógico Relacional

Prévia do material em texto

1
Modelo Relacional
e
Normalização de Dados
ENG1518 – Sistemas de Informação Gerenciais
Prof. Fernanda Baião
fbaiao@puc-rio.br
1
Slides adaptados e estendidos a partir do material dos Profs. Gustavo Moreira
Banco de dados
• É um conjunto de registros dispostos em estrutura regular que possibilita a 
reorganização dos mesmos e produção de informação. 
• Um banco de dados é usualmente mantido e acessado por meio de um software 
conhecido como Sistema Gerenciador de Banco de Dados (SGBD). Um SGBD 
corresponde a um conjunto de programas que permitem armazenar, modificar e 
extrair informação de um banco de dados. Ele age como interface entre os 
programas de aplicação e os dados físicos. 
• Normalmente um SGBD adota um modelo de dados. O mais adotado hoje em dia é 
o modelo relacional, onde as estruturas têm a forma de tabelas, compostas por 
tuplas (linhas) e colunas. Já a linguagem padrão para os bancos de dados 
relacionais é a Linguagem de Consulta Estruturada (SQL). 
• O relacionamento entre conjunto de dados (tabelas) não existe fisicamente (apenas 
lógico);
2
Mapeamento 
Objeto Relacional
http://pt.wikipedia.org/wiki/Informa%25C3%25A7%25C3%25A3o
http://pt.wikipedia.org/wiki/Sistema_Gerenciador_de_Banco_de_Dados
http://pt.wikipedia.org/wiki/Modelo_de_dados
http://pt.wikipedia.org/wiki/Modelo_relacional
http://pt.wikipedia.org/wiki/Tupla
http://pt.wikipedia.org/wiki/Padr%25C3%25A3o
http://pt.wikipedia.org/wiki/SQL
Definições
• Relação è tabela bi-dimensional, composta de linhas e colunas de dados. 
• Atributo = Coluna
• Grau de uma relação: Número de atributos. 
• Tupla (ou n-uplet): Uma linha da relação = um registro
• Chave Primária um ou mais atributos de uma tabela, cujos valores, nunca se 
repetem na tabela. Em chaves primárias, não pode haver valores nulos.
• Chave Estrangeira: um atributo em uma tabela que faz referência a chave primária 
de outra tabela. Ou seja, passa a existir uma relação entre essas duas tabelas. A 
finalidade da chave estrangeira é garantir a integridade dos dados referenciais.
• Integridade referencial: Se uma determinada tabela A possui um atributo que é 
chave estrangeira em uma tabela B, então em cada tupla da tabela A ele deve: 
• Ser igual a uma chave primária existente em B ou ter o valor nulo. 
• Ou seja, não pode existir na chave estrangeira um valor que não exista na tabela na 
qual ela é chave primária. 
3
Mapeamento 
Objeto Relacional
• Esquema de Banco de Dados Relacional: nomes das relações seguidos 
pelos nomes dos atributos, com os atributos chaves sublinhados e com as 
chaves estrangeiras identificadas. 
• Exemplo de esquema:
Aluno (Aluno_Matricula, Aluno_Nome)
Curso (Curso_ID, Curso_Nome) 
Matriculado (@Curso_ID, @Aluno_Matricula, Nota) 
Chave estrangeira: 
Curso_Id referencia Curso_Id em Curso
Aluno_Matricula referencia Aluno_Matricula em Aluno.
4
Mapeamento 
Objeto Relacional
Aluno (Aluno_Matricula, Aluno_Nome)
Curso (Curso_ID, Curso_Nome) 
Matriculado (@Aluno_Matricula, @Curso_ID, Nota) 
Chave estrangeira: 
Curso_Id referencia Curso_Id em Curso
Aluno_Matricula referencia Aluno_Matricula em Aluno.
5
Mapeamento 
Objeto Relacional
Aluno_Matricula Aluno_Nome Curso_ID Curso_Nome
Aluno_Matricula Curso_ID Nota
Aluno (Aluno_Matricula, Aluno_Nome)
Curso (Curso_ID, Curso_Nome) 
Matriculado (@Aluno_Matricula, @Curso_ID, Nota) 
Chave estrangeira: 
Curso_Id referencia Curso_Id em Curso
Aluno_Matricula referencia Aluno_Matricula em Aluno.
6
Mapeamento 
Objeto Relacional
Aluno_Matricula Aluno_Nome
123 Fernando Nogueira
456 Ana Maria Silveira
789 Fabiana Araujo
Curso_ID Curso_Nome
1 Engenharia Produção
2 Direito
Aluno_Matricula Curso_ID Nota
123 1 8,7
456 2 7,9
789 1 9,1
Aluno (Aluno_Matricula, Aluno_Nome)
Curso (Curso_ID, Curso_Nome) 
Matriculado (@Aluno_Matricula, @Curso_ID, Nota) 
Chave estrangeira: 
Curso_Id referencia Curso_Id em Curso
Aluno_Matricula referencia Aluno_Matricula em Aluno.
7
Mapeamento 
Objeto Relacional
Aluno_Matricula Aluno_Nome
123 Fernando Nogueira
456 Ana Maria Silveira
789 Fabiana Araujo
Curso_ID Curso_Nome
1 Engenharia Produção
2 Direito
Aluno_Matricula Curso_ID Nota
123 1 8,7
456 2 7,9
789 1 9,1
Derivação do diagrama de classe para o modelo relacional
Regras básicas: 
1) Toda Classe vira uma Tabela (Relação) no Modelo Relacional
2) Todo Atributo da Classe vira um Atributo (Coluna) no Modelo Relacional
3) Na derivação do Diagrama de Classe para o Modelo Relacional deve-se 
analisar o Grau (restrição de mapeamento ou cardinalidade) do 
relacionamento. 
8
Mapeamento 
Objeto Relacional
Relacionamentos 1:N (várias classes) 
• Incluir uma nova coluna como chave estrangeira. 
• A Tabela cuja a classe possui multiplicidade máxima N (ou *) carrega o identificador da 
tabela cuja a classe possui multiplicidade máxima 1. 
9
Mapeamento 
Objeto Relacional
Empregado (matricula,nome) 
Projeto (código,nome,descricao,valor,dtInicio,duração,@matricula) 
Chave Estrangeira:matricula referencia matricula em Empregado
Relacionamentos 1:N (mesma classe) 
• Incluir uma nova coluna na mesma tabela, como chave estrangeira. 
10
Mapeamento 
Objeto Relacional
Empregado (matricula, nome, @matricula_chefe)
Chave Estrangeira: matricula_chefe referencia matricula em Empregado
Relacionamentos 1:1 (várias classes, cardinalidade mínima 1) 
• Fundir em uma mesma tabela
11
Mapeamento 
Objeto Relacional
CarteiraMotorista (cpf,nome,número, categoria, dataVencimento)
Relacionamentos 1:1 (várias classes) 
• Incluir uma nova coluna como chave estrangeira. 
• A Tabela cuja a classe possui multiplicidade mínima 0 carrega o identificador da tabela cuja 
a classe possui multiplicidade mínima 1
12
Mapeamento 
Objeto Relacional
Aluno (matricula,nome,dtNascimento,@numeroArmario)
Chave Estrangeira: numeroArmario referencia numero em Armario
Armario (numero, localizacao) 
Cada aluno ocupa obrigatoriamente 1 
armario
Cada armario pode estar ocupado por 1 
aluno ou estar desocupado
Relacionamentos 1:1 (mesma classe) 
• Incluir uma nova coluna na mesma tabela, como chave estrangeira. 
13
Mapeamento 
Objeto Relacional
Pessoa (cpf, nome, @cpf_conjuge)
Chave Estrangeira: cpf_conjuge referencia cpf em Pessoa
Relacionamentos M:N (várias classes) 
• O relacionamento torna-se uma tabela, carregando seus atributos e os 
identificadores das tabelas que ele se relaciona. 
14
Mapeamento 
Objeto Relacional
Aluno (matricula, nome, dtNascimento)
Turma (codigo, anosemestre)
Cursa (@matricula, @codigo, G1,G2,G3,faltas)
Chaves Estrangeiras: matricula referencia matricula em Aluno
codigo referencia codigo em Turma
• Relacionamentos M:N (mesma classe) 
Criar nova tabela, com os identificadores da classe 
15
Mapeamento 
Objeto Relacional
Disciplina (codigo,nome,conteudo)
Pre-Requisito (@codigo_exige, @codigo_satisfaz). 
Chaves Estrangeiras: @codigo_exige referencia codigo em disciplina
@codigo_satisfaz referencia codigo em disciplina
Tradução de Relacionamentos
• Resumindo...
– 1:N
• Adição de coluna
– 1:1
• Adição de colunas
• Fusão de tabelas
– N:M
• Nova tabela
Relacionamentos de generalização 
• Opção 1: Todas as classes viram tabelas. As tabelas referentes às
subclasses carregam a chave primária da super-classe.
17
Mapeamento 
Objeto Relacional
CargaTransportada (codigo, descrição, peso, volume)
CargaTransportadaFrigorificada (@codigo, tempMin, tempMax)
Chave Estrangeira:codigo referencia codigo em CargaTransportada
CargaTransportadaPerecivel (@codigo, dtVencimento)
Chave Estrangeira:codigo referencia codigo em CargaTransportada
Relacionamentos de generalização 
• Opção 2: Todas as classes mais específicas (”folhas”) viram tabelas. 
18
Mapeamento 
Objeto Relacional
CargaTransportadaFrigorificada (codigo, descrição, peso, volume, 
temperaturaMinima, temperaturaMaxima)
CargaTransportadaPerecivel (codigo, descrição, peso, volume, dataVencimento)
Relacionamentos de generalização 
• Opção 3: Tabela única, adicionando um atributo paradesignar o subtipo
19
Mapeamento 
Objeto Relacional
CargaTransportada (codigo, descrição, peso, volume, temperaturaMinima, 
temperaturaMaxima, dataVencimento, tipo_carga)
Relacionamentos de generalização 
• Como decidir entre as opções?
20
Mapeamento 
Objeto Relacional
Relacionamentos de generalização 
• Como decidir entre as opções?
• Considerar as propriedades de completude e de disjunção de cada 
conjunto de generalização (generalization set)
• Completa x incompleta
• Disjunta x sobreposta
21
Mapeamento 
Objeto Relacional
CargaTransportada (codigo, descrição, peso, volume)
CargaTransportadaFrigorificada (@codigo, tempMin, tempMax)
Chave Estrangeira:codigo referencia codigo em CargaTransportada
CargaTransportadaPerecivel (@codigo, dtVencimento)
Chave Estrangeira:codigo referencia codigo em CargaTransportada
Relacionamentos de generalização 
• Como decidir entre as opções?
• Considerar as propriedades de completude e de disjunção de cada 
conjunto de generalização (generalization set)
• Completa x incompleta
• Disjunta x sobreposta
22
Mapeamento 
Objeto Relacional
Normalização de Dados
23
Normalização
• A normalização é um processo que tem como base as formas normais.
• Uma forma normal é uma regra à qual uma tabela deve estar conformada 
de modo a ser considerada como “bem projetada”.
– regras para estruturar relações eliminando anomalias
• Existem várias formas normais:
– 1FN
– 2FN 
– 3FN
– FNBC – Boyce/Codd
– 4FN – importante nos processos de engenharia reversa
– 5FN
n24
Normalização
Primeira Formal Normal (1FN)
Uma tabela está na primeira forma normal quando todos os seus atributos 
são atômicos
Ou seja, contêm um só valor...
As demais FN são definidas em função do conceito de ”Dependência
Funcional”…
25
Normalização
Exemplo de uma relação que não está na 1FN 
(presença de valores múltiplos em Prédio_ID)
FUNCIONARIO(Func_Matricula, Func_Funçao, Predio_IDs)
Modificando o esquema para se adequar à 1FN 
(nova tabela)
FUNCIONARIO (Func_Matricula, Func_Funçao)
ALOCACAO (Func_Matricula, Predio_ID)
26
Normalização
Func_Matricula Func_Função Predio_IDs
10 Eletricista 120, 135
11 Eletricista 120
12 Eletricista 120, 135, 140
14 Mecânico 120
Func_Matricula Func_Função
10 Eletricista
11 Eletricista
12 Eletricista
14 Mecânico
Func_Matricula Predio_IDs
10 120
10 135
11 120
12 120
12 135
12 140
14 120
Dependência Funcional (DF)
Sejam A e B subconjuntos distintos de atributos de uma mesma tabela T , 
dizemos que A determina funcionalmente B sse, para cada tupla (linha ou 
registro) t da tabela, os valores de A em t determinam os valores de B em t
DF: A è B
Ou seja:
se qualquer par de tuplas de T possui valores iguais para os atributos em A, então elas também
têm valores iguais para os atributos em B
Atributos em A são chamados de determinantes
determinam os valores dos atributos em B
A chave primária (identificador) de uma tabela T é o determinante 
funcional de todos os outros atributos de T.
Dependência Funcional
Problemas com dependência funcional ocorrem quando há atributo(s) além da chave 
primária que determina(m) funcionalmente outros atributos. Pode ser parcial ou transitiva.
Dependência funcional parcial: quando um atributo depende apenas de parte da chave primária.
Dependência funcional transitiva: quando o atributo determinante não faz parte da chave primária.
Exemplo:
ALUNO (cod, nome, dataNascimento)
MATERIA (cod, nome, creditos, cod-depto, nome-depto)
MATRICULA (cod-aluno, cod-materia, nome-aluno, dataNascimento-aluno)
Dependências funcionais parciais:
DF: cod-aluno è nome-aluno
DF: cod-aluno è dataNascimento-aluno
Dependência funcional transitiva:
DF: cod-depto è nome-depto
29
Segunda Formal Normal (2FN)
Uma tabela está na segunda forma normal quando, além de estar na 1FN, não contém 
dependências funcionais parciais 
Terceira Formal Normal (3FN)
Uma tabela está na terceira forma normal quando, além de estar na 2FN, não contém 
dependências funcionais transitivas.
ou: Todo determinante é uma chave. (não podemos ter DF entre atributos que não fazem parte da PK)
Removendo as anomalias de DF do exemplo anterior:
ALUNO (cod, nome, dataNascimento)
DEPARTAMENTO (cod, nome, centro)
MATERIA (cod, nome, creditos, @cod-depto)
cod-depto referencia cod em Departamento
MATRICULA (@cod-aluno, @cod-materia)
cod-aluno referencia cod em Aluno
cod-materia referencia cod em Materia
Exemplo de uma relação que não está na 2FN
(Func_Nome depende somente de Func_Matricula)
FUNCIONARIO(Func_Matricula, Predio_ID, Data_Alocacao_Obra, Func_Nome)
Obs:
- Violações à 2FN só ocorrem em tabelas com chaves compostas, ou seja, toda tabela com 
chave primária simples (apenas 1 atributo na PK) sempre está na 2FN 
- 2FN também pode ser expressa por: Todo atributo não-chave depende funcionalmente de 
TODA a chave primária
- Para passar a 2FN, decompõe-se a tabela 
(criar nova tabela com os atributos que violam a 2FN)
30
Normalização
Func_Matricula (PK) Predio_ID (PK) Data Alocação Obra Func_Nome
10 312 1/1/2001 José
20 312 5/2/2002 João
20 522 3/3/2002 João
22 433 18/8/2001 Marcos
Exemplo anterior na 2FN
FUNCIONARIO(Func_Matricula, Func_Nome)
ALOCACAO(Func_Matricula, Predio_ID, Data_Alocacao_Obra)
31
Normalização
Func_Matricula (PK) Func_Nome
10 José
20 João
22 Marcos
Func_Matricula (PK) Predio_ID (PK) Data Alocação Obra
10 312 1/1/2001
20 312 5/2/2002
20 522 3/3/2002
22 433 18/8/2001
32
Mapeamento 
Objeto Relacional
Exercício
- Dividam-se em grupos com 5 integrantes
- Cada grupo deve, em conjunto, projetar o modelo relacional referente ao 
diagrama de classe do cenário Pizzando (gabarito, disponível no Moodle)
- Utilizem uma ferramenta de modelagem de dados (genMyModel ou outra) 
ou o recurso de quadro compartilhado do zoom

Continue navegando