AN�LISE DE APLICA��O BASEADA EM DADOS HIST�RICOS: ESTUDO

Shared by: Z4LC6pQ
Categories
Tags
-
Stats
views:
1
posted:
5/27/2012
language:
pages:
72
Document Sample
scope of work template
							       UNIVERSIDADE CATÓLICA DO SALVADOR
           WAGNER DE OLIVEIRA PORTO




ANÁLISE DE APLICAÇÃO BASEADA EM DADOS HISTÓRICOS:
 ESTUDO COMPARATIVO NO SGBD ORACLE DO MODELO
              RELACIONAL E TEMPORAL




                   SALVADOR
                      2005
       UNIVERSIADE CATÓLICA DO SALVADOR
           WAGNER DE OLIVEIRA PORTO




ANÁLISE DE APLICAÇÃO BASEADA EM DADOS HISTÓRICOS:
 ESTUDO COMPARATIVO NO SGBD ORACLE DO MODELO
              RELACIONAL E TEMPORAL




                          Monografia apresentada como exigência
                          parcial para obtenção de título de
                          bacharel    em     Informática,   pela
                          Universidade Católica do Salvador, sob
                          orientação do Prof. Marco Antônio
                          Caldas de Figueirêdo Júnior.




                   SALVADOR
                      2005
                                        CERTIFICADO




        Certifico que a presente memória, ANÁLISE DE APLICAÇÃO BASEADA EM
DADOS HISTÓRICOS: ESTUDO COMPARATIVO NO SGBD ORACLE DO
MODELO RELACIONAL E TEMPORAL, foi realizada sob minha direção por
WAGNER DE OLIVEIRA PORTO, constituindo o Projeto Final do Curso de
Bacharelado em Informática da Universidade Católica do Salvador – UCSal.




Salvador, 03 de Novembro de 2005

------------------------------------------------------------------------------
MARCO ANTÔNIO CALDAS DE FIGUEIRÊDO JÚNIOR
Curso de Bacharelado em Informática
Universidade Católica do Salvador
              AGRADECIMENTOS




                                              Agradeço a minha família
         por ter me dado força e acreditado em mim durante esses anos,
                                               Agradeço a minha noiva
                   pela paciência e compreensão durante este momento,
                                             Agradeço a meu orientador
                              por ter me ajudado a realizar esse projeto,
                Agradeço a todos os meus colegas, professores e amigos
pelo companheirismo e por me ajudar a trilhar um caminho de sabedoria.
                                       RESUMO




A necessidade de se armazenar e recuperar os vários estados de uma informação
geraram um novo elemento importante dentro dos bancos de dados (BD) convencionais:
o tempo. O aspecto tempo, presente em um banco de dados, é importante por
representar a evolução das informações permitindo uma melhor descrição da realidade.
Os bancos de dados temporais (BDT) são construídos para guardar informações antigas,
presentes e futuras, permitindo manter uma estrutura dinâmica dos dados, enquanto que
em bancos de dados relacionais (BDR) recursos adicionais são necessários para tal
implementação. Para representar as possíveis relações que ocorrem em um BD são
utilizados os modelos de dados, e possíveis decisões equivocadas de representação
podem aumentar a complexidade do projeto ou mesmo determinar problemas de
desempenho. Neste projeto, será avaliada a decisão quanto à implementação de uma
aplicação baseada em dados históricos nos moldes de um BDR e um BDT utilizando
como base o Sistema Gerenciador de Banco de Dados (SGBD) Oracle, avaliando os
benefícios e impactos de cada opção.
                                                              SUMÁRIO




1. INTRODUÇÃO ....................................................................................... 6

2. BANCO DE DADO RELACIONAL ..................................................... 8
  2.1. Conceitos em Bancos de Dados Relacionais.......................................................... 8
  2.2. O Modelo Entidade-Relacionamento ..................................................................... 9
  2.3. A Implementação do Tempo em um Banco de Dados Relacional ....................... 10
3. BANCO DE DADOS TEMPORAL..................................................... 13
  3.1. Conceitos de Representação Temporal ................................................................ 13
     3.1.1. O Tempo ................................................................................................................................... 13
     3.1.2. A Dimensão Temporal.............................................................................................................. 14
     3.1.3. A Representação do Tempo em um Banco de Dados ............................................................... 15
     3.1.4. Manipulação de Dados Temporais ........................................................................................... 17
  3.2. Modelo de Dados Temporais ............................................................................... 19
     3.2.1. O Modelo TempER .................................................................................................................. 21
  3.3 Sistema de Banco de Dados Temporal .................................................................. 24
     3.3.1. Questões no Desenvolvimento dos Modelos de Dados Temporais .......................................... 25
  3.4. Consulta a Banco de Dados Temporal ................................................................. 26
     3.4.1 Consultas Temporais ................................................................................................................. 27
  3.5. Aplicabilidade ...................................................................................................... 29
4. IMPLEMENTAÇÃO ............................................................................ 32
  4.1. A Aplicação .......................................................................................................... 32
  4.2. Implementação de uma Base de Dados Temporal Utilizando o Oracle com o
  Modelo Relacional. ..................................................................................................... 35
  4.3. Implementação de uma Base de Dados Temporal utilizando o Oracle Time Series
  com o Modelo Temporal. ............................................................................................ 38
5. ESTUDO COMPARATIVO ................................................................ 42
  5.1 Análise Qualitativa ................................................................................................ 42
  5.2. Análise Quantitativa ............................................................................................. 45
6. CONCLUSÃO ....................................................................................... 50

7. REFERÊNCIAS BIBLIOGRÁFICAS ................................................ 52

ANEXO A................................................................................................... 54
  Código Fonte da Consulta na Base de Dados Relacional e Temporal ........................ 54
ANEXO B ................................................................................................... 60
  Código Fonte da Geração dos objetos na Base de Dados Relacional ......................... 60
ANEXO C................................................................................................... 64
  Código Fonte da Geração dos objetos na Base de Dados Temporal ........................... 64
ANEXO D................................................................................................... 69
  Script de Criação do Calendário no BDT.................................................................... 69
1. INTRODUÇÃO



           O armazenamento e a administração de dados são exigências consideráveis
no contexto das aplicações atuais. Devido a essas exigências, os sistemas devem ter
capacidades cada vez maiores e mais eficientes de armazenar e apresentar os dados de
uma forma organizada para possíveis interpretações. Para armazenar os dados de uma
aplicação, são utilizados com mais freqüência o BDR ou convencionais. Esses dados
são relacionáveis e acessíveis, e seu conteúdo reflete um instante da realidade. Com o
passar do tempo, os dados sofrem modificações à medida que o mundo real também
sofre alterações, isso faz com que o estado dos mesmos seja alterado.

           Em alguns casos, o acompanhamento histórico da evolução da informação
se faz necessário e, com isso, dados considerados históricos não podem ser perdidos.
Dentre os exemplos de aplicações onde esses dados poderiam ser considerados
importantes, podem-se citar dados estatísticos de venda de um produto específico,
análise de índice pluviométrico e análise das condições da água das praias. Neste último
caso, a própria regra da aplicação exige o armazenamento de dados históricos para a
tomada de decisão, uma vez que a qualidade do trecho da praia é obtida a partir da
análise de amostras realizadas em semanas anteriores.

           Neste contexto, o BDT surge para exercer funções que permitam tornar
históricos os dados e utilizá-los como propulsores para projeções. Esse tipo de banco de
dados “permite armazenar e recuperar todos os estados de um objeto, registrando sua
evolução ao longo do tempo” (EDELWEISS, 1994). Contudo, em que pese a utilização
de um BDT seja a decisão natural a tomar, um estudo detalhado deve ser realizado para
avaliar impactos e benefícios desta implementação.

           Este projeto tem como objetivo comparar a implementação de uma
aplicação que avalia as condições da água das praias a partir de dados históricos em
uma base de dados temporal e uma base de dados relacional, avaliando critérios como
aspectos de projeto, alterações na forma de desenvolvimento e desempenho. Será
enfatizado o aspecto de tempo de transação de um BDT, que é o registro do momento


                                                                                      6
em que a informação é inserida no banco de dados (BD), uma vez que outros aspectos
como tempo de validade e versionamento de esquemas fogem ao escopo da aplicação.

             A partir dos resultados obtidos com o estudo comparativo será possível
determinar quais as vantagens e desvantagens de se implementar uma base de dados
temporal com desenvolvimento próprio, ou seja, construir toda a base com
conhecimentos de BDR, ou através de objetos previamente desenvolvidos no SGBD
Oracle com o fim de dar suporte a BDT. O projeto poderá servir de base teórica e
prática para se iniciar um estudo mais detalhado na construção de uma base de dados
temporal.

             O projeto está organizado da seguinte maneira: o capítulo 2 trata de
conceitos relacionados a BDR; já o capítulo 3 detalha os conceitos de BDT; o capítulo 4
especifica e descreve a implementação realizada; no capítulo 5, faz-se um estudo
comparativo com os resultados das implementações; e, por fim, no capítulo 6 é feita a
conclusão.




                                                                                     7
2. BANCO DE DADO RELACIONAL

2.1. Conceitos em Bancos de Dados Relacionais



           Um sistema de banco de dados é basicamente apenas um sistema
computadorizado de manutenção de registros. O banco de dados, por si só, pode ser
considerado como o equivalente eletrônico de um armário de arquivamento; ou seja, ele
é um repositório ou recipiente para uma coleção de arquivos de dados
computadorizados (DATE, 2003).

           Com a evolução dos bancos de dados, vários modelos de implementação têm
sido propostos, onde se destaca o modelo relacional. Um banco de dados relacional é
formado por uma coleção de tabelas que admite operações sobre elas. Dentre essas
operações, pode-se citar as de atualização, inserção, exclusão e seleção. As tabelas
armazenam os registros (tuplas) e implementam os relacionamentos entre os dados.

           Modelo relacional de dados é a teoria formal em que se baseiam os sistemas
relacionais: ele trata apenas de questões lógicas, não de questões físicas. Este modelo
está relacionado com três aspectos principais dos dados: estrutura, integridade e
manipulação dos dados. O aspecto estrutural tem a ver com as relações propriamente
ditas; integridade está relacionada com o conceito de chaves primárias e estrangeiras,
entre outros pontos; e o aspecto manipulativo tem a ver com os operadores. Segundo
Date (2003), o Princípio da Representação Uniforme estabelece que todo o conteúdo de
informação de um BDR é representado de um e somente um modo, especificamente sob
a forma de valores explícitos em posições de colunas nas linhas das relações.

           Além das tabelas e chaves, um BDR oferece outros objetos que facilitam a
manipulação dos dados. Dentre eles, podemos citar:

            Procedimentos (procedures): Procedimentos realizados na base de dados
através de comandos SQL que podem ou não retornar algum valor.




                                                                                     8
             Funções     (functions):    O    mesmo      que    procedimentos,     porém
obrigatoriamente retorna valores.

             Gatilhos (triggers): Procedimentos executados automaticamente a partir
de um comando de atualização dos objetos da base de dados associado.

             Cursor: Objeto do BD que é utilizado quando é necessário fazer algum
tratamento em cada linha de um resultado retornado pelo comando de seleção, resultset.

           Dentre os modelos utilizados para representar um BDR, destaca-se o Modelo
Entidade-Relacionamento (E/R), que será detalhado a seguir.




2.2. O Modelo Entidade-Relacionamento



           O modelo entidade/relacionamento (E/R) é uma das abordagens de
modelagem semântica mais conhecidas e mais usada, ela foi baseada no modelo de
entidades/relacionamentos introduzido por Chen em 1976 e desde então vem sendo
refinada pelos diversos autores. Segundo Chen (1976), uma entidade é uma coisa que
pode ser identificada distintamente e pode ser classificada como entidade regular e
fraca. Uma entidade fraca é uma entidade cuja existência depende de alguma outra
entidade, ou seja, ela não pode existir sem essa outra entidade. Ao contrário, uma
entidade regular não possui dependência quanto a outra entidade.

           Outro aspecto importante do Modelo E/R são as propriedades, conhecidas
também como atributos, obrigatórios nas entidades e opcionais nos relacionamentos.
Como exemplo de propriedades podemos citar uma entidade EMPREGADO que possui
as propriedades nome, salário, cargo e assim por diante. As propriedades podem ser
classificadas em: simples ou compostas, chave, univaloradas ou multivaloradas, em
falta e básicas ou derivadas. Tal classificação foi bastante detalhada por Date (2003).

           Chen (1976) define um relacionamento como uma associação entre
entidades. Para exemplificar, pode-se citar a relação entre um departamento e um



                                                                                          9
empregado, onde o departamento possui empregados. A cardinalidade de um
relacionamento E/R pode ser de um para um, de um para muitos ou de muitos para
muitos.   A   figura   1     exemplifica       um    diagrama        E/R   onde     as   entidades
DEPARTAMENTO, EMPREGADO e a entidade fraca DEPENDENTE são
representados por retângulos e os relacionamentos DEPTO-EMP e EMP-DEP,
representados pelos losangos junto às suas cardinalidades                   definindo que um
departamento possui um ou muitos empregados, e um empregado possui apenas um
departamento, por exemplo.




    DEPARTAMENTO                                                             EMPREGADO
                                             DPTO-
                                             EMP
                           1..1                                 1..N         1..1




                                                                              EMP-DEP




                                                                                         0..N


                                                                             DEPENDENTE


                                  Figura 1 – Exemplo de modelo E/R
                                           Fonte: Date, 2003




2.3. A Implementação do Tempo em um Banco de Dados Relacional



          Durante a fase de pesquisa bibliográfica, não foram encontradas referências
