Versões e Configurações em Sistemas de Banco de Dados Orientado a
Objetos: um Tratamento Uniforme
Daniela Tereza Ascencio Russi, Francisco Assis da Silva
Faculdade de Informática de Pres. Prudente - UNOESTE
Rua: José Bongiovani, 700, Cidade Universitária
CEP: 19050-900, Presidente Prudente-SP
E-mail: {daniela,chico}@apec.unoeste.br
Resumo
No contexto de Banco de Dados Orientado a Objetos, uma das características
desejáveis, requerida por domínios de aplicação é a possibilidade de armazenar vários
estados de objetos. Uma versão é a descrição de um objeto em determinado momento de
tempo ou sob um certo ponto de vista, considerado relevante para a aplicação definida. A
possibilidade de ter versões em níveis diferentes de abstração provêm de um rico modelo e
permite uma representação mais natural da realidade. Conjunto de versões associados
com cada nível de uma hierarquia de objeto representam muitas vezes um conjunto amplo
de possíveis configurações para o objeto, o qual é difícil ser manipulado diretamente pelo
usuário, mas representa implicitamente um conjunto de possíveis combinações para
definição final de um objeto. Cada composição de um objeto onde todos os componentes
possuem versões especificadas constitui a configuração do objeto.
Neste contexto, mecanismos adequados são muito importantes para definir e
construir configurações de objeto por meio de seleções aplicadas ao conjunto de todas as
possíveis configurações, definidas pelas combinações de versões.
1 - Introdução
No contexto de banco de dados orientado a objetos, uma das características
desejáveis, requerida por domínios de aplicação é a possibilidade de armazenar vários
estados de objetos. Uma versão representa um estado identificável de um objeto,
considerado pelo usuário como semanticamente significativo, devendo ser tratada como um
objeto no modelo de dados.
Aplicações não comerciais, também ditas não convencionais, tem motivado nos
últimos tempos os pesquisadores da área de Banco de Dados pelos novos requisitos
impostos de algumas áreas de aplicação, principalmente aplicações de engenharia (CADComputer Aided Design), Software de engenharia (CASE-Computer Aided Software
Engineering), Manufaturação (CAM-Computer Aided Manufacturing), Automatização de
Escritório, Hiperdocumentos e Bancos de Dados Históricos. Muitas das novas aplicações
impõem a necessidade de guardar mais de um estado da base de dados, afastando-se,
portanto, do modelo tradicional.
1
Em aplicações de engenharia os problemas relacionados para representação de
objeto são baseados em modelos de dados semânticos como do Modelo de Entidade
Relacionamento, que é o mais freqüentemente usado.
Com bancos de dados históricos, a ênfase é posta no armazenamento da
informação sobre entidades, organizadas com respeito ao tempo.
Presentemente existe uma tendência para estender banco de dados orientado a
objetos e sistemas com conceitos de versão e mecanismos, visando a definição de uma
estrutura que pode ser refinada para apoiar muitas classes de aplicação [Bjö 89, Agr 91,
Kim 89a, Lam 91, Sci 91, Sci 94]. Alguns trabalhos aproximam o uso de versões para
apoiar evolução de esquema de banco de dados [Bjö 89, Zdo 90, Mon 92, Bye 93, Tal 93].
Modelos de banco de dados orientado a objetos normalmente permitem somente a
maioria de classe/tipo especializado em uma hierarquia de herança [Kim 89a, Bee 88, Agr
91]. A possibilidade de ter versões a níveis diferentes de abstração provêm de um rico
modelo e permite uma representação mais natural da realidade. Por outro lado, quando
versões podem ser associadas a objetos de banco de dados, o usuário precisa escolher de
um amplo conjunto de opções, a específica combinação de versões que comporão o objeto
em cada situação. Cada combinação de versões de componentes específicos de um objeto é
chamado de uma configuração.
Configurações são muito importantes no contexto de bancos de dados orientado a
objetos que apoiam versões, desde que eles são, de fato, os objetos manipulados pelas
aplicações. Eles correspondem às instâncias de objetos em bancos de dados de versões
anteriores. Neste contexto, mecanismos adequados são muito importantes para definir e
construir configurações de objeto por meio de seleções aplicadas ao jogo de todas as
possíveis configurações definido pelas combinações de versões [Gol 95].
Este trabalho enfoca um gerenciamento de versão do nível de aplicação, apoia a
representação de seqüência - ou informação de tempo dependente, como definido pelos
usuários. O usuário deve ser permitido editar a seqüência (ou grafo) de versões, definindo
quando e onde uma versão deve ser incluída ou deve ser removida.
Versões e configurações são tratadas comumente como conceitos diferentes na
maioria dos modelos que apoiam gerenciamento de versão. Esta separação de conceitos tem
algumas desvantagens, tal como a impossibilidade de combinar versões e configurações
livremente para construir alto nível de versões. Este tipo de distinção é particularmente
inconveniente no caso de bancos de dados orientados a objetos, onde o tratamento uniforme
de tudo como objeto aumenta significativamente a possibilidade de combinação de objetos
para formar outros objetos de nível mais altos.
A abordagem proposta neste documento não faz distinção significativa entre
versões e configurações que podem ser combinadas livremente. Especial atenção é
dedicada a sistemas de banco de dados orientado a objetos. A necessidade para incorporar
novos conceitos para o modelo de dados é discutido. É dada ênfase ao versionamento de
objetos que participam em hierarquias de herança, como também relações entre objetos e
versões localizadas a níveis diferentes da hierarquia.
Um modelo de versão é proposto, no qual o versionamento de objetos a todos os
níveis de uma hierarquia de herança é permitido e não restringe o versionamento para o
2
nível de folha. É mostrado como estas extensões para o paradigma orientado a objeto
permitem modelar muitas situações do mundo real, especialmente quando os objetos são
construídos em um processo de cima para baixo (top-down).
As próximas seções são organizadas como segue: Seção 2 apresenta o principal
conceito relacionado para versões em bancos de dados orientado a objeto. Os aspectos
relacionados para objeto e hierarquia de versão é discutido na Seção 3. Os principais efeitos
de versionamento de objeto a diferente níveis são apresentados numa hierarquia de herança.
As vantagens desta aproximação no modelo de aplicações são comparadas à aproximação
tradicional onde se concentram versões às folhas da hierarquia. Configurações são
discutidas na Seção 4. Seção 5 apresenta as operações definidas para manipulação de
objetos e versões na hierarquia de herança e Seção 6 apresenta as facilidades requeridas
para especificação de configuração. São apresentas as conclusões principais deste trabalho
na Seção 7.
2 - Base Conceitual
2.1 - Versão e Conceitos de Objeto Versionado
Uma versão é a descrição de um objeto em determinado momento de tempo ou sob
um certo ponto de vista que é considerado relevante para uma aplicação definida. Num
sistema orientado a objetos, uma versão é um objeto de primeira classe, possui seu próprio
identificador de objeto (OID), o que permite que seja diretamente manipulada e consultada.
Um objeto que possua versões é dito um objeto versionado [Gol 93], que mantém
informações sobre suas versões associadas.
Cada versão pertence a exatamente um objeto versionado. Aplicações não podem
sempre determinar se um objeto apresentará versões ou não, objetos podem dinamicamente
mudar de não versionado para versionado.
A característica de ser versionado pertence a um objeto e não a uma classe, uma
classe pode ter objetos como instâncias versionados e não versionados.
A figura 1 mostra que um automóvel sendo projetado pode ser um objeto
versionado tendo várias versões associadas, a qual representa os diferentes estágios ao
longo do projeto.
fiat-uno
mille
elx
Automóvel
cs
new
Classe
Objeto Versionado
Versão
Figura 1 Objeto versionado e suas versões
3
Cada objeto versionado tem uma versão considerada como sua versão atual,
também chamada versão padrão. A versão atual é usada sempre que uma operação é
aplicada a um objeto versionado, sem especificar uma de suas versões.
2.2 - Propriedades de Versão
Versões de um objeto versionado estão relacionadas através de um relacionamento
de derivação. Versões devem ser organizadas em uma estrutura que reflita este
relacionamento entre elas. A estrutura pode ser uma das três seguintes: 1 – lista, onde cada
versão só tem uma versão antecessora e uma sucessora, 2 – árvore, onde várias versões
podem ser derivadas de uma mesma versão, mas cada versão só tem uma antecessora e 3 –
grafo acíclico dirigido, onde cada versão pode ter várias antecessoras e sucessoras.
No caso de uma lista uma nova versão é sempre criada como sucessora da última
versão, e representa a evolução de um objeto no tempo. O relacionamento estabelecido
entre as versões é um relacionamento de derivação. Quando a estrutura é uma árvore ou um
grafo, ela traz mais informações, além da relação de derivação entre versões e é utilizado
para aplicações de projeto, quando diferentes estratégias de projeto devem ser exploradas
em paralelo. Se mais de uma versão é derivada da mesma versão, elas usualmente são
chamadas de alternativas [Zdo 87, Kat 90, Fau 91] pois representam diferentes tentativas
de solucionar um problema. Versões que estão no mesmo caminho até a raiz da árvore ou
grafo são chamadas de derivativas (Figura 2). A estrutura dá-se o nome de histórico de
versões [Kat 90].
v1
v11
v111
v12
v112
Alternativas
Derivativas
Figura 2 Histórico de versões estruturado como árvore
Quando uma versão é criada como uma sucessora de uma outra, uma cópia é feita
de sua antecessora. Quando uma versão é criada como uma sucessora de mais de uma
versão, somente a primeira versão indicada é copiada, e um relacionamento é estabelecido
com os outros indicados. A idéia é que a nova versão deve ser a combinação de seus
antecessores, mas é a responsabilidade do usuário extrair a informação necessária das
várias versões [Gol 95]. Operações em versões são restringidas, conforme seus estados.
Uma versão trabalhando é essencialmente uma versão temporária que tem que sofrer
modificações para alcançar um estado mais estável. Uma versão estável tem alcançado
mais estabilidade e pode ser compartilhada. Versões estáveis não podem ser modificadas,
mas podem ser removidas. Uma versão consolidada é uma versão final que não pode ser
modificada nem pode ser removida.
4
Quando uma versão é derivada de uma outra, seus antecessores são
automaticamente promovidos para estável e evitam modificações em versões que eram
importante de um ponto de vista histórico.
2.3 - Referências Estáticas e Dinâmicas
Quando um objeto tendo versões é usado como componente de um outro,
referências podem ser feitas para isto em um de dois modos: referência para uma versão
específica, chamada referência estática – se comporta como uma simples referência a um
objeto, e o objeto composto é ligado estaticamente a versão; ou referência para o objeto
versionado, chamado referência dinâmica – refere meios que uma versão específica será
escolhida em tempo de execução, e o objeto composto é ligado dinamicamente ao objeto
versionado.
Objetos compostos podem ser construídos recursivamente, resultando em uma
hierarquia de agregação [Gol 95]. Figura 3 mostra duas versões de um objeto composto da
classe Automóvel. A versão cs tem uma referência estática para a primeira versão do objeto
fiat-motor, o valor do atributo do motor é o OID da primeira versão do objeto fiat-motor.
A nova versão contém uma referência dinâmica para o objeto versionado fiat-motor, o
valor do atributo motor é o OID do objeto versionado.
A substituição de uma referência de objeto versionado por uma referência para
uma versão específica é chamada resolução de referência dinâmica.
fiat-uno
cs
new
fiat... motor
versão
... 1.5
Automóvel
fiat-motor
1.5
1.0
Motor
Figura 3 Referências estáticas e dinâmicas
3 - Objeto e Hierarquias de Versão
3.1 - Herança
Herança é um dos conceitos básicos em bancos de dados orientado a objetos [Ber
93] e um dos mecanismos de reusabilidade. Existem duas maneiras pelas quais a herança
pode ocorrer [Bil 90]: refinamento e extensão.
Refinamento modela o relacionamento IS-A entre uma classe e uma superclasse,
onde há uma migração de propriedades através de níveis de hierarquia.
5
Extensão está relacionada com a idéia de protótipos, cada propriedade se refere a
um nível específico da hierarquia, modelando algum aspecto pertinente do objeto do mundo
real.
3.2 - Objeto e Versão Mapeada
Quando a forma de herança utilizada é por refinamento, versões aparecem somente
nos níveis de hierarquias [Kim 89a, Bee 88, Bjö 89]. Num sistema orientado a objetos, uma
versão é um objeto de primeira classe, possui seu próprio identificador de objeto (OID), o
que permite que seja diretamente manipulada e consultada. Um objeto que possua versões é
dito um objeto versionado, que mantém informações sobre suas versões associadas.
Possuir versões é propriedade de objetos, significa que o objeto poderá estar
representado através de versões. Esta propriedade pode ser definida em tempo de projeto do
banco de dados, associada a uma classe ou tipo.
• motor
Considerando o esquema apresentado
Veículo • combustível
na Figura 4, o exemplo na Figura 5 mostra a
modelagem de versões em mais de um nível da
hierarquia de abstração. A entidade do mundo Automóvel
Caminhão
real fiat-uno é representado em dois níveis de • número de volumes
• capacidade da
caçamba
abstração: Veículo, com as propriedades motor • acessórios
Figura 4 Esquema exemplo
e combustível, e Automóvel, com a
propriedades número de volumes e acessórios.
Em cada um destes níveis, existem versões associadas a correspondentes objetos
versionados. Cada versão deve possuir pelo menos um ascendente correspondente para o
qual está ligado no momento de criação.
V3
1.0 G
v1
fiat-uno-v
1.5 G
V2
V4
1.5 A
1.0 A
cs
mille
elx
M x
M y
M z
Veículo
Automóvel
correspondência
fiat-uno-a
Figure 5 Versões representadas a mais de um nível da hierarquia de herança e suas correspondências
6
Em algumas situações, uma versão pode ter mais de um ascendente. No exemplo,
as mesmas características definidas para a versão cs (de fiat-uno-a, ao nível Automóvel),
pode ser ligada para diferentes versões de fiat-uno-v (no nível de Veículo), representando
as duas opções para o modelo fiat-uno cs, um usando gasolina e outro usando álcool. Por
outro lado, a mesma versão em uma superclasse pode corresponder a mais de uma versão
em uma subclasse. Esta situação acontece no exemplo de Figura 5, onde uma versão de
fiat-uno-v (ex: v4) corresponde a duas versões de fiat-uno-a (mille, elx).
Ficam assim estabelecidas correspondências (mapeamentos) entre versões de um
objeto em uma classe e versões de seu ascendente na superclasse. Na Figura 5, o
mapeamento é n:m, cada versão da classe Automóvel pode corresponder a n versões na
superclasse Veículo, e vice-versa. A correspondência define uma restrição de integridade,
que é especificada a definição do relacionamento de herança entre uma classe e sua
superclasse, no esquema de banco de dados. A correspondência definida entre as versões
podem ser n:m, 1:1, 1:n ou n:1.
Quando é necessário buscar um objeto e todos os atributos herdados, a busca inicia
na classe mais especializada, sendo escolhido um ascendente para cada superclasse
relacionada. O ascendente pode ser explicitamente indicado, através do seu OID, ou
especificado através de um dos critérios pré-definidos: recent (mais recente), first
(primeiro) ou current (corrente). O critério será usado sempre que houver mais de uma
versão ascendente associada à versão (ou objeto) desejada(o).
Objetos versionados e não versionados podem estar presentes na mesma
hierarquia. Objetos não versionados ou versionados que não apresentam versões são
considerados como uma versão, para efeitos de verificação de restrição de cardinalidade
imposta pela correspondência[San 97].
3.3 - Representação de Versões de Muitos Níveis de uma Hierarquia
Como mostrado na seção prévia, muitos níveis de hierarquia permite a modelagem
de entidades do mundo real em muitos níveis de abstração com a presença de versões, não
resulta em modelos adequados em muitas situações.
Uma alternativa seria começar criando uma versão de um objeto de Veículo que
seria refinado mais tarde pela adição das propriedades do Automóvel. Outra possibilidade é
a criação de versões diretamente da classe Automóvel, mas somente com as propriedades de
Veículo (as outras propriedades que recebem valores nulos, são redefinidos depois).
A Figura 6 apresenta as possíveis representações da situação modelada na Figura
5, mas com versões que aparecem somente em um nível.
7
Veículo
mille
cs g
g
elx
g
1.0 G M y
1.0 G M z
cs a
mille a
1.5 A M x
1.0 A M y
1.5 G M x
fiat-uno
elx
a
1.0 A M z
Automóvel
Figura 6 Versões somente como classe mais especializada
Na representação com muitos níveis, versões são agrupadas conforme os valores
de suas propriedades. Na Figura 5, por exemplo, pode-se obter todas as versões de fiat-uno
do nível Automóvel, que tem o motor 1.0 e combustível de gasolina, por aquisição dos
descendentes da versão v3 (nível Automóvel). Versões em um nível podem ser
considerados como alternativas, para as quais são criadas versões aos mais baixos níveis da
hierarquia.
4 - Configurações
4.1 - O Conceito de Configuração
Considerando um objeto composto, em que os componentes podem ser objetos
versionados, uma configuração associa exatamente uma versão para cada um de seus
componentes. Se o objeto é construído hierarquicamente, isto é, um de seus componentes é
novamente um objeto composto, a configuração deve, recursivamente, incluir definições de
versões para todos os componentes na hierarquia de agregação [San 97]. Referências
dinâmicas devem ser solucionadas e o sistema tem que escolher uma versão conforme
alguns critérios pré-definidos.
Diferentes escolhas de versões para componentes e/ou ascendentes geram
diferentes configurações para o mesmo objeto, o que permite considerar que uma
configuração é uma versão especial de um objeto, chamada de versão configurada.
Uma versão configurada é obtida aplicando-se a operação get_configuration a
uma versão. Esta operação define uma única versão para cada ascendente existente na
hierarquia de herança, como também uma única versão para cada componente na hierarquia
de agregação.
A Figura 7 mostra o cenário para construção de uma configuração para a versão b1
consistindo nos seguintes passos:
8
1) b1 tem dois ascendentes correspondentes na superclasse A, assim um deve ser
escolhido. Assuma que a2 é escolhido.
2) existe uma referência dinâmica de a2 para o objeto versionado y na classe Q
que deve ser solucionado. Assuma que q2 é escolhido.
3) q2 também têm dois ascendentes correspondentes na superclasse P, do qual p2 é
escolhido.
Cada escolha
x-a
y-p
define
“parte”
da
a1
a2
p1
p2
A
P
configuração. Quando
a
configuração
é
completamente
definida em um nível,
uma
versão
configurada
é
criada
b1
q1
q2
B
Q
como uma sucessora
x-b
y-q
de sua versão base.
Figura 8 mostra as
Figure 7 Cenário para configuração
versões
de
configurações criadas. Versão c1 é o ponto de partida; versões c2,c3 e c4 foram criadas
como o resultado de escolhas feito nos passos 1, 2 e 3, respectivamente.
x-a
a1
y-p
a2
b1
c2
c1
A
p1
p2
c4
P
B
q1
q2
c3
Q
x-b
y-q
versão configurada
Figura 8 Versões configuradas e seus relacionamentos
O processo de configuração é recursivo, consistindo dos seguintes passos para
cada versão:
1) resolução de referência dinâmica, escolhendo uma das versões associadas ao
objeto versionado de referência;
2) definição de versões ascendentes, para cada uma das superclasses.
Uma versão configurada pode referenciar outras versões configuradas, de forma
que o sistema pode assegurar que uma configuração é completamente especificada.
9
4.2 - Propriedades de Configuração
Uma versão configurada é sempre criada para uma versão existente, para a qual é
conectada como a sucessora. Desde uma configuração ser uma versão (e assim um objeto),
ela tem as seguintes propriedades:
• possui um identificador de objeto (OID);
• possui ascendentes e descendentes;
• é associada a um objeto versionado, da mesma maneira como sua versão básica;
• possui um estado, que pode estar trabalhando, estável ou consolidado;
• pode ser usada como componente de outras configurações, como também
outros objetos (versões, objetos versionados ou objetos não versionados);
• operações definidas por versões regulares podem ser aplicadas para versões
configuradas, trazendo uniformidade para o modelo.
Embora sendo uma versão, uma configuração tem algumas características
especiais:
• é uma especificação completa de um objeto, que não apresenta referências
dinâmicas ou múltiplo ascendentes na mesma superclasse. É um sucessor de sua versão
básica, mas pode diferir do posterior apresentando um único ascendente em cada
superclasse;
• sempre é uma folha no grafo de derivação. Esta característica assegura que uma
configuração sempre pode ser removida;
• modificações em uma versão configurada somente podem acontecer para
referências existentes;
5 - Operações na Hierarquia de Objetos, Versões e Configurações
As operações definidas para objetos e versões (também aplicada a versões
configuradas) podem ser classificadas em três grupos: operações para criação, operações
para navegação na hierarquia de herança e operações para recuperação de versões/objetos.
Os operadores para criação de versões são os seguintes:
create_versioned_object (class): OID;
derive_version (set(OID)
[, ascendant: [class1:] set(OID)...]
[, descendant: [class2:] set(OID)...]): OID;
get_configuration (OID [, configuration expression]): OID;
Criação de versão pode acontecer em um de quatro modos:
1) criação de um objeto versionado e posteriormente criação de versões para ele;
2) derivação de uma versão de um existente (ou mais que um). A versão nova é
uma cópia de seu predecessor;
3) uma versão pode ser derivada para um objeto que não era versionado até este
momento, também pode ser aplicada a versões configuradas;
10
4) uma versão configurada é criada com o operador get_configuration. Uma
expressão de configuração pode ser provida, baseado nas propriedades de objeto.
Operações para navegação na hierarquia de herança permitem a recuperação de
ascendentes e descendentes de um objeto, em determinadas classes. As operações são:
get_ascendant (OID, class[criterion/” * ”]): set (OID ascendant object);
get_descendant (OID, class[criterion/” * ”]): set (OID descendant object);
Se mais que uma versão ascendente existir para a versão desejada, todas as versões
podem ser retornadas (opção *) ou somente uma, de acordo com o critério especificado. O
critério poderia indicar uma seleção manual, quando o OID da versão de ascendente é
determinado, ou uma seleção automática, quando uma das opções pré-definidas é
determinada. O critério pré-definido são: recent, first, ou current (recent é usado como
padrão). A operação de get_descendant é semelhante ao get_ascendant, mas aplicada a
objetos descendentes na subclasse identificada.
Recuperação de objetos pode ser feitos pelas seguintes operações:
get_object (OID): list(attribute values);
get_complete_object (OID [, ascendant: class1 [: criterion]
[, class2 [: criterion]]...]): list(OID);
O operador get_object recupera valores do atributo de um objeto definidos à
classe especificada. Esta operação retorna somente os atributos definidos a um nível da
hierarquia de herança. Para recuperar todos os atributos de um modelo de entidade do
mundo real num banco de dados, navegação deve ocorrer na hierarquia, então todos os
objetos representando a entidade dada são recuperados. A operação get_complete_object
foi definida com este propósito e retorna os ascendentes de um objeto numa hierarquia de
herança, um para cada superclasse.
Além dessas operações, são providas operações para navegação no grafo de
derivação (get_first_version, get_last_version, get_sucessor, get_predecessor,
get_versioned_object).
Deve ser notado que todas estas operações também aplicam a objetos versionados
e dão uniformidade e ortogonalidade ao modelo proposto.
6 - Facilidades para Especificação de Configuração
A operação get_configuration pode ser aplicada a qualquer objeto que tem
componentes ou ascendentes que devem ser resolvidos, seguindo os critérios pré-definidos,
que são os seguintes: a) uma referência dinâmica é substituída por uma referência à versão
atual do objeto versionado; b) a versão de ascendente é a atual.
Construir versões configuradas com mais flexibilidade, tendo facilidades para o
usuário são necessárias. É desejável selecionar versões baseado em suas propriedades,
tendo as facilidades de uma linguagem de consulta.
11
As facilidades que devem ser adicionadas podem ser classificadas em três tipos:
facilidades por referenciamento de objetos, facilidades para navegação na hierarquia de
herança e instalações para navegação na hierarquia de derivação.
Considerando uma linguagem SQL-like (por exemplo como em [Del 88, Sci 94]),
as instalações mencionadas são exemplificadas como as seguintes:
1) Facilidades para referenciamento de objetos
Junto com as instalações existentes, facilidades são necessárias para referenciar
versões de objetos.
Exemplo:
select x.motor, x.fuel,
from Vehicle v, versions(v) x
where x.motor > 1.0 and
x.fuel = ' A';
2) Facilidades para navegação na hierarquia de herança
Com herança de extensão, navegação na hierarquia de herança, na direção
descendente-ascendente, é feita automaticamente para objetos não versionados, através da
herança de valor e delegação [Bil 90]. Quer dizer, sempre que um atributo ou método que
não foram definidos para um objeto a um nível específico são referenciados, o ascendentes
do objeto são recursivamente visitados até certo atributo ou operação é encontrada.
Os termos is_ascendant_of e is_descendant_of permite a navegação na
hierarquia de herança.
Exemplo:
select va.*
from Vehicle v, versions(v) vv, Automobile a, versions(a) va,
where vv.motor=1.0 and
va is_descendant_of vv;
Na Figura 5, esta expressão seleciona versões mille e elx, que são os descendentes
de versões que têm propriedade motor igual a 1.0 (v3 e v4).
3) Facilidades para navegação na hierarquia de derivação
Às vezes é necessário identificar versões de acordo com sua posição relativa ou
absoluta na hierarquia de derivação. Os termos is_first, is_last, is_sucessor_of,
is_predecessor_of permitem, respectivamente, a identificação da primeira ou versão mais
recente em um grafo de derivação, ou o sucessor ou versão antecessora.
O critério less_recent e more_recent aplica a um subconjunto de versões em um
nível que corresponde a uma determinada versão em outro nível da hierarquia de herança.
12
Exemplo:
select vv.*
from Automobile a, versions(a) va, Vehicle v, versions(v) vv
where va.acessories = 'y' and
vv is_ascendant_of va and
vv is_less_recent;
Esta expressão seleciona versão v3, que é a versão menos recente entre o
ascendentes da versão mille (com a propriedade acessórios = ’y’), assumindo que foi criado
antes de versão v4.
7 - Conclusões
Presentemente existem muitos tipos de aplicações para as quais o conceito de
versão é considerado essencial. Exemplos comuns dessas aplicações são Computer Aided
Design e Manufacturing (CAD, CASE, CAM), Automatização de Escritório e
Hiperdocumentos.
O conceito de versão foi discutido no contexto de modelos de banco de dados
orientado a objetos e sistemas. A possibilidade de ter versões a qualquer nível de uma
hierarquia de herança foi discutida, eliminando a necessidade para se concentrar todos os
aspectos relacionados ao versionamento de objetos ao nível de folha da hierarquia. Foi
mostrado como a liberação desta restrição permite uma modelagem mais natural de
situações do mundo real, especialmente aquelas na qual os objetos são construídos no
processo top-down. Neste caso, objetos a níveis mais altos da hierarquia podem ser
versionados antes da criação de objetos de mais baixo nível, sem a necessidade de valores
nulos ou construções semelhantes.
Versões que aparecem a níveis diferentes de uma hierarquia introduzem a idéia de
mapeamento entre versões com uma representação mais natural e concisa das alternativas
para configuração de objeto. Configurações são obtidas pela escolha da versão mais
adequada a cada nível, sem a necessidade para representar explicitamente o conjunto inteiro
de combinações permitidas, como nos modelos onde somente são permitidas versões ao
nível de folha das hierarquias. Neste contexto onde o (freqüentemente muito grande)
conjunto de todas as possíveis combinações de versões é implícita representadas nas
hierarquias de herança, a noção de configuração de objeto é muito importante, a qual
denota completamente uma instância de objeto resolvida, tendo somente referências
estáticas a seus componentes. Configurações correspondem ao conceito de instâncias num
banco de dados sem o conceito de versão.
A aproximação proposta neste documento trata configurações como versões,
melhorando a ortogonalidade do modelo e introduzindo uma possibilidade muito proveitosa
de combinar versões e configurações para construir outras versões, como também
derivando versões novas de configurações. Esta aproximação permite o uso de
configurações que representam o resultado final de um projeto como um componente em
13
outros objetos compostos de nível mais alto. Modularização pode ser aumentado e
reutilizado de objetos de banco de dados é provido. Este tratamento uniforme também
resulta em um modelo mais conciso, como o conjunto de operações definidas por
manipulação de versões é o mesmo usada para configurações.
Referências Bibliográficas
[Agr 91]
Agrawal, R.; Buroff, S.; Gehani, N.; Shasha, D. Object Versioning in Ode. In: Proc. Data
Engineering, 1991, Kobe, Japan. p. 446-455.
[Bee 88]
Beech, D.; Mahbod, B. Generalized Version Control in an Object-Oriented Database. In:
Proc. Data Engineering, 1988, Los Angeles-EUA. p.14-22.
[Bil 90]
Biliris, A. Modeling design object relationships in PEGASUS. In: Proc. Data
Engineering, 1990. Los Angeles-USA. p. 228-236.
[Bjö 89]
Björnerstedt, A. ; Hultén, C. Version Control in an Object-Oriented Architecture. In: Kim,
W.; Lochovsky, F.H. (eds.). Object-Oriented Concepts, Databases, and Applications. ACM Press,
chap. 18, p. 451-485, 1989.
[Bye 93]
Byeon, K.J.; McLeod, D. Towards the unification of views and versions for object
databases. In: Proc. Int. Symp. on Object Technologies for Advance Software, Nov. 1993,
Konazawa-Japan.
[Del 88]
Delobel, Claude; Lecluse, Christophe; Richard, Philippe. LOOQ: a query language for
object-oriented databases, informal presentation. Rapport Technique Altaïr 22-88, 8 Oct. 1988
[FAU 91] FAUVET, M.C. Modelling and managing versions and histories in an object-oriented
environment. Grenoble, IMAG/BULL, July 1991. (Rapport RAP015)
[Gol 93]
Golendziner, L.G.; Santos, C.S. Versões em Bancos de Dados Orientados a Objetos.
Campina Grande, PB, 8º Simpósio Brasileiro de Banco de Dados, 1993.
[Gol 95]
Golendziner, L.G.; Santos, C.S. Versions and configurations in object-oriented database
systems: a uniform treatment. Proceedings of the 7th International Conference on Management of
Data, December,1995.
[KAT 90] KATZ, R.H. Toward a unified framework for modeling in engineering databases. ACM
Computing Surveys, New York , v.22, n.4 , p. 375-408, .Dec 1990.
[Kim 89a] Kim, W.; Bertino, E.; Garza, J.F. Composite objects revisited. In: Proc. ACM SIGMOD
Conference, 1989, Oregon. p.337-347.
[Lam 91] Lamb, Charles W.; Landis, Gordon; Orenstein, Jack A.; Weinreb, Daniel L. ObjectStore.
Communications of the ACM, v.34, n.10, p.51-63, Oct. 1991.
[Mon 92] Monk, S.R.; Sommerville, I. A model for versioning of classes in object-oriented databases.
In: Proc. BNCOD, July 1992, Aberdeen, Scotland.
[San 97]
Santos, C.S. Versões: conceitos, modelos e aplicações. Projeto de Pesquisa. Departamento
de Informática Aplicada – Instituto de Informática da Universidade Federal do Rio Grande do Sul,
Porto Alegre-RS. Fevereiro, 1999.
[Sci 91]
Sciore, E. Using annotations to support multiple kinds of versioning in an object-oriented
database system. ACM Transactions on Database Systems, v.16, n.3, p.417-438, Sept. 1991.
[Sci 94]
Sciore, E. Versioning and configuration management in an object-oriented data model.
VLDB Journal, v.3, p. 77-106, Jan. 1994.
[Tal 93]
Talens, G.; Oussalah, C.; Colinas, M.F. Versions of simple and composite objects. In:
Proc. VLDB, Sept. 1993, Dublin, Ireland. p. 62-72.
[Zdo 87]
ZDONIK, S. Version Management in an Object-Oriented Database. In: INTERNATIONAL
WORKSHOP on ADVANCED PROGRAMMING ENVIRONMENTS, June 1986, TrondheimNoruega. Proceedings. Springer-Verlag, 1987. p.405-422. (Lecture Notes in Computer Science
244)
[Zdo 90]
Zdonik, S. Object-Oriented Type Evolution. In: Bancilhon, F; Buneman, P. (Eds).
Advances in Database Programming Languages. Addison-Wesley, p.277-288, 1990.
14
Download

Versões e Configurações em Sistemas de Banco de Dados