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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top