Mostrando postagens com marcador banco de dados. Mostrar todas as postagens
Mostrando postagens com marcador banco de dados. Mostrar todas as postagens

Banco de Dados Temporal

Introdução

Atualmente com a crescente difusão do uso de computadores nos mais diversos segmentos da sociedade ouve-se cada vez mais o termo banco de dados. Banco de dados caracteriza-se por um conjunto de dados armazenados sendo que cada um deles possuem um significado explícito.

Um banco de dados pode ser classificado sobre várias características e/ou conceitos. Este visa apresentar os conceitos de um banco de dados temporal. Um banco de dados é dito temporal, em um sentido mais amplo, quando possui na organização de suas informações algum aspecto de tempo(ELMASRI, NAVATHE, 2005).

Representação de Dimensões Temporais

Em banco de dados temporais o tempo é considerado uma sucessão ordenada de pontos(chronon), com alguma granularidade, métrica, definida pela aplicação. Granularidade é a menor unidade que pode ser representada por uma unidade em uma aplicação temporal, i.e., é a representação do chronon. Ao definir-se a granularidade de uma aplicação implica que todos os eventos que ocorrem dentro de uma mesma granularidade serão considerados eventos simultâneos, sendo que, pode acontecer dos mesmos não serem(ELMASRI, NAVATHE, 2005). Está definição deve ser tomada com plena consciência das características da aplicação.


Para representação de dados temporais utiliza-se os seguintes tipos de dados: DATE, TIME, DATETIME, TIMESTAMP, INTERVAL e PERIOD.


Informação de evento contra informação de duração(ou estado)


Um banco de dados temporal armazena as informações sempre que ocorre um dado evento ou quando um evento é considerado verdadeiro. Um evento pontual, ou fato pontual, normalmente são associados aos bancos de dados por um único ponto de tempo representado por alguma granularidade. Esta informação é frequentemente representado por uma série de dados temporal. Série de dados temporal envolvem valores que são registrados de acordo com uma sucessão específica e predefinida de tempo(ELMASRI, NAVATHE, 2005).

Os eventos de duração, por um outro lado, podem ser referenciados por um período de tempo específico em um banco de dados(ELMASRI, NAVATHE, 2005), e.g., um funcionário ocupou a diretoria de uma empresa entre o período de 20 de março de 2008 à 31 de outubro de 2008.

Um período de tempo é representado por um ponto inicial e um ponto final[START-TIME, END-TIME](ELMASRI, NAVATHE, 2005). Essa representação, assim como nos conjuntos matemáticos, podem ser representados por intervalos abertos ou fechados.

Tempo válido e dimensões de tempo de transação

Dado um evento associado a um ponto ou a um período de tempo específico, pode-se apresentar significados diferentes. Devido a este fato é preciso interpretar os significados destas associações, a forma mais natural, é que o tempo associado é aquele em que o evento aconteceu ou o período em que o evento foi considerado verdadeiro(ELMASRI, NAVATHE, 2005). Caso se empregue este tipo de interpretação diz-se que o tempo associado é um tempo válido. Bancos de dados temporais que utilizam-se dessa interpretação são denominados banco de dados de tempo válido.

Uma outra interpretação utilizada é aquela onde o evento associado refere-se ao tempo de fato em que a informação foi armazenada no banco de dados. Tal interpretação de evento associado é denominada tempo de transação, e os banco de dados temporais que trabalham sobre esse paradigma são conhecidos como banco de dados de tempo de transação.

Outras dimensões

Existem outros tipos de interpretação porém as acima citadas são as mais comumente encontradas, e são chamadas de dimensões de tempo. Uma dada aplicação pode necessitar de apenas uma dimensão, já em outra, faz-se necessário a presença de ambas dimensões, neste caso o banco de dados é dito banco de dados bitemporal.

Pode-se ainda haver a necessidade de outras interpretações do tempo, e estas interpretações serão definidas especificamente para a aplicação, tais bancos serão chamados de banco de dados de tempo definido pelo usuário.

Exemplo

Será levado em conta como exemplo para fixação do conteúdo um banco de dados de tempo válido. O mesmo seguirá o seguinte modelo:

Figura 1. Modelo referente as tabelas do banco exemplificado

A tabela Empregado conta com dois campos: PK_IDEMP e NOME, e receberá o nome dos funcionários de uma empresa fictícia. A tabela Funcao, assim como a tabela Empregado, possue dois campos: PK_IDFUNCAO e DESCRICAO, e armazenará a descrição da função exercida por um dado empregado. A relação existente entre as duas gera uma terceira tabela denominada Emp_Funcao, que armazenará todas as funções que um empregado exercer na empresa.

Note que existem dois campos na tabela Emp_Funcao que são tipos que representam datas em banco de dados. Os campos são INICIO e FIM, e receberão o START TIME e o END-TIME, respectivamente. Para este exemplo será levado em conta a granularidade de dia.

