Baixe o app para aproveitar ainda mais
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
Compartilhar