• Nenhum resultado encontrado

1. INTRODUÇÃO

2.2 METODOLOGIA ENTIDADE-RELACIONAMENTO ESTENDIDA

2.2.1 CONCEITOS E FORMALIZAÇÃO

O exemplo usado para facilitar a explicação dos conceitos da metodologia E/R estendida é uma típica aplicação de banco de dados, o Air Traffic World (ATW), que possui objetos tais como pessoas, passageiros, aviões etc.

Tipo Entidade E:

São classes de objetos (concretos ou abstratos) com as mesmas propriedades, que possuem significado próprio e que podem ser distintamente identificados.

A semântica do tipo entidade pode ser formalmente expressa por um determinado estado σ em um banco de dados que produz, para cada tipo entidade

E, um conjunto de instâncias correntes. Então, por exemplo , σ(PESSOA) representa

o conjunto corrente das instâncias do tipo entidade PESSOA. Cada instância é uma entidade (e) do tipo entidade PESSOA. Como visto na figura 10, a representação do tipo entidade é feita por um retângulo com o nome do tipo de entidade no centro com letras maiúsculas.

Figura 10: Representação gráfica para o tipo entidade.

Atributos a:

Os atributos e seus valores descrevem as propriedades ou características de um tipo entidade. Os atributos pertencem a um tipo entidade E e possuem um domínio d de valores. Este fato é denotado por a:E → → d. Cada atributo a:E → → → → → → d é

interpretado por uma função σσσσ(a) que produz para cada instância (entidade) de σσσσ(E) um valor do domínio do atributo, isto é, um valor de dado, um tipo entidade, um conjunto ou uma lista de valores. Os atributos são representados por ovais contendo o nome do atributo e o seu domínio a:d, conectados ao tipo entidade E. De acordo com a natureza do domínio d são distinguidos os seguintes casos de atributos:

Atributos valorados por dados (data-valued attributes) , se o domínio de um atributo é um tipo dado (data), por exemplo, int, real, point, end. Na figura 11 o tipo entidade PESSOA possui o atributo Nome (com o tipo de dado string),

Telefone (tipo de dado string), Endereço (tipo de dado end), e Nascimento

(tipo de dado date).

Figura 11: Representação gráfica dos atributos.

PESSOA Endereço:end Telefone:string Nome:string Nascimento:date PESSOA

• Atributos valorados por objetos, isto é, o domínio do atributo é um tipo entidade. O valor do atributo é uma instância deste tipo entidade. Na metodologia E/R estendida, atributos valorados por objetos são denotados pelo símbolo ‘ ’, com uma seta apontando para o tipo entidade. Na figura 12 o atributo Horário do tipo entidade VÔO é um objeto do tipo entidade

TABELA DE TEMPO.

Figura 12: Representação gráfica para o atributo valorado por objeto.

• Atributos multivalorados. Tanto os atributos de dados como os de objetos podem ser multivalorados. O valor de um atributo pode ser um conjunto (set) ou uma lista (list) de valores de um determinado domínio. Poderemos ter como atributos, por exemplo, uma lista de dados (data) ou um conjunto de objetos (tipo entidade). Na figura 13 temos o atributo Tripulação do tipo entidade VÔO como uma lista de objetos do tipo entidade MEMBRO DO

STAFF DE VÔO e o atributo Nacionalidade do tipo entidade PASSAGEIRO

como um conjunto do tipo dado. Ao contrário dos conjuntos, uma lista pode conter mais de um valor do mesmo elemento. Além disto, os elementos de uma lista são enumerados, de modo que podem ser referenciados pelo seu número de posição. VÔO Ocupação:int Horário: Vôo#:string TABELA DE TEMPO Partida:time Chegada:time

Figura 13: Representação gráfica dos atributos multivalorados.

Na metodologia E/R estendida, a combinação de atributos multivalorados com objetos permite a criação de estruturas complexas do tipo entidade. Através destas estruturas são modeladas associações entre diferentes tipos entidade.

Por padrão, todos os atributos na metodologia E/R estendida são opcionais, ou seja, não existe a necessidade de valor para o atributo. Os atributos também podem possuir o valor “Desconhecido”.

Tipo Relacionamento r(E1,...,En):

São os fatos, os acontecimentos que ligam dois ou mais objetos do tipo entidade. O tipo relacionamento é a forma usual de agregação de vários tipos entidade E1,...,En (n≥≥≥≥2). A semântica para o tipo relacionamento r pode ser