de um SGBD considerado totalmente temporal, ou seja, que atenda a todas as
necessidades que um BD desse tipo possui. Na realidade, o que temos são várias
experiências sob forma de protótipos, nos quais se baseiam estudos de problemas
encontrados (de armazenamento e recuperação de informações), e mapeamento de




                                                                                                10
modelos temporais para BD tradicionais, nos quais os rótulos temporais são
explicitamente representados e manipulados.
           A utilização de um modelo de dados temporal na modelagem, com grande
poder de expressão, não implica que seja necessária a existência de um banco de dados
correspondente a este modelo. Podem ser utilizados BD’s relacionais, com todas as
características de robustez que apresentam, desde que seja possível mapear
adequadamente o modelo temporal para o modelo do BD utilizado.

           O desenvolvimento de uma base de dados temporal a partir de uma base de
dados relacional pode ser realizada representando as características temporais como
atributos comuns nas tabelas e utilizando-se de objetos disponíveis no SGBD, como
gatilhos , procedimentos e funções. Dentre esses objetos, o que tem maior importância
na simulação de uma dimensão temporal em um BDR são os gatilhos, e por esse
motivo sua utilização será detalhada um pouco mais logo abaixo.

           Os gatilhos são utilizados também como uma maneira prática de
implementar rotinas para garantir integridade de dados ou de operações. Gatilhos são
rotinas ou procedimentos que são utilizados quando um comando insert, update ou
delete é executado em uma tabela ou até mesmo visão (RAMALHO, 2001). Um gatilho
é disparado quando um dos comandos acima é executado, e essa execução é automática,
sem interferência do usuário.

           Um gatilho pode ser do tipo BEFORE, que é disparado antes de executar o
comando que o disparou, AFTER, que é disparado após a execução do comando de
disparo, e INSTEAD OF, que é executado no lugar do comando que o disparou. No caso
do Oracle, este último tipo de gatilho só pode ser usado associado a visões.

           Esse projeto, especificamente, foi desenvolvido a partir da implementação de
uma base de dados temporal para uma aplicação que utiliza a característica de tempo de
transação. A implementação do tempo em na base de dados relacional foi realizada
adicionando-se um atributo do tipo data (date) que é gerenciado através de um gatilho
responsável por armazenar nesse campo o momento em que a informação foi inserida
no BD.




                                                                                    11
Na implementação do conceito de temporalidade no BDR é necessária a utilização de
gatilhos que são responsáveis por armazenar a data do servidor no atributo onde ficam
registrados os instantes em que os dados são inseridos, mesmo que o usuário tente
inserir um valor o gatilho altera automaticamente de acordo com o servidor e caso a
operação seja de alteração (update) o gatilho não permite que essa data seja alterada.




                                                                                         12
3. BANCO DE DADOS TEMPORAL

3.1. Conceitos de Representação Temporal



3.1.1. O Tempo


             O tempo é um aspecto importante de todo o evento do mundo real. Todo
bom modelo de BD deve utilizar mecanismos que capturem de maneira eficiente a
evolução temporal de seus objetos. Esse item tem grande importância no tratamento das
informações, representando a duração dos eventos, previsões e o tempo de vida de
documentos ou operações. O tempo, segundo Tansel (1990), é uma seqüência de
“pontos de tempo” eqüidistantes, ou seja, 0, 1, 2, ..., NOW, onde 0 representa o tempo
relativo inicial, e NOW é o tempo presente. A dimensão temporal é composta por uma
seqüência de pontos consecutivos no tempo, que recebe o nome de eixo temporal.

             A definição de uma ordem a ser seguida no tempo é fundamental quando
utilizada alguma representação temporal. Há três opções de ordenação temporal
(ANTUNES, 1997):

              Tempo linear: total ordenação entre quaisquer dois pontos no tempo.
Este é o mais comum.

              Tempo ramificado: permite a possibilidade de dois pontos diferentes
serem sucessores (ramificação no futuro) ou antecessores (ramificação no passado)
imediatos de um mesmo ponto. Para ambos a restrição linear é abandonada.

              Tempo circular: utilizado para modelar eventos e processos recorrentes.
A maior parte dos modelos temporais se baseia no tempo linearmente ordenado. A
ordenação total do tempo pode ser definida com mais precisão através da teoria dos
conjuntos.




                                                                                   13
3.1.2. A Dimensão Temporal



           Os modelos de dados tradicionais apresentam duas dimensões, as linhas
(instâncias dos dados) e as colunas (atributos) de uma tabela. Cada atributo de uma
instância apresenta um só valor. Se for feita uma alteração deste valor, o anterior é
perdido. Os modelos temporais acrescentam mais uma dimensão aos modelos
tradicionais – a dimensão temporal. Esta dimensão associa alguma informação temporal
a cada valor. Caso o valor de um atributo seja alterado, o valor anterior não é removido
do banco de dados – o novo valor é acrescentado, associado a alguma informação que
define, por exemplo, seu tempo inicial de validade. Por exemplo, em um atributo que
representa o salário de um funcionário, todos os valores deste campo ficam
armazenados, cada valor associado ao seu tempo de validade. Deste modo, é possível
acessar toda a história dos atributos, sendo possível analisar sua evolução temporal.

           Ainda neste contexto, pode-se definir duas maneiras distintas de variação
temporal: tempo contínuo e tempo discreto. Supõe-se que o tempo é contínuo por
natureza. Entretanto, sem grande perda de generalidade, o tempo pode ser considerado
como discreto. Esta segunda forma de representação simplifica consideravelmente a
implementação de modelos de dados. Modelos de dados que suportam uma noção
discreta de variação temporal são baseados em uma linha de tempo composta de uma
seqüência de intervalos temporais consecutivos, que não podem ser decompostos, de
idêntica duração. Estes intervalos são denominados chronons. A duração particular de
um chronon não é necessariamente fixada no modelo de dados, podendo ser definida em
implementações particulares do modelo de dados.

           Outro conceito relevante quando analisamos a dimensão temporal é a
granularidade temporal. Em um sistema, este aspecto consiste na duração de um
chronon. Entretanto, dependendo da aplicação, podem ocorrer múltiplas possibilidades
de unidades. Isso acontece quando um único BD é formado pela integração de
diferentes BDT's, onde é possível que cada BD possua sua própria unidade de tempo,
por exemplo dias, semanas, horas e minutos, e o BD heterogêneo resultante possui todas
essas unidades de tempo.



                                                                                        14
               Consideram-se vários domínios temporais divididos em níveis, onde cada
instante de um domínio de alto nível (dia, por exemplo) está associado a um conjunto de
instantes de um domínio de nível inferior (hora, por exemplo). Neste exemplo, cada
unidade dia corresponde a 24 unidades horas. Vale salientar, que é preciso definir se o
conceito utilizado na resolução do problema será o de tempo absoluto (definido por um
tempo específico) ou de tempo relativo (tem sua validade relacionada à validade de
outro fato).




3.1.3. A Representação do Tempo em um Banco de Dados


               Os bancos de dados temporais são projetados de forma dinâmica, capturando
informações sobre o presente, passado e futuro, preservando assim, informações do
mundo real (SILVA 1992, SNODGRASS 1995, TANSEL 90). Os BDR podem ser
classificados de acordo com a forma utilizada de armazenamento de valores. Segundo
Edelweiss (1998), os BDR’s podem ser dos seguintes tipos:

                Bancos de Dados Instantâneos: corresponde aos bancos de dados
tradicionais, onde são armazenados os valores presentes. A cada modificação no valor
de uma propriedade, o valor anteriormente armazenado é destruído e somente o último
valor está disponível. A manutenção de informações temporais neste tipo de banco de
dados somente pode ser realizada explicitamente, pela inclusão de atributos definidos
sobre o domínio tempo, e pela sua manipulação dos programas de aplicação. Exemplo:
Se um empregado do departamento de compras de uma empresa passa a trabalhar no
departamento de vendas, os dados do local de trabalho anterior não são mantidos, pode-
se armazenar o estado anterior, mas não se pode manipular os dados históricos.

                Bancos de Dados de Tempo de Transação: as informações temporais
são associadas ao seu tempo de transação sob forma de rótulo temporal (timestamps).
Este instante é fornecido pelo SGBD, sendo esta operação transparente ao usuário. A
alteração do valor de uma informação não destrói o valor anteriormente definido,
ficando todos os valores armazenados no banco de dados. O estado atual do BD é




                                                                                     15
composto pelos últimos valores definidos para cada uma das informações. A data de
transação é associada às informações pelo SGBD, como demonstra a Tabela 1.

                       Tabela 1 - Banco de Dados de Tempo de Transação
Código            Nome               Cargo               Salário         Data

01                Carlos             An. de sistemas     800,00          01/01/1996

01                Carlos             An. de sistemas     900,00          01/06/1996

01                Carlos             An. de sistemas     1.000,00        01/01/1997

01                Carlos             An. de sistemas     2.000,00

                                  Fonte: EDELWEISS, 1998


            Se algum dado passado for alterado, o sistema considera como sendo uma
nova tupla na tabela, porque essa alteração considera a data atual do sistema e não a
data que aconteceu realmente. Se quisesse alterar o salário de Carlos em 01/01/1997 não
poderia, pois essa data foi colocada pelo sistema. Para alterar o salário na data atual,
última referência válida (data não preenchida) seria alterada com a data atual, e uma
nova linha seria adicionada na tabela com o novo valor.

             Bancos de Dados de Tempo de Validade: associa a cada informação
somente o tempo de sua validade no tempo real, podendo representar o início de sua
validade (ponto no tempo, variação por degraus), a validade somente naquele ponto no
tempo (variação discreta), ou seu intervalo de validade. O tempo de validade deve
sempre ser fornecido pelo usuário. Em bancos de dados de tempo de validade não se
tem acesso ao tempo em que a informação foi definida, sendo armazenado somente o
tempo em que a mesma é válida. Este tipo de banco de dados permite que sejam
corrigidas informações do passado – se alguma das informações tiver sido registrada
incorretamente, é feita uma nova definição com a data de validade correspondente,
sendo que somente a versão atual dos dados está disponível, conforme ilustrado na
Tabela 2.




                                                                                      16
                       Tabela 2 - Banco de Dados de Tempo de Validade
Código            Nome              Cargo               Salário         Data

01                Carlos            An. de sistemas     1.000,00        01/01/1996

01                Carlos            An. de sistemas     900,00          01/06/1996

                                 Fonte: EDELWEISS, 1998


           Neste caso, pode-se armazenar e manipular informações passadas. Como
mostra o exemplo, o salário de Carlos em 01/01/1996 foi alterado de 800,00 para
1.000,00, permanecendo essa informação, sem que o sistema considerasse como uma
nova informação, não acrescentando, assim, uma nova tupla. Em banco de dados de
tempo de validade podem ser feitas alterações em informações passadas;

            Bancos de Dados Bitemporais: é a forma mais completa de armazenar
informações temporais. Ambos os tempos, de transação e de validade, são associados a
cada informação.Toda a história do banco de dados fica armazenada. O estado atual do
banco de dados é constituído pelos valores atualmente válidos. Valores futuros podem
ser definidos através do tempo de validade, sendo possível recuperar o momento em que
estes valores foram definidos para eventuais alterações.




3.1.4. Manipulação de Dados Temporais


           Os BDTs possibilitam a gerência das informações através de operações
básicas: inserção, atualização, exclusão e seleção (HUBLER, 2001). A seguir, uma
análise do comportamento destas operações:

           Inserção: quando uma determinada informação é inserida, deve-se criar
mecanismos capazes de fornecer os rótulos temporais necessários;

           Atualização: deve considerar, em primeiro lugar, o tempo associado à
informação (passado, presente e/ou futuro). Dependendo deste tempo, mecanismos
diferentes devem ser criados para que se mantenha o estado consistente dos dados;




                                                                                     17
           Exclusão: pode ser de duas formas: exclusão lógica e física. A lógica é
realizada encerrando-se a “vida” da informação. A física é utilizada quando se deseja
remover fisicamente uma informação que não é mais relevante (HUBLER, 2001);

           Seleção: além das informações básicas de gerenciamento, os dados devem
ser consultados, uma vez que o sucesso de um sistema de banco de dados está bastante
relacionado com a facilidade de recuperação das informações armazenadas. As
consultas temporais que podem ser realizadas a um BDT dependem não só da
especificação da informação buscada, mas também do tipo de BD implementado pelo
modelo utilizado e da história considerada.

           A seguir, são mostradas de acordo com (EDELWEISS, 98), as informações
que podem ser recuperadas para cada um dos tipos de BD temporais:

           - Banco de dados instantâneos: como não possuem suporte à informações
temporais, não permitem tais consultas;

           - Bancos de dados de tempo de transação: podem ser recuperados os
valores atuais das informações armazenadas e os valores das informações definidas em
algum instante no passado;

           - Bancos de dados de tempo de validade: podem recuperar informações
válidas no presente, no passado, além de valores que serão válidos no futuro (todos de
acordo com a atual percepção dos dados).

           - Bancos de dados bitemporais: podem recuperar tanto o tempo de
transação como o de validade. Isto permite que sejam feitas consultas a respeito de
valores atuais, passados e futuros.

            A consulta pode ser realizada através de uma linguagem textual ou de uma
linguagem visual. A linguagem textual de consulta exige que o usuário tenha um grande
conhecimento de sintaxe e da forma como as informações estão organizadas no BD. Já a
linguagem visual de consulta apresenta um ambiente mais amigável para recuperação de
informações, permitindo que usuários não familiarizados com a sintaxe da linguagem de
consulta textual formulem suas consultas de forma intuitiva (DATE, 1990).



                                                                                   18
