¿Cómo se hará una relación de varios a varios temporal en SQL?
-
21-08-2019 - |
Pregunta
¿Cómo representar un href="http://en.wikipedia.org/wiki/Temporal_database" rel="noreferrer"> temporal relación tabla de unión (también conocido como enlace / puente / mapa) para conectar las dos partes.
es la adición de seguimiento temporal tan simple como incluir un ValidStart y ValidEnd columnas en la tabla de unión? Si usted ha hecho esto, ¿qué problemas (si los hay) corriste en? ¿Hay un método mejor para hacer el seguimiento de los cambios a través del tiempo en este tipo de relación?
Si se ayuda a todos, en mi caso estoy usando específicamente SQL 2008 y los datos temporales no es bitemporal ya que sólo estoy de seguimiento de tiempo válido.
Solución
Estoy trabajando en un proyecto (hace algunos años) que utiliza tanto los datos temporales y las relaciones temporales de muchos a muchos. Cada tabla tiene validFrom y ValidUntil columnas (fechas que almacenan solamente).
En primer lugar hay que definir la semántica de las columnas * válidos, es decir, si ValidUntil está incluido o excluido de la gama de validez. También es necesario especificar si las fechas son válidas NULL y cuál es su significado es.
A continuación, tiene un par de funciones, tales como dbo.Overlaps2 () y dbo.Overlaps3 () que reciben 2 y 3 intervalos de fechas, respectivamente, y devuelve 1 si los intervalos de fechas se superponen y 0 en caso contrario.
Además de eso, he definido puntos de vista de las relaciones muchos-a-muchos con dbo.Overlap3 (...) = 1.
Un punto adicional es tener un conjunto de funciones que calculan el rango de validez eficaz basada en las fechas en 2 o 3 tablas relacionadas.
Recientemente he tenido que añadir la funcionalidad para permitir a un usuario visualizar todos los datos disponibles, o sólo los datos actualmente vigentes. Puedo guardar este ajuste en una tabla de usuarios, asocio el SPID para el usuario al abrir una conexión, y filtrar los registros en otro conjunto de puntos de vista.