entendida como uma relação σσσσ(r) ⊆ σ⊆ σ⊆ σ⊆ σ(E1) × ... × σ× ... × σ× ... × σ× ... × σ(En). Cada relacionamento

(instância) é uma tupla de entidades de tipos correspondentes.

Na figura 14, um exemplo de relacionamento ternário (n = 3) entre o tipo entidade AEROPORTO e CONEXÃO. O tipo entidade AEROPORTO participa do relacionamento duas vezes. Podem-se distinguir os diferentes papéis que um aeroporto representa no tipo relacionamento conecta_diretamente pelo significado dos nomes dos papéis. Um aeroporto é o ponto inicial de uma conexão e outro é o destino.

PASSAGEIRO Nacionalidade: set(1,*)

VÔO Tripulação: list(1,*)

MEMBRO DO STAFF DE VÔO

Figura 14: Representação gráfica do tipo relacionamento.

O tipo relacionamento também pode possuir atributos, entretanto o modelo permite apenas atributos valorados por dados. Observa-se, na figura 15, o tipo relacionamento reservado_para com o atributo DiaReserva. Os atributos valorados por objetos devem ser modelados pela participação de novos objetos do tipo entidade.

Figura 15: Representação gráfica do atributo do tipo relacionamento.

Tipo construtor:

O tipo construtor pode ser observado como uma nova classificação das entidades a partir de certos tipos. Começando com o já definido tipo entidade Ik, (k-

1,...,n, n≥≥≥≥1), que é chamado de tipo de entrada, o novo tipo chamado tipo de saída

Oj,(j=1,...,m,m≥≥≥≥1), é construído pela classificação dos tipos de entrada novamente

em tipos de saída. A figura 16 representa a forma geral do tipo construtor.

VÔO Ocupação Vôo# Preço reservado_ para PASSAGEIRO Nacionalidade Passaporte# DiaReserva AEROPORTO Gênero Hotel Nome Localização conecta_ diretamente Destino Início CONEXÃO TaxaOcupação TipoVôo#

Figura 16: Representação gráfica da forma geral do tipo construtor.

As seguintes condições devem ser observadas entre tipos entidade de entrada e de saída de um tipo construtor e para os objetos do tipo entidade que não são do tipo construtor:

(i) n k=1 σ(Ik) ⊇ m j=1 σ(Oj) (ii) σ(Op) ∩ σ(Oq) = ∅, para p ≠ q

(iii) σ(Ep) ∩ σ(Eq) = ∅, para p ≠ q, Ep,Eq não são do tipo construtor.

A condição (i) significa que todos os tipos entidade dos tipos de saída Oj

também são instâncias dos tipos de entrada, mas nem todos os tipos entidade de entrada são instâncias do tipo de saída. Consequentemente, os tipos entidade de saída não são novos tipos entidade, elas já existem (nos tipos de entrada), mas serão agora vistas em um novo contexto (dado por um dos tipos de saída). A condição (ii) requer que os tipos de saída sejam disjuntos; nenhum tipo entidade (de qualquer tipo de entrada) deve ocorrer em vários tipos de saída. Finalmente, (iii) é exigido por todos os objetos do tipo entidade que não são construtores, isto é, que o tipo entidade que não é tipo de saída de qualquer tipo construtor seja uma disjunção. Em outras palavras, o tipo construtor permite a única possibilidade de modelar um subconjunto de relacionamentos. Tipo entrada I n Tipo saída O 1 Tipo saída O m Tipo entrada I 1 . . . . . .

Especialização/Generalização:

Através das descrições semânticas mostradas acima será descrita a modelagem das especializações e generalizações. Para isto será considerada a figura 17. Em primeiro lugar, uma simples especialização PASSAGEIRO de

PESSOA é definida. O tipo de entrada PESSOA (n=1) e o tipo de saída PASSAGEIRO (m=1). Considerando (i) acima será obtida a seguinte condição

semântica: σ(PESSOA) ⊇ σ(PASSAGEIRO), isto é, cada passageiro é uma pessoa, também. Mas o contrário não acontece.

Figura 17: Representação gráfica de especializações.

Do mesmo modo, outro exemplo de especialização na figura 2.8 é o tipo construtor MEMBRO DO STAFF DE PESSOA que formalmente satisfaz