3.2. Modelo de Dados Temporais


           O modelo de dados, segundo Korth (1995), é um conceito fundamental à
estrutura de um banco de dados, por corresponder a uma coleção de ferramentas
conceituais utilizadas para realizar a descrição dos dados, os relacionamentos, a
semântica dos dados e ainda as restrições de consistência. Edelweiss (1994) considera
que a modelagem temporal de um sistema de informação deve representar não só a
estrutura dos dados manipulados, mas também sua dinâmica – seu comportamento com
a passagem do tempo.

           Os modelos de sistemas de informação são de grande importância por
demonstrarem como as informações devem estar situadas e relacionadas em seu
contexto. Eles devem representar o sistema o mais próximo possível da realidade do
usuário, buscando a melhor forma para o armazenamento de informações e agilidade de
respostas às consultas. Um modelo temporal representa informações associadas à
dimensão temporal. O banco de dados, para armazenar informações do sistema, deve,
portanto, ser um banco de dados temporal, que armazena tanto dados atuais como
valores anteriormente definidos, permitindo desta maneira que estados passados do
banco de dados possam ser reconstituídos. Também podem ser armazenadas
informações futuras permitindo previsões para eventos futuros.

           De acordo com Edelweiss (1998), um modelo de dados deve apresentar uma
estrutura de objetos que podem ser manipulados por esta linguagem, uma linguagem
para atualizar estes objetos (update), uma linguagem de consulta, e algum mecanismo
para expressar restrições de integridade. Os modelos de dados temporais também devem
apresentar estas características, acrescentado a possibilidade de representar informações
temporais, efetuar consultas temporais, e permitir a definição de restrições de
integridade temporal.

           Alguns aspectos devem ser considerados ao analisarmos um modelo de
dados, tais como identificar o tipo de rótulo temporal utilizado pelo modelo (ponto no



                                                                                      19
tempo, intervalo temporal, elemento temporal ou duração), analisar a forma de variação
temporal dos atributos (podem ou não variar com o tempo, todos ou alguns), verificar se
os rótulos temporais são implícitos ou explícitos, homogeneidade temporal e
apresentação e funcionalidade da linguagem de consulta.

             A seguir, são apresentados os modelos de dados temporais estudados por
Posser (2001). Eles enfocam, principalmente, a forma de representação dos aspectos
temporais e, em alguns, há a existência de uma linguagem de consulta associada
(EDELWEISS, 1994). São eles:

             - Historical Relational Data Model (HRMD), proposto por Clifford;

             - Temporal Relational Model (TRM), proposto por Navathe;

             - Historical Structured Query Language (HSQL), proposto por Sarda;

             - Temporal Structured Query Language 2 (TSQL2), proposto por
Snodgrass;

             - Temporal Enhanced Entity-Relationship (TEER), proposto por Elmasri;

             - Temporal Entity-Relationship (TempER) proposto por Heuser;

             - Entity-Relationship-Time (ERT), proposto por Loucopoulos;

             - Temporal Functionality in Objects with Roles Model (TF-ORM), proposto
por Edelweiss.

             Os modelos HRDM, TRM, HSQL e TSQL2 são modelos relacionais
estendidos, nos quais foi acrescida a dimensão temporal. Já o TEER e o TempER são
modelos Entidade-Relacionamento (ER) estendidos. O ERT utiliza a orientação a
objetos baseada no enfoque do modelo ER. Por último, o TF-ORM é um modelo
orientado a objetos no qual apenas foi incorporada a capacidade de representação dos
aspectos temporais. Dentre os modelos analisados, o modelo TempER foi escolhido
para se desenvolver o estudo de caso, sendo assim, será melhor explorado a seguir.




                                                                                     20
3.2.1. O Modelo TempER


            O TempER é um modelo de dados do tipo Entidade-Relacionamento que
permite referenciar os objetos (entidades, relacionamentos ou valores de atributos) à
dimensão temporal. Desta forma, é possível representar o relacionamento entre as
entidades temporalizadas e as não-temporalizadas.

            No caso das entidades temporalizadas, a validade temporal é o subconjunto
de pontos do eixo temporal, sendo assim denominada de entidade transitória. Com
relação às entidades não-temporalizadas, admite-se que a sua existência ocorre durante
todo o eixo temporal (validade temporal). Deste modo, foram classificadas como
entidades perenes (HEUSER, 1998).

            O modelo foi concebido com base, principalmente, no modelo ER. As
principais diferenças entre as abordagens situam-se na simbologia e na primitiva
temporal adotada – o elemento temporal no lugar do intervalo de tempo. Em uma visão
geral, as principais características do modelo TempER são as seguintes:

            • Oferece uma simbologia que diferencia elementos temporizados de
elementos não temporizados, semelhante à do modelo ERT;

            • Permite que se associe em um mesmo diagrama entidades temporalizadas
com não temporalizadas. As entidades não temporalizadas passam a ser denominadas de
“perenes”, sendo assumido que estas também apresentam uma dimensão temporal
implícita, igual a todo o conjunto de pontos do eixo temporal. As entidades
temporalizadas passam a ser denominadas “transitórias”;

            • Qualquer que seja a classificação das entidades em relação ao tempo,
sejam elas perenes ou transitórias, ortogonalmente sempre apresentam duas
perspectivas: uma não temporal e uma temporal. Quando se focaliza os conjuntos de
entidades pela perspectiva não temporal estes apresentam apenas duas dimensões
(tuplas x atributos não temporais).

            Por outro lado, quando se focaliza estes mesmos conjuntos pela perspectiva
temporal, eles apresentam três dimensões (tuplas x atributos temporais x eixo temporal):


                                                                                     21
            No tocante aos relacionamentos, ou as entidades se associam entre si na
 perspectiva temporal (relacionamentos temporais) ou na perspectiva não temporal
 (relacionamentos não temporais);

            Possibilita que as restrições de cardinalidade levem em consideração os
 momentos do tempo de validade de um relacionamento temporal;

            Faz uso de um dicionário de dados para descrever os atributos, evitando
 que estes sejam explicitados graficamente. Isto contribui para tornar os diagramas
 mais administráveis visualmente.

           Toda entidade, no TempER, é uma instância de um conjunto-entidade,
assim como todo o relacionamento é uma instância de um conjunto-relacionamento.

           As figuras 2 e 3 referem-se à notação de conjuntos-entidade e conjuntos-
relacionamento. Os atributos são propriedades das entidades e dos relacionamentos, os
quais não são representados graficamente, e sim por meio de um dicionário de dados
associado ao diagrama ER, resultando em um modelo mais claro visualmente.


                                      Tr                                        Pe
                  FUNCIONARIO                                          FUNÇÃO

               Entidade Transitória                           Entidade Perene



                          Figura 2 - Notação de conjuntos-entidade
                                   Fonte: HEUSER, 1998




                      T



             Relacionamento Temporal                Relacionamento Intemporal


                       Figura 3 - Notação de conjuntos-relacionameno
                                   Fonte: HEUSER, 1998




                                                                                     22
           As entidades cuja validade temporal é exatamente igual a todo o eixo
temporal são consideradas perenes. Toda vez que uma entidade desse tipo é incluída no
banco de dados do sistema, assume-se que sua validade temporal inicia no primeiro
ponto do eixo temporal e se estende até o último. Porém, o fato de uma entidade ser
perene não significa que esta entidade não possa ser excluída do banco de dados.

           Conseqüentemente, enquanto uma entidade perene estiver presente no banco
de dados sua existência será constante e igual ao conjunto de pontos do eixo temporal,
não sendo permitido ampliar ou reduzir sua validade temporal (HEUSER, 1998). Ao
contrário da entidade perene, a entidade transitória é modelada para existir apenas por
curtos períodos de tempo, sendo possível aumentar ou reduzir a sua validade temporal.

           A figura 4 apresenta um esquema ER convencional e seu correspondente
temporal no modelo TempER, e um exemplo de povoamento de entidades e de
relacionamentos para este esquema.




                 Figura 4 - Exemplo de esquema ER e o correspondente TempER
                                     Fonte: HEUSER, 1998




                                                                                    23
3.3 Sistema de Banco de Dados Temporal


           Enquanto a maioria das aplicações atuais necessita armazenar a variação
temporal dos dados, a realidade observada é que não há BDT comerciais usados
amplamente. Uma razão para a falta de transferência tecnológica da pesquisa para a
prática é a necessidade de consenso comum aceito de modelo de dados ou linguagens de
consultas que são a base da pesquisa e desenvolvimento: a terminologia é inconsistente.

           Outro fator que limita a utilização de soluções em BDT é a forma de
definição da dimensão temporal. Como já citado e descrito por Snodgrass (1994), há
três tipos de tempos que podem ser usados:

           1) Tempo definido pelo usuário: tem suporte garantido na maioria dos
SGBDs comerciais (e está presente no SQL padrão);

           2) Tempo de Validade: suportado por alguns SGBDs;

           3) Tempo de Transação: é suportado em alguns SGBDs Objeto-Relacional
e em um relacional.

           A necessidade de suporte temporal requerido pelo BDT vai ser determinada
pela característica da aplicação, sendo necessário apenas um ou até mesmo os três tipos
descritos. Caberá ao analista avaliar se o BDT escolhido oferece os recursos adequados
para a implementação da solução.

           Nos BD’s convencionais, os atributos são predefinidos, e isso poderia ser
feito de forma análoga em BDT. Se um atributo é definido como inteiro, não é possível
inserir caracteres. Analogamente, há a necessidade de testes de consistência para
justificar a definição de um atributo como temporal. Por exemplo, suponha-se que o
nome de uma função determina o salário. O SGBDT deve garantir que o mesmo nome
não esteja associado com dois salários diferentes ao mesmo tempo. Se o atributo
temporal é tratado simplesmente como outro atributo qualquer, parece não ser
necessário defini-lo especialmente como temporal.




                                                                                     24
             Um problema poderia ser valores de tempo de muitas granularidades
diferentes, porém isso poderia ser solucionado com um suporte para realizar conversões
de valores de tempo entre as diferentes granularidades utilizando-se operações
apropriadas. Há a necessidade de uma operação de intercalação para tornar o trabalho
com dados vindos de diferentes BD ou relações definidas em diferentes níveis de
granularidade. Em BD científicos e BD de planejamento é essencial o suporte não
apenas a tempos baseados na linha do tempo (tempo absoluto), mas também a tempos
relativos.




3.3.1. Questões no Desenvolvimento dos Modelos de Dados Temporais

             Entre os aspectos que devem ser avaliados para o desenvolvimento de
modelos temporais, pode-se citar:

              Homogeneidade: em alguns modelos de dados, todos os atributos de
uma tupla são definidos sobre os mesmos intervalos de tempo. Outros permitem
atributos a serem definidos sobre diferentes intervalos de tempo, em parte para permitir
produto cartesiano;

              Agrupamento: alguns modelos requerem que tuplas de valor equivalente
(aquelas com idênticos valores de atributos explícitos), sejam agrupadas se elas estão
sobrepostas no tempo, que é, combinadas em uma tupla. Outros modelos não permitem
o agrupamento de tuplas de valor equivalente;

              Atributo-valor x rótulo-tupla: a comunidade de pesquisa está separada
neste aspecto, com metade dos modelos de dados adotando a primeira abordagem que é
vista por alguns como sendo próxima de orientação-objeto e a outra metade adotando a
segunda abordagem que vista por alguns como sendo mais eficiente;

              Níveis de alinhamento: alguns modelos de atributo-valor podem ser
vistos como uma extensão dos modelos relacionais alinhados. Alguém pode perguntar
se o alinhamento deve ser restrito a um nível ou se múltiplos níveis de alinhamento
devem ser permitidos;



                                                                                     25
            Vaccuming: quando tempo de transação é suportado, todas as alterações,
incluindo remoção lógica, são implementadas como inserções físicas, levando a um
crescimento do BD. No modelo relacional padrão, uma notação adicional de remoção é
necessária em ordem para controlar o tamanho e o conteúdo do BD. Vaccuming (gerar
vácuo) é esta notação e denota a flexibilidade, a remoção física, consistente com a
semântica do tempo de transação dos dados em uma BDT que suporta tempo de
transação. A eliminação física de dados temporais não relevantes é permitida, para os
quais o custo de armazenamento é significativo;

            Tempo periódico: há modelos que suportam eventos periódicos, como,
por exemplo, um avião que voa todo dia um certo tempo;

            Tempo “manufaturado”: alguns defendem a semântica de interseção,
onde o período de validade de uma tupla resultante do produto cartesiano é a interseção
do período de validade de duas tuplas básicas e caracteriza qualquer tempo de saída
como manufaturado e, em alguns casos, artificial.

           Outros consideram que há aplicações para outras semânticas tal como união,
sendo totalmente natural. O modelo de dados temporal básico e a linguagem devem ser
projetados unicamente em termos de suas propriedades semânticas, com possivelmente
múltiplos modelos de dados distintos sendo empregados para representação e
apresentação.




3.4. Consulta a Banco de Dados Temporal



           Uma linguagem de consulta temporal deve possibilitar a recuperação de
todas as informações armazenadas no banco de dados, de modo a que seja tirado real
proveito do acréscimo da dimensão temporal. Nos últimos anos várias linguagens de
consulta temporal foram propostas (MOREIRA, 1999).

           O fator tempo pode estar envolvido de formas diferentes em consultas
temporais (OLIVEIRA, 1994):


                                                                                    26
            Fornecer valores de propriedades cujo domínio é temporal. Exemplo:
fornecer o valor da propriedade que armazena a data de nascimento de uma pessoa;

            Se referir a um determinado instante ou intervalo temporal. Exemplo:
