Universidade Federal de Mato Grosso Instituto de Computação Pós Graduação Lato Sensu em Banco de Dados Fundamentos de Banco de Dados e Modelagem de Dados Prof. Dr. Josiel Maimone de Figueiredo [email protected] Abril - 2015 Pós Graduação Lato Sensu em Banco de Dados Disciplina: Fundamentos de Banco de Dados e Modelagem de Dados Aula 4 Modelagem de Dados com Modelo Relacional Abril – 2015 Tópicos ➔ Conceitos básicos ➔ O que é Modelagem Lógica ➔ Modelo Relacional ➔ Mapeamento: Conceitual para Lógica ➔ MER → Modelo Relacional ➔ Exemplos ➔ Exercícios O que é Modelagem ➔ Arquitetura de Banco de Dados Conceitual MER ou UML Aplicação Conexão Lógica SGBD Física Modelo Relacional Visão O que é Modelagem Visão Conceitual Aplicação Conexão Lógica SGBD Física Para implementar os sistemas temos de usar uma linguagem de programação é preciso modelar a manipulação dos dados pela linguagem Diagrama de Classes O que é Modelagem Visão Conceitual Aplicação Conexão Lógica SGBD Física Para armazenar os dados temos de usar um SGBD é preciso modelar conforme modelo de dados do SGBD Modelo Relacional Modelo Relacional-Objeto Modelo Orientado a Objetos O que é Modelagem Visão Conceitual Aplicação Conexão Lógica SGBD Física É preciso transformar os dados da aplicação para permitir o armazenamento Modelo de Persistência mapeamento entre modelos Artefatos [Amber2001] Modelo Relacional ➔ Edgar Codd ➔ Pai do Modelo Relacional ➔ IBM San Jose ➔ ➔ Em 1970, Codd publicou:“A Relational Model of Data for Large Shared Data Banks.” Um modelo formal, baseado na teoria matemática dos conjuntos 9 Histórico Modelo Relacional ➔ Primeiras implementações ➔ System R – IBM Criou linguagem SEQUEL Ingres – Berkeley ➔ ➔ Michael Stonebraker ➔ Eugene Wong Principais produtos: ➔ ➔ 10 Conceitos do Modelo Relacional ➔ Trabalha somente com Relações ou Tabelas ➔ O conceito de relação permite representar: ➔ ➔ uma entidade ➔ um relacionamento Esquema Relacional ➔ conjunto de relações semanticamente ligadas por seus domínios de definição 11 Conceitos do Modelo Relacional ➔ Uma Relação é composta por: ➔ Um nome ➔ ➔ Um conjunto de tuplas (ou registros ou linhas) ➔ ➔ que deve ser único no mesmo esquema que ocorrem em qualquer ordem Um conjunto de atributos (ou campos ou colunas) ➔ cada atributo possui um domínio → dom(ai) ➔ cada atributo possui valor atômico ➔ o número de atributos é o grau da relação ➔ um subconjunto dos atributos deve possuir a propriedade de identificar a tupla ➔ atributo chave 12 Conceitos do Modelo Relacional ➔ Tipos de atributos chave ➔ Super-chave ➔ ➔ Chave candidata ou secundária ➔ ➔ conjunto minimal de atributos que mantem a propriedade de identificação da tupla. Chave primária (pk) ➔ ➔ conjunto de atributos que identifica uma tupla. chave candidata escolhida para ser utilizada identificador. Chave estrangeira (fk) ➔ um campo cujo valor referencia uma chave (primária ou secundária). 13 Conceitos do Modelo Relacional Modelo Relacional Chave Primária PILOTO Tuplas Atributos Num-cad Nome CPF Endereço 0101 João 123456 Recife 0035 José 234567 São Paulo Pedro 567890 . . . 0987 Recife Chave Candidata 14 Modelo Relacional ➔ Restrições de Integridade: ➔ Integridade de Entidade ➔ ➔ o valor da chave não pode ser nulo Integridade de Unicidade da Chave ➔ em uma relação o valor da chave tem de ser mantido único k(ai)=k(aj) ↔ i=j ➔ Integridade Referencial ➔ uma chave estrangeira só pode assumir um valor existente na chave primária que é referenciada fk(a) = pk(a) ou fk(a) = nulo 15 Conceitos do Modelo Relacional Modelo Relacional ESTRUTURAS OPERADORES Relação Atributo Domínio Chave Primária Chave Estrangeira União Interseção Diferença Seleção Projeção Junção Divisão RESTRIÇÕES Integridade de: Domínio Entidade Referencial 16 Mapeamento Conceitual → Lógico Apesar de certas equivalências entre os Modelos Conceituais (MER ou UML) com o Modelo Lógico Relacional o processo de mapeamento pode gerar, para um mesmo Modelo Conceitual, vários Modelos Lógicos Mapeamento Conceitual → Lógico Entidade para cada entidade gera-se uma tabela equivalente A chave da entidade é chave da tabela. Ex: nome Paciente Paciente = {nome, idade} idade Mapeamento Conceitual → Lógico Entidade para cada entidade gera-se uma tabela equivalente. a chave da entidade é chave da tabela. atributos monovalorados geram campos equivalentes. Ex: nome Paciente Paciente = {nome, peso} peso Mapeamento Conceitual → Lógico Entidade atributos multivalorados 1º caso – gera-se um campo para cada ocorrência 2º caso – gera-se uma tabela para o campo Ex: nome Paciente atributo2 telefone Paciente = {nome, tel1,tel2, tel3} Paciente = {nome} Telefone = {nome, tel} Mapeamento Conceitual → Lógico Entidade atributos compostos 1º caso – gera-se um campo para cada subatributo 2º caso – gera-se uma tabela para o campo Ex: rua nome Paciente peso endereço bairro cidade uf Paciente = {nome, peso, rua,bairro,cidade, uf} Paciente = {nome, peso} Endereço = {nome, rua,bairro,cidade, uf} Mapeamento Conceitual → Lógico Entidade atributos derivados caso o processamento para gerar o valor do atributo seja complexo, • então seu valor é armazenado em um campo equivalente • senão o valor é obtido em tempo de execução. Ex: Paciente dataNascimento idade Paciente = {nome, dataNascimento} Mapeamento Conceitual → Lógico Relacionamento O mapeamento depende do tipo da cardinalidade ou multiplicidade. Mapeamento Conceitual → Lógico Relacionamento Muitos para Muitos Gera-se uma nova tabela que equivale ao relacionamento e sua chave é composta pelas chaves das entidades. Ex: N Aluno cod nome Aluno = {cod, nome} Cursou M Disciplina num nome Disciplina= {num, nome} Cursou= {numDisciplina, codAluno} Mapeamento Conceitual → Lógico Relacionamento Um para Muitos gera-se uma chave estrangeira na tabela que equivale ao lado 1. Ex: N Aluno cod nome Aluno = {cod, nome, curso} Faz 1 Curso num nome Curso= {num, nome} Mapeamento Conceitual → Lógico Relacionamento Um para Um gera-se Ex: uma chave estrangeira em alguma das tabelas • sugere-se • a que possui menor cardinalidade • a que possui participação total 1 Pessoa cod nome Pessoa = {cod, nome} Possui 1 Carro placa modelo Carro= {placa, modelo,dono} Mapeamento Conceitual → Lógico Relacionamento ➔ Quando possui atributos, eles acompanham a chave estrangeira Ex: nota N Aluno cod nome Aluno = {cod, nome} freq Cursou M Disciplina num nome Disciplina= {num, nome} Cursou= {numDisciplina, codAluno, nota, freq} Mapeamento Conceitual → Lógico Relacionamento grau > 2 Gera-se uma nova tabela cuja chave é composta pelas chaves das entidades participantes do relacionamento Ex: Cliente compra Funcionário Produto Compra= {codCliente, codProduto, codFuncionario} Mapeamento Conceitual → Lógico ➔ Entidade Fraca ➔ ➔ A tabela equivalente à entidade fraca tem a chave composta pela chave dela mesma mais a chave da entidade forte. Ex: Disciplina possui Turma num hora Turma= {num, codDisciplina, hora} Mapeamento Conceitual → Lógico ➔ Generalização / Especialização ➔ 1º caso: ➔ ➔ ➔ cria-se uma tabela para cada entidade. a chave das especializações é uma chave estrangeira da generalização. Ex: cod Pessoa Pessoa = {cod, nome} nome Cliente= {cod, dataNasc} Cliente Funcionário dataNasc salario Funcionario= {cod, salario} Mapeamento Conceitual → Lógico ➔ Generalização / Especialização ➔ 2º caso: ➔ ➔ ➔ cria-se uma tabela para cada especialização. todos os atributos da generalização são replicados nas especializações. Ex: cod Pessoa nome Cliente= {cod, nome, dataNasc} Funcionario= {cod, nome, salario} Cliente Funcionário dataNasc salario Mapeamento Conceitual → Lógico ➔ Generalização / Especialização ➔ 3º caso: ➔ ➔ cria-se uma tabela para a generalização com atributos booleanos representando as instâncias das especializações. Ex: cod Pessoa nome Pessoa = {cod, nome, dataNasc, salario, cliente, funcionario} Cliente Funcionário dataNasc salario Mapeamento Conceitual → Lógico ➔ Generalização / Especialização ➔ 4º caso: ➔ ➔ cria-se uma tabela para a generalização com um atributo informando o tipo da instância. Ex: cod Pessoa nome Pessoa = {cod, nome, dataNasc, salario, tipo} Cliente Funcionário dataNasc salario Mapeamento Conceitual → Lógico ➔ Abstração de Agregação 1º caso – os atributos do relacionamento podem ser levados para a agregação ➔ ➔ ➔ O relacionamento não é mapeado Cria-se uma nova tabela cuja chave é composta pelas chaves das entidades Consulta data Paciente atende Consulta= {codPaciente, codMedico, data} Médico Mapeamento Conceitual → Lógico ➔ Abstração de Agregação 2º caso – os atributos do relacionamento não podem ser levados para a agregação ➔ ➔ ➔ O relacionamento é mapeado também Cria-se uma nova tabela cuja chave é composta pelas chaves das entidades livroTexto Aula data Professor ministra Disciplina Aula= {codProfessor, codDisciplina, data} Ministra = {codProfessor, codDisciplina, livroTexto} Exercício 1) Para o mapeamento da Generalização para o Relacional comente: ➔ ➔ todos os mapeamentos servem para todos os tipos de cobertura? Qual tem melhor desempenho? 2) Para as tabelas a seguir gere um possível MER Cliente = {códigoCliente, nomeCliente, telefone,numCarro} Funcionário={código,nome,especialidade,telefone} Conserto={codFuncionário,codCarro,dataConserto,descrição} Carro={códigoCarro,modelo,anoFabricação,fabricante} UsouPeça={codFunc,codCarro,dataConserto, codPeça, qtde} Peça = {cod, nome, fabricante}