σ(PESSOA) ⊇ σ(MEMBRO DO STAFF). Ambos os tipos construtor PASSAGEIRO e

MEMBRO DO STAFF são independentes um do outro. Uma pessoa pode ser um

passageiro assim como um membro do staff, isto é, σ(PASSAGEIRO) ∩ MEMBRO DO STAFF DE SOLO Nome Localização PESSOA Nome Endereço Telefone# Nascimento ⊆ ⊆ MEMBRO DO STAFF Título TempoServiço PASSAGEIRO Passaporte# Nacionalidade

====

MEMBRO DO STAFF DE VÔO ExameRotina CertificadoSaúde

σ(MEMBRO DO STAFF) = ∅. Para alcançar esta disjunção é usado um tipo construtor com vários tipos de saída. Deste modo, as especializações com disjunção

MEMBRO DO STAFF DE VÔO e MEMBRO DO STAFF DE SOLO de MEMBRO DO STAFF são modeladas. A partir de (i) e (ii) é obtida a seguinte semântica: σ(MEMBRO DO STAFF) ⊇ σ(MEMBRO DO STAFF DE VÔO) ∪ σ(MEMBRO DO

STAFF DE SOLO), σ(MEMBRO DO STAFF DE VÔO) ∩ σ(MEMBRO DO STAFF

DE SOLO) = ∅, o que corresponde à condição de disjunção.

Através do uso do tipo construtor são expressas as generalizações, com muitos tipos de entrada (n > 1, m=1). A especialização de PESSOA para

PASSAGEIRO e de PESSOA para MEMBRO DO STAFF poderá ser alterada para

uma generalização tratando PASSAGEIRO e MEMBRO DO STAFF como tipos de entrada e PESSOA como tipo de saída: σ(MEMBRO DO STAFF)

∪ σ(PASSAGEIRO) ⊇ σ(PESSOA). Neste exemplo, o tipo saída PESSOA representa apenas pessoas que são ao mesmo tempo membros do staff e passageiros. Não existem outros tipos de pessoas para modelar neste contexto.