qual o valor do salário no dia 01/01/2005;

            Recuperar valores com base em restrições temporais. Exemplo: recuperar
todos os valores do salário antes do dia 01/01/2003;

            Fornecer informações temporais (datas, intervalos). Exemplo: qual a data
em que foi alterado o salário de um funcionário.

           A maioria dos modelos de dados temporais apresenta linguagens de consulta
textuais, geralmente derivadas do SQL. Dentre elas, a mais conhecida é TSQL2.

           Vale salientar, contudo, que o processamento de consultas temporais
apresenta diversos problemas além daqueles usualmente enfrentados. Entre eles
podemos citar (EDELWEISS, 1998):

            O grande volume de dados armazenados em um banco de dados temporal
implica na necessidade de novos métodos de indexação (estruturas e algoritmos de
busca);

            Métodos tradicionais de indexação só podem ser utilizados para valores
com algum tipo de ordenação completa, com estruturas de acesso para intervalos;

            Manipulação de informações incompletas, devido a valores incompletos
ou inexistentes, a partir dos quais devem ser inferidas informações. Podem ser devido à
incerteza quanto a existência de objetos em certos pontos no tempo ou à indeterminação
temporal causada por eventos cujo tempo de ocorrência não é conhecido.




3.4.1 Consultas Temporais

           Abaixo, são analisadas as diferentes formas que podem apresentar as
consultas quando utilizados banco de dados temporais. Para maior abrangência serão


                                                                                    27
considerados somente banco de dados bitemporais por englobar os outros tipos de banco
de dados.

            Uma consulta apresenta dois componentes ortogonais: um componente de
seleção e um de saída (projeção).

            O componente de seleção normalmente é representado através de uma
condição lógica. Quando essa condição envolve valores temporais é utilizada lógica
temporal. Nesse caso, operadores para tratar valores temporais, tais como operadores
booleanos (antes, depois, durante) e operadores que retornam valores temporais (depois,
agora, início de intervalo, distância temporal) são necessários.

            De acordo com os componentes de seleção, as consultas podem ser
classificadas em:

             Consultas de seleção sobre dados – quando as condições são
estabelecidas somente sobre os valores de dados. Exemplo: selecionar o salário do
funcionário de nome Carlos. É importante ressaltar que quando forem utilizadas tipos de
dados temporais, tais como datas e horas, a utilização destes na condição de seleção
representa uma seleção sobre os dados e não uma seleção temporal. Exemplo deste
último caso: selecionar o nome dos empregados que apresentam data de nascimento
posterior a 01/01/1980.

             Consultas de seleção temporal – são as consultas nas quais somente
informações temporais associadas aos dados (tempo de transação e/ou tempo de
validade) são analisadas pela condição de seleção. Exemplo: selecionar todos os
empregados da empresa durante o período de 01/01/1996 a 01/01/1997.

             Consultas de seleção mista – a condição de seleção atua não somente
nos dados mas também nas informações temporais associadas a eles. Exemplo:
selecionar todos os empregados do departamento denominado entregas que estavam
habilitados para dirigir automóveis durante o período de 01/01/1995 a 01/07/1995.




                                                                                    28
            Analisando agora o componente de saída, na consulta podem ser solicitados
valores de dados e/ou valores relativos às informações temporais associadas aos dados.
Podemos ter, portanto (EDELWEISS, 1998):

             Consultas de saída de dados – nas quais as informações selecionadas
correspondem exclusivamente a valores de dados. Exemplo: selecionar o nome dos
funcionários do departamento entregas.

             Consultas de saída temporal – recuperam informações abstraídas das
informações temporais associadas aos dados. Deste modo podem ser recuperados
pontos no tempo, intervalos temporais e durações temporais. Exemplo: selecionar todos
os períodos nos quais qualquer empregado do departamento de entregas estava
habilitado a dirigir automóveis.

             Consultas de saída mista – recuperam simultaneamente valores de
dados e valores temporais associados a estes dados. Exemplo: selecionar os valores de
salário com os respectivos tempos de validade para o empregado chamado João entre
01/01/1995 e 01/01/1996.

            Analisando as possíveis combinações entre os componentes de seleção e de
saída de uma consulta observamos que a única combinação que não pode ser utilizada é
a de seleção temporal com saída temporal – devemos ter algum dado envolvido em pelo
menos um dos componentes.




3.5. Aplicabilidade



            Para algumas aplicações, tanto o estado passado das informações quanto o
estado presente são de extrema importância. Por exemplo, para um sistema bancário é
necessário que informações sobre todas as transações efetuadas em uma conta sejam
armazenadas. Conforme as necessidades do cliente ou do próprio banco, essas
informações poderão ser obtidas retratando o estado da conta em qualquer instante de
tempo desejado ou todos os eventos ocorridos durante um determinado período. Esse


                                                                                   29
fato então limita o uso de BD relacionais uma vez que estes não possuem recursos que
permitam acessar os estados passados da conta. Nesse contexto, surge então um novo
elemento na área de Banco de Dados: o tempo relacionado às informações.

           Pode-se citar mais algumas aplicações cujas características temporais são
claras:

            Para um médico, os dados passados de um paciente são essenciais para
conhecê-lo, fazer novos diagnósticos, acompanhar a evolução de uma doença que o
paciente possui, determinar novos tratamentos, etc;

            A área comercial, dados estatísticos de venda de um produto específico
podem ser importantes para determinar a freqüência de compra deste produto, assim
como ajudar na tomada de decisão em vários aspectos;

            O controle de tráfego aéreo, onde se controla os horários de decolagem e
pouso de aviões;

            No meio acadêmico, onde informações curriculares sobre os alunos
precisam ser armazenadas e acessadas posteriormente;

            Sistemas de informação geográfica (SIG) onde se percebe que o fator
tempo é um componente imprescindível para a análise, previsão e conhecimento dos
fenômenos geográficos encontrados na natureza e nas relações sócio-econômicas. Os
SIGs disponíveis atualmente consideram as entidades como se o mundo existisse
somente no presente. Informações geográficas são incluídas e alteradas ao longo do
tempo, mas o histórico destas transformações não é mantido na base de dados.
Aplicações de SIG deveriam ser capazes de lidar com dados espaço-temporais, que
refletem a natureza espaço-temporal dos fenômenos geográficos, como por exemplo, a
destruição feita pelo fogo em uma queimada na floresta, a erosão gradual dos solos, a
formação de tempestades, o estudo da poluição ambiental, entre outros.

           Inserido no contexto de aplicações de SIG, pode-se citar o exemplo utilizado
como estudo de caso de aplicação temporal: um sistema de controle de qualidade de
água em trechos de praias. Neste exemplo, o responsável capta água a partir de uma um



                                                                                    30
ponto na orla marítima. O local de captação de água é pontual e a água captada vai ser
analisada em laboratório e periodicamente é feita coleta de amostra de água para
verificar a qualidade da água nas diversas praias. Estudos sobre qualidade da água são
desenvolvidos a partir desta amostragem e a qualidade do trecho é determinada pelo
conjunto das últimas amostras realizadas Para avaliar todas essas informações, é
necessário que as informações atuais estejam guardados no banco assim como todo o
histórico de mudanças, o que indicaria a utilização de um BDT.




                                                                                   31
4. IMPLEMENTAÇÃO



           A implementação da base de dados utilizada no projeto foi realizada
utilizando-se o SGBD Oracle. Este SGBD foi escolhido para o desenvolvimento por
possuir uma extensão chamada de Oracle Time Series Cartridge, que provê
armazenamento e recuperação de dados temporais de tempo de transação através de um
conjunto de procedimentos, funções e objetos (ORACLE, 1999). Esta extensão foi
desenvolvida com o intuito de atender às exigências de aplicações específicas e tornar
mais conveniente e eficaz o tratamento de dados de tempo, do que formas tradicionais e
funções definidas por usuários. No Time Series o tempo é caracterizado através da
inserção de um rótulo temporal. Basicamente qualquer operação sobre qualquer dado
que envolva informação temporal é obtida através do rótulo temporal. Este tipo de
procedimento caracteriza o Time Series Cartridge como uma ferramenta de
gerenciamento de informações de tempo de transação.

              A utilização do SGBD Oracle no estudo de caso se justifica pelo fato da
indisponibilidade de um banco essencialmente temporal. Esta abordagem está de acordo
com Hubler (2001) que define que bancos de dados tradicionais podem ser utilizados se
existir um mapeamento adequado entre o modelo temporal e o modelo do banco de
dados utilizado.




4.1. A Aplicação



           A aplicação escolhida para o desenvolvimento do projeto é utilizada no
controle da qualidade da água das praias. Segundo o Conselho Nacional do Meio
Ambiente (CONAMA), o controle da qualidade é feito através da avaliação de
parâmetros e indicadores específicos, definidos com critérios detalhados que reduzem
os riscos de infecções aos banhistas (CONAMA, 2005). Esta aplicação foi projetada de




                                                                                   32
maneira simplificada, pois o objetivo é apenas obter características temporais para o
desenvolvimento de um BDT, oferecendo subsídios para uma análise comparativa.

           Segundo as definições, a amostra da água retirada de um trecho de uma
determinada praia, é necessário informar como foi realizada a coleta dessa amostra para
se ter certeza que todas as amostras foram conseguidas diante das mesmas condições,
tendo em vista que o resultado é conseguido analisando-se as amostras das últimas
cinco semanas. Essa coleta possui um responsável, que também é representado sobre o
conceito temporal.

           Em cada amostra podem ser analisados três diferentes componentes
infecciosos: coliformes fecais, bactérias tipo Escherihia Coli e tipo Enterococos. Para
subdividir as águas consideradas próprias, existem três categorias segundo o
CONAMA:

           a) Excelente: quando em 80% ou mais de um conjunto de amostras obtidas
em cada uma das cinco semanas anteriores, colhidas no mesmo local, houver, no
máximo, 250 coliformes fecais (termotolerantes) ou 200 Escherichia Coli ou 25
Enterococos por l00 mililitros;

           b) Muito Boa: quando em 80% ou mais de um conjunto de amostras obtidas
em cada uma das cinco semanas anteriores, colhidas no mesmo local, houver, no
máximo, 500 coliformes fecais (termotolerantes) ou 400 Escherichia Coli ou 50
Enterococos por 100 mililitros;

           c) Satisfatória: quando em 80% ou mais de um conjunto de amostras
obtidas em cada uma das cinco semanas anteriores, colhidas no mesmo local, houver, no
máximo 1.000 coliformes fecais (termotolerantes) ou 800 Escherichia Coli ou 100
Enterococos por 100 mililitros.

           Essas águas serão consideradas impróprias para o trecho avaliado, se for
verificada uma das seguintes ocorrências:

           a) Não atendimento aos critérios estabelecidos para as águas próprias;




                                                                                    33
           b) Valor obtido na última amostragem for superior a 2500 coliformes fecais
(termotolerantes) ou 2000 Escherichia coli ou 400 Enterococos por 100 mililitros;

           c) Incidência elevada ou anormal, na região, de enfermidades transmissíveis
por via hídrica, indicada pelas autoridades sanitárias;

           d) Presença de resíduos ou despejos, sólidos ou líquidos, inclusive esgotos
sanitários, óleos graxos e outras substâncias, capazes de oferecer riscos à saúde ou
tornar desagradável a recreação;

           e) pH < 6,0 ou pH > 9,0 (águas doces), à exceção das condições naturais;

           f) Floração de algas ou outros organismos, até que se comprove que não
oferecem riscos à saúde humana;

           g) Outros fatores que contra-indiquem, temporária ou permanentemente, o
exercício da recreação de contato primário.

           Dos itens citados acima, serão consideradas, para efeito de análise na
aplicação, as restrições descritas nos itens “a” e “b”, para determinação da qualidade da
água. A implementação a ser desenvolvida será a base de dados da aplicação
especificada. Essa aplicação possui característica temporal e essa característica será
implementada separadamente utilizando-se conceitos de BDR e BDT e tendo como
SGBD o ORACLE. Essas duas implementações serão necessárias para se chegar ao
objetivo do projeto que é a comparação entre essas duas formas de implementação sob
aspectos qualitativos e quantitativos.

           Para um melhor entendimento de como vai ser formada a base de dados,
segue a descrição da lista dos eventos que são disparados durante a criação da base.

           Inicialmente, deve-se fazer o cadastramento das praias e de todos os trechos
dessas praias que serão analisados. Deve-se, também, cadastrar os responsáveis pelas
coletas. O responsável retira uma amostra de um determinado trecho de uma praia e,
após a análise, essa amostra é inserida na base de dados com algumas informações, tais
como: local, responsável, uma observação qualquer sobre a amostra e o valores dos
resultados da análise físico-química.


                                                                                       34
             Para obter o resultado da análise de qualidade, são retiradas quatro amostras
por semana, em dias diferentes. Por exemplo, se duas amostras são inseridas no banco,
as duas possuem o mesmo código e se diferem no momento em que os dados de cada
uma foram inseridos no banco. Ao final da análise da qualidade da praia, um
procedimento é executado pelo usuário na base de dados, onde é informado como
parâmetro a data atual. A partir da avaliação das amostras realizadas nas cinco últimas
semanas, o procedimento retorna a qualidade dos trechos baseados nas determinações
do CONAMA. Por exemplo, se em 95% das amostras foram encontrados menos de 250
Coliformes Fecais, em 80 % das amostras foram encontrados entre                           200 e 400
Escherichia Coli e que em 85% das amostras foram encontrados entre 25 e 50
Enterococos, o trecho é considerado muito bom.

             A figura 5, mostra a chamada do procedimento responsável por retornar as
