Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Vacaria
2008
1
Vacaria
2008
2
AGRADECIMENTO
RESUMO
estado atual de um ou mais objetos. Para muitos sistemas, no entanto, é desejável que se possa
armazenar e recuperar todos os estados do ciclo de vida dos mesmos. Esta constatação
Embora muitas propostas efetivas tenham sido elaborados, nenhuma foi adotada como padrão
pela indústria.
Este trabalho apresenta uma investigação acerca do estado da arte no que se refere a
bancos de dados temporais, seus conceitos, recuperação de dados com a linguagem TSQL2 e
LISTA DE FIGURAS
LISTAGEM DE QUADROS
LISTAGEM DE TABELAS
SUMÁRIO
INTRODUÇÃO ................................................................................................................ 9
1 OBJETIVOS .................................................................................................................. 11
1.1 OBJETIVO GERAL ................................................................................................... 11
1.2 OBJETIVOS ESPECÍFICOS ..................................................................................... 11
4 METODOLOGIA ..................................................................................................... 27
INTRODUÇÃO
utilização de uma linguagem de consulta que ofereça suporte adequado aos tipos e critérios de
constitua o padrão vigente para recuperação de dados em banco de dados relacionais, esta
Entretanto, este dado pode assumir diversos valores ao longo do tempo e, em muitos casos, é
possivelmente recuperados. Como exemplos, podem ser citados o caso de um banco de dados
de pacientes que precisa armazenar informações sobre o histórico médico dos mesmos ou um
A constatação de que os dados evoluem com o passar do tempo e que todos estes
valores não devem ser perdidos, levou à criação dos bancos de dados temporais, onde todos
os estados (passado, presente e futuro) dos dados ficam armazenados, bem como a
possibilidade de recuperação.
Segundo Silberschatz (2006), muitas propostas foram feitas para a extensão da SQL a
fim de melhorar seu suporte de dados temporais, mas, pelo menos até o padrão ISO (2003), a
objetivos deste trabalho, o capítulo 2 apresenta uma investigação acerca do estado da arte de
10
banco de dados temporais e seus conceitos, seguida pelo capítulo 3, que é destinada à
metodologia científica do trabalho, seguido pelo capítulo 5 que apresenta o método de escolha
1 OBJETIVOS
informação.
armazenados e gatilhos;
armazenam apenas um estado dos dados, o estado atual. Porém, os atributos de um objeto
podem assumir diferentes valores ao longo do tempo e o conjunto destes valores constitui a
história desse objeto. A constatação de que os dados evoluem com o passar do tempo e que os
valores antigos da informação não devem ser perdidos, levou à criação dos bancos de dados
temporais, onde podem ser conservados todos os valores de dados definidos (passado,
presente e futuro).
passados. Para citar alguns exemplos, pode ser referenciado o caso de um banco de dados de
pacientes que precisa armazenar informações sobre o histórico médico dos mesmos. Outro
possível através do acréscimo de uma dimensão temporal ao banco de dados. Com esta
dimensão é possível identificar quando uma informação foi definida e qual o tempo em que
ela é válida (PINHEIRO apud EDELWEISS, 1998). Esta dimensão temporal associa um
tempo a um atributo de forma que se o valor do atributo for alterado, o valor anterior não é
perdido.
13
necessário ou conveniente que haja suporte à regras ativas, como gatilhos, no sistema
Simonetto (1999), classifica a forma utilizada para armazenar valores temporais como
a seguir:
propriedade pode ser percebida como uma transição do banco de dados. Em uma
está disponível. O estado atual do banco de dados, composto pelos valores atuais
convencionais.
temporal. Uma relação que utilize essa abordagem pode ser vista como tendo três
ser executadas, bem como erros em tuplas passadas não podem ser corrigidos.
tempo de validade, e este tempo deve ser fornecido pelo usuário. Este tipo de
banco de dados registra a história relativa aos dados e não às transações, e permite
14
futuros.
história das transações realizadas como a história da validade dos dados. O estado
valores futuros podem ser definidos através do tempo de validade, sendo possível
alterações.
importante também que esteja disponível uma linguagem de consulta temporal. Esta
dados (temporais ou não), de modo que seja tirado real proveito do acréscimo da dimensão
d) Fornecer informações temporais (datas, intervalos). Exemplo: qual a data em que foi
Para que isto seja possível, as linguagens de consultas convencionais devem ser
estendidas para manipular a dimensão temporal, e ter capacidade de dedução sobre tempo
com base nas informações temporais armazenadas. Isto é possibilitado através da utilização de
Carvalho (1997) cita cinco diferentes tipos de interpretações dos dados armazenados:
instante do passado, de acordo com a atual percepção; Exemplo: Qual era o salário de
João em 01/01/01?
16
verdadeiro em 20/05/01?
futuro) de acordo com a presente história de dados válidos; Exemplo: Qual será a
admissão?
verdadeiro em 20/05/01?
tópico seguinte será apresentada a TSQL2, que sugere especificações para uma linguagem de
3.1 TSQL2
TSQL2 foi formado em julho de 1993 após um convite geral enviado à comunidade. Tal
comitê foi formado por pesquisadores da área que produziram uma especificação preliminar
setembro de 1994.
discute decisões do projeto, fornece exemplos, e considera como a linguagem pode ser
linguagem TSQL2, agora eles têm uma finalidade diferente: fornecer exemplos de
com outras linguagens que têm sido propostas nos últimos 15 anos. Deve-se enfatizar que
esses comentários não fazem parte da especificação da linguagem TSQL2, mas suplementam
final no TSQL2.
dentro da linguagem SQL3. A linguagem TSQL2 foi a primeira a especificar um padrão para
objetivo de criar uma linguagem de consulta temporal que, associada a um modelo de dados,
venha a ser um consenso entre os pesquisadores, para que futuros trabalhos possam ser
Nas subseções seguintes, Simonetto (1998) faz considerações sobre alguns aspectos
relacionados a TSQL2.
18
Os tipos de dados datetime e interval do SQL-92 são substituídos com maior precisão
pelos tipos instants, intervals, e spans de tamanho e precisão especificáveis. Além disso, o
O TSQL2 suporta três tipos de tempo: definido pelo usuário, válido e de transação. O
tempo de transação é limitado por inception, quando o banco de dados é criado, e until
changed, quando ocorre uma alteração na base de dados. Além disso, o tempo válido e o
tempo definido pelo usuário possuem dois valores especiais: beginning e forever (início e fim
da relação), que são o menor e o maior valor na ordem. O tempo de transação possui o valor
Em cada tabela, cada tupla é rotulada temporalmente com um elemento temporal (ver
seguinte tupla (Paulo, 10000, João). O elemento temporal rotulado neste registro será o
conjunto de intervalos que Paulo irá receber R$10.000, e terá João como seu gerente.
Informações sobre outros salários e outros gerentes de Paulo serão armazenadas em outras
1
Um surrogate representa um objeto no banco de dados por si só. O surrogate é inteiramente gerado
pelo sistema e invisível ao usuário ou aplicação.
19
tuplas. O rótulo temporal é implicitamente associado com cada tupla. A linguagem TSQL2
Tabela 1
Representação do tempo de validade na TSQL2
Id Nome Beggining Forever
1 João 01/01/96 -
2 Maria 01/01/94 31/12/96
2 Ana Maria 01/01/97 -
Fonte: Simonetto (1998)
Ortogonalmente para tempo válido, o tempo de transação pode ser associado com
quando a tupla foi considerada para ser logicamente armazenada no banco de dados. Se a
uma sentença append) e removida deste banco de dados no dia 15 de Junho de 1992 (com
uma sentença delete), então o tempo de transação desta tupla é o intervalo compreendido entre
Tabela 2
Representação do tempo de transação na TSQL2
Id Nome Inception Until Changed
1 João 31/12/96 -
2 Maria 12/12/93 31/12/96
2 Ana Maria 30/12/96 -
Fonte: Simonetto (1998)
Tabela 3
Representação do tempo de transação e de validade (bitemporal) na TSQL2
Id Nome Beggining Forever Inception Until Changed
1 João 01/01/97 - 31/12/96 -
2 Maria 01/01/94 31/12/96 12/12/93 30/12/96
2 Ana Maria 01/01/97 - 30/12/96 -
(fonte: SIMONETTO, 1998)
a) Ordem Linear: significa que o dado terá apenas um sucessor e um predecessor, sendo
um empregado.
b) Ordem Ramificada: onde um dado pode ter vários sucessores e/ou predecessores.
3.1.4 Granularidade
pode variar de dado para dado. Ex: ano, mês, dia, hora...
b) Granularidade do fato do mundo real: para qual porção do fato deve-se registrar
evolução temporal. Ex: fato completo, alguns atributos, alguns dos seus
relacionamentos,...
21
seleção e a projeção são feitas sobre o rótulo temporal, envolvendo, portanto, tempo de
transação e de validade.
O primeiro tipo de operador citado refere-se aos extratores que tem por objetivo
extrair alguma informação temporal do rótulo, como o operador begin que extrai o início de
intervalos temporais. Neste contexto encontramos o overlaps que verifica se dois intervalos
têm intervalos temporais em comum. Assim, um exemplo de consulta para obter estas
1992"
SELECT Name
FROM Employee
WHERE VALID(Employee)
OVERLAPS PERIOD '[01/01/1992,01/31/1992]'
Mello (2007) cita mais alguns operadores como o Includes (Contém), Preceds/before
3.1.6 Sintaxe
criar estruturas de banco de dados temporais que armazenam os dados. Inicialmente será
apresentada a sintaxe TSQL2 para criação das tabelas, inclusão de dados, alteração e exclusão
dos mesmos. Por fim, como é apresentada a sintaxe para recuperação de informações
Para criar uma tabela utiliza-se o mesmo formato de comando usado nos bancos de
dados convencionais, o create table. Neste comando são especificados o nome da nova tabela,
os nomes das colunas, e o tipo de dado de cada coluna. No caso de banco de dados temporais,
as tabelas necessitam ter meios de tratar a questão temporal. No exemplo abaixo, que grava os
identifica a tabela NBCShows como uma tabela de estado de tempo válido. Tais tabelas
contêm registros de datas e horas válidos, as quais são indicadas por períodos e suportadas por
Exemplo:
Onde:
ShowName é o nome do programa exibido na NBC (NBC é uma rede de televisão);
InsertionLenght é a duração do comercial;
Cost é o preço em dólares pago pela propaganda;
23
comando do padrão da SQL-92, mas com a adição de cláusula que trata a dimensão do tempo
associada ao registro que está sendo inserido. O exemplo abaixo mostra uma inserção de
O comando padrão da SQL-92 para exclusão dos dados efetua a remoção física dos
mesmos. Quando a questão de dimensão do tempo é associada ao registro que está sendo
excluído, pode-se verificar que esta exclusão não irá remover fisicamente este dado,
significando apenas o fim da sua validade. No exemplo abaixo a cláusula valid é utilizada
visando o fim da validade de dados históricos que se encontram dentro do período ou casam
Ex:
DELETE FROM nome_tabela
[WHERE condição]
[VALID {PERIOD | INSTANT} constante_tempo]
Quando a história de um dado não é mais relevante para uma aplicação e deseja-se
diminuir o volume de dados, pode-se executar a exclusão física do dado através do comando
vaccuming. Logo abaixo á apresentado um exemplo de exclusão física a partir deste comando:
24
Ex:
VACCUM Empregados E
WHERE BEGIN (TRANSACTION(E))
PROCEDS DATE ’01-01-90’
comando do padrão da SQL-92, com a adição da cláusula valid utilizada para as modificações
Ex:
UPDATE nome_tabela
SET alterações
[VALID {PERIOD | INSTANT} constante_tempo]
[WHERE condição]
3.1.6.5 Consultas
banco de dados temporais, sendo que esta deve possibilitar que todas as informações
armazenadas no banco de dados (temporais ou não) sejam recuperadas de modo que seja
tirado real proveito do acréscimo da dimensão temporal. Vários tipos de consultas podem ser
SELECT INSTANT(P)
FROM ParticipaçõesEventos P
WHERE P.RG = 10100
Exemplo 4: qual era o salário de João da Silva que se acreditava como válido em 20/05/95?
2
Exibe o estado mais atual dos dados, não exibindo nenhum atributo temporal
26
Segundo Silberschatz (2006) muitas propostas foram feitas para a extensão da SQL a
fim de melhorar seu suporte de dados temporais, porém até a última versão do padrão ISO
(2003), nenhum suporte adicional havia sido acrescentado. Nem mesmo a TSQL2 foi aceita
4 METODOLOGIA
método, sendo também definida como a descrição, análise e avaliação dos métodos a serem
como objetivo proporcionar respostas aos problemas que são propostos”. Assim, a elaboração
desenvolvimento. Estas etapas podem ser simplificadas ou modificadas para melhor que se
Esta pesquisa, do ponto de vista de sua natureza, é aplicada, pois, segundo Silva e
Menezes (2005) “objetiva gerar conhecimentos para aplicação prática, dirigidos à solução de
problemas específicos, ou seja, é uma pesquisa aplicada quantitativa que tem como objetivo
gerar conhecimentos para aplicação prática dirigida à solução de problemas específicos com o
Do ponto de vista de seus objetivos, este estudo pode ser considerado como pesquisa
bibliográfico com base em materiais como livros, artigos de períodicos, base de dados,
no caso em estudo é a modelagem de dados para um controle de grãos, para o qual foi
1975).
De acordo com Yin (2001), a opção de estudo de caso como estratégia de pesquisa se
justifica quando o estudo focaliza o âmbito das decisões, isto é, tentam esclarecer o motivo
pelo qual as decisões foram tomadas, como foram implementadas e quais os resultados
encontrados.
efetivamente escolhido.
29
Após algumas pesquisas com os bancos MySQL, Firebird, PostgreSQL entre outros, o
estudo foi o PostgreSQL. Nesse capítulo será apresentado um breve histórico acerca deste
denominado Ingres. Essa tecnologia foi então comprada pela Illustra, que compatibilizou o
Postgres à linguagem SQL. Este projeto recebeu o nome de Postgres95, e em 1996, quando o
confiável, flexível e rico em recursos. Além disso, trata-se de um banco de dados gratuito e de
de sub-consultas;
f) Gatilhos (Triggers): O gatilho pode ser definido para executar antes ou depois de
g) Tipos definidos pelo usuário: o PostgreSQL pode ser estendido para dar suporte a
linguagem C;
para a chamada a uma função subjacente que realiza o trabalho real; portanto,
primeiro deve ser criada a função subjacente para depois ser criado o operador;
acessados.
CONVENCIONAL
Este trabalho está inserido no âmbito de banco de dados de tempo de transação, no que
se refere ao aspecto tempo, onde o tempo de definição de um dado por uma transação é
fornecido pelo SGBD. Dessa forma, a ordem no tempo utilizada foi a Ordem Linear, onde o
dado possui apenas um sucessor e um predecessor, utilizando como rótulo temporal o tipo de
dados Timestamp3.
utilizadas duas linguagens, a PL/Pgsql e a PL/Perl. A linguagem PL/Perl foi utilizada para
necessárias com os dados para adicionar a eles o aspecto temporal. Abaixo será visualizada a
3
Timestamp: tipo de dado que combina data (dia/mês/ano) + tempo (hh:mm:ss:ms);
33
Conforme descrito no item sintaxe do capítulo 2, para criar uma tabela utiliza-se o
mesmo formato de comando usado nos bancos de dados convencionais, o create table e as
especificações correspondentes à nova tabela (nome da tabela, nomes das colunas e tipo de
Exemplo:
duas colunas (Tinicial e Tfinal) à estrutura das tabelas nas quais deseja-se manter a história de
Para que o controle por tempo de transação possa ser efetivo é necessário alterarmos a
chave primária dessa tabela, para que ela passe a ser uma chave primária composta (codigo,
tinicial). A razão pela escolha da coluna tinicial para compor a chave deve-se ao fato de que
ao inserirmos um registro, a coluna tfinal terá um valor nulo inicialmente, e chaves não
podem conter valores nulos. Abaixo se pode visualizar um exemplo da alteração da tabela:
AddTIni - (ALTER TABLE "pessoas" ADD COLUMN "tinicial" timestamp NOT NULL;)
AddTFim- (ALTER TABLE "pessoas" ADD COLUMN "tfinal" timestamp;)
Onde:
AddTIni : Adição da coluna tinicial, ou seja, data inicial da validade do registro;
AddTFim: Adição da coluna tfinal, ou seja, data final da validade do registro;
Del#: Exclui-se a chave simples;
Add#: Adiciona-se a nova chave agora composta;
Após a adição das colunas que irão tratar a questão temporal, a tabela ficará como
demonstrada no Quadro1.
Rótulo Temporal
Quadro 1: Visualização da Tabela
Para que o gerenciamento da questão temporal fosse possível foi necessário utilizar
necessária a utilização de duas linguagens e uma interação entre as mesmas, pois a linguagem
PL/PgSql não permite a criação de variáveis globais, recurso este presente na linguagem
PL/Perl..
Abaixo podemos ver como foram criadas as função getvar e setvar na linguagem
PL/Perl para armazenar e setar as variáveis globais que posteriormente serão utilizadas:
Para gerenciar os rótulos de tempo dos dados inseridos de forma automática, tornou-se
necessária a definição de uma trigger que intercede aos eventos de inserção para todas as
tabelas acrescidas da dimensão temporal, definindo o tempo inicial de transação para os dados
inseridos. Esta forma de implementação permite que o banco de dados seja manipulado de
forma convencional sem que usuários ou sistemas tenham de ser adaptados às questões
temporais.
função setvar descrita na seção 5.4. Se o registro é realmente originário de um insert, a função
passa o valor data e tempo atual para a validade inicial do registro. Caso o registro seja
originário de um delete a validade inicial não será atribuída ao registro. No final da função a
Figura 1.
Exemplo:
CREATE OR REPLACE FUNCTION inserepessoas() RETURNS trigger AS
$inserepessoas$
BEGIN
if (select getvar('deletar') = true) then
return NEW;
else
NEW.tinicial := current_timestamp;
end if;
EXECUTE setvar('deletar',false);
return NEW;
END;
$inserepessoas$ LANGUAGE plpgsql;
36
[Inicio]
[else]
Efetua a inserção e
atribui um valor para
tempo inicial
[Fim]
Para gerenciar os rótulos de tempo dos dados alterados de forma automática, tornou-se
necessária a definição de uma trigger que intercede aos eventos de alteração para todas as
alterados, inserindo um novo registro com informações alteradas e tempo inicial de transação
para este, juntamente com uma validade de tempo final para o registro anterior. Tal rotina é
Exemplo:
CREATE OR REPLACE FUNCTION alterapessoas() RETURNS trigger AS
$alterapessoas$
BEGIN
INSERT INTO pessoas VALUES (NEW.codigo, NEW.nome, NEW.endereco,
NEW.cidade,NEW.profissao, default, default);
NEW.nome := OLD.nome;
NEW.endereco := OLD.endereco;
NEW.cidade := OLD.cidade;
NEW.profissao := OLD.profissao;
NEW.tfinal := current_timestamp;
RETURN NEW;
END;
$alterapessoas$ LANGUAGE plpgsql;
[Inicio]
com alterações
INSERT Comando solicit ado pelo usuário
[e ls e]
Seta valor fa ls e à
variável 'delet ar'
[Fim] [Fim]
6.4.3 Delete
Para gerenciar os rótulos de tempo dos dados excluídos de forma automática, tornou-
se necessária a definição de uma trigger que intercede aos eventos de exclusão para todas as
tabelas acrescidas da dimensão temporal, definindo o tempo final de transação para os dados
excluídos.
excluídos, onde o registro é efetivamente excluído da base de dados, mas logo após é inserido
que este é um registro originário de um delete, e então a validade inicial deverá ser
preservada, caso contrário a função terá a informação de que realmente se trata de uma
39
Exemplo:
RETURN OLD;
END;
$deletepessoas$ LANGUAGE 'plpgsql';
Efetua a inserçã o e
atribui um valor para
tempo inicial
[Fim]
[Fim]
utilizados os mesmos formatos de comandos dos bancos de dados convencionais, porém duas
colunas (tinicial e tfinal) foram adicionadas às tabelas com características temporais, sendo a
tinicial parte da chave primária. No que se refere a inserção, alterações e exclusão de dados,
O próximo capítulo irá apresentar uma interface para gerência de banco de dados
que torna mais fácil a consulta de Snapshot, consultas temporais e a manipulação do Banco de
Dados. Nos tópicos seguintes será apresentada a interface pgTemporal, sua funcionalidade,
7.1 SNAPSHOT
direita um grid sem dados. Essa lista é resultado de um SQL, que busca automaticamente
seleciona uma tabela, todos os campos referentes a ela aparecem numa listagem logo abaixo,
omitindo as colunas que contém os rótulos temporais. A interface dispõe também de uma área
de visualização que permite observar os dados armazenados no banco de dados. Caso a aba
selecionada seja a Snapshot, os dados apresentados serão os atuais da tabela, através de views.
Figura 4: Snapshot
segunda aba da interface, chamada Consultas Temporais, que pode ser visualizada na Figura
5. Esta disponibiliza uma área para que o usuário possa digitar a consulta SQL desejada, um
botão para que essa consulta possa ser executada e logo abaixo uma área de visualização que
period. O instant é utilizado para a visualização dos dados válidos em uma data específica e o
[mm/dd/aaaa,mm/dd/aaaa].
terceira aba da interface, chamada Manipulação de Dados. Esta disponibiliza uma área para
que o usuário possa digitar a instrução SQL desejada e um botão para execução da mesma.
reproduz uma modelagem completa que normalmente seria utilizada num sistema deste porte,
mas parte dela. Assim, alguns relacionamentos de chave estrangeira não foram levados em
consideração, com o objetivo de tornar mais claro o exemplo, e visto que isso não seria
lavoura
codigo I <M>
cultura LA20
lavoura_produtor areaplantio LA20 lavoura_silo
tinicial TS
tfinal TS <M>
produtor
silo
codigo I <M> entrada
nome LA40 codigo I <M>
endereco LA40 entrada_produtor numero I <M> entrada_silo capacidade DC
cidade LA20 dataentrada D estoque DC
telefone LA20 peso DC tinicial TS <M>
profissao LA20 tfinal TS
saida
numero I <M>
datasaida D
saida_produtor peso DC saida_silo
Abaixo podem ser visualizadas algumas situações onde as Consultas Temporais são
importantes:
ü Controle de Estoque: Qual era o estoque do silo cujo o código é igual a 1 na data de
17/06/2009?
ü Obter produtividade do Produtor. Ex: Quanto foi comprado de cada produtor na data
de 14/06/2008
estes valores não devem ser perdidos, levou a criação dos bancos de dados temporais, onde
todos os estados (passado, presente e futuro) dos dados ficam armazenados, e com a
possibilidade de estes serem recuperados. Partindo deste pressuposto, este trabalho apresentou
temporais.
dimensão temporal ao banco de dados. Através desta dimensão podemos identificar quando
uma informação foi definida e qual o tempo em que ela é válida, de forma que se o valor do
consulta que ofereça suporte à critérios de seleção temporal. Nesse sentido, muitas propostas
foram feitas para à extensão da linguagem SQL, porém até a última versão do padrão para a
linguagem de consulta aprovado por ISO/ANSI (ANSI,1999) e ISO (2003), nenhum suporte
Structured Query Language 2) que sugere especificações para uma linguagem de consulta
TSQL2, tipos de tempo, ordem no tempo e sintaxe também foram abordados e exemplificados
neste trabalho.
48
banco de dados convencional, onde o banco de dados escolhido foi o PostgreSQL, devido
Após a escolha do banco de dados, foram definidas as duas linguagens que seriam utilizadas,
funções.
que torna mais fácil a consulta de Snapshot, consultas temporais e a manipulação do Banco de
Dados.
Como trabalhos futuros, sugere-se uma ampliação do suporte à linguagem TSQL, com
com a adição de um módulo que faça a inserção automática dos gatilhos/funções, colunas nas
tabelas, etc; o que acrescentaria temporalidade na tabela solicitada pelo usuário. Também
REFERÊNCIAS BIBLIOGRÁFICAS
CARVALHO, Henry Gomes de; HEUSER, Carlos Alberto; EDELWEISS, Nina. Linguagem
11/09/2007 às 17:00hs.
http://www.postgresql.org.br/Introdu%C3%A7%C3%A3o_e_hist%C3%B3rico. Acessado em
10/05/2008 às 21:22hs
EDELWEISS, Nina. Bancos de Dados Temporais: Teoria e Prática. Recife, 1998. In: XVII
EDELWEISS, Nina. Bancos de Dados Temporais: Teoria e Prática. Porto Alegre: UFRGS,
1997.
Formatação. Explicitação das Normas da ABNT. – 14. Ed. – Porto Alegre: s.n, 2006.
GIL, A.C. Como elaborar projetos de pesquisa. São Paulo: Atlas. 4ª Ed. 2002.
GIL, Antonio C. Métodos e técnicas de pesquisa social. 5ª ed. São Paulo: Atlas, 1999.
MELLO, Ronaldo dos Santos; Material de aula da disciplina de Bancos de Dados Não-
às 10:13 hs.
conceitual Temporal e Espacial Utilizando o SGBD Oracle. Porto Alegre: ULBRA, 2002
51
RICHARDSON, Roberto Jarry. Pesquisa Social: Métodos e Técnicas. 3. ed. São Paulo: Atlas,
1999.
edição. P 609-611
temporais, no projeto lógico de bancos de dados, em SGBDs relacionais. Porto Alegre, PUC
RS, 1998.
SOUZA, Fernanda Lima de; SANTOS, Kellyne Marques. Implementando a Dimensão Tempo
2002
52
TRIPODI, Tony et al. Análise da pesquisa social: diretrizes para o uso de pesquisa em
YIN, R. K. Estudo de caso: Planejamento e Métodos. 2. ed. Porto Alegre: Bookman. 2001.