Aula 3 - Modelo Entidade-Relacionamento 1. Conceitos básicos O modelo Entidade-Relacionamento (E-R) tem por base a percepção de que o mundo real é formado por um conjunto de objetos chamados de entidades e pelo conjunto de relacionamentos entre esses objetos. Foi desenvolvido para facilitar o projeto do banco de dados, permitindo a especificação do esquema da empresa que representa toda a estrutura lógica. O modelo E-R é um dos modelos com maior capacidade semântica; que se referem a tenativa de representar o significado dos dados. Existem três noções básicas empregadas pelo modelo E-R: conjunto de entidades, conjunto de relacionamentos, e os atributos. 1.1. Conjunto de Entidades Uma entidade é uma coisa ou um objeto do mundo real que pode ser identificada de forma unívoca em relação a todos os outros objetos. Por exemplo, cada pessoa na empresa é uma entidade. Uma entidade tem um conjunto de propriedades, e os valores para alguns conjuntos dessas propriedades devem ser únicos. Uma entidade pode ser concreta como uma pessoa ou um livro, ou pode ser abstrata como um empréstimo, uma viagem de férias ou um conceito. Um conjunto de entidades é um conjunto de abrange entidades de um mesmo tipo que compartilham as mesmas propriedades: os atributos. As entidades individuais que constituem um conjunto são chamadas de extensões do conjunto de entidades. Uma entidade é representada por um conjunto de atributos. Atributos são propriedades descritivas de cada membro de um conjunto de entidades. Formalmente um atributo de um conjunto de entidades é uma função que relaciona o conjunto de entidades a seu domínio. Um atributo, como é usado no modelo E-R, pode ser caracterizado pelos seguintes tipos: • Atributos Simples ou compostos. Os atributos simples são aqueles que não são divididos em partes. Os compostos podem ser divididos em partes, por exemplo, nome_cliente, pode ser estruturado em prenome, nome_intermediário, e sobrenome. Os atributos compostos ajudam-nos a agrupar atributos correlacionados tornando o modelo mais claro. • Atributos monovalorados ou multivalorados. Um exemplo de um atributo monovalorado poderia ser o atributo número_empréstimo, o qual teria associado apenas um número de empréstimo. Pode acontecer, no entanto, que uma determinada instância possua um conjunto de valores para uma única entidade. Por exemplo, o atributo nome_dependente, da entidade empregado, pode ter um, nenhum ou vários dependentes cadastrados. • Atributos nulos. Um atributo é nulo quando uma entidade não apresenta valor para o mesmo. Por exemplo, se um empregado não possui dependentes o valor do atributo nome_dependente será nulo, significando que este atributo não é aplicável a esta instância em particular. • Atributo derivado. O valor deste atributo pode ser derivado de outros atributos ou entidades a ele relacionados. Por exemplo, a idade de um funcionário pode ser calculada pela data de seu aniversário. 2. Conjunto de Relacionamentos Um relacionamento é uma associação entre uma ou várias entidades. Um conjunto de relacionamentos é um conjunto formado por relacionamentos de um mesmo tipo. Considere dois relacionamentos de entidades cliente e empréstimo. O conjunto de relacionamentos devedor denota a associação entre clientes e empréstimos bancários contraídos pelo cliente. A associação entre os conjuntos de entidades é referida como uma participação, isto é, o conjunto de entidades E1, E2,..., En participa do conjunto de relacionamentos R. A função que uma entidade desempenha em um relacionamento é chamada papel. Uma vez que os conjuntos de entidades participantes em um conjunto de relacionamentos são geralmente distintos, papéis são implícitos, e não são em geral, especificados. Mas, são úteis quando o relacionamento precisa ser esclarecido. Em conjuntos de relacionamentos recursivos, nomes explícitos de papéis muitas vezes são necessários. Por exemplo, o conjunto de entidades empregado, e o conjunto de relacionamentos trabalha_para, que é modelado para ordenar os pares da entidade empregado. O primeiro empregado tem papel de gerente, enquanto que o outro tem o papel de empregado. Um relacionamento pode ter atributos descritivos. O conjunto de relacionamentos depositante, com o conjunto de entidades cliente e conta, por exemplo, apresenta o atributo data_acesso. Relacionamento binário é um relacionamento que envolve dois conjuntos de entidades. A maior parte dos conjuntos de relacionamentos modelados em um sistema de banco de dados é do tipo binário. Algumas vezes, no entanto, aparecem relacionamentos que envolvem mais de dois conjuntos de entidades. Como exemplo, podemos combinar os conjuntos de relacionamentos devedor e agência_empréstimo formando o conjunto de relacionamentos CEA, entre as entidades Cliente, Empréstimo e Agência. O número de entidades que participam de um relacionamento define o grau deste relacionamento. Um conjunto de relacionamento binário tem grau 2, e um ternário, grau 3. Conjunto de Entidades ou Atributos? Muitas vezes aparecem dificuldades no reconhecimento do que seja uma entidade ou um atributo. Por exemplo, uma entidade empregado com dois atributos: nome_empregado, e telefone. O atributo telefone pode ser modelado como uma entidade. Se definirmos como atributo, isto implica dizer que cada empregado tem precisamente um número de telefone a ele associado. Caso seja modelado como entidade, reflete que um empregado pode ter vários (ou nenhum) números de telefones a ele associado. Já o atributo nome_empregado não poderia nunca ser modelado como entidade. Infelizmente não existe uma resposta simples para sabermos do que constitui um atributo e o que constitui uma entidade. As distinções vão depender da estrutura geral que está sendo modelada. Conjuntos de Entidades ou de Relacionamentos? Nem sempre fica claro se devemos modelar um objeto como um conjunto de entidades ou de relacionamentos. Por exemplo, considere o problema do empréstimo bancário representado como um relacionamento entre clientes e agências, com número_empréstimo e conta como atributos. Cada empréstimo é representado como um relacionamento entre um cliente e uma agência. Se todo empréstimo é tomado por exatamente um cliente e está associado à exatamente uma agência, podemos resolver o projeto de modo satisfatório, representando empréstimo como relacionamento. Mas, considere que vários clientes tomem um mesmo empréstimo em conjunto. Então, nesse caso, é necessário definir um relacionamento em separado para cada componente do empréstimo conjunto. Desta forma, os atributos descritivos numero_empréstimo e conta precisarão ser replicados para cada um dos relacionamentos. Os problemas que surgem devido a esta replicação são: (1) os dados são armazenados diversas vezes, desperdiçando espaço em memória, e (2) as atualizações deixam potencialmente os dados em estado inconsistente. Ao descrever empréstimo como uma entidade, este problema de replicação desaparece. Relacionamentos n-ésimos. Uma outra característica importante que diz respeito a relacionamentos, é que sempre é possível recompor um conjunto de relacionamentos não-binário, por um número de relacionamentos binários distintos. Mas, pode ser necessária a criação de um atributo de identificação para o conjunto de entidades criado para substituir o conjunto de relacionamentos. Além disso, um conjunto de relacionamentos n-ésimo mostra claramente todos os conjuntos de entidades que participam de uma determinada relação. O projeto correspondente usando somente relacionamentos binários torna mais difícil estabelecer as restrições desta participação. 3. Mapeamento de Restrições 3.1 Cardinalidade O esquema E-R de uma empresa pode definir certas restrições as quais o conteúdo do banco de dados deve respeitar. Exemplos de restrições são: o mapeamento de cardinalidades e a existência de dependências. O mapeamento de cardinalidades expressa o número de entidades às quais outras entidades podem estar associadas através de um conjunto de relacionamentos. Para um conjunto de relacionamentos binário, o mapeamento de cardinalidades segue as instruções abaixo: • Um para um. Uma entidade em A está associada no máximo a uma entidade em B, e uma entidade em B está associada no máximo a uma entidade em A. • Um para muitos. Uma entidade em A está associada a várias entidades em B. Uma entidade em B deve estar associada a uma única entidade em A. A B a1 b1 a2 b2 a3 b3 a4 b4 (a) A B b1 a1 b2 a2 b3 a3 b4 b5 (b) Figura 1 – Mapeamento de cardinalidades. (a) Um para um. (b) Um para muitos. • Muitos para um. Uma entidade em A está associada a no máximo uma entidade em B. Uma entidade em B, entretanto, pode estar associada a um número qualquer de entidades em A. • Muitos para muitos. Uma entidade em A está associada a qualquer número de entidades em B e uma entidade em B está associada a um número qualquer de entidades em A. A a1 a2 a3 B A B b1 a1 b1 a2 b2 a3 b3 a4 b4 b2 a4 b3 a5 (a) (b) Figura 2 – Mpeamento de Cardinalidade. (a) Muitos para um. (b) Muitos para Muitos. O mapeamento de cardinalidade para um conjunto de relacionamentos em particular é obviamente dependente das situações reais que estão sendo modeladas. O rateio de cardinalidades de um relacionamento pode afetar a colocação dos atributos nos relacionamentos. Conjuntos de relacionamentos um para um, ou um para muitos devem associar os atributos a uma das entidades participantes. Considere o caso das entidades cliente e conta, e o relacionamento depositante. O atributo dataacesso deverá estar associado à entidade conta. 3.2 Dependência de Existência Uma classe importante de restrições á a dependência de existência. Se a existência da entidade x depende da existência da entidade y, então x é dito dependente da existência de y. E se y for excluído, o mesmo deve acontecer com x. A entidade y é chamada de entidade dominante e a x é chamada entidade subordinada. Como exemplo, considere o conjunto de entidades empréstimo e o conjunto de entidades pagamento. Toda entidade pagamento está associada a uma entidade empréstimo. Se uma entidade empréstimo é excluída, todas as entidades pagamento a ela associada devem ser excluídas também. Se por outro lado, uma entidade pagamento for excluída, a entidade empréstimo não será afetada. Portanto, a entidade empréstimo é dominante e a entidade pagamento subordinada. A participação de um conjunto de entidades E no conjunto de relacionamento R é dita total se todas as entidades em E participam de pelo menos um relacionamento em R. Se somente algumas entidades em E participam do relacionamento R a participação do conjunto de entidades é dito parcial. A participação total está relacionada à existência de dependência. 4. Chaves Precisamos especificar como as entidades dentro de um dado conjunto de entidades e os relacionamentos dentro de um conjunto de relacionamentos podem ser identificados. O conceito de chave nos ajuda a fazer esta distinção. 4.1 Conjunto de Entidades Uma superchave é um conjunto de um ou mais atributos que, tomados coletivamente, nos permitem identificar de maneira unívoca, uma entidade em um conjunto de entidades. Ex. seguro_social, e a combinação de seguro_social com nome_cliente. Se K é uma superchave, então qualquer superconjunto de K é também uma superchave. Mas, queremos supoerchaves para as quais nenhuma subconjunto possa ser uma superchave. Essas superchaves são chamadas de chaves candidatas. O termo chave primária é o termon usado para caracterizar a chave candidata escolhida pelo projetista do banco como sendo de significado especial para a identificação das entidades . A especificação de uma chave representa uma restrição ao mundo real da empresa que está sendo modelada. 4.2 Conjunto de Relacionamentos A chave primária de um conjunto de entidades permite-nos distinguir as várias entidades de um conjunto. Precisamos definir um mecanimo para a indetificação dos vários relacionamentos em um conjunto de relacionamentos. Seja R um conjunto de relacionamentos envolvendo os conjuntos de entidades E1, E2, ..., Em. Seja uma chave_primária (Ei) denotando o conjunto de atributos que formam a chave primária do conjunto de entidades Ei. Se o relacionamento R não possui atributos, então o conjunto de atributos abaixo descreve um relacionamento individual do conjunto R: Chave_primária (E1) U Chave_primária (E2) U ... U Chave_primária (En) A estrutura da chave primária para o conjunto de relacionamentos depende do mapeamento da cardinalidade do mesmo. Se o relacionamento é muitos para muitos, a chave primária do relacionamento constitui a união das chaves primárias das duas entidades. Se o relacionamento é muitos para um, então a chave primária da entidade de menor cardinalidade pode identificar o relacionamento. Se o relacionamento é um para um, qualquer uma das chaves pode ser usada.