Considere que cada tupla referente a relação Empregado-Funcao representa uma versão válida de um evento ocorrido, em um período[INICIO, FIM]. Geralmente, a versão atual de uma dada tupla, neste caso o campo FIM, possue um valor especial que neste exemplo chamar-se-á de ATUAL. Este valor especial, é uma variável temporal que implicitamente representada o tempo corrente a medida que ele acontece(ELMASRI, NAVATHE, 2005). Note que, em uma relação não-temporal só serão armazenadas somente as relações correntes.

Observe os registros inseridos na figura 2.
Figura 2. Registros de Empregados e Funções

A figura 3 mostra algumas versões de tuplas de tempo válido: duas versões para JOÃO, três para MARIA, uma para JOSÉ e uma para JOANA. Sempre que haver alguma alteração de um funcionário, e.g., promoção, demissão, etc., o seu campo FIM é mudado para o valor do término e, dependendo da situação, uma nova tupla é inserida com as novas informações.

As tuplas 1 e 2 da figura 3 tem-se a movimentação das funções para o empregado JOÃO, a segunda tupla da relação indica que foi realizada uma promoção e à medida que a mesma se concretizou(1º de Julho de 2008) a primeira tupla teve seu encerramento um dia antes(30 de Junho de 2008 – GRANULARIDADE DE DIA). A segunda tupla passou a ser a corrente e a anterior passou a ser uma versão fechada ou histórica.

O registros 3, 4 e 5 comporta-se da mesma forma que as tuplas 1 e 2. O registro 6 informa a saída de um funcionário da empresa o seu valor de saída é atualizado e não é inserido um novo registro na relação. O contrário ocorre na sétima e última tupla onde é a admissão de um empregado e seu tempo final está definido com o valor especial ATUAL.
Figura 3. Relação de Empregados por Função.

Detalhes


Note que em um relação temporal o tempo de início, juntamente com um outro atributo trabalha como chave primária de uma relação, não repetindo em momento algum. Isto ocorre porque em ponto do tempo deveria haver no máximo uma versão de tempo válido.

As atualizações podem assumir três tipos: proativa, retroativa e simultânea. As atualizações proativas ocorrem no banco antes que o evento ocorra no mundo real, ao contrário das atualizações retroativas que são persistidas em banco depois da ocorrência do evento. As atualizações simultâneas são as acontecem sobre um mesmo instante de tempo.

José Mauro da Silva Sandy

Referências
  • ELMASRI, Ramez; NAVATHE, Shamkant B. Sistema de Banco de Dados. Revisor técnico Luíz Ricardo de Figueiredo. São Paulo: Pearson Addison Wesley, 2005. cap. 24, p. 552-561.

Leia Também

Métodos CRUD em SQL

Introdução


O acrônimo CRUD é utilizado frequentemente para definir as quatro operações básicas de um banco de dados. Seu significado é C(reate)R(etrieve)U(pdate)D(elete), ou melhor , são os comandos: INSERT, SELECT, UPDATE e DELETE.

Tais comandos estão presentes na linguagem SQL(Structured Query Language) que é uma linguagem declarativa. A linguagem SQL é subdividida em 3 partes: DML, DDL e DCL. Os comandos acimas citados estão presentes na subdivisão DML(Data Manipulation Language) e, inicialmente, será o foco da postagem.
Notas.:
  1. Todos os componentes que estiverem entre colchetes, [], são opcionais em todos os comandos.
  2. Será levado em conta uma tabela chamada Pessoa, a mesma não obedecerá nenhum regra de normalização, é apenas a nível conceitual. A cada comando será assumido que seus valores voltaram ao estado original.
  3. A tabela acima citada possuem os seguintes campos: idPessoa, nome, salario, endereco e dtNascimento.
Tabela Pessoa

SELECT


O comando SELECT, sem dúvida, é o comando mais utilizado em qualquer sistema de banco de dados relacional. Através dele consegui-se manipular grandes massas de dados a nível de consulta. Além de serem muito importantes em instruções mais avançadas da linguagem, e.g., views.

Sintaxe:

SELECT campo1, campo2, ..., campoN, *
FROM tabela1, tabela2, ..., tabelaN

[WHERE condição]

[GROUPY BY ...]

[HAVING ...]
[ORDER BY ...]

Consultas básicas

Ao executar a forma mais simples de executar uma consulta SQL é não informando nenhum dos campos opcionais apresentados em sua sintaxe. Ao executar um SELECT desta maneira, o mesmo retornará todas as informações contidas em uma tabela. Por exemplo.

Instrução

SELECT * FROM Pessoa


Saída
Resultado do comando

