Como trabalhar com SQL: 2011 Quadros Versioned-System
tabelas de versão do sistema têm um propósito diferente do que tabelas de período de tempo de aplicação em SQL e, consequentemente, funcionam de forma diferente. tabelas de período de tempo de aplicação permitem definir períodos de tempo e operar sobre os dados que cai dentro desses períodos. Em contraste, as tabelas de versão do sistema são projetados para criar um registro auditável de exatamente quando um item de dados foi adicionado ao, alterado dentro, ou excluído do banco de dados.
Por exemplo, é importante para um banco para saber exatamente quando um depósito ou levantamento foi feito, e esta informação deve ser mantida por um período de tempo designado por lei. Da mesma forma, corretores da bolsa precisa controlar exatamente quando uma transação de compra foi feita. Há um certo número de casos semelhantes, onde saber quando um determinado evento ocorreu, até uma fracção de segundo, é importante.
Aplicações, tais como a aplicação bancária ou a aplicação do corretor da bolsa têm exigências rigorosas:
A actualização ou operação de exclusão deve preservar o estado original da linha antes de executar a atualização ou excluir operação.
O sistema, ao invés de o usuário, mantém os horários de início e fim dos períodos das linhas.
linhas originais que tenham sido submetidos a uma operação UPDATE ou DELETE permanecem na tabela e são referidos como linhas históricas. Os usuários não podem modificar o conteúdo de linhas históricas ou os períodos associados com as linhas. Apenas o sistema pode atualizar os períodos de linhas em uma tabela de versão do sistema. Isto é feito através da actualização não as colunas de um período da mesa ou como um resultado de deleções fileira.
Estes constrangimentos garantir que o histórico de alterações de dados está imune a manipulações, assim, o cumprimento das normas de auditoria e de conformidade com as regulamentações governamentais.
tabelas de versão do sistema são distinguidos de tabelas de período de tempo de aplicação, por um par de diferenças na CRIO declarações que as criam:
Considerando que, em uma tabela de período de tempo de aplicação o utilizador pode dar qualquer nome para o período, em uma tabela de versão do sistema, o nome do período deve ser SYSTEM_TIME.
o CRIO declaração deve incluir as palavras-chave Com a versão SYSTEM. Embora o SQL: 2011 permite que o tipo de dados para o início do período e final do período a ser ENCONTRO digitar ou um dos tipos de data e hora, você vai quase sempre quer usar um dos tipos de data e hora. Claro que, independentemente do tipo escolhido para o início da coluna também tem de ser utilizada para a coluna final.
Para ilustrar o uso de tabelas de versão do sistema, considere as tabelas criadas para os funcionários e departamentos. Você pode criar uma tabela de versão do sistema com o seguinte código:
CRIAR employee_sys mesa (EmpID Integer, Sys_Start timestamp (12) GERADOS SEMPRE AS ROW INICIAR, Sys_End TIMESTAMP (12) GERADOS SEMPRE AS ROW END, EmpName VARCHAR (30), o prazo de SYSTEM_TIME (SysStart, SysEnd)) COM SISTEMA VERSIONING-
Uma linha de uma tabela de versão do sistema é considerado ser uma linha de corrente do sistema, se o tempo actual está contido no período de tempo de sistema. Caso contrário, considera-se ser uma linha histórica do sistema.
tabelas de versão do sistema são semelhantes às tabelas de período de tempo de aplicação em muitos aspectos, mas também há diferenças. Aqui estão algumas delas:
Os usuários não podem atribuir ou alterar os valores nas colunas Sys_Start e Sys_End. Estes valores são atribuídos e alterados automaticamente pelo SGBD. Esta situação está mandatado pelas palavras-chave GENERATED ALWAYS.
Quando você usa a operação INSERT para acrescentar algo em uma tabela de versão do sistema, o valor na coluna Sys_Start é definida automaticamente para a hora da transação, que está associado a cada transação. O valor atribuído a coluna Sys_End é o valor mais alto de tipo de dados dessa coluna.
Em tabelas de versão do sistema, o ATUALIZAR e EXCLUIR operações operar apenas em linhas atuais do sistema. Os usuários não podem atualizar ou excluir linhas sistema histórico.
Os usuários não podem modificar o início do período de sistema de tempo ou terminar o tempo de qualquer das linhas atuais ou históricos do sistema.
Sempre que você usar o ATUALIZAR ou EXCLUIR operação em uma linha atual do sistema, uma linha histórica do sistema é automaticamente inserido.
Uma instrução de atualização em uma tabela de versão do sistema primeira insere uma cópia da linha antiga, com seu tempo do fim do sistema definido para a data e hora da transação. Isto indica que a linha deixou de ser a corrente que timestamp. Em seguida, o DBMS executa a atualização, ao mesmo tempo mudando o horário de início sistema de período para a hora da transação.
Agora a linha atualizada é a linha atual do sistema como do timestamp transação. ATUALIZAR gatilhos para as linhas em questão será acionado, mas INSERIR gatilhos não dispara mesmo que linhas históricas estão a ser inserido como parte desta operação.
UMA EXCLUIR operação em uma tabela de versão do sistema não elimina as linhas especificadas. Em vez disso, altera a hora final do período sistema de tempo dessas linhas para a hora do sistema. Isso indica que as linhas deixou de ser atual como da data e hora da transação. Agora as linhas são parte do sistema histórico em vez do sistema actual. Quando você executa uma EXCLUIR operação, qualquer EXCLUIR gatilhos para as linhas afetadas dispara.