condições dos trechos de uma praia com base no histórico das amostras coletadas.




     Figura 5 – Resultado do procedimento responsável por determinar a qualidade do trecho da praia


             O código fonte da implementação dessa consulta pode ser visto no ANEXO
A.


4.2. Implementação de uma Base de Dados Temporal Utilizando o Oracle com o
Modelo Relacional.



             Esta fase consiste na implementação de uma BDT a partir do
desenvolvimento de um BD relacional onde as características temporais são
representadas através de atributos comuns e sem a utilização de objetos já
implementados pelo SGBD. O modelo ER da aplicação e o seu dicionário de dados
podem ser vistos na figura 6 e tabela 3, respectivamente.




                                                                                                      35
              Praia

                       1..1                                                   Responsável

                                                                                     1..1

                                                 Amostra

              Possui
                                               0..N               0..N




                                                                               Recolhe




                       1..N

                                                  Possui
              Trecho
                                1..1

                              Figura 6 – Modelo ER da aplicação




           O modelo apresentado na figura 6 pode ser descrito da seguinte maneira:
cada praia analisada possui um ou mais trechos e cada um desses trechos pertence a
uma praia; de um trecho podem ser retiradas nenhuma ou várias amostras; cada
responsável pode retirar nenhuma ou muitas amostras de trechos diferentes, porém cada
amostra só é retirada por um responsável.



                          Tabela 3: Dicionário de dados da implementação ER
Praia                                                 CdPraia     Number
                                                      NmPraia     Varchar
                                                      DsLocal     Varchar
                                                            Chave:CdPraia

Amostra                                               CdAmostra                Number
                                                      CdTrecho                 Number
                                                      CdPraia                  Number
                                                      CdResponsavel            Varchar(20)
                                                      NuColiformes             Number



                                                                                             36
                                             NuEscherichia    Number
                                             NuEnterococos    Number
                                             DsObservacao     Varchar(255)
                                             TempoTransacao   Date
                                                   Chave: CdAmostra,
                                             TempoTransacao

Responsavel                                  CdResponsavel     Varchar(20)
                                             NmResponsavel     Varchar(100)
                                             DsCargo           Varchar(100)
                                             TempoTransacao    Date
                                             Chave: CdResponsavel, TempoTransacao

Trecho                                       CdTrecho   Number
                                             CdPraia    Number
                                             NmTrecho   Varchar
                                               Chave Composta: CdTrecho, CdPraia




             A tabela 3 apresenta o dicionário de dados da aplicação. No dicionário de
dados pode-se ter uma visão geral das tabelas que formam a base de dados, onde é
apresentado o nome de cada tabela junto ao nome e tipo de cada atributo. Pode-se notar
através da figura 5 que as tabelas tAmostra e tResponsavel possuem um atributo
chamado TempoTransacao do tipo data. Esse atributo é utilizado na implementação de
temporalidade.

             O atributo TempoTransacao guarda o momento em que a informação foi
inserida na base de dados, caracterizando-se assim uma base de dados históricos por
tempo de transação. A integridade desse atributo é garantida através da implementação
de gatilhos. Para cada uma dessas tabelas foi criado um trigger do tipo AFTER que é
disparado pelo comando insert, garantindo que a data inserida no atributo
TempoTransacao é a data do sistema no momento da inserção, e pelo comando update,
garantindo que os atributos representando os códigos e as datas de inserção não sejam
alterados.

             O código fonte de geração das tabelas e do gatilho em questão podem ser
encontrados no ANEXO B.




                                                                                   37
4.3. Implementação de uma Base de Dados Temporal utilizando o Oracle Time
Series com o Modelo Temporal.



           A mesma aplicação descrita anteriormente pode ser implementada no
modelo temporal, utilizando-se recursos de uma extensão do SGBD Oracle chamada
Time Series, juntamente com uma modelagem de dados utilizando o modelo TempER já
definido anteriormente.

                                “O Time Series é uma extensão do Oracle que provê
                                armazenamento e recuperação de dados baseados em
                                tempo através de object data types (ODTs). Este
                                pacote oferece um conjunto básico de funções e tipos
                                de dados que acompanham a ferramenta. Estes tipos
                                de dados, juntamente com as funções, permitem
                                administrar e processar dados temporais de maneira
                                mais conveniente do que seria possível usando
                                unicamente tipos de dados e funções definidas pelo
                                usuário.” (ORACLE, 1999)



           A figura 7 apresenta o modelo de dados temporal TempER da aplicação. Por
ser um modelo que tem como base o modelo E/R pode-se notar alguma semelhança,
porém no modelo temporal é possível visualizar quais os objetos, relacionamentos e
atributos temporais que formam a base de dados. Um atributo é considerado temporal
quando ele é responsável por armazenar os dados que serão trabalhados procedimentos
que realizaram pesquisas nesse banco.




                                                                                 38
        Praia       P

                                                                             Responsável     T
                 1 .. 1

                                              Amostra        T                         1 .. 1


          P                                  0..N
         Possui                                                       0..N



                                                                                  T

                                                                                 Recolhe

                 1..N
                                                     T
        Trecho      P
                                                    Possui
                          1 .. 1


                              Figura 7 - Modelo tempER da aplicação


              Através do modelo apresentado na figura 7 é possível saber quais os objetos
que possuem características de temporalidade. Pode-se notar que as entidades Amostra e
Responsavel possuem características temporais: a entidade Amostra por possuir os
dados históricos da análise das amostras e a entidade Responsavel por possuir dados
históricos do responsável. A tabela 4 descreve o dicionário de dados do modelo
temporal. Através desse dicionário é possível saber quais os atributos considerados
temporais nas entidades.


        Tabela 4 - Dicionário de Dados da base de dados temporal utilizando modelo TempER
Praia                                               CdPraia     Number                Intemporal
                                                    NmPraia     Varchar               Intemporal
                                                    DsLocal     Varchar               Intemporal
                                                          Chave:CdPraia

Amostra                                             CdAmostra         Number               Intemporal
                                                    CdTrecho          Number               Intemporal
                                                    CdPraia           Number               Intemporal



                                                                                                   39
                                            CdResponsavel Varchar(20) Intemporal
                                            NuColiformes Number         Temporal
                                            NuEscherichia Number        Temporal
                                            NuEnterococos Number        Temporal
                                            DsObservacao Varchar(255) Intemporal
                                            tsTamp       Date    Intemporal
                                                  Chave: CdAmostra, tsTamp

Responsável                                 CdResponsavel Varchar(20) Intemporal
                                            NmResponsavel Varchar(100) Intemporal
                                            DsCargo        Varchar(100) Temporal
                                            tsTamp         Date
                                                 Chave: CdResponsavel, tsTamp

Trecho                                      CdTrecho   Number        Intemporal
                                            CdPraia    Number        Intemporal
                                            NmTrecho   Varchar(100) Intemporal
                                              Chave Composta: CdTrecho, CdPraia




           Os scripts de criação dos objetos que não são considerados temporais, no
caso da aplicação em estudo as tabelas tPraia e tTrecho, são idênticos aos scripts da
implementação com o modelo relacional. Porém, a criação dos objetos com
características temporais são feitas através do Oracle Time Series. Esses scripts podem
ser vistos no ANEXO C.

           Inicialmente é necessária a criação de um grupo a partir de procedimentos
para administração da criação do Time Series Group, onde são implementados todos os
objetos necessários ao esquema do Time Series. Durante a criação desses objetos pode-
se escolher por aceitar os valores padrões para o nome dos objetos.

           Para cada entidade com aspecto temporal é necessário criar um grupo que é
composto por três tabelas, um gatilho e uma visão devido ao fato do oracle implementar
a temporalidade a partir de um BDR. Caso se assuma o valor padrão para o grupo, os
nomes das tabelas são compostos pelo nome do grupo mais o simbolo “_” e uma
terminação que pode ser TAB, MAP, CAL e RVW, responsáveis por identificar a




                                                                                    40
função da tabela. A definição das colunas da tabela que vão conter os dados é também
feita durante a criação do grupo.

           A tabela com terminação TAB possui os dados da aplicação; a terminação
MAP associa uma série de tempo com um calendário; CAL é a tabela que possui a
definição dos calendários da aplicação; e, por fim, a terminação RVW identifica a visão
criada para manipular a tabela com terminação TAB, através de gatilho. Com isso, ao se
criar um grupo no Time Series são criados automaticamente os objetos GRUPO_TAB,
GRUPO_MAP, GRUPO_CAL, GRUPO_RVW e mais um gatilho responsável por
administrar o uso dos comandos de atualização insert, update e delete.

           Outro objeto importante no Oracle Time Series é o calendário, a definição
desse objeto é inserida na tabela GRUPO_CAL. O calendário é utilizado quando se
utiliza um Time Series regular, ou seja, onde os dados chegam previsivelmente e em
intervalos pré-definidos. Maiores informações e o script de criação do calendário podem
ser encontradas no ANEXO D.

           A implementação da base de dados da aplicação em questão foi feita sem um
calendário associado, porém a fim de se obter um melhor resultado no estudo
comparativo, a análise é feita nas duas situações: com um calendário associado e sem
um calendário associado.




                                                                                    41
5. ESTUDO COMPARATIVO



                O estudo comparativo apresentado neste capítulo será realizado com base
nas implementações das bases de dados da aplicação estudada e com base no estudo e
pesquisa realizada sobre os assuntos comparados. A comparação será realizada fazendo-
se uma avaliação quantitativa, onde é analisado o desempenho das implementações, e
uma avaliação qualitativa.

                O ambiente onde foram realizados os teste pode ser descrito da seguinte
forma: um microcomputador com processador ATHLON XP2000+, 1.67MHz de clock,
256 MB RAM, sistema operacional Windows XP Professional e o SGBD utilizado foi o
Oracle versão 8i, release 8.1.7.

                No SGBD, foram criados dois esquemas, um deles com os objetos da
implementação no modelo relacional e o outro com os objetos da implementação no
modelo temporal. Para garantir a independência dos testes, cada esquema foi criado em
tablespaces e datafiles1 específicos, garantindo assim que os dados e tempos de consulta
de um modelo não interferissem no outro.

                Vale salientar que a aplicação escolhida é representativa de um conjunto de
aplicações, cujas decisões são baseadas em dados históricos. Portanto, as conclusões
obtidas podem ser aplicadas neste contexto macro, sem perder a validade.



5.1 Análise Qualitativa


                Seguindo o estudo comparativo, neste tópico é feita uma análise qualitativa
da implementação realizada. Essa análise faz-se necessária durante a fase de análise de
um projeto, pois nesse tópico são discutidas questões como custos, complexidade e
interferência no prazo de entrega do projeto. Com um estudo desse tipo, um



1
    Tablespaces e Datafiles são objetos de organização de dados do SGBD Oracle (1999)


                                                                                        42
administrador de banco de dados (DBA) ou um gerente de projeto poderão decidir pela
adoção de um modelo ou de outro, a depender dos aspectos relevantes de cada caso.

            Com relação aos custos do desenvolvimento de uma base de dados
temporal, pode-se notar que, devido ao fato do modelo relacional ser mais difundido
que o modelo temporal, há uma tendência que os custos utilizando o modelo relacional
sejam menores já que não haverá necessidade de se aprender um novo modelo de dados
e nem uma nova ferramenta de criação da base de dados, apenas é necessário adquirir o
conhecimento de como deverá funcionar essa base. Por outro lado, através do modelo
temporal seria necessário aprender a modelar os dados a partir de um novo modelo, no
caso da aplicação deste projeto o modelo TempER, e a utilização de uma ferramenta
nova para a criação da base além de adquirir o conhecimento de como funciona uma
base de dados temporal. A depender do caso, esse novo aprendizado poderia gerar
custos de treinamento de pessoal ou contratação de um novo recurso que já tivesse o
conhecimento necessário, onerando o projeto.

            Adicionalmente, a partir das implementações realizadas é possível analisar a
complexidade na criação da base de dados com os modelos estudados. No caso do
modelo relacional, para se criar a base, levando-se em conta que o banco de dados já
estava com usuários, datafiles e tablespaces configurados, foi necessário a criação das
tabelas e de um gatilho em cada tabela com o recurso de tempo, responsável por garantir
a característica de tempo de transação nessas tabelas. No caso do modelo temporal, para
se garantir a característica de tempo de transação em uma tabela, é necessário se criar
um grupo que é composto por outras três tabelas, uma visão e um gatilho. Os comandos
de manipulação de dados de inserção, atualização e remoção possuem a mesma sintaxe
em ambos os modelos estudados, a exceção é o comando de seleção de dados. Neste
último caso, a sintaxe é diferente entre os dois modelos, a fim de utilizar as funções de
seleção de dados disponibilizadas pelo Time Series. Essa nova sintaxe no caso do
modelo temporal não é tão intuitiva a ponto de ser assimilada com rapidez por um
programador, por exemplo, o que acarreta um tempo maior de adaptação. Com isso,
nota-se que a complexidade é maior na criação da base de dados através do modelo
temporal.




                                                                                      43
           Como conseqüência dos problemas de custo e complexidade da utilização
de um modelo temporal para criação de uma base de dados temporal temos um outro
problema que é a determinação do prazo de entrega de um projeto deste tipo. No caso
da aplicação estudada neste projeto, o tempo gasto para se treinar uma equipe para
utilizar o Oracle Time Series junto com o modelo de dados temporal poderia acarretar
problemas de prazo de entrega da aplicação. Caso se utilize o modelo relacional, a
aplicação poderia ser desenvolvida mais rapidamente, já que tais conhecimentos são de
domínio dos desenvolvedores. Contudo, em decorrência disso, não seria possível a
utilização de calendário e nenhuma das funções disponíveis no Time Series, limitando
as funcionalidades disponíveis.

           Por outro lado, apesar de o modelo temporal ser mais complexo, ele