Como visto, o conceito do tipo construtor cobre as conhecidas abstrações de generalização ou superclasse (n>1, m=1) e de especializações ou subclasses (n=1,m≥1, como possibilidade de disjunção. Este modo de ver as generalizações e especializações sugere duas restrições sintáticas:

(i) Todo o tipo entidade de um tipo construtor deve ser o resultado de exatamente um tipo de construtor.

(ii) Todo tipo construtor não deve, direta ou indiretamente, ser um tipo de entrada da sua própria construção, isto é, não deve haver referência cíclica.

Os conceitos de especialização e generalização, ou tipo construtor na metodologia E/R estendida, estão bastante relacionados com a noção de hierarquia. Subtipos herdam todos os atributos dos supertipos. No exemplo, MEMBRO DO

STAFF herda os atributos de PESSOA e cada MEMBRO DO STAFF DE VÔO os

atributos de MEMBRO DO STAFF. Deste modo pode ser referenciado o atributo

Nome do tipo PASSAGEIRO ou Nascimento de MEMBRO DO STAFF DE VÔO.

Um dos efeitos colaterais deste modo de implementação de heranças é a possibilidade de conflitos com os nomes dos atributos. Para resolver estes problemas são usados os nomes dos tipos de entrada como prefixos.

A metodologia E/R estendida não oferece herança a partir de vários tipos de entrada. Os atributos de diferentes tipos de entrada podem ter o mesmo nome mas com significados diferentes (homônimos), e atributos podem ter nomes diferentes mas com o mesmo significado (sinônimos). É oferecido o uso de atributos derivados de modo a propagar os atributos explicitamente.

• Atributos valorados por objetos: Observa-se, na figura 18, um exemplo de atributo valorado por objeto no tipo entidade GALPÃO DE MANUTENÇÃO. Um GALPÃO DE MANUTENÇÃO pode apenas existir como um dos galpões de um único AEROPORTO e continua com o aeroporto durante todo o tempo da sua existência. Pode-se dizer que o tipo entidade GALPÃO DE

MANUTENÇÃO é dependente do tipo entidade AEROPORTO com o qual ela

está associada. Este tipo de entidade também é conhecido como um tipo entidade fraca. Este tipo de dependência é representado pelo símbolo ‘ ’, com uma seta apontando do tipo entidade dominante para o tipo entidade dependente. As dependências também têm conseqüências na maneira como os objetos são identificados. Desde que objetos dependentes apenas existem no contexto dos seus objetos pais, é suficiente ter uma chave local para identificar os objetos dependentes no seu contexto. Por exemplo, o atributo

Nome de GALPÃO DE MANUTENÇÃO identifica cada galpão de

manutenção com um conjunto de todos os galpões pertencentes a um aeroporto. Isto significa que diferentes galpões de manutenção podem ter o mesmo nome, a não ser que elas não pertençam ao mesmo aeroporto. Para uma identificação global de objetos dependentes, o objeto dominante, isto é, os valores de seus atributos chaves, devem estar adicionalmente especificados para a chave local.

Figura 18: Representação gráfica de atributos valorados por objetos.

Outra conseqüência da dependência é que o conjunto de objetos dependentes dominados por diferentes tipos entidade são sempre disjunções. Por exemplo, o conjunto de aeroplanos de diferentes galpões de manutenção são disjunções, isto é, nenhum aeroplano pode receber manutenção em muitos galpões. Isto é representado pelo símbolo ‘ ’ entre o atributo valorado por objeto Aviões de GALPÃO DE MANUTENÇÃO e o tipo entidade AVIÃO.

Possíveis atributos valorados por objetos não disjuntos e não dependentes são descritos por uma linha ao invés de uma seta, como pode ser visto com o atributo CidadeSatélite de AEROPORTO. Aqui, a mesma cidade pode ser uma das cidades satélites de diferentes aeroportos vizinhos.

As referências cíclicas não são permitidas, assim como o compartilhamento de tipos dependentes não é possível. Estes requisitos não são requeridos por atributos valorados por objetos “normais”, que especificam referências não dependentes.

Os atributos dependentes produzem um efeito sobre a propagação da atualização. Caso um tipo entidade dependente seja inserido, deverá ser também atualizado o atributo correspondente do tipo entidade pai. Do mesmo

AEROPORTO Nome

Aviões: set AVIÃO

Avião# Nome Galpão: list(1,*) GALPÃO DE MANUTENÇÃO CidadeSatélite: set(1,*) CIDADE Nome

modo, uma deleção de um tipo entidade pai requer a exclusão de todos os tipos entidade dependentes.

• Atributos não multivalorados: Podem ser usados como chaves. Atributos chaves são mandatórios e seus valores identificam as entidades em seus tipos de entidade. Por exemplo, Nome e Nascimento são atributos chaves de

PESSOA, graficamente marcados com o ponto ( ) . Isto significa que diferentes pessoas podem não ter o mesmo nome e a mesma data de nascimento. De modo semelhante às dependências, atributos chaves valorados por objetos não devem formar referências cíclicas. É importante que apenas tipos não construtores de entidades (que não são entrada nem saída de nenhum tipo construtor) possam ter chaves. As entidades nos tipos construtores herdam suas identidades dos tipos correspondentes das entidades dos tipos de entrada.

Como mencionado antes, tipos entidade dependentes são identificados por seus próprios atributos e pelas heranças das suas entidades pais. Por exemplo, os atributos chaves de GALPÃO DE MANUTENÇÃO são os seus próprios e os herdados do tipo entidade AEROPORTO. Entretanto, os tipos entidade dependentes não necessitam ter seus próprios atributos chaves, como visto na figura 12 com o tipo entidade TABELA DE TEMPO. Resumindo, tipos entidade não construtores e não dependentes devem possuir atributos chaves. Tipos dependentes podem ter algum atributo chave. Tipos entidade do tipo construtor não devem possuir atributo chave.

• O tipo construtor pode ser restrito à seguinte semântica

n k=1 σ(Ik) ⊇ m j=1 σ(Oj),

Graficamente denotados por um símbolo de ‘=’ dentro de um triângulo. Isto significa que toda entidade de um tipo de entrada deve ocorrer em um dos tipos de saída. Por exemplo, MEMBRO DO STAFF é particionado em MEMBRO DO

• Podem ser especificadas informações derivadas que não são explicitamente armazenadas, mas que podem ser calculadas por outro tipo de informação armazenada. Por exemplo, o nome de um piloto de um vôo do tipo entidade

VÔO, assumindo que o piloto é o primeiro da lista da tripulação do avião,

pode ser calculado assim:

Vôo.Piloto ← Vôo.Tripulação[1]

O atributo Piloto não será armazenado. Ele será automaticamente calculado quando for feita uma referência a ele. Os atributos derivados, como o atributo

Ocupação de VÔO são graficamente denotados por uma linha pontilhada. Na

metodologia E/R estendida, o tipo entidade, o tipo relacionamento e o tipo construtor podem ser especificados como derivados.

Associação:

Dado um tipo entidade E, uma associação sobre E acontece quando um atributo do tipo conjunto (set) de outro tipo entidade faz referência ao tipo entidade E. Por exemplo, na figura 19 o tipo entidade TIME possui o atributo valorado por objeto Membros do tipo entidade PESSOA. O tipo entidade TIME é uma associação sobre PESSOA desde que cada time (instância) é um conjunto de membros do tipo

PESSOA. O tipo entidade TIME possui o componente Membros: TIME 

set(PESSOA).

Figura 19: Representação gráfica de uma associação.

Particionamento:

Um tipo entidade E pode ser particionado em dois ou mais tipos entidade de saída do tipo construtor. Por exemplo, na figura 20 o tipo construtor com o tipo entidade PESSOA como tipo de entrada, e MASCULINO e FEMININO como tipos de saída. Ainda são permitidas entidades do tipo PESSOA que não são nem

MASCULINO nem FEMININO. Para que isto não ocorra restrições adicionais devem

PESSOA

ser especificadas. Em outro exemplo da figura 20, o tipo entidade VEÍCULO é particionado em CARRO e NAVIO. São também permitidas outras instâncias do tipo

VEÍCULO que não sejam para os tipos de saída. Neste exemplo, aviões não estão

excluídos de serem veículos e nenhuma restrição adicional é necessária como no primeiro exemplo.

Figura 20: Representação gráfica de particionamentos.

Agregação:

Na metodologia E/R original existem duas formas de agregação: tipo entidade é uma agregação de tipos de dados através dos atributos e o tipo relacionamento, que agrega os tipos entidade participantes. Na metodologia E/R estendida as agregações podem ser implementadas através do uso de componentes, ou seja, através dos atributos valorados por objetos, possivelmente multivalorados. Deste modo é possível a modelagem de formas mais generalizadas de agregações, compostas de tipos de dados e tipos entidade.

Cardinalidade:

Um tipo de classe de restrições de integridade na metodologia E/R estendida são as cardinalidades. Cada tipo entidade participante de um tipo relacionamento pode ser restringido pelos números de cardinalidade (min, max), min ∈ Ν0, e max

∈ Ν ∪ {∗}. Um tipo entidade E pode participar de pelo menos ‘min’ e no máximo ‘max’ relacionamentos do tipo r. O (*) denota a possibilidade de infinitas vezes, sem limite superior. Estes são alguns casos importantes que podem ocorrer:

PESSOA MASCULINO FEMININO VEÍCULO CARRO NAVIO

• (0, *) é a cardinalidade padrão significando ausência de restrições. Um passageiro, isto é, uma instância do tipo entidade PASSAGEIRO, tem reservado nenhum, ou muitos vôos.

• (1, *) é usado para expressar membros obrigatórios em um tipo relacionamento. Por exemplo, toda companhia aérea deve oferecer, pelo menos, uma conexão, isto é, deve participar de pelo menos uma entrada no tipo relacionamento oferece. Este exemplo pode ser visto na figura 21.

Figura 21: Representação gráfica da cardinalidade (1, *).

• (0, 1) é requer que a entidade participe de pelo menos um relacionamento. Por exemplo, todo vôo tem no máximo um avião para ele.

• (1, 1) é a cardinalidade que requer que a entidade participe de exatamente um relacionamento. Por exemplo, uma conexão pertence a exatamente um vôo. Este exemplo pode ser visto na figura 22.

Figura 22: Representação gráfica da cardinalidade (1, 1).

Atributos multivalorados também podem ter cardinalidades restringindo o número de elementos no conjunto (set) ou lista (list). Por exemplo, o atributo

Tripulação de VÔO (figura 14) deve consistir de pelo menos uma pessoa. Este

atributo ser opcional, ou seja, a tripulação pode ser desconhecida. Entretanto, se existe uma tripulação, deve possuir pelo menos um membro.

CONEXÃO TipoVôo pertence a VÔO Vôo# (1, 1) COMPANHIA AÉREA Nome oferece CONEXÃO TipoVôo (1, *)