Como você faria um relacionamento muitos-para-muitos Temporal no SQL?
-
21-08-2019 - |
Pergunta
Como você representar um temporais relação no SQL muitos para muitos? Em circunstâncias não-temporais pode-se usar um tabela de junção (aka link / ponte / mapa) para conectar os dois lados.
é a adição de rastreamento temporais tão simples como incluindo um ValidStart e ValidEnd colunas na tabela de junção? Se você tiver feito isso, o que questões (se houver) que você tiver? Existe um método melhor para manter o controle de mudanças ao longo do tempo neste tipo de relação?
Se isso ajuda em tudo, no meu caso eu estou usando especificamente SQL 2008 e os dados temporais não é bitemporal como eu só estou controle de tempo válido.
Solução
Eu estou trabalhando em um projeto (há alguns anos) que usa tanto dados temporais e temporais muitos-para-muitos relações. Cada tabela tem colunas validFrom e ValidUntil (datas armazenar apenas).
Primeiro você tem que definir a semântica das colunas * válido, ou seja, se ValidUntil é incluído ou excluído da gama de validade. Você também precisa especificar se datas nulos são válidas e qual o seu significado é.
De seguida tem um par de funções, tais como dbo.Overlaps2 () e dbo.Overlaps3 () que recebem 2 e 3, respectivamente, varia data, e um regresso se a data varia sobreposição e 0 de outro modo.
Além disso, defini vistas para os muitos-para-muitos relacionamentos com dbo.Overlap3 (...) = 1.
Um outro ponto é ter um conjunto de funções que calculam a área de validade eficaz com base nas datas em 2 ou 3 tabelas relacionadas.
Recentemente eu tive que adicionar funcionalidade para permitir que um usuário para exibir todos os dados disponíveis, ou apenas dados actualmente em vigor. I salvar esta configuração em uma tabela de usuários, associar o SPID para o usuário quando abrir uma conexão, e filtrar os registros em um outro conjunto de pontos de vista.