apresenta algumas vantagens sobre o modelo relacional. Através do modelo de dados
TempER é possível se determinar quais os objetos, tabelas e relacionamentos, que são
temporais, além dos atributos que são explicitamente definidos como temporal ou
intemporal o que torna a visualização do modelo mais específica. Com isso, além de o
problema ser representado de forma real, o entendimento da solução é mais efetivo.

           Outra vantagem (talvez a que pode até justificar o uso do modelo temporal
junto com o Oracle Time Series) é o objeto Calendário (Calendar), responsável por
controlar a regularidade com que os dados são inseridos na base de dados. O Calendário
é utilizado para garantir que uma base de dados temporal seja considerada regular,
limitando os dados temporais armazenados. No caso da aplicação estudada, um
calendário com granularidade de dias poderia determinar quais os dias da semana em
que a base de dados aceitaria inserções de dados, implementando uma facilidade que
seria complexa na base relacional.

              Não obstante, o Oracle Time Series disponibiliza uma série de funções
que podem ser utilizadas em comandos de seleção de dados que podem tornar a
pesquisa na base de dados mais prática do que se fosse feita através do modelo
relacional, o que poderia ser considerado como uma outra vantagem. Dentre essas
funções pode-se citar (ORACLE, 1999):




                                                                                     44
            Cavg – utilizada para retornar a media de uma série de tempo, por
exemplo, retirar a média das vendas que ocorrerão todos os dias entre 01/06/2005 até
30/05/2005;

            Cmax – utilizada para retornar o maior valor de uma série de tempo;

            Cmin – retorna o menor valor de cada série de tempo;

            Csum – retorna a soma dos valores de cada série de tempo;

            Cprod – retorna o produto da multiplicação dos valores de cada série de
tempo.


           Por fim, com base na análise qualitativa que foi realizada, pode-se concluir
que o uso do modelo temporal com o Oracle Time Series é justificado apenas se for
necessária a utilização do calendário e das funções de seleção de dados. No caso da
aplicação estudada, o uso do modelo temporal não é justificado, já que o uso do objeto
calendário não é obrigatório na aplicação e não é necessário o uso das funções do Time
Series. Neste caso, os impactos dessa implementação seriam mais representativos que
suas vantagens.




5.2. Análise Quantitativa



           A análise quantitativa visa avaliar o desempenho das implementações. Para
se chegar aos resultados foram executados em um primeiro momento 1.000 (um mil),
em outro 2.000 (duas mil) e por último 4.000 (quatro mil) operações de cada tipo:
inserções, exclusões e atualizações. Foi registrado também o espaço ocupado com cada
implementação após 4.000 operações de inserção, a fim de se identificar qual a
implementação que requer mais recurso para ser utilizada. Foram realizados três testes
com cada quantidade de operações da seguinte maneira: os grupos de comandos foram
executados três vezes na base de dados no modelo relacional e seis vezes na base de
dados no modelo temporal, em momentos diferentes, sendo que três vezes os comandos


                                                                                    45
foram executados com a base de dados sem um calendário associado e três vezes com
um calendário associado.

              Para garantir que não houvesse interferência de outros aspectos nos
resultados, os testes foram realizados no mesmo ambiente, e logo após a inicialização da
máquina, para restringir o impacto de outros processos executando. Apesar de ter
realizado três testes em momentos diferentes, as tabelas abaixo mostram apenas o
resultado de um dos testes, isso porque os resultados de todos os testes foram
semelhantes.

Tabela 5 – resultados após execução dos comandos de Insert, para todas as quantidades de dados,
em todas as implementações




  Tabela 6 – resultados após execução dos comandos de Update, para todas as quantidades de dados,
  em todas as implementações




                                                                                                    46
Tabela 7 – resultados após execução dos comandos de Delete, para todas as quantidades de dados,
em todas as implementações




  Figura 8 – Registro do espaço utilizado após 4000 inserções na tabela tAmostra no BDR




  Figura 9 – Registro do espaço utilizado após 4000 inserções na tabela tsAmostra no BDT




              Pode-se perceber nas figuras 8 e 9 que o espaço utilizado no modelo
relacional, 0,672 MB, é significativamente inferior em relação ao modelo temporal,
1,414 MB, chegando a ter quase metade do espaço ocupado.

              Com base nas tabelas 5, 6 e 7 é possível montar os gráficos das figura 10, 11
e 12 com os valores dos tempos das operações em segundos por quantidade de
operações, para facilitar a visualização.




                                                                                                  47
                 Tempo em Segundos - 1000 Registros


14

12

10
                                                                Modelo Relacional
8
                                                                Modelo Temporal Com
6                                                               Calendário
                                                                Modelo Temporal Sem
4                                                               Calendário


2

0
       Inserir          Alterar           Apagar


     Figura 10 – Resumo do estudo comparativo de desempenho com 1000 registros




                 Tempo em Segundos - 2000 Registros

25


20

                                                                 Modelo Relacional
15
                                                                 Modelo Temporal Com
                                                                 Calendário
10
                                                                 Modelo Temporal Sem
                                                                 Calendário
 5


 0
       Inserir          Alterar           Apagar

     Figura 11 – Resumo do estudo comparativo de desempenho com 2000 registros




                                                                                       48
                       Tempo em Segundos - 4000 Registros


    45
    40
    35
    30                                                                 Modelo Relacional

    25
                                                                       Modelo Temporal Com
    20                                                                 Calendário
    15                                                                 Modelo Temporal Sem
                                                                       Calendário
    10
      5
      0
             Inserir          Alterar           Apagar

           Figura 12 – Resumo do estudo comparativo de desempenho com 4000 registros


            Conforme observado nas figuras 10, 11 e 12 nota-se que as operações
realizadas no modelo temporal com calendário associado, independentemente da
quantidade de registros, são as que consomem mais tempo e as operações no modelo
relacional são as mais rápidas. Apesar de existir uma diferença entre os modelos, o
resultado não é grande o suficiente a ponto de afetar o desempenho da aplicação como
um todo, principalmente vislumbrando que o volume de transações esperado na dada
aplicação não é tão significativo.

            De acordo com a análise quantitativa realizada, pode-se concluir que a
diferença de desempenho entre modelo relacional e do modelo temporal com o Time
Series, levando-se em conta o tempo de execução das operações, não precisa ser levado
em consideração no momento de decidir por um ou outro modelo, já que essa diferença
ínfima entre as operações nos modelos estudados não justifica a opção por um dos
modelos. Porém, levando-se em conta o espaço ocupado pelas implementações
comparadas, nota-se que há uma grande diferença a favor do modelo relacional e que
pode justificar o uso do modelo caso a variável espaço utilizado seja importante no
projeto.




                                                                                             49
6. CONCLUSÃO



            Neste projeto, foi realizado um estudo comparativo da modelagem e
desenvolvimento de uma base de dados temporal utilizando o modelo de dados
relacional e o modelo de dados temporal, juntamente com uma extensão do SGBD
Oracle chamada Time Series. Essa comparação tem como objetivo determinar qual dos
modelos seria o mais indicado tendo como base de estudo uma aplicação desenvolvida
para esse projeto, que tem como fim determinar a qualidade da água das praias com
base em dados históricos.

            Inicialmente, foi apresentada uma maneira de implementar uma base de
dados temporal com um modelo de dados relacional e foi visto que essa implementação
pode ser feita através de gatilhos, pois assim as verificações e restrições necessárias para
garantir a característica de tempo de transação seriam realizadas automaticamente. Em
um outro momento foram apresentados conceitos e exemplos de BDT, onde foi possível
entender suas definições e quais os tipos que podem ser implementados.

            O estudo comparativo realizado neste projeto foi dividido em duas etapas:
na primeira foi feita uma análise qualitativa, que visa determinar as dificuldades de cada
implementação, e na segunda uma análise quantitativa, que visa analisar o desempenho
de cada implementação.

            Com base nas análises realizadas e nos resultados obtidos, pode-se concluir
que a implementação de uma base de dados temporal, utilizando-se o modelo de dados
temporal juntamente com a extensão do SGBD Oracle, só é a mais indicada se for
conveniente a utilização de um calendário associado às séries de tempo da base de
dados e o espaço utilizado pelo BD não seja uma variável com muita importância, já
que os impactos no projeto são relevantes e não há diferenças de desempenho nos dois
modelos, exceto pelo espaço ocupado. Uma vez que a aplicação desenvolvida neste
projeto não precisa necessariamente de um calendário, a implementação mais indicada é
através do modelo de dados relacional, evitando os inconvenientes do uso de um BDT.




                                                                                         50
           A partir dos estudos feitos, pode ser sugerido como trabalho futuro a
realização de um estudo comparativo utilizando a mesma metodologia que este trabalho,
porém em uma base de dados que utilize esquema de versões.




                                                                                  51
7. REFERÊNCIAS BIBLIOGRÁFICAS



ANTUNES, D.C. Modelagem temporal de sistemas: uma abordagem fundamentada em
redes de Petri. Porto Alegre, CPGCC da UFRGS, 1997. Dissertação de mestrado.

CONAMA, Conselho Nacional do Meio Ambiente - Resolução Nº 274 De 29 De
Novembro 2000, Disponível em:
http://www.mma.gov.br/port/conama/res/res00/res27400.html, Acesso em: 24/04/2005

CHEN, P. The entity-relationship model: Toward a unified view of data, 1976.

DATE, C.J. Introdução a sistemas de Bancos de Dados – tradução da 8ª edição
americana. Editora Campus. 2003

EDELWEISS, Nina. Modelagem de aspectos temporais de sistemas de informação.
Recife, IX Escola de Computação – UFPE, 1994.

EDELWEISS, Nina. Bancos de Dados Temporais: Teoria e Prática. XVII Jornada de
Atualização em Informática – JAI. XVIII SBC. Belo Horizonte, 1998.

HEUSER, A. Carlos. 1998. Uma proposta de modelagem de dados temporal.
Disponível em: http:
//www.pr.gov.br/celepar/celepar/batebyte/edicoes/1998/bb/5/dados.htm, Acesso em:
10/11/2004.

HUBLER, Patricia N. Definição de um Gerenciador para o Modelo de Dados Temporal
TF-ORM - Dissertação para obtenção do grau de Mestre. Porto Alegre: UFRGS. 2001.
Disponível em:
http://www.inf.ufrgs.br/pos/SemanaAcademica/Semana99/Hubler/hubler.html, Acesso
em: 01/12/2004.

KORTH, Henry F.; SILBERSCHATZ, Abraham. 1995. Sistemas de bancos de dados.
2º ed. São Paulo: Makron Books.




                                                                                   52
MOREIRA, V.; EDELWEISS, N. Queries to Temporal Databases Supporting Schema
Versioning. In: SIMPÓSIO BRASILEIRO DE BANCO DE DADOS, SBBD, 14., 1999,
Florianópolis. Anais...Florianópolis: UFSC, 1999. p. 299-313.

OLIVEIRA, José Palazzo M., EDELWEISS, Nina. Modelagem de Aspectos Temporais
de Sistemas de Informação. IX Escola de Computação, Recife, 1994.

ORACLE 8i Time Series User’s Guide, Release 8.1.5 A67294-01, Disponível em
http://www.csee.umbc.edu/help/oracle8/inter.815/a67294.pdf. Acessado em 19/05/2005.

POSSER, Juliana de Morais. Temporalidade em Sistema de Informação - Trabalho
Final de Graduação, Santa Maria:Unifra, 2001

RAMALHO, José A. A., Série Ramalho Oracle 8i – 5ª edição, 2001.

SILVA, R.C.; TRAINA JR. C. Armazenagem e Gerenciamento de Informações
Temporais em um Modelo de Dados Orientado a Objetos. In: 7º Simpósio Brasileiro de
Banco de Dados. Anais... Porto Alegre: Instituto de Informática da UFRGS, 1992.

SNODGRASS, R.; et al. Towards an Infrastructure for Temporal Databases. Report of
an Invitational ARPA/NSF Workshop. March, 1994.

TANSEL, A.U. Modelling Temporal Data. Information and Software Technology. V.
32, n. 8, p.514-520, 1990.




                                                                                  53
                                       ANEXO A


Código Fonte da Consulta na Base de Dados Relacional e Temporal

/*******************************************************************
Procedimento responsável por retornar a situação do trecho.
A situação pode ser excelente, muito boa, satisfatória e imprópria,
com base nos dados pesquisados na internet no site do CONAMA.

Parâmetro:pcdpraia do tipo number
Descrição: Código da praia

Parâmetro: pdataFim do tipo date
Descrição: Data a partir do qual serão feitos os cálculos para se chegar
        às cinco semanas anteriores.

*******************************************************************/
create or replace procedure sp_qualidade (pcdpraia number, pdataFim date)
IS
   -- Declaração
   qtamostras Number;
   C250 Number;
   C500 Number;
   C1000 Number;
   C2500 Number;
   NColiformes Number;
   DsColiformes varchar2(200);
   E200 Number;
   E400 Number;
   E800 Number;
   E2000 Number;
   Nescherichia Number;
   Dsescherichia varchar2(200);
   EN25 Number;
   EN50 Number;
   EN100 Number;
   EN400 Number;
   Nenterococos number;
   Dsenterococos varchar2(200);
   DsSituacao varchar2(200);
   Cnucoliformes tsamostra.nucoliformes%type;
   Cnuescherichia tsamostra.nuescherichia%type;
   Cnuenterococos tsamostra.nuenterococos%type;
   ptrecho tsamostra.cdtrecho%type;
   pdataIni date;



                                                                            54
  --Declaração de cursor responsável por retornar os trechos da praia pesquisada.
  CURSOR cur_praia(ppraia number)
  IS
    Select cdtrecho from ttrecho where cdpraia = ppraia;

  --Declaração de cursor responsável por retornar a quantidade de nucoliformes,
  --nuescherichia, nuenterococos das amostras realizadas.