Outra forma básica, e essa bem mais utilizada, é informando apenas a claúsula WHERE que se responsabiliza por trazer apenas os dados que satisfaçam a condição informada. Imaginem que seja necessário realizar uma consulta com todos os aniversariantes de uma data qualquer. Esta seria uma boa empregabilidade da claúsula WHERE.

Instrução

SELECT * FROM Pessoa
WHERE dtNascimento = '20050831'
ou
SELECT nome, endereco FROM Pessoa
WHERE dtNascimento =INSERT '20050831'

Saída

Resultado dos comandos

Note que foram apresentados duas formas distintas de retorno de campos o caracter curinga * traz todos os campos presentes na tabela, caso seja do interesse basta informar os campos que queira obter como retorno. Tal técnica é denominada Projeção.

Consultas elaboradas

Existem ainda a possibilidade de ordernação dos resultados obtidos. Isto é posibilitado pela claúsula ORDER BY. Suponha que um dado relatório precise apresentar os salários de uma empresa de todos os funcionários que recebem salários igual ou superior a 1000 em orderm decrescente.

Instrução

SELECT nome, salario FROM Pessoa
WHERE salario >= 1000
ORDER BY salario DESC

Saída
Resultado do comando

Pode-se ainda ordernar por vários campos e com a expressão DESC que ordena do menor para maior.

SELECT nome, salario FROM Pessoa
WHERE salario >= 1000

ORDER BY salario ASC, nome DESC


Falta ainda apresentar detalhes das claúsulas GROUP BY e HAVING, que estão intimamente ligadas. Como o nome sugere a claúsula GROUP BY serve para agrupar todos os campos informados como retorno em um consulta(SELECT). Já a claúsula HAVING é utilizada para restringir grupos obtidos pela claúsula GROUP BY.
Nota.: Todos os campos informados para serem retornados devem, obrigatoriamente, aparecer na claúsula GROUP BY. Caso não utilizem a técnica de Projeção não há porque utilizar esta opção, visto que, sempre haverá pelo menos um campo diferente, e.g., a CHAVE PRIMÁRIA. Há posibilidade de inserir na projeção do resultado funções agregadas como: SUM, COUNT, MIN, etc. Mais estas serão abordadas em uma postagem sobre funções agregadas.
Exemplo.

SELECT * FROM PESSOA

GROUP BY idPessoa, nome, salario, endereco, dtNascimento
HAVING salario >= 1000

Os registros retornados são os mesmos contidos no SELECT utilizado com ORDER BY.

INSERT

O comando INSERT serve para inserir um registro em alguma tabela de um banco de dados. Todos os campos não nulos devem ser informados os demais são de caráter facultativo.

Sintaxe:

INSERT INTO
(campo1, campo2, ..., campoN)
VALUES(valor1, valor2, ..., valorN)

Por exemplo pode-se inserir o nome do leitor na tabela utilizada para exemplificação.

Instrução

INSERT INTO Pessoa(idPessoa, nome, salario, endereco, dtNascimento)
VALUES(1000, 'MEU NOME', 100000, 'MEU ENDERECO', '2009-02-28')

UPDATE

O comando UPDATE serve para realizar a alteração de algum registro já inserido em alguma tabela de um banco de dados.

Sintaxe

UPDATE
SET campo1 = valor1, campo2 = valor2, ..., campoN = valorN
[WHERE condição]

Imaginem que os valores inseridos em o salário e a data de nascimento errados. Para corrigí-los é simples, execute a instrução.

Instrução

UPDATE Pessoa SET dtNascimento = '2009-02-01', salario = 5000
WHERE NOME = 'MEU NOME'

DELETE

O comando DELETE apaga um determinado registro em uma dada tabela. Existe uma variação desde comando denominado DELETE CASCADE que funciona da seguinte forma:
Suponha que existam duas tabelas, Pessoa e Telefone. A tabela Telefone recebe como chave estrangeira a chave primária da tabela Pessoa, logo não existe possibilidade de excluir uma dada pessoa que tenha um telefone vinculado na tabela Telefone(dependências entre tabelas). Para realizar esse exclusão pode-se utilizar o DELETE CASCADE que assim que a pessoa for removida todos os seus telefones também serão apagados.
Sintaxe

DELETE FROM
[WHERE condição]

Para tomar um exemplo e deixar a tabela no estado original é necessário apagar o registro inserido.

Instrução

DELETE FROM
Pessoa
WHERE nome = 'MEU NOME'

Conclusão

Foram apresentados os recursos básicos sintáticos de todos os métodos CRUD. Posteriormente, serão apresentados alguns recursos mais abragentes sobre todos os comandos apresentados. Simplesmente com estes comandos já é possível coletar alguma informação em uma base de dados.

José Mauro da Silva Sandy

Referências
  • DAMAS, Luís - SQL, Structured Query Languange / Luís Damas ; tradução Elvira Maria Antunes Uchôa. Rio de Janeiro : LTC, 2007.
Leia Também