/*******************************************************************
       NESSE PONTO HÁ UMA DIFERENÇA ENTRE OS DOIS MODELOS
O COMANDO DE SELEÇÃO A BAIXO É PARA O MODELO TEMPORAL

CURSOR cur_qualidade(pcdtrecho number, pInicio date, pFim date)
 IS
  Select nucoliformes, nuescherichia, nuenterococos from tsamostra_rvw
   where cdtrecho = pcdtrecho and tstamp between pInicio and pFim;

O COMANDO DE SELEÇÃO A BAIXO É PARA O MODELO RELACIONAL
*******************************************************************/
   CURSOR cur_qualidade(pcdtrecho number, pInicio date, pFim date)
   IS
    Select nucoliformes, nuescherichia, nuenterococos from tsamostra
     where cdtrecho = pcdtrecho and tempotransacao between pInicio and pFim;
  begin
               C250 := 0;
               C500 := 0;
               C1000 := 0;
               C2500 := 0;
               E200 := 0;
               E400 := 0;
               E800 := 0;
               E2000 := 0;
               EN25 := 0;
               EN50 := 0;
               EN100 := 0;
               EN400 := 0;
               DsSituacao := '';
               qtamostras:=0;

              --Cálculo da data de início das cinco semanas pesquisadas.
              --Realizado a partir da data fornecida como parâmetro
              select pdataFim - 28 into pdataIni from dual;
              DBMS_OUTPUT.ENABLE;
              Open cur_praia(pcdpraia);

              --Loop responsável por informar os trechos da praia
              LOOP
                     FETCH cur_praia INTO ptrecho;
                     EXIT When cur_praia%notFOUND;


                                                                                    55
                     Open cur_qualidade(ptrecho, pdataIni , pdataFim);

                     --No loop abaixo é feito o cálculo de quantas vezes aparece a
quantidade de
                     --nucoliformes, nuescherichia e nuenterococos em uma
determinada faixa de valores
                     --que é utilizado calcular a porcentagem em que aparecem.
                     LOOP
                             FETCH cur_qualidade INTO Cnucoliformes,
Cnuescherichia, Cnuenterococos;
                             EXIT When cur_qualidade%notFOUND;
                             qtamostras := qtamostras + 1;
                             if (Cnucoliformes <= 250) then
                               C250 := C250 + 1;
                             end if;
                             if (Cnucoliformes > 250) then
                              if (Cnucoliformes <= 500) then
                                      C500 := C500 + 1;
                              end if;
                             end if;
                             if (Cnucoliformes > 500) then
                              if (Cnucoliformes <= 1000) then
                                      C1000 := C1000 + 1;
                              end if;
                             end if;
                             if (Cnucoliformes > 2500) then
                               C2500 := C2500 + 1;
                             end if;
                             if (Cnuescherichia <= 200) then
                               E200 := E200 + 1;
                             end if;
                             if (Cnuescherichia > 200) then
                              if (Cnuescherichia <= 400) then
                                      E400 := E400 + 1;
                              end if;
                             end if;
                             if (Cnuescherichia > 400) then
                              if (Cnuescherichia <= 800) then
                                      E800 := E800 + 1;
                              end if;
                             end if;
                             if (Cnuescherichia > 2000) then
                               E2000 := E2000 + 1;
                             end if;
                             if (Cnuenterococos <= 25) then
                               EN25 := EN25 + 1;
                             end if;
                             if (Cnuenterococos > 25) then


                                                                                     56
               if (Cnuenterococos <= 50) then
                       EN50 := EN50 + 1;
               end if;
              end if;
              if (Cnuenterococos > 50) then
               if (Cnuenterococos <= 100) then
                       EN100 := EN100 + 1;
               end if;
              end if;
              if (Cnuenterococos > 400) then
                EN400 := EN400 + 1;
              end if;
END LOOP;
--Calculo da porcentagem em que aparecem as bactérias pesquisadas
--para se determinar a situação do trecho da praia.
if qtamostras <> 0 then
        C250 := ROUND((C250 * 100)/qtamostras, 2);
        C500 := ROUND((C500 * 100)/qtamostras, 2);
        C1000 := ROUND((C1000 * 100)/qtamostras, 2);
        C2500 := ROUND((C2500 * 100)/qtamostras, 2);
        E200 := ROUND((E200 * 100)/qtamostras, 2);
        E400 := ROUND((E400 * 100)/qtamostras, 2);
        E800 := ROUND((E800 * 100)/qtamostras, 2);
        E2000 := ROUND((E2000 * 100)/qtamostras, 2);
        EN25 := ROUND((EN25 * 100)/qtamostras, 2);
        EN50 := ROUND((EN50 * 100)/qtamostras, 2);
        EN100 := ROUND((EN100 * 100)/qtamostras, 2);
        EN400 := ROUND((EN400 * 100)/qtamostras, 2);
        NColiformes := C250;
        DsSituacao := 'Excelente';
        if C500 >= NColiformes then
                NColiformes := C500;
                DsSituacao := 'Muito Bom';
        end if;
        if C1000 >= NColiformes then
                NColiformes := C1000;
                DsSituacao := 'Satisfatório';
        end if;
        if C2500 >= NColiformes then
                NColiformes := C2500;
                DsSituacao := 'Impróprio';
        end if;
        Nescherichia := E200;
        Dsescherichia := '200';
        if E400 >= Nescherichia then
                Nescherichia := E400;
                if DsSituacao = 'Excelente' then
                        DsSituacao := 'Muito Bom';


                                                                    57
                           end if;
                    end if;
                    if E800 >= Nescherichia then
                            Nescherichia := E800;
                            if (DsSituacao = 'Excelente') or (DsSituacao = 'Muito
Boa') then
                                     DsSituacao := 'Satisfatório';
                            end if;
                    end if;
                    if E2000 >= Nescherichia then
                            Nescherichia := E2000;
                            DsSituacao := 'Impróprio';
                    end if;

                    Nenterococos := EN25;
                    if EN50 >= Nenterococos then
                            Nenterococos := EN50;
                            if DsSituacao = 'Excelente' then
                                    DsSituacao := 'Muito Bom';
                            end if;
                    end if;

                    if EN100 >= Nenterococos then
                           Nenterococos := EN100;
                           if (DsSituacao = 'Excelente') or (DsSituacao = 'Muito
Boa') then
                                     DsSituacao := 'Satisfatório';
                                   end if;
                           end if;
                           if EN400 >= Nenterococos then
                                   Nenterococos := EN400;
                                   DsSituacao := 'Impróprio';
                           end if;
                           --Retorno do procedimento
                           DBMS_OUTPUT.PUT_LINE('Classificação do trecho
'||ptrecho||': '||DsSituacao);
                           --DBMS_OUTPUT.PUT_LINE(Dsescherichia);
                           --DBMS_OUTPUT.PUT_LINE(Dsenterococos);
                   end if;
                   C250 := 0;
                   C500 := 0;
                   C1000 := 0;
                   C2500 := 0;
                   E200 := 0;
                   E400 := 0;
                   E800 := 0;
                   E2000 := 0;
                   EN25 := 0;


                                                                                    58
              EN50 := 0;
              EN100 := 0;
              EN400 := 0;
              DsSituacao := '';
              qtamostras:=0;
              Close cur_qualidade;
       END LOOP;
       Close cur_praia;
end;




                                     59
                                    ANEXO B

Código Fonte da Geração dos objetos na Base de Dados Relacional


-- Criação das TableSpaces no Modelo Relacional


Tablespace responsável por armazenar os índices
CREATE TABLESPACE "PROJETOIDX"
  LOGGING
  DATAFILE 'C:\ORACLE\ORADATA\PROJETO\PROJETOIDX.DBF' SIZE 5M
  REUSE DEFAULT
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 )


Tablespace responsável por armazenar as tabelas
CREATE TABLESPACE "PROJETOTBL"
  LOGGING
  DATAFILE 'C:\ORACLE\ORADATA\PROJETO\PROJETOTBL.DBF' SIZE 5M
  REUSE DEFAULT
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 )


Tablespace responsável por armazenar os objetos temporários
CREATE TABLESPACE "PROJETOTMP"
  LOGGING
  DATAFILE 'C:\ORACLE\ORADATA\PROJETO\PROJETOTMP.DBF' SIZE 5M
  REUSE DEFAULT
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 )


Criação do Usuário que tem acesso à base relacional

CREATE USER "WAGNER" PROFILE "DEFAULT" IDENTIFIED BY "1234"
 DEFAULT
 TABLESPACE "PROJETOTBL" TEMPORARY
 TABLESPACE "PROJETOTMP" ACCOUNT UNLOCK


Criação da tabela tpraia, responsável por armazenar as informações sobre as praias
CREATE TABLE "WAGNER"."TPRAIA"("CDPRAIA" NUMBER NOT NULL,
  "NMPRAIA" VARCHAR2(100) NOT NULL, "DSLOCAL" VARCHAR2(100)
NOT


                                                                                     60
  NULL,
  CONSTRAINT "TPRAIA_PK_CDPRAIA" PRIMARY KEY("CDPRAIA") USING
  INDEX
  TABLESPACE "PROJETOIDX"
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10
  INITRANS 2 MAXTRANS 255)
  TABLESPACE "PROJETOTBL" PCTFREE 10 PCTUSED 40 INITRANS 1
  MAXTRANS 255
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1)
  LOGGING

Criação da tabela ttrecho, responsável por armazenar as informações sobre os trechos
das praias
CREATE TABLE "WAGNER"."TTRECHO"("CDTRECHO" NUMBER NOT NULL,
  "CDPRAIA" NUMBER NOT NULL, "NMTRECHO" VARCHAR2(100) NOT
NULL,
  CONSTRAINT "FK_TPRAIA_TTRECHO" FOREIGN KEY("CDPRAIA")
  REFERENCES "WAGNER"."TPRAIA"("CDPRAIA"),
  CONSTRAINT "TTRECHO_PK_CDTRECHO_CDPRAIA" PRIMARY
KEY("CDTRECHO",
  "CDPRAIA") USING
  INDEX
  TABLESPACE "PROJETOIDX"
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10
  INITRANS 2 MAXTRANS 255)
  TABLESPACE "PROJETOTBL" PCTFREE 10 PCTUSED 40 INITRANS 1
  MAXTRANS 255
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1)
  LOGGING


Criação da tabela tresponsavel, responsável por armazenar as informações sobre os
responsáveis pela coleta da amostra
CREATE TABLE "WAGNER"."TRESPONSAVEL"("CDRESPONSAVEL"
VARCHAR2(
   20) NOT NULL, "NMRESPONSAVEL" VARCHAR2(100) NOT NULL,
"DSCARGO"
   VARCHAR2(100) NOT NULL, "TEMPOTRANSACAO" DATE DEFAULT
sysdate
   NOT NULL,
   CONSTRAINT "TRESPONSAVEL_PK" PRIMARY KEY("CDRESPONSAVEL")
USING
   INDEX
   TABLESPACE "PROJETOIDX"


                                                                                  61
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10
  INITRANS 2 MAXTRANS 255)
  TABLESPACE "PROJETOTBL" PCTFREE 10 PCTUSED 40 INITRANS 1
  MAXTRANS 255
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1)
  LOGGING


Criação da tabela tsamostra, responsável por armazenar as informações sobre as
amostras retiradas dos diversos trechos das praias.
CREATE TABLE "WAGNER"."TSAMOSTRA"("CDAMOSTRA" VARCHAR2(20)
NOT
  NULL, "CDTRECHO" NUMBER, "CDPRAIA" NUMBER, "CDRESPONSAVEL"
  VARCHAR2(20), "NUCOLIFORMES" NUMBER, "NUESCHERICHIA"
NUMBER,
  "NUENTEROCOCOS" NUMBER, "DSOBSERVACAO" VARCHAR2(255),
  "TEMPOTRANSACAO" DATE DEFAULT sysdate NOT NULL,
  CONSTRAINT "FK_TAMOSTRA_TRESPONSAVEL" FOREIGN KEY(
  "CDRESPONSAVEL")
  REFERENCES "WAGNER"."TRESPONSAVEL"("CDRESPONSAVEL"),
  CONSTRAINT "FK_TAMOSTRA_TTRECHO" FOREIGN KEY("CDTRECHO",
  "CDPRAIA")
  REFERENCES "WAGNER"."TTRECHO"("CDTRECHO", "CDPRAIA"),
  CONSTRAINT "PK_TSAMOSTRA" PRIMARY KEY("CDAMOSTRA",
  "TEMPOTRANSACAO") USING
  INDEX
  TABLESPACE "PROJETOTBL"
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10
  INITRANS 2 MAXTRANS 255)
  TABLESPACE "PROJETOTBL" PCTFREE 10 PCTUSED 40 INITRANS 1
  MAXTRANS 255
  STORAGE ( INITIAL 40K NEXT 96K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1)
  LOGGING



Gatilho criado para implementar a temporalidade através do modelo relacional.
Associado as operações de insert e update na tabela tsamostra
CREATE OR REPLACE TRIGGER TSAMOSTRA_TRG BEFORE
  INSERT OR
  UPDATE
  ON "TSAMOSTRA"
FOR EACH ROW
BEGIN


                                                                                62
--se for insert o registro do momento da inserção é feita com base na data do servidor
        IF INSERTING THEN
                :NEW.TEMPOTRANSACAO := TO_DATE(SYSDATE,
                ‘DD/MM/YYYY’);
        END IF;
--se for update não permite que a data e o código sejam alterados
        IF UPDATING THEN
                 IF :NEW.TEMPOTRANSACAO <>:OLD.TEMPOTRANSACAO
                 THEN
                         raise_application_error(-20000, ‘Não é possível alterar o registro
                 do tempo de transação’);
                 END IF;
                 IF :NEW.CDAMOSTRA<>:OLD.CDAMOSTRA THEN
                         raise_application_error(-20000, ‘Não é possível alterar o Código
                         da amostra’);
                 END IF;
        END IF;
END;


Gatilho criado para implementar a temporalidade através do modelo relacional.
Associado as operações de insert e update na tabela tresponsavel
CREATE OR REPLACE TRIGGER TSAMOSTRA_TRG BEFORE
   INSERT OR
   UPDATE
   ON "TRESPONSAVEL"
FOR EACH ROW
BEGIN
--se for insert, o registro do momento da inserção é feita com base na data do servidor
        IF INSERTING THEN
                 :NEW.TEMPOTRANSACAO := TO_DATE(SYSDATE,
                 ‘DD/MM/YYYY’);
        END IF;
--se for update não permite que a data e o código sejam alterados
        IF UPDATING THEN
                 IF :NEW.TEMPOTRANSACAO <>:OLD.TEMPOTRANSACAO
                 THEN
                         raise_application_error(-20000, ‘Não é possível alterar o registro
                 do tempo de transação’);
                 END IF;
                 IF :NEW.CDRESPONSAVEL<>:OLD.CDRESPONSAVEL THEN
                         raise_application_error(-20000, ‘Não é possível alterar o Código
                         do responsável’);
                 END IF;
        END IF;
END;




                                                                                          63
                                     ANEXO C

Código Fonte da Geração dos objetos na Base de Dados Temporal

-- Criacao das TableSpaces no Modelo Temporal

Tablspace responsável por armazenar os indices
CREATE TABLESPACE "TEMPORALIDX"
  LOGGING
  DATAFILE 'C:\ORACLE\ORADATA\PROJETO\TEMPORALIDX.DBF' SIZE 5M
  REUSE EXTENT MANAGEMENT LOCAL

Tablspace responsável por armazenar as tabelas
CREATE TABLESPACE "TEMPORALTBL"
  LOGGING
  DATAFILE 'C:\ORACLE\ORADATA\PROJETO\TEMPORALTBL.DBF' SIZE 5M
  REUSE DEFAULT
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 )

Tablespace responsável por armazenar os objetos temporários
CREATE TABLESPACE "TEMPORALTMP"
  LOGGING
  DATAFILE 'C:\ORACLE\ORADATA\PROJETO\TEMPORALTMP.DBF' SIZE 5M
  REUSE DEFAULT
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 )


Criação do Usuário que tem acesso à base temporal
CREATE USER "TEMPORAL" PROFILE "DEFAULT" IDENTIFIED BY
  "1234" DEFAULT
  TABLESPACE "TEMPORALTBL" TEMPORARY
  TABLESPACE "TEMPORALTMP" ACCOUNT UNLOCK


Criação da tabela tpraia, responsável por armazenar as informações sobre as praias
Criação idêntica ao do modelo relacional. com alterações apenas de tablespace e usuário
dono do objeto
CREATE TABLE "TEMPORAL"."TPRAIA"("CDPRAIA" NUMBER NOT NULL,
  "NMPRAIA" VARCHAR2(100) NOT NULL, "DSLOCAL" VARCHAR2(100)
NOT
  NULL,
  CONSTRAINT "TPRAIA_PK_CDPRAIA" PRIMARY KEY("CDPRAIA") USING
  INDEX
  TABLESPACE "TEMPORALIDX"


                                                                                    64
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10
  INITRANS 2 MAXTRANS 255)
  TABLESPACE "TEMPORALTBL" PCTFREE 10 PCTUSED 40 INITRANS 1
  MAXTRANS 255
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1)
  LOGGING

Criação da tabela ttrecho, responsável por armazenar as informações sobre os trechos
das praias
Criação idêntica ao do relacional com alterações apenas de tablespace e usuário dono do
objeto
CREATE TABLE "TEMPORAL"."TTRECHO"("CDTRECHO" NUMBER NOT
NULL,
  "CDPRAIA" NUMBER NOT NULL, "NMTRECHO" VARCHAR2(100) NOT
NULL,
  CONSTRAINT "FK_TPRAIA_TTRECHO" FOREIGN KEY("CDPRAIA")
  REFERENCES "TEMPORAL"."TPRAIA"("CDPRAIA"),
  CONSTRAINT "TTRECHO_PK_CDTRECHO_CDPRAIA" PRIMARY
KEY("CDTRECHO",
  "CDPRAIA") USING
  INDEX
  TABLESPACE "PROJETOIDX"
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1) PCTFREE 10
  INITRANS 2 MAXTRANS 255)
  TABLESPACE "PROJETOTBL" PCTFREE 10 PCTUSED 40 INITRANS 1
  MAXTRANS 255
  STORAGE ( INITIAL 40K NEXT 40K MINEXTENTS 1 MAXEXTENTS 505
  PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1)
  LOGGING



Grupo TSAMOSTRA

DECLARE

BEGIN

-- A função Begin_Create_TS_Group inicializa o contexto para criação de um sistema
time series,
-- 'tsamostra' é o nome usado nos procedimentos da ferramenta administrativa do pacote
time series.
-- Parâmetros para a função:
-- name - nome do grupo time series a ser criado;
-- storage_model - armazenamento do time series (modelo de armazenamento).


                                                                                    65
ORDSYS.TSTools.Begin_Create_Ts_Group('tsamostra','flat');
ORDSYS.TSTools.Set_Flat_Attributes(tsname_colname =>
'CdAmostra',tsname_length => 10);

-- definição explícita dos atributos

ORDSYS.TSTools.Add_Number_Column('CdTrecho');
 ORDSYS.TSTools.Add_Number_Column('CdPraia');
 ORDSYS.TSTools.Add_VARCHAR2_Column('CdResponsavel', 20);
 ORDSYS.TSTools.Add_Number_Column('NuColiformes');
 ORDSYS.TSTools.Add_Number_Column('NuEscherichia');
 ORDSYS.TSTools.Add_Number_Column('NuEnterococos');
 ORDSYS.TSTools.Add_VARCHAR2_Column('DsObservacao', 100);
 ORDSYS.TSTools.End_Create_Ts_Group;
exception
  when others then
    begin
      ORDSYS.TSTools.Cancel_Create_Ts_Group;
      raise;
    end;

END;
/

--
-- Com a chamada de End_Create_Ts_Group são criados automaticamente
-- o esquema dos seguintes objetos:
--
-- TSAMOSTRA – Visão de objeto. Usada quando se usa as funções do time series.

-- TSAMOSTRA_RVW – Visão da tabela TSAMOSTRA_TAB. View utilizada
quando é necessário atualizar os dados na base de dados através dos comandos de
inserir, apagar e alterar. Possui um gatilho do tipo Instead Of gerado automaticamente
após a criação do grupo.
-- TSAMOSTRA_TAB – Tabela criada com os atributos especificados e que possui
os dados da base. Apenas é alterada através de uma visão.
-- TSAMOSTRA_MAP – tabela de mapeamento. Utilizada quando se deseja associar
um calendário a uma série de tempo. Toda série de tempo deve ser cadastrada nessa
tabela antes de ser inserida na tabela que possui os dados. É composta pelo atributo
correspondente a série de tempo e o atributo do nome do calendário, caso não haja um
calendário associado esse atributo possui o valor nulo.
-- TSAMOSTRA_CAL – tabela que possui a definição dos calendários.



Grupo TSRESPONSAVEL



                                                                                    66
DECLARE

BEGIN

-- A função Begin_Create_TS_Group inicializa o contexto para criação de um sistema
time series,
-- 'tsresponsável' é o nome usado nos procedimentos da ferramenta administrativa do
pacote time series.
-- Parâmetros para a função:
-- name - nome do grupo time series a ser criado;
-- storage_model - armazenamento do time series (modelo de armazenamento).

ORDSYS.TSTools.Begin_Create_Ts_Group('tsresponsavel','flat');
ORDSYS.TSTools.Set_Flat_Attributes(tsname_colname =>
'CdResponsavel',tsname_length => 10);

-- definição explícita dos atributos

 ORDSYS.TSTools.Add_VARCHAR2_Column('NmResponsavel', 100);
 ORDSYS.TSTools.Add_VARCHAR2_Column('DsCargo', 100);
 ORDSYS.TSTools.End_Create_Ts_Group;
exception
  when others then
    begin
      ORDSYS.TSTools.Cancel_Create_Ts_Group;
      raise;
    end;

END;
/

--
-- Com a chamada de End_Create_Ts_Group são criados automaticamente
-- o esquema dos seguintes objetos:
--
-- TSRESPONSAVEL – Visão de objeto. Usada quando se usa as funções do time
series.

-- TSRESPONSAVEL_RVW – Visão da tabela TSAMOSTRA_TAB. View utilizada
quando é necessário atualizar os dados na base de dados através dos comandos de
inserir, apagar e alterar. Possui um gatilho do tipo Instead Of gerado automaticamente
após a criação do grupo.
-- TSRESPONSAVEL_TAB – Tabela criada com os atributos especificados e que
possui os dados da base. Apenas é alterada através de uma visão.
-- TSRESPONSAVEL_MAP – tabela de mapeamento. Utilizada quando se deseja
associar um calendário a uma série de tempo. Toda série de tempo deve ser cadastrada
nessa tabela antes de ser inserida na tabela que possui os dados. É composta pelo


                                                                                      67
atributo correspondente a série de tempo e o atributo do nome do calendário, caso não
haja um calendário associado esse atributo possui o valor nulo.
-- TSRESPONSAVEL_CAL – tabela que possui a definição dos calendários.




                                                                                        68
                                ANEXO D

Script de Criação do Calendário no BDT



             A definição do calendário é realizada em uma das tabelas criadas
automaticamente na criação do grupo time series, caso não seja especificado um nome
este será formado por nome_do_grupo_CAL e o atributo reponsável por armazenar a
definição do calendário será do tipo de dado ORDTCalendar, que é um tipo de dado já
definido pelo sistema time series, como descrito (ORACLE, 1999):

CREATE TYPE ORDYS.ORDTCalendar AS OBJECT (
caltype INTEGER, --indica o tipo do calendário(0 = padrão)
name VARCHAR2(256), --nome para o calendário
frequency INTEGER, -- dia, mês, semestre, ano, etc.
pattern ORDSYS.ORDTPattern, --modelo de repetição dos time
--series
minDate DATE, -- o calendário começa com esta data. Ex:
-- data_matrícula do aluno
maxDate DATE -- o calendário finaliza com esta data. Ex:
-- data_colação_grau
offExceptions ORDSYS.ORDTExceptions,
onException ORDSYS.ORDTExpections);


       Para a aplicação implementada neste projeto o seguinte calendário foi definido:

INSERT INTO tsamostra_cal VALUES
( ORDSYS.ORDTCalendar(
0, --Tipo de calendário padrão
'Diario', --nome do calendário
4, --frequência do tipo dia
ORDSYS.ORDTPattern(ORDSYS.ORDTPatternBits(1,1,0,0,0,1,1),
to_date('02/01/2002', 'DD-MM-YYYY')), -- data base
to_date('02/01/2002', 'DD-MM-YYYY'), -- data inicial do intervalo que determina as
                                      -- datas mínima e máxima para inserção de
                                      -- dados
to_date('02/01/2006', 'DD-MM-YYYY'), --data final
null, --sem exceção
null)) --sem exceção


Abaixo segue o script de validação do calendário.



                                                                                     69
DECLARE
tstCal ordsys.ordtcalendar;
temp integer;
validFlag integer;
BEGIN
select value(cal) into tstCal
from tsamostra_cal cal
where cal.name = 'Diario';
-- Mostra o calendário
select ordsys.timeseries.display(tstCal) into temp from dual;
dbms_output.new_line;
validFlag := ORDSYS.CALENDAR.IsValidCal(tstCal);
if (validFlag = 1) then
dbms_output.put_line('O calendário diario está valido.');
else
dbms_output.put_line('O calendário diario não está
valido.');
dbms_output.put_line('Use ValidateCal para determinar a
inconsistência.');
end if;
END;


          Em ORACLE (1999), podem ser consultados maiores detalhes a respeito da
implementação de calendários




                                                                              70

						
Other docs by Z4LC6pQ
GOVERNMENT OF WEST BENGAL - DOC
Views: 9  |  Downloads: 0
HISTORY OF NUMERALS
Views: 43  |  Downloads: 0
Kirkwood Saddle Club Open Show
Views: 15  |  Downloads: 0
Anak cadlab
Views: 2  |  Downloads: 0
GAY HILL GOLF CLUB LTD - DOC - DOC
Views: 5  |  Downloads: 0
NMMU SPORT CLUB REGISTRATION FORM - DOC - DOC
Views: 35  |  Downloads: 0
FINAL13WorkshopSummary CommFishing1Dec2011
Views: 0  |  Downloads: 0
US OrderForm Beef 12162011
Views: 0  |  Downloads: 0
Departamento Santa Cruz de la Sierra
Views: 61  |  Downloads: 0